@smarterplan/ngx-smarterplan-core 1.2.23 → 1.2.25
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/services/matterport-import.service.mjs +30 -58
- package/esm2020/lib/services/models/feature.service.mjs +2 -2
- package/esm2020/lib/services/models/measurement.service.mjs +2 -2
- package/esm2020/lib/services/models/ticket.service.mjs +17 -4
- package/esm2020/lib/services/s3.service.mjs +18 -5
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +66 -66
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +64 -66
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/services/matterport-import.service.d.ts +3 -4
- package/lib/services/s3.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
3
|
import { removeNullKeysFromObject, wait, waitUntil } from '../helpers.service';
|
|
4
4
|
import { LevelStatus, } from '../types.service';
|
|
5
|
-
import { uploadJsonToS3, uploadBase64Image, } from './s3.service';
|
|
5
|
+
import { uploadJsonToS3, uploadBase64Image, uploadBase64ImageWithRetry, listFilesInFolder, } from './s3.service';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "./models/navigation.service";
|
|
8
8
|
import * as i2 from "./models/zone.service";
|
|
@@ -22,7 +22,6 @@ export class MatterportImportService {
|
|
|
22
22
|
this.importingImages = new Subject();
|
|
23
23
|
this.sweepProcessedCount = new Subject();
|
|
24
24
|
this.totalSweepsCount = new Subject();
|
|
25
|
-
this.MAX_SCANS_RELOAD = 10;
|
|
26
25
|
}
|
|
27
26
|
get spaceID() {
|
|
28
27
|
return this._spaceID;
|
|
@@ -100,7 +99,7 @@ export class MatterportImportService {
|
|
|
100
99
|
});
|
|
101
100
|
});
|
|
102
101
|
}
|
|
103
|
-
async importData(spaceID, surface, reloading = false, node = null) {
|
|
102
|
+
async importData(spaceID, surface, reloading = false, node = null, overrideExisting = true) {
|
|
104
103
|
if (!this.sweeps) {
|
|
105
104
|
return Promise.reject(new Error('no sweeps initialized'));
|
|
106
105
|
}
|
|
@@ -116,10 +115,9 @@ export class MatterportImportService {
|
|
|
116
115
|
await waitUntil(() => appIsLoaded === true);
|
|
117
116
|
if (reloading) {
|
|
118
117
|
// perform only 360 import since we are reloading
|
|
119
|
-
await this.import360images();
|
|
118
|
+
await this.import360images(overrideExisting);
|
|
120
119
|
return Promise.resolve(true);
|
|
121
120
|
}
|
|
122
|
-
this.cleanLocalStorage(); // we are importing new visit
|
|
123
121
|
this.spaceID = spaceID;
|
|
124
122
|
let floorZones = [];
|
|
125
123
|
const zones = await this.zoneService.getZonesBySpace(spaceID);
|
|
@@ -156,7 +154,7 @@ export class MatterportImportService {
|
|
|
156
154
|
console.log('could create navigation', navigationInput.id);
|
|
157
155
|
}
|
|
158
156
|
}));
|
|
159
|
-
await this.import360images();
|
|
157
|
+
await this.import360images(overrideExisting);
|
|
160
158
|
return Promise.resolve(true);
|
|
161
159
|
}
|
|
162
160
|
async createZone(name, layerID, surface = null, parentID = null, sweeps = [], node = null, metadata = null) {
|
|
@@ -180,46 +178,30 @@ export class MatterportImportService {
|
|
|
180
178
|
const newLocal = await this.zoneService.create(zoneInput);
|
|
181
179
|
return newLocal;
|
|
182
180
|
}
|
|
183
|
-
async import360images() {
|
|
181
|
+
async import360images(overrideExisting = true) {
|
|
184
182
|
console.log('Importing 360 images');
|
|
185
183
|
this.importingImages.next(true);
|
|
186
184
|
return new Promise(async (resolve) => {
|
|
187
185
|
const scans = Object.values(this.sweeps);
|
|
188
|
-
let maxScan;
|
|
189
|
-
let indexScan;
|
|
190
186
|
const nmbScans = Object.keys(scans).length;
|
|
191
|
-
console.log('Total number of scan points :', nmbScans);
|
|
192
187
|
this.totalSweepsCount.next(nmbScans);
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
console.log('retaking import from scan', localStorage.getItem('indexScanLoad'));
|
|
196
|
-
indexScan = +localStorage.getItem('indexScanLoad');
|
|
197
|
-
nmbScans < indexScan + this.MAX_SCANS_RELOAD
|
|
198
|
-
? (maxScan = nmbScans)
|
|
199
|
-
: (maxScan = indexScan + this.MAX_SCANS_RELOAD);
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
indexScan = 0;
|
|
203
|
-
nmbScans < this.MAX_SCANS_RELOAD
|
|
204
|
-
? (maxScan = nmbScans)
|
|
205
|
-
: (maxScan = this.MAX_SCANS_RELOAD);
|
|
206
|
-
}
|
|
207
|
-
for (let index = indexScan; index < maxScan; index += 1) {
|
|
188
|
+
const start = overrideExisting ? 0 : await this.getUploadedImageCount(this.modelID);
|
|
189
|
+
for (let index = start; index < nmbScans; index += 1) {
|
|
208
190
|
if (!this.stop) {
|
|
209
|
-
await
|
|
210
|
-
setTimeout(() => {
|
|
211
|
-
res(null);
|
|
212
|
-
}, 1000);
|
|
213
|
-
});
|
|
214
|
-
await this.sdk.Sweep.moveTo(scans[index].uuid);
|
|
215
|
-
await this.sdk.Camera.setRotation({
|
|
216
|
-
x: 0,
|
|
217
|
-
y: 0,
|
|
218
|
-
});
|
|
191
|
+
await this.sdk.Sweep.moveTo(scans[index].uuid, { rotation: { x: 0, y: 0 }, transition: this.sdk.Sweep.Transition.INSTANT, transitionTime: 0 });
|
|
219
192
|
const img = await this.sdk.Renderer.takeEquirectangular({ width: 2048, height: 1024 }, { mattertags: false, sweeps: true });
|
|
220
|
-
|
|
221
|
-
this.
|
|
222
|
-
|
|
193
|
+
/**Upload on S3 are asynchronous, in order to no slow down the process*/
|
|
194
|
+
uploadBase64ImageWithRetry(img, scans[index].uuid, `visits/${this.modelID}/sweeps/`, 'sweep', 5).then((r) => {
|
|
195
|
+
this.sweepProcessedCount.next(index);
|
|
196
|
+
if (index === nmbScans - 1) {
|
|
197
|
+
console.log('Import 360 done');
|
|
198
|
+
resolve(true);
|
|
199
|
+
this.removeFrame();
|
|
200
|
+
this.stop = true;
|
|
201
|
+
}
|
|
202
|
+
}).catch((e) => {
|
|
203
|
+
console.log("Error uploading scan : ", e);
|
|
204
|
+
});
|
|
223
205
|
}
|
|
224
206
|
else {
|
|
225
207
|
console.log('Abandoning import because it was cancelled');
|
|
@@ -227,22 +209,17 @@ export class MatterportImportService {
|
|
|
227
209
|
break;
|
|
228
210
|
}
|
|
229
211
|
}
|
|
230
|
-
if (maxScan === nmbScans) {
|
|
231
|
-
console.log('Import 360 done');
|
|
232
|
-
this.cleanLocalStorage();
|
|
233
|
-
this.removeFrame();
|
|
234
|
-
this.stop = true;
|
|
235
|
-
resolve(true);
|
|
236
|
-
}
|
|
237
|
-
else if (!this.stop) {
|
|
238
|
-
// to restart the procedure from where we left of
|
|
239
|
-
localStorage.setItem('indexScanLoad', maxScan.toString());
|
|
240
|
-
localStorage.setItem('visitInImport', this.modelID);
|
|
241
|
-
this.removeFrame();
|
|
242
|
-
window.location.reload();
|
|
243
|
-
}
|
|
244
212
|
});
|
|
245
213
|
}
|
|
214
|
+
async getUploadedImageCount(modelID) {
|
|
215
|
+
try {
|
|
216
|
+
const images = await listFilesInFolder(`visits/${modelID}/sweeps/`);
|
|
217
|
+
return images.length;
|
|
218
|
+
}
|
|
219
|
+
catch (e) {
|
|
220
|
+
return 0;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
246
223
|
async moveToFloor(floorName, matterportFloorSequence = null) {
|
|
247
224
|
if (!this.floors) {
|
|
248
225
|
console.log('Floor are not loaded yet');
|
|
@@ -329,7 +306,6 @@ export class MatterportImportService {
|
|
|
329
306
|
abandon() {
|
|
330
307
|
setTimeout(() => {
|
|
331
308
|
console.log('abandonning import');
|
|
332
|
-
localStorage.removeItem('visitInImport');
|
|
333
309
|
this.stop = true;
|
|
334
310
|
this.removeFrame();
|
|
335
311
|
}, 500);
|
|
@@ -339,10 +315,6 @@ export class MatterportImportService {
|
|
|
339
315
|
this.currentFrame.remove();
|
|
340
316
|
}
|
|
341
317
|
}
|
|
342
|
-
cleanLocalStorage() {
|
|
343
|
-
localStorage.removeItem('indexScanLoad');
|
|
344
|
-
localStorage.removeItem('visitInImport');
|
|
345
|
-
}
|
|
346
318
|
async getLayerByName(name) {
|
|
347
319
|
const mission = this.userService.currentMission(this.spaceID);
|
|
348
320
|
const currentOrgId = mission.organisationID;
|
|
@@ -362,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
362
334
|
providedIn: 'root',
|
|
363
335
|
}]
|
|
364
336
|
}], ctorParameters: function () { return [{ type: i1.NavigationService }, { type: i2.ZoneService }, { type: i3.ViewerService }, { type: i4.LayerService }, { type: i5.BaseUserService }, { type: i6.PlanService }]; } });
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLHdCQUF3QixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsV0FBVyxHQU1aLE1BQU0sa0JBQWtCLENBQUM7QUFLMUIsT0FBTyxFQUNMLGNBQWMsRUFDZCxpQkFBaUIsR0FFbEIsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7O0FBYXRCLE1BQU0sT0FBTyx1QkFBdUI7SUF5Q2xDLFlBQ1UsaUJBQW9DLEVBQ3BDLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLFdBQTRCLEVBQzVCLFdBQXdCO1FBTHhCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBaEIzQixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsb0JBQWUsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUUzRCx3QkFBbUIsR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUU3RCxxQkFBZ0IsR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUV6RCxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFVOUIsQ0FBQztJQWxD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QixjQUZ0QixNQUFNOzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2NhdGNoRXJyb3IsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge3JlbW92ZU51bGxLZXlzRnJvbU9iamVjdCwgd2FpdCwgd2FpdFVudGlsfSBmcm9tICcuLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIExldmVsU3RhdHVzLFxyXG4gIExheWVyLFxyXG4gIE5vZGUsXHJcbiAgWm9uZSxcclxuICBOYXZpZ2F0aW9uLFxyXG4gIFBsYW4sXHJcbn0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7TGF5ZXJTZXJ2aWNlfSBmcm9tICcuL21vZGVscy9sYXllci5zZXJ2aWNlJztcclxuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi9tb2RlbHMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtQbGFuU2VydmljZX0gZnJvbSAnLi9tb2RlbHMvcGxhbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtab25lU2VydmljZX0gZnJvbSAnLi9tb2RlbHMvem9uZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICB1cGxvYWRKc29uVG9TMyxcclxuICB1cGxvYWRCYXNlNjRJbWFnZSxcclxuICByZW1vdmVBbGxGaWxlc0Zyb21Gb2xkZXJTMyxcclxufSBmcm9tICcuL3MzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Jhc2VVc2VyU2VydmljZX0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZpZXdlclNlcnZpY2V9IGZyb20gJy4vdmlld2VyLnNlcnZpY2UnO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBXaW5kb3cge1xyXG4gICAgTVBfU0RLOiB7IGNvbm5lY3Q6IEZ1bmN0aW9uIH07XHJcbiAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydEltcG9ydFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgY3VycmVudEZyYW1lO1xyXG5cclxuICBwdWJsaWMgc2RrOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgc3dlZXBzOiBPYmplY3Q7XHJcblxyXG4gIHB1YmxpYyBmbG9vcnM6IE9iamVjdDtcclxuXHJcbiAgcHJpdmF0ZSBjdXJyZW50Rmxvb3I7XHJcblxyXG4gIHByaXZhdGUgX21vZGVsSUQ6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBfc3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgZ2V0IHNwYWNlSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGFjZUlEO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzcGFjZUlEKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NwYWNlSUQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbW9kZWxJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX21vZGVsSUQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG1vZGVsSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbW9kZWxJRCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0b3AgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGltcG9ydGluZ0ltYWdlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gIHB1YmxpYyBzd2VlcFByb2Nlc3NlZENvdW50OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcblxyXG4gIHB1YmxpYyB0b3RhbFN3ZWVwc0NvdW50OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcblxyXG4gIHByaXZhdGUgTUFYX1NDQU5TX1JFTE9BRCA9IDEwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwbGFuU2VydmljZTogUGxhblNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXRTZGtGb3JNb2RlbChtb2RlbElEOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMuc3RvcCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIExvYWQgU0RLXHJcbiAgICBjb25zb2xlLmxvZygnTG9hZGluZyBNYXR0ZXJwb3J0IFNESycpO1xyXG4gICAgdGhpcy5tb2RlbElEID0gbW9kZWxJRDtcclxuICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xyXG4gICAgaWYgKCFpZnJhbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGlmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnNldFRvdXJVcmwobW9kZWxJRCk7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLnZpZXdlclNlcnZpY2UuZ2V0VG91clVybCgpO1xyXG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnc3JjJywgdXJsKTtcclxuICAgIGlmcmFtZS5hbGxvdyA9ICd4ci1zcGF0aWFsLXRyYWNraW5nJztcclxuICAgIGlmcmFtZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICBpZnJhbWUud2lkdGggPSAnMTAwJSc7XHJcbiAgICBpZnJhbWUuaWQgPSAndmlld2VyLW1vZHVsZSc7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3ZpZXdlci1mcmFtZScpO1xyXG4gICAgZWxlbWVudC5hcHBlbmQoaWZyYW1lKTtcclxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaWZyYW1lO1xyXG4gICAgY29uc3Qgc2hvd2Nhc2VXaW5kb3cgPSBpZnJhbWUuY29udGVudFdpbmRvdztcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcclxuICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ2xvYWQnLFxyXG4gICAgICAgIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrID0gYXdhaXQgc2hvd2Nhc2VXaW5kb3cuTVBfU0RLLmNvbm5lY3QoXHJcbiAgICAgICAgICAgICAgaWZyYW1lLFxyXG4gICAgICAgICAgICAgICdxbjl3c2FzdXk1aDJmenJicm4xbnpyMGlkJyxcclxuICAgICAgICAgICAgICAnMy4xMSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICAgICAgdGhpcy5zZGsuRmxvb3IuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZChjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRmxvb3JzXCIsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBjdXJyZW50IEZsb29yXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmN1cnJlbnQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIHVwZChjdXJyZW50Rmxvb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZsb29yID0gY3VycmVudEZsb29yO1xyXG4gICAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIFN3ZWVwIGRhdGFcclxuICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZChjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGhlIGVudGlyZSB1cC10by1kYXRlIGNvbGxlY3Rpb24nLCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBzID0gY29sbGVjdGlvbjtcclxuICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyByZW1vdmUgbGFiZWxzXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLlNldHRpbmdzLnVwZGF0ZSgnbGFiZWxzJywgZmFsc2UpO1xyXG4gICAgICAgICAgICBsZXQgdGltZW91dEV4cGlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gc3RhcnQgdGltZW91dFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aW1lb3V0RXhwaXJlZCA9IHRydWUpLCA3MDAwKTtcclxuICAgICAgICAgICAgYXdhaXQgd2FpdFVudGlsKFxyXG4gICAgICAgICAgICAgICgpID0+XHJcbiAgICAgICAgICAgICAgICAodGhpcy5zd2VlcHMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmZsb29ycyAhPT0gdW5kZWZpbmVkKSB8fFxyXG4gICAgICAgICAgICAgICAgdGltZW91dEV4cGlyZWQgPT09IHRydWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRpbWVvdXRFeHBpcmVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gd2UgYXJlIGxpa2VseSBpbiBtYXR0ZXJwb3J0IGVycm9yIGNhc2UgKHRoYXQgd2UgY2Fubm90IGNhdGNoISlcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGltZW91dCBpbnRpdGlhbGlzaW5nIE1hdHRlcnBvcnQnKTtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVqKG5ldyBFcnJvcignZXJyb3IgaW5pdCBNYXR0ZXJwb3J0JykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdpbml0IGRvbmUnKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcyh0cnVlKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgcmVqKG5ldyBFcnJvcignZXJyb3IgaW5pdCBNYXR0ZXJwb3J0JykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbXBvcnREYXRhKFxyXG4gICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgc3VyZmFjZTogbnVtYmVyLFxyXG4gICAgcmVsb2FkaW5nOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBub2RlOiBOb2RlID0gbnVsbFxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCF0aGlzLnN3ZWVwcykge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdubyBzd2VlcHMgaW5pdGlhbGl6ZWQnKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgYXBwSXNMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2RrLkFwcC5zdGF0ZS5zdWJzY3JpYmUoZnVuY3Rpb24gKGFwcFN0YXRlKSB7XHJcbiAgICAgIC8vIGFwcCBzdGF0ZSBoYXMgY2hhbmdlZFxyXG4gICAgICBjb25zb2xlLmxvZygnVGhlIGN1cnJlbnQgcGhhc2U6ICcsIGFwcFN0YXRlLnBoYXNlKTtcclxuICAgICAgaWYgKGFwcFN0YXRlLnBoYXNlID09PSAnYXBwcGhhc2UucGxheWluZycpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnVGhlIGFwcCBpcyBwbGF5aW5nJyk7XHJcbiAgICAgICAgYXBwSXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiBhcHBJc0xvYWRlZCA9PT0gdHJ1ZSk7XHJcbiAgICBpZiAocmVsb2FkaW5nKSB7XHJcbiAgICAgIC8vIHBlcmZvcm0gb25seSAzNjAgaW1wb3J0IHNpbmNlIHdlIGFyZSByZWxvYWRpbmdcclxuICAgICAgYXdhaXQgdGhpcy5pbXBvcnQzNjBpbWFnZXMoKTtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xlYW5Mb2NhbFN0b3JhZ2UoKTsgLy8gd2UgYXJlIGltcG9ydGluZyBuZXcgdmlzaXRcclxuICAgIHRoaXMuc3BhY2VJRCA9IHNwYWNlSUQ7XHJcbiAgICBsZXQgZmxvb3Jab25lczogWm9uZVtdID0gW107XHJcbiAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlKHNwYWNlSUQpO1xyXG4gICAgY29uc3QgbWFpblpvbmUgPSB6b25lcy5maW5kKCh6KSA9PiAhei5wYXJlbnRJRCk7XHJcbiAgICBpZiAoIW1haW5ab25lKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ21pc3NpbmcgZGF0YSAobm8gbWFpbiBCdWlsZGluZyBab25lKScpKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCdpbXBvcnRpbmcgZGF0YSBmcm9tIG1hdHRlcnBvcnQnKTtcclxuICAgIC8vIHNhdmUgc3dlZXBzIGRhdGEgYXMganNvblxyXG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpKTtcclxuICAgIGF3YWl0IHVwbG9hZEpzb25Ub1MzKFxyXG4gICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9pbnZlbnRvcnkvYCxcclxuICAgICAganNvbixcclxuICAgICAgJ2RhdGEuanNvbidcclxuICAgICk7XHJcbiAgICAvLyBjaGVjayBsYXllciBvZiBidWlsZGluZyB0eXBlXHJcbiAgICBjb25zdCBsYXllckJ1aWxkaW5nID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZSgnQlVJTERJTkcnKTtcclxuICAgIGNvbnN0IGNyZWF0ZWREZWZhdWx0Wm9uZSA9IGF3YWl0IHRoaXMuY3JlYXRlWm9uZShcclxuICAgICAgbm9kZS5tZXRhZGF0YSxcclxuICAgICAgbGF5ZXJCdWlsZGluZy5pZCxcclxuICAgICAgc3VyZmFjZSxcclxuICAgICAgbWFpblpvbmUuaWQsXHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3dlZXBzKSxcclxuICAgICAgbm9kZVxyXG4gICAgKTtcclxuICAgIGlmICghY3JlYXRlZERlZmF1bHRab25lKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmxvb3JzKSB7XHJcbiAgICAgIGZsb29yWm9uZXMgPSBhd2FpdCB0aGlzLmltcG9ydEZsb29yRGF0YShjcmVhdGVkRGVmYXVsdFpvbmUuaWQsIG5vZGUpO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZmxvb3Jab25lcyk7XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5zd2VlcHMpLm1hcChhc3luYyAoa2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3dlZXBJbmZvID0gdGhpcy5zd2VlcHNba2V5XTtcclxuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uSW5wdXQgPSB7XHJcbiAgICAgICAgICBtYXR0ZXJwb3J0U3dlZXBJRDogc3dlZXBJbmZvLnV1aWQsXHJcbiAgICAgICAgICBwb3NpdGlvbjogSlNPTi5zdHJpbmdpZnkoc3dlZXBJbmZvLnBvc2l0aW9uKSxcclxuICAgICAgICAgIHJvdGF0aW9uOiBKU09OLnN0cmluZ2lmeShzd2VlcEluZm8ucm90YXRpb24pLFxyXG4gICAgICAgICAgbGV2ZWw6IExldmVsU3RhdHVzLkxPVyxcclxuICAgICAgICAgIG5vZGVJRDogbm9kZS5pZCxcclxuICAgICAgICAgIHNwYWNlSUQsXHJcbiAgICAgICAgfSBhcyBOYXZpZ2F0aW9uO1xyXG4gICAgICAgIGNvbnN0IG5hdiA9IGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3JlYXRlTmF2aWdhdGlvbihcclxuICAgICAgICAgIG5hdmlnYXRpb25JbnB1dFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFuYXYpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBjcmVhdGUgbmF2aWdhdGlvbicsIG5hdmlnYXRpb25JbnB1dC5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIGF3YWl0IHRoaXMuaW1wb3J0MzYwaW1hZ2VzKCk7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY3JlYXRlWm9uZShcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGxheWVySUQ6IHN0cmluZyxcclxuICAgIHN1cmZhY2U6IG51bWJlciA9IG51bGwsXHJcbiAgICBwYXJlbnRJRDogc3RyaW5nID0gbnVsbCxcclxuICAgIHN3ZWVwczogc3RyaW5nW10gPSBbXSxcclxuICAgIG5vZGU6IE5vZGUgPSBudWxsLFxyXG4gICAgbWV0YWRhdGE6IHN0cmluZyA9IG51bGxcclxuICApOiBQcm9taXNlPFpvbmU+IHtcclxuICAgIGNvbnN0IHpvbmVJbnB1dCA9IHtcclxuICAgICAgbmFtZSxcclxuICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICBsYXllcklELFxyXG4gICAgICBzd2VlcElEczogc3dlZXBzLFxyXG4gICAgICBub2RlSURzOiBub2RlID8gW25vZGUuaWRdIDogbnVsbCxcclxuICAgIH0gYXMgWm9uZTtcclxuICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdCh6b25lSW5wdXQpO1xyXG4gICAgaWYgKHN1cmZhY2UpIHtcclxuICAgICAgem9uZUlucHV0LnN1cmZhY2UgPSBzdXJmYWNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmVudElEKSB7XHJcbiAgICAgIHpvbmVJbnB1dC5wYXJlbnRJRCA9IHBhcmVudElEO1xyXG4gICAgfVxyXG4gICAgaWYgKG1ldGFkYXRhKSB7XHJcbiAgICAgIHpvbmVJbnB1dC5tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TG9jYWwgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmNyZWF0ZSh6b25lSW5wdXQpO1xyXG4gICAgcmV0dXJuIG5ld0xvY2FsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW1wb3J0MzYwaW1hZ2VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc29sZS5sb2coJ0ltcG9ydGluZyAzNjAgaW1hZ2VzJyk7XHJcbiAgICB0aGlzLmltcG9ydGluZ0ltYWdlcy5uZXh0KHRydWUpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNjYW5zID0gT2JqZWN0LnZhbHVlcyh0aGlzLnN3ZWVwcyk7XHJcbiAgICAgIGxldCBtYXhTY2FuO1xyXG4gICAgICBsZXQgaW5kZXhTY2FuO1xyXG4gICAgICBjb25zdCBubWJTY2FucyA9IE9iamVjdC5rZXlzKHNjYW5zKS5sZW5ndGg7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUb3RhbCBudW1iZXIgb2Ygc2NhbiBwb2ludHMgOicsIG5tYlNjYW5zKTtcclxuICAgICAgdGhpcy50b3RhbFN3ZWVwc0NvdW50Lm5leHQobm1iU2NhbnMpO1xyXG4gICAgICAvLyBjaGVjayBpZiB3ZSBzdGFydGVkIHRvIGxvYWQgaW1hZ2VzIGFscmVhZHlcclxuICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdpbmRleFNjYW5Mb2FkJykpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICdyZXRha2luZyBpbXBvcnQgZnJvbSBzY2FuJyxcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdpbmRleFNjYW5Mb2FkJylcclxuICAgICAgICApO1xyXG4gICAgICAgIGluZGV4U2NhbiA9ICtsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5kZXhTY2FuTG9hZCcpO1xyXG4gICAgICAgIG5tYlNjYW5zIDwgaW5kZXhTY2FuICsgdGhpcy5NQVhfU0NBTlNfUkVMT0FEXHJcbiAgICAgICAgICA/IChtYXhTY2FuID0gbm1iU2NhbnMpXHJcbiAgICAgICAgICA6IChtYXhTY2FuID0gaW5kZXhTY2FuICsgdGhpcy5NQVhfU0NBTlNfUkVMT0FEKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbmRleFNjYW4gPSAwO1xyXG4gICAgICAgIG5tYlNjYW5zIDwgdGhpcy5NQVhfU0NBTlNfUkVMT0FEXHJcbiAgICAgICAgICA/IChtYXhTY2FuID0gbm1iU2NhbnMpXHJcbiAgICAgICAgICA6IChtYXhTY2FuID0gdGhpcy5NQVhfU0NBTlNfUkVMT0FEKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSBpbmRleFNjYW47IGluZGV4IDwgbWF4U2NhbjsgaW5kZXggKz0gMSkge1xyXG4gICAgICAgIGlmICghdGhpcy5zdG9wKSB7XHJcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHJlcyhudWxsKVxyXG4gICAgICAgICAgICB9LCAxMDAwKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5tb3ZlVG8oc2NhbnNbaW5kZXhdLnV1aWQpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zZGsuQ2FtZXJhLnNldFJvdGF0aW9uKHtcclxuICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29uc3QgaW1nID0gYXdhaXQgdGhpcy5zZGsuUmVuZGVyZXIudGFrZUVxdWlyZWN0YW5ndWxhcihcclxuICAgICAgICAgICAge3dpZHRoOiAyMDQ4LCBoZWlnaHQ6IDEwMjR9LFxyXG4gICAgICAgICAgICB7bWF0dGVydGFnczogZmFsc2UsIHN3ZWVwczogdHJ1ZX1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcclxuICAgICAgICAgICAgaW1nLFxyXG4gICAgICAgICAgICBzY2Fuc1tpbmRleF0udXVpZCxcclxuICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vc3dlZXBzL2AsXHJcbiAgICAgICAgICAgICdzd2VlcCdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnN3ZWVwUHJvY2Vzc2VkQ291bnQubmV4dChpbmRleCk7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaW5kZXhTY2FuTG9hZCcsIGluZGV4LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQWJhbmRvbmluZyBpbXBvcnQgYmVjYXVzZSBpdCB3YXMgY2FuY2VsbGVkJyk7XHJcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobWF4U2NhbiA9PT0gbm1iU2NhbnMpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnSW1wb3J0IDM2MCBkb25lJyk7XHJcbiAgICAgICAgdGhpcy5jbGVhbkxvY2FsU3RvcmFnZSgpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc3RvcCkge1xyXG4gICAgICAgIC8vIHRvIHJlc3RhcnQgdGhlIHByb2NlZHVyZSBmcm9tIHdoZXJlIHdlIGxlZnQgb2ZcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaW5kZXhTY2FuTG9hZCcsIG1heFNjYW4udG9TdHJpbmcoKSk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Zpc2l0SW5JbXBvcnQnLCB0aGlzLm1vZGVsSUQpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbW92ZVRvRmxvb3IoZmxvb3JOYW1lOiBzdHJpbmcsIG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICBpZiAoIXRoaXMuZmxvb3JzKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGbG9vciBhcmUgbm90IGxvYWRlZCB5ZXQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gbG9vayB1cCBmb3Igc2VxdWVuY2UgbnVtYmVyICh0aGUgc2FmZXN0IG1ldGhvZClcclxuICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKFxyXG4gICAgICAoZmxvb3IpID0+IGZsb29yLnNlcXVlbmNlID09PSBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZVxyXG4gICAgKTtcclxuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGZsb29yTWF0dGVycG9ydCA9IE9iamVjdC52YWx1ZXModGhpcy5mbG9vcnMpLmZpbmQoXHJcbiAgICAgICAgKGZsb29yKSA9PiBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IubmFtZSkgJiYgZmxvb3IubmFtZSAhPSAnJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLmZsb29ycykuZmluZCgoZmxvb3IpID0+XHJcbiAgICAgICAgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLmlkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZmxvb3JNYXR0ZXJwb3J0KVxyXG4gICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBsZXQgcmV0cnkgPSB0cnVlO1xyXG4gICAgICB3aGlsZSAocmV0cnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgZmxvb3JJbmRleCA9IGF3YWl0IHRoaXMuc2RrLkZsb29yLm1vdmVUbyhcclxuICAgICAgICAgICAgZmxvb3JNYXR0ZXJwb3J0LnNlcXVlbmNlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtb3ZlZCB0byBmbG9vckluZGV4XCIsIGZsb29ySW5kZXgpO1xyXG4gICAgICAgICAgcmV0cnkgPSBmYWxzZTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIEZsb29yJywgZXJyb3IpO1xyXG4gICAgICAgICAgYXdhaXQgd2FpdCgxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdObyBtYXR0ZXJwb3J0IGZsb29yIGZvdW5kIHRvIG1vdmUgdG8nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbXBvcnRGbG9vckRhdGEoXHJcbiAgICBkZWZhdXRab25lSUQ6IHN0cmluZyxcclxuICAgIG5vZGU6IE5vZGVcclxuICApOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgY29uc3Qgem9uZXMgPSBbXTtcclxuICAgIGF3YWl0IHRoaXMuc2RrLk1vZGUubW92ZVRvKHRoaXMuc2RrLk1vZGUuTW9kZS5GTE9PUlBMQU4pO1xyXG4gICAgY29uc3Qgbm1iRmxvb3JzID0gT2JqZWN0LmtleXModGhpcy5mbG9vcnMpLmxlbmd0aDtcclxuICAgIGNvbnNvbGUubG9nKCdUb3RhbCBudW1iZXIgb2YgZmxvb3JzJywgbm1iRmxvb3JzKTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBubWJGbG9vcnM7IGluZGV4ICs9IDEpIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcclxuICAgICAgY29uc29sZS5sb2coJ0ltcG9ydGluZyBmbG9vcicsIGluZGV4KTtcclxuICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGluZGV4KS50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICBhd2FpdCB3YWl0KDcwMCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhYm91dCB0byBzYXZlIHRoZSBmbG9vclwiLCBpbmRleCk7XHJcbiAgICAgICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuc2F2ZUZsb29yKGRlZmF1dFpvbmVJRCwgbm9kZSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZWNlaXZlZCBmbG9vciB6b25lXCIsIHpvbmUpO1xyXG4gICAgICAgIHpvbmVzLnB1c2goem9uZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNhdmVGbG9vcihkZWZhdXRab25lSUQ6IHN0cmluZywgbm9kZTogTm9kZSk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLmN1cnJlbnRGbG9vci5pZDtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRGbG9vci5uYW1lICE9PSAnJykge1xyXG4gICAgICBuYW1lID0gdGhpcy5jdXJyZW50Rmxvb3IubmFtZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxheWVyRmxvb3IgPSBhd2FpdCB0aGlzLmdldExheWVyQnlOYW1lKCdGTE9PUicpO1xyXG4gICAgY29uc3Qgc3dlZXBzSW5mbyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgY29uc3Qgc3dlZXBzRm9yRmxvb3IgPSBzd2VlcHNJbmZvLmZpbHRlcihcclxuICAgICAgKHN3ZWVwSW5mbykgPT4gc3dlZXBJbmZvLmZsb29ySW5mby5pZCA9PT0gdGhpcy5jdXJyZW50Rmxvb3IuaWRcclxuICAgICk7XHJcbiAgICBjb25zb2xlLmxvZygnY3VycmVudCBmbG9vcicsIHRoaXMuY3VycmVudEZsb29yKTtcclxuICAgIGNvbnNvbGUubG9nKCdzd2VlcHMgZm9yIGZsb29yJywgc3dlZXBzRm9yRmxvb3IubGVuZ3RoKTtcclxuICAgIGNvbnN0IHN3ZWVwSURzOiBzdHJpbmdbXSA9IHN3ZWVwc0ZvckZsb29yLm1hcCgoc3dlZXApID0+IHN3ZWVwLnV1aWQpO1xyXG4gICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuY3JlYXRlWm9uZShcclxuICAgICAgYMOJdGFnZSAke25hbWV9IC0gJHtub2RlLm1ldGFkYXRhfWAsXHJcbiAgICAgIGxheWVyRmxvb3IuaWQsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIGRlZmF1dFpvbmVJRCxcclxuICAgICAgc3dlZXBJRHMsXHJcbiAgICAgIG5vZGUsXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHttYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZTogdGhpcy5jdXJyZW50Rmxvb3Iuc2VxdWVuY2V9KVxyXG4gICAgKTtcclxuICAgIC8vIFRPRE8gbGluayB0byBzY2Fuc1xyXG4gICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgdGhpcy5zZGsuUmVuZGVyZXIudGFrZVNjcmVlblNob3Qoe1xyXG4gICAgICB3aWR0aDogNDA5NixcclxuICAgICAgaGVpZ2h0OiAyMDQ4LFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBzcGFjZUlEc2hvcnQgPSB0aGlzLnNwYWNlSUQuc2xpY2UoMCwgOCk7XHJcbiAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcclxuICAgICAgYmFzZTY0LFxyXG4gICAgICBudWxsLFxyXG4gICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9wbGFucy9gLFxyXG4gICAgICBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH1gXHJcbiAgICApO1xyXG4gICAgLy8gY3JlYXRlIFBsYW4gb2JqZWN0XHJcbiAgICBjb25zdCBwbGFuID0ge1xyXG4gICAgICBuYW1lOiBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfWAsXHJcbiAgICAgIGFubmV4ZTogYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vcGxhbnMvcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH0uanBlZ2AsXHJcbiAgICAgIHpvbmVJRDogem9uZS5pZCxcclxuICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICBpc0N1cnJlbnRGb3Jab25lOiB0cnVlLFxyXG4gICAgICBpc01vZGlmaWVkOiBmYWxzZSxcclxuICAgICAgaXNJbXBvcnRlZE1hdHRlcnBvcnQ6IHRydWUsXHJcbiAgICB9IGFzIFBsYW47XHJcbiAgICBhd2FpdCB0aGlzLnBsYW5TZXJ2aWNlLmNyZWF0ZVBsYW4ocGxhbik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImZsb29yIHNhdmVkXCIpO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lKTtcclxuICB9XHJcblxyXG4gIGFiYW5kb24oKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ2FiYW5kb25uaW5nIGltcG9ydCcpO1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndmlzaXRJbkltcG9ydCcpO1xyXG4gICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRnJhbWUoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RnJhbWUpIHtcclxuICAgICAgdGhpcy5jdXJyZW50RnJhbWUucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhbkxvY2FsU3RvcmFnZSgpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdpbmRleFNjYW5Mb2FkJyk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndmlzaXRJbkltcG9ydCcpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0TGF5ZXJCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxMYXllcj4ge1xyXG4gICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24odGhpcy5zcGFjZUlEKTtcclxuICAgIGNvbnN0IGN1cnJlbnRPcmdJZCA9IG1pc3Npb24ub3JnYW5pc2F0aW9uSUQ7XHJcbiAgICBjb25zdCBsYXllcnMgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5nZXRMYXllckJ5TmFtZUZvck9yZ2FuaXNhdGlvbihcclxuICAgICAgbmFtZSxcclxuICAgICAgY3VycmVudE9yZ0lkXHJcbiAgICApO1xyXG4gICAgaWYgKGxheWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBsYXllcnNbMF07XHJcbiAgICB9XHJcbiAgICAvLyBjcmVhdGUgdGhlblxyXG4gICAgcmV0dXJuIHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKG5hbWUsIGN1cnJlbnRPcmdJZCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLHdCQUF3QixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsV0FBVyxHQU1aLE1BQU0sa0JBQWtCLENBQUM7QUFLMUIsT0FBTyxFQUNMLGNBQWMsRUFDZCxpQkFBaUIsRUFFakIsMEJBQTBCLEVBQzFCLGlCQUFpQixHQUNsQixNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7QUFhdEIsTUFBTSxPQUFPLHVCQUF1QjtJQXdDbEMsWUFDVSxpQkFBb0MsRUFDcEMsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsV0FBNEIsRUFDNUIsV0FBd0I7UUFMeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFmM0IsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUViLG9CQUFlLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7UUFFM0Qsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFFN0QscUJBQWdCLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7SUFXakUsQ0FBQztJQWpDRCxJ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LE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEI7UUFDRCxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMxRSxDQUFDOztvSEF2YlUsdUJBQXVCO3dIQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTsyRkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtjYXRjaEVycm9yLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtyZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIHdhaXQsIHdhaXRVbnRpbH0gZnJvbSAnLi4vaGVscGVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBMZXZlbFN0YXR1cyxcclxuICBMYXllcixcclxuICBOb2RlLFxyXG4gIFpvbmUsXHJcbiAgTmF2aWdhdGlvbixcclxuICBQbGFuLFxyXG59IGZyb20gJy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xheWVyU2VydmljZX0gZnJvbSAnLi9tb2RlbHMvbGF5ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7TmF2aWdhdGlvblNlcnZpY2V9IGZyb20gJy4vbW9kZWxzL25hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7UGxhblNlcnZpY2V9IGZyb20gJy4vbW9kZWxzL3BsYW4uc2VydmljZSc7XHJcbmltcG9ydCB7Wm9uZVNlcnZpY2V9IGZyb20gJy4vbW9kZWxzL3pvbmUuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgdXBsb2FkSnNvblRvUzMsXHJcbiAgdXBsb2FkQmFzZTY0SW1hZ2UsXHJcbiAgcmVtb3ZlQWxsRmlsZXNGcm9tRm9sZGVyUzMsXHJcbiAgdXBsb2FkQmFzZTY0SW1hZ2VXaXRoUmV0cnksXHJcbiAgbGlzdEZpbGVzSW5Gb2xkZXIsXHJcbn0gZnJvbSAnLi9zMy5zZXJ2aWNlJztcclxuaW1wb3J0IHtCYXNlVXNlclNlcnZpY2V9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3ZXJTZXJ2aWNlfSBmcm9tICcuL3ZpZXdlci5zZXJ2aWNlJztcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIE1QX1NESzogeyBjb25uZWN0OiBGdW5jdGlvbiB9O1xyXG4gIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdHRlcnBvcnRJbXBvcnRTZXJ2aWNlIHtcclxuICBwcml2YXRlIGN1cnJlbnRGcmFtZTtcclxuXHJcbiAgcHVibGljIHNkazogYW55O1xyXG5cclxuICBwcml2YXRlIHN3ZWVwczogT2JqZWN0O1xyXG5cclxuICBwdWJsaWMgZmxvb3JzOiBPYmplY3Q7XHJcblxyXG4gIHByaXZhdGUgY3VycmVudEZsb29yO1xyXG5cclxuICBwcml2YXRlIF9tb2RlbElEOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgX3NwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgcHVibGljIGdldCBzcGFjZUlEKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BhY2VJRDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc3BhY2VJRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9zcGFjZUlEID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1vZGVsSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlbElEO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBtb2RlbElEKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX21vZGVsSUQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdG9wID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBpbXBvcnRpbmdJbWFnZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICBwdWJsaWMgc3dlZXBQcm9jZXNzZWRDb3VudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG5cclxuICBwdWJsaWMgdG90YWxTd2VlcHNDb3VudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgem9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYXllclNlcnZpY2U6IExheWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgcGxhblNlcnZpY2U6IFBsYW5TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0U2RrRm9yTW9kZWwobW9kZWxJRDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnN0b3AgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBMb2FkIFNES1xyXG4gICAgY29uc29sZS5sb2coJ0xvYWRpbmcgTWF0dGVycG9ydCBTREsnKTtcclxuICAgIHRoaXMubW9kZWxJRCA9IG1vZGVsSUQ7XHJcbiAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcclxuICAgIGlmICghaWZyYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBpZnJhbWUnKTtcclxuICAgIH1cclxuICAgIHRoaXMudmlld2VyU2VydmljZS5zZXRUb3VyVXJsKG1vZGVsSUQpO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy52aWV3ZXJTZXJ2aWNlLmdldFRvdXJVcmwoKTtcclxuICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHVybCk7XHJcbiAgICBpZnJhbWUuYWxsb3cgPSAneHItc3BhdGlhbC10cmFja2luZyc7XHJcbiAgICBpZnJhbWUuaGVpZ2h0ID0gJzEwMCUnO1xyXG4gICAgaWZyYW1lLndpZHRoID0gJzEwMCUnO1xyXG4gICAgaWZyYW1lLmlkID0gJ3ZpZXdlci1tb2R1bGUnO1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN2aWV3ZXItZnJhbWUnKTtcclxuICAgIGVsZW1lbnQuYXBwZW5kKGlmcmFtZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGlmcmFtZTtcclxuICAgIGNvbnN0IHNob3djYXNlV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgIGlmcmFtZS5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICdsb2FkJyxcclxuICAgICAgICBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnNkayA9IGF3YWl0IHNob3djYXNlV2luZG93Lk1QX1NESy5jb25uZWN0KFxyXG4gICAgICAgICAgICAgIGlmcmFtZSxcclxuICAgICAgICAgICAgICAncW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZCcsXHJcbiAgICAgICAgICAgICAgJzMuMTEnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBGbG9vciBkYXRhXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkZsb29yc1wiLCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JzID0gY29sbGVjdGlvbjtcclxuICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gY3VycmVudCBGbG9vclxyXG4gICAgICAgICAgICB0aGlzLnNkay5GbG9vci5jdXJyZW50LnN1YnNjcmliZShcclxuICAgICAgICAgICAgICBmdW5jdGlvbiB1cGQoY3VycmVudEZsb29yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGbG9vciA9IGN1cnJlbnRGbG9vcjtcclxuICAgICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBTd2VlcCBkYXRhXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RoZSBlbnRpcmUgdXAtdG8tZGF0ZSBjb2xsZWN0aW9uJywgY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN3ZWVwcyA9IGNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIGxhYmVsc1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5TZXR0aW5ncy51cGRhdGUoJ2xhYmVscycsIGZhbHNlKTtcclxuICAgICAgICAgICAgbGV0IHRpbWVvdXRFeHBpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIHN0YXJ0IHRpbWVvdXRcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGltZW91dEV4cGlyZWQgPSB0cnVlKSwgNzAwMCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHdhaXRVbnRpbChcclxuICAgICAgICAgICAgICAoKSA9PlxyXG4gICAgICAgICAgICAgICAgKHRoaXMuc3dlZXBzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5mbG9vcnMgIT09IHVuZGVmaW5lZCkgfHxcclxuICAgICAgICAgICAgICAgIHRpbWVvdXRFeHBpcmVkID09PSB0cnVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICh0aW1lb3V0RXhwaXJlZCkge1xyXG4gICAgICAgICAgICAgIC8vIHdlIGFyZSBsaWtlbHkgaW4gbWF0dGVycG9ydCBlcnJvciBjYXNlICh0aGF0IHdlIGNhbm5vdCBjYXRjaCEpXHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RpbWVvdXQgaW50aXRpYWxpc2luZyBNYXR0ZXJwb3J0Jyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlaihuZXcgRXJyb3IoJ2Vycm9yIGluaXQgTWF0dGVycG9ydCcpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnaW5pdCBkb25lJyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXModHJ1ZSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIHJlaihuZXcgRXJyb3IoJ2Vycm9yIGluaXQgTWF0dGVycG9ydCcpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW1wb3J0RGF0YShcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIHN1cmZhY2U6IG51bWJlcixcclxuICAgIHJlbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgbm9kZTogTm9kZSA9IG51bGwsXHJcbiAgICBvdmVycmlkZUV4aXN0aW5nID0gdHJ1ZVxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCF0aGlzLnN3ZWVwcykge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdubyBzd2VlcHMgaW5pdGlhbGl6ZWQnKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgYXBwSXNMb2FkZWQgPSBmYWxzZTtcclxuICAgIFxyXG5cclxuICAgIHRoaXMuc2RrLkFwcC5zdGF0ZS5zdWJzY3JpYmUoZnVuY3Rpb24gKGFwcFN0YXRlKSB7XHJcbiAgICAgIC8vIGFwcCBzdGF0ZSBoYXMgY2hhbmdlZFxyXG4gICAgICBjb25zb2xlLmxvZygnVGhlIGN1cnJlbnQgcGhhc2U6ICcsIGFwcFN0YXRlLnBoYXNlKTtcclxuICAgICAgaWYgKGFwcFN0YXRlLnBoYXNlID09PSAnYXBwcGhhc2UucGxheWluZycpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnVGhlIGFwcCBpcyBwbGF5aW5nJyk7XHJcbiAgICAgICAgYXBwSXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBhd2FpdCB3YWl0VW50aWwoKCkgPT4gYXBwSXNMb2FkZWQgPT09IHRydWUpO1xyXG5cclxuICAgIGlmIChyZWxvYWRpbmcpIHtcclxuICAgICAgLy8gcGVyZm9ybSBvbmx5IDM2MCBpbXBvcnQgc2luY2Ugd2UgYXJlIHJlbG9hZGluZ1xyXG4gICAgICBhd2FpdCB0aGlzLmltcG9ydDM2MGltYWdlcyhvdmVycmlkZUV4aXN0aW5nKTtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNwYWNlSUQgPSBzcGFjZUlEO1xyXG4gICAgbGV0IGZsb29yWm9uZXM6IFpvbmVbXSA9IFtdO1xyXG4gICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzQnlTcGFjZShzcGFjZUlEKTtcclxuICAgIGNvbnN0IG1haW5ab25lID0gem9uZXMuZmluZCgoeikgPT4gIXoucGFyZW50SUQpO1xyXG4gICAgaWYgKCFtYWluWm9uZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdtaXNzaW5nIGRhdGEgKG5vIG1haW4gQnVpbGRpbmcgWm9uZSknKSk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnaW1wb3J0aW5nIGRhdGEgZnJvbSBtYXR0ZXJwb3J0Jyk7XHJcbiAgICAvLyBzYXZlIHN3ZWVwcyBkYXRhIGFzIGpzb25cclxuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKSk7XHJcbiAgICBhd2FpdCB1cGxvYWRKc29uVG9TMyhcclxuICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vaW52ZW50b3J5L2AsXHJcbiAgICAgIGpzb24sXHJcbiAgICAgICdkYXRhLmpzb24nXHJcbiAgICApO1xyXG4gICAgLy8gY2hlY2sgbGF5ZXIgb2YgYnVpbGRpbmcgdHlwZVxyXG4gICAgY29uc3QgbGF5ZXJCdWlsZGluZyA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJCeU5hbWUoJ0JVSUxESU5HJyk7XHJcbiAgICBjb25zdCBjcmVhdGVkRGVmYXVsdFpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXHJcbiAgICAgIG5vZGUubWV0YWRhdGEsXHJcbiAgICAgIGxheWVyQnVpbGRpbmcuaWQsXHJcbiAgICAgIHN1cmZhY2UsXHJcbiAgICAgIG1haW5ab25lLmlkLFxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnN3ZWVwcyksXHJcbiAgICAgIG5vZGVcclxuICAgICk7XHJcbiAgICBpZiAoIWNyZWF0ZWREZWZhdWx0Wm9uZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZsb29ycykge1xyXG4gICAgICBmbG9vclpvbmVzID0gYXdhaXQgdGhpcy5pbXBvcnRGbG9vckRhdGEoY3JlYXRlZERlZmF1bHRab25lLmlkLCBub2RlKTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGZsb29yWm9uZXMpO1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3dlZXBzKS5tYXAoYXN5bmMgKGtleSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwSW5mbyA9IHRoaXMuc3dlZXBzW2tleV07XHJcbiAgICAgICAgY29uc3QgbmF2aWdhdGlvbklucHV0ID0ge1xyXG4gICAgICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHN3ZWVwSW5mby51dWlkLFxyXG4gICAgICAgICAgcG9zaXRpb246IEpTT04uc3RyaW5naWZ5KHN3ZWVwSW5mby5wb3NpdGlvbiksXHJcbiAgICAgICAgICByb3RhdGlvbjogSlNPTi5zdHJpbmdpZnkoc3dlZXBJbmZvLnJvdGF0aW9uKSxcclxuICAgICAgICAgIGxldmVsOiBMZXZlbFN0YXR1cy5MT1csXHJcbiAgICAgICAgICBub2RlSUQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgIH0gYXMgTmF2aWdhdGlvbjtcclxuICAgICAgICBjb25zdCBuYXYgPSBhd2FpdCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmNyZWF0ZU5hdmlnYXRpb24oXHJcbiAgICAgICAgICBuYXZpZ2F0aW9uSW5wdXRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghbmF2KSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnY291bGQgY3JlYXRlIG5hdmlnYXRpb24nLCBuYXZpZ2F0aW9uSW5wdXQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBhd2FpdCB0aGlzLmltcG9ydDM2MGltYWdlcyhvdmVycmlkZUV4aXN0aW5nKTtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjcmVhdGVab25lKFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgbGF5ZXJJRDogc3RyaW5nLFxyXG4gICAgc3VyZmFjZTogbnVtYmVyID0gbnVsbCxcclxuICAgIHBhcmVudElEOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgc3dlZXBzOiBzdHJpbmdbXSA9IFtdLFxyXG4gICAgbm9kZTogTm9kZSA9IG51bGwsXHJcbiAgICBtZXRhZGF0YTogc3RyaW5nID0gbnVsbFxyXG4gICk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgY29uc3Qgem9uZUlucHV0ID0ge1xyXG4gICAgICBuYW1lLFxyXG4gICAgICBzcGFjZUlEOiB0aGlzLnNwYWNlSUQsXHJcbiAgICAgIGxheWVySUQsXHJcbiAgICAgIHN3ZWVwSURzOiBzd2VlcHMsXHJcbiAgICAgIG5vZGVJRHM6IG5vZGUgPyBbbm9kZS5pZF0gOiBudWxsLFxyXG4gICAgfSBhcyBab25lO1xyXG4gICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KHpvbmVJbnB1dCk7XHJcbiAgICBpZiAoc3VyZmFjZSkge1xyXG4gICAgICB6b25lSW5wdXQuc3VyZmFjZSA9IHN1cmZhY2U7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyZW50SUQpIHtcclxuICAgICAgem9uZUlucHV0LnBhcmVudElEID0gcGFyZW50SUQ7XHJcbiAgICB9XHJcbiAgICBpZiAobWV0YWRhdGEpIHtcclxuICAgICAgem9uZUlucHV0Lm1ldGFkYXRhID0gbWV0YWRhdGE7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdMb2NhbCA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuY3JlYXRlKHpvbmVJbnB1dCk7XHJcbiAgICByZXR1cm4gbmV3TG9jYWw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbXBvcnQzNjBpbWFnZXMob3ZlcnJpZGVFeGlzdGluZyA9IHRydWUpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnNvbGUubG9nKCdJbXBvcnRpbmcgMzYwIGltYWdlcycpO1xyXG4gICAgdGhpcy5pbXBvcnRpbmdJbWFnZXMubmV4dCh0cnVlKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBjb25zdCBzY2FucyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgICBjb25zdCBubWJTY2FucyA9IE9iamVjdC5rZXlzKHNjYW5zKS5sZW5ndGg7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnRvdGFsU3dlZXBzQ291bnQubmV4dChubWJTY2Fucyk7XHJcblxyXG4gICAgICBjb25zdCBzdGFydCA9IG92ZXJyaWRlRXhpc3RpbmcgPyAwIDogYXdhaXQgdGhpcy5nZXRVcGxvYWRlZEltYWdlQ291bnQodGhpcy5tb2RlbElEKTtcclxuICAgIFxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8IG5tYlNjYW5zOyBpbmRleCArPSAxKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zdG9wKSB7XHJcblxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAubW92ZVRvKHNjYW5zW2luZGV4XS51dWlkLCB7cm90YXRpb24gOiB7eDogMCwgeTogMH0sIHRyYW5zaXRpb24gOiB0aGlzLnNkay5Td2VlcC5UcmFuc2l0aW9uLklOU1RBTlQsIHRyYW5zaXRpb25UaW1lOiAwfSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGNvbnN0IGltZyA9IGF3YWl0IHRoaXMuc2RrLlJlbmRlcmVyLnRha2VFcXVpcmVjdGFuZ3VsYXIoXHJcbiAgICAgICAgICAgIHt3aWR0aDogMjA0OCwgaGVpZ2h0OiAxMDI0fSxcclxuICAgICAgICAgICAge21hdHRlcnRhZ3M6IGZhbHNlLCBzd2VlcHM6IHRydWV9XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8qKlVwbG9hZCBvbiBTMyBhcmUgYXN5bmNocm9ub3VzLCBpbiBvcmRlciB0byBubyBzbG93IGRvd24gdGhlIHByb2Nlc3MqL1xyXG4gICAgICAgICAgdXBsb2FkQmFzZTY0SW1hZ2VXaXRoUmV0cnkoXHJcbiAgICAgICAgICAgIGltZyxcclxuICAgICAgICAgICAgc2NhbnNbaW5kZXhdLnV1aWQsXHJcbiAgICAgICAgICAgIGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3N3ZWVwcy9gLFxyXG4gICAgICAgICAgICAnc3dlZXAnLFxyXG4gICAgICAgICAgICA1XHJcbiAgICAgICAgICApLnRoZW4oKHIpID0+e1xyXG4gICAgICAgICAgICB0aGlzLnN3ZWVwUHJvY2Vzc2VkQ291bnQubmV4dChpbmRleCk7XHJcbiAgICAgICAgICAgIGlmKGluZGV4ID09PSBubWJTY2FucyAtIDEpe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbXBvcnQgMzYwIGRvbmUnKTtcclxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KS5jYXRjaCgoZSk9PntcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFcnJvciB1cGxvYWRpbmcgc2NhbiA6IFwiLCBlKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdBYmFuZG9uaW5nIGltcG9ydCBiZWNhdXNlIGl0IHdhcyBjYW5jZWxsZWQnKTtcclxuICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFVwbG9hZGVkSW1hZ2VDb3VudChtb2RlbElEKXtcclxuICAgIHRyeXtcclxuICAgICAgY29uc3QgaW1hZ2VzID0gYXdhaXQgbGlzdEZpbGVzSW5Gb2xkZXIoYHZpc2l0cy8ke21vZGVsSUR9L3N3ZWVwcy9gKTtcclxuICAgICAgcmV0dXJuIGltYWdlcy5sZW5ndGg7XHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbW92ZVRvRmxvb3IoZmxvb3JOYW1lOiBzdHJpbmcsIG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICBpZiAoIXRoaXMuZmxvb3JzKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGbG9vciBhcmUgbm90IGxvYWRlZCB5ZXQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gbG9vayB1cCBmb3Igc2VxdWVuY2UgbnVtYmVyICh0aGUgc2FmZXN0IG1ldGhvZClcclxuICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKFxyXG4gICAgICAoZmxvb3IpID0+IGZsb29yLnNlcXVlbmNlID09PSBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZVxyXG4gICAgKTtcclxuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGZsb29yTWF0dGVycG9ydCA9IE9iamVjdC52YWx1ZXModGhpcy5mbG9vcnMpLmZpbmQoXHJcbiAgICAgICAgKGZsb29yKSA9PiBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IubmFtZSkgJiYgZmxvb3IubmFtZSAhPSAnJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLmZsb29ycykuZmluZCgoZmxvb3IpID0+XHJcbiAgICAgICAgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLmlkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZmxvb3JNYXR0ZXJwb3J0KVxyXG4gICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBsZXQgcmV0cnkgPSB0cnVlO1xyXG4gICAgICB3aGlsZSAocmV0cnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgZmxvb3JJbmRleCA9IGF3YWl0IHRoaXMuc2RrLkZsb29yLm1vdmVUbyhcclxuICAgICAgICAgICAgZmxvb3JNYXR0ZXJwb3J0LnNlcXVlbmNlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtb3ZlZCB0byBmbG9vckluZGV4XCIsIGZsb29ySW5kZXgpO1xyXG4gICAgICAgICAgcmV0cnkgPSBmYWxzZTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIEZsb29yJywgZXJyb3IpO1xyXG4gICAgICAgICAgYXdhaXQgd2FpdCgxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdObyBtYXR0ZXJwb3J0IGZsb29yIGZvdW5kIHRvIG1vdmUgdG8nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbXBvcnRGbG9vckRhdGEoXHJcbiAgICBkZWZhdXRab25lSUQ6IHN0cmluZyxcclxuICAgIG5vZGU6IE5vZGVcclxuICApOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgY29uc3Qgem9uZXMgPSBbXTtcclxuICAgIGF3YWl0IHRoaXMuc2RrLk1vZGUubW92ZVRvKHRoaXMuc2RrLk1vZGUuTW9kZS5GTE9PUlBMQU4pO1xyXG4gICAgY29uc3Qgbm1iRmxvb3JzID0gT2JqZWN0LmtleXModGhpcy5mbG9vcnMpLmxlbmd0aDtcclxuICAgIGNvbnNvbGUubG9nKCdUb3RhbCBudW1iZXIgb2YgZmxvb3JzJywgbm1iRmxvb3JzKTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBubWJGbG9vcnM7IGluZGV4ICs9IDEpIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcclxuICAgICAgY29uc29sZS5sb2coJ0ltcG9ydGluZyBmbG9vcicsIGluZGV4KTtcclxuICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGluZGV4KS50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICBhd2FpdCB3YWl0KDcwMCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhYm91dCB0byBzYXZlIHRoZSBmbG9vclwiLCBpbmRleCk7XHJcbiAgICAgICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuc2F2ZUZsb29yKGRlZmF1dFpvbmVJRCwgbm9kZSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZWNlaXZlZCBmbG9vciB6b25lXCIsIHpvbmUpO1xyXG4gICAgICAgIHpvbmVzLnB1c2goem9uZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNhdmVGbG9vcihkZWZhdXRab25lSUQ6IHN0cmluZywgbm9kZTogTm9kZSk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgbGV0IG5hbWUgPSB0aGlzLmN1cnJlbnRGbG9vci5pZDtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRGbG9vci5uYW1lICE9PSAnJykge1xyXG4gICAgICBuYW1lID0gdGhpcy5jdXJyZW50Rmxvb3IubmFtZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxheWVyRmxvb3IgPSBhd2FpdCB0aGlzLmdldExheWVyQnlOYW1lKCdGTE9PUicpO1xyXG4gICAgY29uc3Qgc3dlZXBzSW5mbyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgY29uc3Qgc3dlZXBzRm9yRmxvb3IgPSBzd2VlcHNJbmZvLmZpbHRlcihcclxuICAgICAgKHN3ZWVwSW5mbykgPT4gc3dlZXBJbmZvLmZsb29ySW5mby5pZCA9PT0gdGhpcy5jdXJyZW50Rmxvb3IuaWRcclxuICAgICk7XHJcbiAgICBjb25zb2xlLmxvZygnY3VycmVudCBmbG9vcicsIHRoaXMuY3VycmVudEZsb29yKTtcclxuICAgIGNvbnNvbGUubG9nKCdzd2VlcHMgZm9yIGZsb29yJywgc3dlZXBzRm9yRmxvb3IubGVuZ3RoKTtcclxuICAgIGNvbnN0IHN3ZWVwSURzOiBzdHJpbmdbXSA9IHN3ZWVwc0ZvckZsb29yLm1hcCgoc3dlZXApID0+IHN3ZWVwLnV1aWQpO1xyXG4gICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuY3JlYXRlWm9uZShcclxuICAgICAgYMOJdGFnZSAke25hbWV9IC0gJHtub2RlLm1ldGFkYXRhfWAsXHJcbiAgICAgIGxheWVyRmxvb3IuaWQsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIGRlZmF1dFpvbmVJRCxcclxuICAgICAgc3dlZXBJRHMsXHJcbiAgICAgIG5vZGUsXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHttYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZTogdGhpcy5jdXJyZW50Rmxvb3Iuc2VxdWVuY2V9KVxyXG4gICAgKTtcclxuICAgIC8vIFRPRE8gbGluayB0byBzY2Fuc1xyXG4gICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgdGhpcy5zZGsuUmVuZGVyZXIudGFrZVNjcmVlblNob3Qoe1xyXG4gICAgICB3aWR0aDogNDA5NixcclxuICAgICAgaGVpZ2h0OiAyMDQ4LFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBzcGFjZUlEc2hvcnQgPSB0aGlzLnNwYWNlSUQuc2xpY2UoMCwgOCk7XHJcbiAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcclxuICAgICAgYmFzZTY0LFxyXG4gICAgICBudWxsLFxyXG4gICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9wbGFucy9gLFxyXG4gICAgICBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH1gXHJcbiAgICApO1xyXG4gICAgLy8gY3JlYXRlIFBsYW4gb2JqZWN0XHJcbiAgICBjb25zdCBwbGFuID0ge1xyXG4gICAgICBuYW1lOiBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfWAsXHJcbiAgICAgIGFubmV4ZTogYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vcGxhbnMvcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH0uanBlZ2AsXHJcbiAgICAgIHpvbmVJRDogem9uZS5pZCxcclxuICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICBpc0N1cnJlbnRGb3Jab25lOiB0cnVlLFxyXG4gICAgICBpc01vZGlmaWVkOiBmYWxzZSxcclxuICAgICAgaXNJbXBvcnRlZE1hdHRlcnBvcnQ6IHRydWUsXHJcbiAgICB9IGFzIFBsYW47XHJcbiAgICBhd2FpdCB0aGlzLnBsYW5TZXJ2aWNlLmNyZWF0ZVBsYW4ocGxhbik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImZsb29yIHNhdmVkXCIpO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lKTtcclxuICB9XHJcblxyXG4gIGFiYW5kb24oKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ2FiYW5kb25uaW5nIGltcG9ydCcpO1xyXG4gICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRnJhbWUoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RnJhbWUpIHtcclxuICAgICAgdGhpcy5jdXJyZW50RnJhbWUucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgZ2V0TGF5ZXJCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxMYXllcj4ge1xyXG4gICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24odGhpcy5zcGFjZUlEKTtcclxuICAgIGNvbnN0IGN1cnJlbnRPcmdJZCA9IG1pc3Npb24ub3JnYW5pc2F0aW9uSUQ7XHJcbiAgICBjb25zdCBsYXllcnMgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5nZXRMYXllckJ5TmFtZUZvck9yZ2FuaXNhdGlvbihcclxuICAgICAgbmFtZSxcclxuICAgICAgY3VycmVudE9yZ0lkXHJcbiAgICApO1xyXG4gICAgaWYgKGxheWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBsYXllcnNbMF07XHJcbiAgICB9XHJcbiAgICAvLyBjcmVhdGUgdGhlblxyXG4gICAgcmV0dXJuIHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKG5hbWUsIGN1cnJlbnRPcmdJZCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -128,11 +128,11 @@ export class FeatureService extends BaseObjectService {
|
|
|
128
128
|
filteredFeatures = [...filteredPointInterest, ...filteredDesks];
|
|
129
129
|
this.currentFeatures.space = filteredFeatures.sort((a, b) => a.index - b.index);
|
|
130
130
|
// emit on tags should be after setting current.space !!
|
|
131
|
-
this.featureTags.next(filteredFeatures); // for tags update without zone filtering
|
|
132
131
|
if (this.zoneIDFilter) {
|
|
133
132
|
filteredFeatures =
|
|
134
133
|
(await this.filterService.filterObjectsForZone(filteredFeatures, this.zoneIDFilter));
|
|
135
134
|
}
|
|
135
|
+
this.featureTags.next(filteredFeatures); // for this zone
|
|
136
136
|
this.currentFeatures.zone = filteredFeatures.sort((a, b) => a.index - b.index);
|
|
137
137
|
// console.log(this.currentFeatures);
|
|
138
138
|
this.featureUpdated.next(this.currentFeatures); // for lateral menu
|
|
@@ -361,4 +361,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
361
361
|
type: Inject,
|
|
362
362
|
args: ['currentAPIService']
|
|
363
363
|
}] }, { type: i1.NavigatorService }, { type: i2.FilterService }, { type: i3.PoiService }, { type: i4.CommentService }, { type: i5.BaseUserService }, { type: i6.NavigationService }, { type: i7.HashtagService }, { type: i8.ZoneChangeService }]; } });
|
|
364
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvZmVhdHVyZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQywyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQW9CLFdBQVcsRUFBRSxXQUFXLEVBQU8sT0FBTyxFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBSW5ILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7O0FBVTFELE1BQU0sT0FBTyxjQUFlLFNBQVEsaUJBQWlCO0lBdUNqRCxZQUNpQyxXQUFnQixFQUNyQyxnQkFBa0MsRUFDbEMsYUFBNEIsRUFDcEMsVUFBc0IsRUFDZCxjQUE4QixFQUM5QixXQUE0QixFQUNwQyxpQkFBb0MsRUFDNUIsY0FBOEIsRUFDOUIsaUJBQW9DO1FBRTVDLEtBQUssQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQVQ3QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBRTVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFFNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUE3Q2hELG1CQUFjLEdBR1QsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVuQixvQkFBZSxHQUEyQztZQUN0RCxLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQUVG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QUFNO2lCQUNyQjs7MEJBeUNRLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBNYXR0ZXJ0YWdEYXRhIH0gZnJvbSBcIi4uLy4uL21hdHRlcnRhZ0RhdGFcIjtcclxuaW1wb3J0IHsgRmVhdHVyZSwgSGFzaHRhZywgRmVhdHVyZVR5cGUsIENvbW1lbnRUeXBlLCBQT0ksIFBvaVR5cGUsIEV2ZW50LCBMZXZlbFN0YXR1cyB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vZmlsdGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTmF2aWdhdG9yU2VydmljZSB9IGZyb20gXCIuLi9uYXZpZ2F0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UgfSBmcm9tIFwiLi4vdXNlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VPYmplY3RTZXJ2aWNlIH0gZnJvbSBcIi4vYmFzZS1vYmplY3Quc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb21tZW50U2VydmljZSB9IGZyb20gXCIuL2NvbW1lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBIYXNodGFnU2VydmljZSB9IGZyb20gXCIuL2hhc2h0YWcuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCIuL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSBcIi4vcG9pLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtab25lQ2hhbmdlU2VydmljZX0gZnJvbSBcIi4uL3pvbmVDaGFuZ2Uuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWF0dXJlU2VydmljZSBleHRlbmRzIEJhc2VPYmplY3RTZXJ2aWNlIHtcclxuICAgIEFQSTogYW55OyAvL0FXU1xyXG5cclxuICAgIGZlYXR1cmVVcGRhdGVkOiBTdWJqZWN0PHtcclxuICAgICAgICBzcGFjZTogRmVhdHVyZVtdO1xyXG4gICAgICAgIHpvbmU6IEZlYXR1cmVbXTtcclxuICAgIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBjdXJyZW50RmVhdHVyZXM6IHsgc3BhY2U6IEZlYXR1cmVbXTsgem9uZTogRmVhdHVyZVtdOyB9ID0ge1xyXG4gICAgICAgIHNwYWNlOiBbXSxcclxuICAgICAgICB6b25lOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgZmVhdHVyZVRhZ3M6IFN1YmplY3Q8RmVhdHVyZVtdPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgZmVhdHVyZUZpbHRlcmVkOiBGZWF0dXJlW10gPSBbXTtcclxuXHJcbiAgICB1cGRhdGVEb25lOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICB6b25lSURGaWx0ZXI6IHN0cmluZztcclxuXHJcbiAgICBjdXJyZW50U3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICAgIHVwZGF0aW5nOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBpc1VwZGF0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgZmVhdHVyZURvbWFpbkZpbHRlcjogc3RyaW5nW10gPSBudWxsO1xyXG5cclxuICAgIGRlc2tEb21haW5GaWx0ZXI6IHN0cmluZ1tdID0gbnVsbDtcclxuXHJcbiAgICBkZXNrQm9va2luZ3NVcGRhdGVkOiBTdWJqZWN0PEV2ZW50W10+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudEhhc2h0YWdzOiBIYXNodGFnW10gPSBbXTtcclxuXHJcbiAgICBjcmVhdGVPYnNlcnZhYmxlOiBTdWJqZWN0PEZlYXR1cmU+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBkZWxldGVPYnNlcnZhYmxlOiBTdWJqZWN0PEZlYXR1cmU+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnksXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcclxuICAgICAgICBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY29tbWVudFNlcnZpY2U6IENvbW1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBoYXNodGFnU2VydmljZTogSGFzaHRhZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lQ2hhbmdlU2VydmljZTogWm9uZUNoYW5nZVNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihwb2lTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgICAgICB0aGlzLmZlYXR1cmVVcGRhdGVkLnN1YnNjcmliZSgobGlzdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGZWF0dXJlcyA9IGxpc3Q7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy56b25lQ2hhbmdlU2VydmljZS56b25lQ2hhbmdlLnN1YnNjcmliZSgoem9uZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlEID0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVRhZ3MubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVVwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogbnVsbCB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh6b25lLmlkICE9PSB0aGlzLnpvbmVJREZpbHRlciAmJiAhdGhpcy51c2VyU2VydmljZS5pc011c2V1bVVzZXIodGhpcy5jdXJyZW50U3BhY2VJRCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gem9uZS5pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEZlYXR1cmVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURvbmUuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEZlYXR1cmVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5kZWxldGVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0RlbGV0ZShmZWF0dXJlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZU9ic2VydmFibGUuc3Vic2NyaWJlKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUR1ZVRvQ3JlYXRlKGZlYXR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICogQ1JVRFxyXG4gICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZUZlYXR1cmUoZmVhdHVyZTogRmVhdHVyZSk6IFByb21pc2U8RmVhdHVyZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlRmVhdHVyZShmZWF0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVGZWF0dXJlKGZlYXR1cmU6IEZlYXR1cmUpOiBQcm9taXNlPEZlYXR1cmU+IHtcclxuICAgICAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZUZlYXR1cmUoeyBpZDogZmVhdHVyZS5pZCB9KTtcclxuICAgICAgICBpZiAoZGVsZXRlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pQnlFbGVtZW50SWQoZmVhdHVyZS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChwb2kpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucG9pU2VydmljZS5kZWxldGVQb2kocG9pLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBkZWxldGUgY29tbWVudHNcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21tZW50IG9mIGRlbGV0ZWQuY29tbWVudHMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuZGVsZXRlQ29tbWVudChjb21tZW50LmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVsZXRlZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVGZWF0dXJlKGZlYXR1cmU6IGFueSk6IFByb21pc2U8RmVhdHVyZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlRmVhdHVyZShmZWF0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRGZWF0dXJlKGlkOiBzdHJpbmcpOiBQcm9taXNlPEZlYXR1cmU+IHtcclxuICAgICAgICBjb25zdCBmZWF0dXJlID0gKGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5HZXRGZWF0dXJlKGlkKSkgYXMgRmVhdHVyZTtcclxuICAgICAgICBmZWF0dXJlLmV2ZW50cz8uaXRlbXMuc29ydCgoYSwgYikgPT4gYi5yZWFsU3RhcnREYXRlIC0gYS5yZWFsU3RhcnREYXRlKTtcclxuICAgICAgICB0aGlzLnNldENvdmVySW1hZ2UoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5zZXRJbWFnZXMoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5zZXRWaWRlb3MoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5zZXREb2N1bWVudHMoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5zZXRBdWRpbyhmZWF0dXJlKTtcclxuICAgICAgICB0aGlzLnNldEV4dGVybmFsTGlua3MoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5zZXRFbWJlZHMoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5pc0Jvb2tpbmdQbGFjZShmZWF0dXJlKTtcclxuICAgICAgICByZXR1cm4gZmVhdHVyZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgaW5pdEZlYXR1cmVzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGZlYXR1cmVMaXN0ID0gYXdhaXQgdGhpcy5nZXRGZWF0dXJlc0ZvclNwYWNlKHRoaXMuY3VycmVudFNwYWNlSUQpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEhhc2h0YWdzID0gYXdhaXQgdGhpcy5oYXNodGFnU2VydmljZS5nZXRIYXNodGFnc0ZvclNwYWNlKFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlELFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jdXJyZW50SGFzaHRhZ3MpO1xyXG4gICAgICAgIGlmIChmZWF0dXJlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJlZEZlYXR1cmVzID0gWy4uLmZlYXR1cmVMaXN0XTtcclxuICAgICAgICAgICAgbGV0IGZpbHRlcmVkUG9pbnRJbnRlcmVzdCA9IGZpbHRlcmVkRmVhdHVyZXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGZlYXR1cmUpID0+IGZlYXR1cmUudHlwZSAhPT0gRmVhdHVyZVR5cGUuREVTSyxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgbGV0IGZpbHRlcmVkRGVza3MgPSBmaWx0ZXJlZEZlYXR1cmVzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChmZWF0dXJlKSA9PiBmZWF0dXJlLnR5cGUgPT09IEZlYXR1cmVUeXBlLkRFU0ssXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVEb21haW5GaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcmVkUG9pbnRJbnRlcmVzdCA9IGZpbHRlcmVkUG9pbnRJbnRlcmVzdC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZlYXR1cmUpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZURvbWFpbkZpbHRlci5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvbWFpbikgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmRvbWFpbiAmJiBkb21haW4gPT09IGZlYXR1cmUuZG9tYWluLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kZXNrRG9tYWluRmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZERlc2tzID0gZmlsdGVyZWREZXNrcy5maWx0ZXIoKGZlYXR1cmUpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNrRG9tYWluRmlsdGVyLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkb21haW4pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmRvbWFpbiAmJiBkb21haW4gPT09IGZlYXR1cmUuZG9tYWluLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRmVhdHVyZXMgPSBbLi4uZmlsdGVyZWRQb2ludEludGVyZXN0LCAuLi5maWx0ZXJlZERlc2tzXTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RmVhdHVyZXMuc3BhY2UgPSBmaWx0ZXJlZEZlYXR1cmVzLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIGVtaXQgb24gdGFncyBzaG91bGQgYmUgYWZ0ZXIgc2V0dGluZyBjdXJyZW50LnNwYWNlICEhXHJcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZVRhZ3MubmV4dChmaWx0ZXJlZEZlYXR1cmVzKTsgLy8gZm9yIHRhZ3MgdXBkYXRlIHdpdGhvdXQgem9uZSBmaWx0ZXJpbmdcclxuICAgICAgICAgICAgaWYgKHRoaXMuem9uZUlERmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZEZlYXR1cmVzID1cclxuICAgICAgICAgICAgICAgICAgICAoYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEZlYXR1cmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcclxuICAgICAgICAgICAgICAgICAgICApKSBhcyBGZWF0dXJlW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RmVhdHVyZXMuem9uZSA9IGZpbHRlcmVkRmVhdHVyZXMuc29ydChcclxuICAgICAgICAgICAgICAgIChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jdXJyZW50RmVhdHVyZXMpO1xyXG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVVcGRhdGVkLm5leHQodGhpcy5jdXJyZW50RmVhdHVyZXMpOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mZWF0dXJlVXBkYXRlZC5uZXh0KHsgc3BhY2U6IFtdLCB6b25lOiBbXSB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEZlYXR1cmVzRm9yU3BhY2UoXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgICAgIGtlZXBBcmNoaXZlZDogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgKTogUHJvbWlzZTxGZWF0dXJlW10+IHtcclxuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5GZWF0dXJlc0J5U3BhY2Uoc3BhY2VJRCkudGhlbihcclxuICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcyxcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBmZWF0dXJlc0ZvclVzZXIgPVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRmVhdHVyZXNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICAgICAgICAgIHNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFrZWVwQXJjaGl2ZWQpIHtcclxuICAgICAgICAgICAgZmVhdHVyZXNGb3JVc2VyID0gZmVhdHVyZXNGb3JVc2VyLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChmZWF0dXJlKSA9PiAhdGhpcy5pc0FyY2hpdmVkKGZlYXR1cmUpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgZmVhdHVyZXNGb3JVc2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q292ZXJJbWFnZShmZWF0dXJlKTtcclxuICAgICAgICAgICAgdGhpcy5pc0Jvb2tpbmdQbGFjZShmZWF0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzRm9yVXNlcjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRGZWF0dXJlc0J5U3BhY2VXaXRob3V0RmlsdGVyaW5nKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8RmVhdHVyZVtdPiB7XHJcbiAgICAgICAgbGV0IGZlYXR1cmVzID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkZlYXR1cmVzQnlTcGFjZShzcGFjZUlEKS50aGVuKFxyXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+IHJlc3BvbnNlLml0ZW1zLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZmVhdHVyZXMgPSBmZWF0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PiAhdGhpcy5pc0FyY2hpdmVkKGZlYXR1cmUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q292ZXJJbWFnZShmZWF0dXJlKTtcclxuICAgICAgICAgICAgdGhpcy5pc0Jvb2tpbmdQbGFjZShmZWF0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQm9va2luZ1BsYWNlKGZlYXR1cmU6IEZlYXR1cmUpIHtcclxuICAgICAgICBmZWF0dXJlLmlzQm9va2luZ1BsYWNlID0gZmVhdHVyZS50eXBlID09PSBGZWF0dXJlVHlwZS5ERVNLO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRDb3ZlckltYWdlKGZlYXR1cmU6IEZlYXR1cmUpIHtcclxuICAgICAgICBjb25zdCBjb3ZlckltYWdlID0gZmVhdHVyZS5jb21tZW50cy5pdGVtcy5maW5kKFxyXG4gICAgICAgICAgICAoY29tKSA9PiBjb20uaXNDb3ZlckltYWdlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNvdmVySW1hZ2UpIHtcclxuICAgICAgICAgICAgZmVhdHVyZS5jb3ZlckltYWdlVXJsID0gY292ZXJJbWFnZS5hbm5leGU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZlYXR1cmUuY29tbWVudHMuaXRlbXMuc29tZSgoY29tKSA9PiBjb20udHlwZSA9PT0gQ29tbWVudFR5cGUuWU9VVFVCRSkpIHtcclxuICAgICAgICAgICAgY29uc3QgeW91dHViZUNvbW1lbnQgPSBmZWF0dXJlLmNvbW1lbnRzLml0ZW1zLmZpbmQoKGNvbSkgPT4gY29tLnR5cGUgPT09IENvbW1lbnRUeXBlLllPVVRVQkUpO1xyXG4gICAgICAgICAgICAvLyB3ZSBjYW4gdXNlIHRoZSBwcmV2aWV3IGltYWdlIG9mIHlvdXR1YmVcclxuICAgICAgICAgICAgZmVhdHVyZS5jb3ZlckltYWdlVXJsID0gYGh0dHBzOi8vaW1nLnlvdXR1YmUuY29tL3ZpLyR7eW91dHViZUNvbW1lbnQuZXh0ZXJuYWxMaW5rfS8wLmpwZ2A7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBmZWF0dXJlLmNvbW1lbnRzLml0ZW1zLnNvbWUoKGNvbSkgPT4gY29tLnR5cGUgPT09IENvbW1lbnRUeXBlLklNQUdFKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBpbWFnZUNvbW1lbnQgPSBmZWF0dXJlLmNvbW1lbnRzLml0ZW1zLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoY29tKSA9PiBjb20udHlwZSA9PT0gQ29tbWVudFR5cGUuSU1BR0UsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGZlYXR1cmUuY292ZXJJbWFnZVVybCA9IGltYWdlQ29tbWVudC5hbm5leGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVGZWF0dXJlTG9jYXRpb24oXHJcbiAgICAgICAgZmVhdHVyZTogRmVhdHVyZSxcclxuICAgICAgICB0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhLFxyXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8UE9JPiB7XHJcbiAgICAgICAgY29uc3QgcG9pSW5wdXQgPSB7XHJcbiAgICAgICAgICAgIGNvb3JkaW5hdGU6IHRhZ0RhdGEuZ2V0Q29vcmRpbmF0ZVN0cmluZygpLFxyXG4gICAgICAgICAgICB0eXBlOiBmZWF0dXJlLmlzQm9va2luZ1BsYWNlID8gUG9pVHlwZS5ERVNLIDogUG9pVHlwZS5EQVRBLFxyXG4gICAgICAgICAgICBlbGVtZW50SUQ6IGZlYXR1cmUuaWQsXHJcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0YWdEYXRhLmdldE1ldGFkYXRhU3RyaW5nKCksXHJcbiAgICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiB0YWdEYXRhLmdldFN3ZWVwSUQoKSxcclxuICAgICAgICB9IGFzIFBPSTtcclxuICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuY3JlYXRlUE9JRm9yU3BhY2VJRChwb2lJbnB1dCk7XHJcbiAgICAgICAgcmV0dXJuIHBvaTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbWFnZXMoZmVhdHVyZTogRmVhdHVyZSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlc0NvbW1lbnRzID0gZmVhdHVyZS5jb21tZW50cy5pdGVtc1xyXG4gICAgICAgICAgICAuZmlsdGVyKChjb20pID0+IGNvbS50eXBlID09PSBDb21tZW50VHlwZS5JTUFHRSlcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcclxuICAgICAgICBjb25zdCBpbWFnZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGltYWdlIG9mIGltYWdlc0NvbW1lbnRzKSB7XHJcbiAgICAgICAgICAgIGltYWdlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBhdGg6IGltYWdlLmFubmV4ZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBpbWFnZS50aXRsZSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpbWFnZS5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICAgIHNob3dJblRhZzogaW1hZ2Uuc2hvd25JblRhZyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZlYXR1cmUuaW1hZ2VzID0gaW1hZ2VzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZpZGVvcyhmZWF0dXJlOiBGZWF0dXJlKSB7XHJcbiAgICAgICAgY29uc3QgdmlkZW9zQ29tbWVudHMgPSBmZWF0dXJlLmNvbW1lbnRzLml0ZW1zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbSkgPT4gY29tLnR5cGUgPT09IENvbW1lbnRUeXBlLlZJREVPIHx8IGNvbS50eXBlID09PSBDb21tZW50VHlwZS5ZT1VUVUJFKVxyXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IHZpZGVvcyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgdmlkZW8gb2YgdmlkZW9zQ29tbWVudHMpIHtcclxuICAgICAgICAgICAgdmlkZW9zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGF0aDogdmlkZW8udHlwZSA9PT0gQ29tbWVudFR5cGUuWU9VVFVCRSA/ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8nICsgdmlkZW8uZXh0ZXJuYWxMaW5rIDogdmlkZW8uYW5uZXhlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHZpZGVvLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHZpZGVvLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdmlkZW8udHlwZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZlYXR1cmUudmlkZW9zID0gdmlkZW9zO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERvY3VtZW50cyhmZWF0dXJlOiBGZWF0dXJlKSB7XHJcbiAgICAgICAgY29uc3QgZG9jdW1lbnRDb21tZW50cyA9IGZlYXR1cmUuY29tbWVudHMuaXRlbXNcclxuICAgICAgICAgICAgLmZpbHRlcigoY29tKSA9PiBjb20udHlwZSA9PT0gQ29tbWVudFR5cGUuRE9DVU1FTlQpXHJcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XHJcbiAgICAgICAgY29uc3QgZG9jcyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZG9jdW1lbnRDb21tZW50cykge1xyXG4gICAgICAgICAgICBkb2NzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGF0aDogZG9jdW1lbnQuYW5uZXhlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRvY3VtZW50LnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGRvY3VtZW50LmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmVhdHVyZS5kb2N1bWVudHMgPSBkb2NzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEF1ZGlvKGZlYXR1cmU6IEZlYXR1cmUpIHtcclxuICAgICAgICBjb25zdCBhdWRpb0NvbW1lbnRzID0gZmVhdHVyZS5jb21tZW50cy5pdGVtc1xyXG4gICAgICAgICAgICAuZmlsdGVyKChjb20pID0+IGNvbS50eXBlID09PSBDb21tZW50VHlwZS5BVURJTylcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcclxuICAgICAgICBjb25zdCBhdWRpb3MgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGF1ZGlvIG9mIGF1ZGlvQ29tbWVudHMpIHtcclxuICAgICAgICAgICAgYXVkaW9zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGF0aDogYXVkaW8uYW5uZXhlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IGF1ZGlvLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGF1ZGlvLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmVhdHVyZS5hdWRpb3MgPSBhdWRpb3M7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RXh0ZXJuYWxMaW5rcyhmZWF0dXJlOiBGZWF0dXJlKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3NDb21tZW50cyA9IGZlYXR1cmUuY29tbWVudHMuaXRlbXNcclxuICAgICAgICAgICAgLmZpbHRlcigoY29tKSA9PiBjb20udHlwZSA9PT0gQ29tbWVudFR5cGUuVVJMKVxyXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsTGlua3MgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3NDb21tZW50cykge1xyXG4gICAgICAgICAgICBleHRlcm5hbExpbmtzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGF0aDogbGluay5leHRlcm5hbExpbmssXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogbGluay50aXRsZSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBsaW5rLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICAgICAgc2hvd0luVGFnOiBsaW5rLnNob3duSW5UYWcsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmZWF0dXJlLmV4dGVybmFsTGlua3MgPSBleHRlcm5hbExpbmtzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEVtYmVkcyhmZWF0dXJlOiBGZWF0dXJlKSB7XHJcbiAgICAgICAgY29uc3QgZW1iZWRDb21tZW50cyA9IGZlYXR1cmUuY29tbWVudHMuaXRlbXNcclxuICAgICAgICAgICAgLmZpbHRlcigoY29tKSA9PiBjb20udHlwZSA9PT0gQ29tbWVudFR5cGUuRU1CRUQpXHJcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XHJcbiAgICAgICAgY29uc3QgZW1iZWRzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBlbWJlZCBvZiBlbWJlZENvbW1lbnRzKSB7XHJcbiAgICAgICAgICAgIGVtYmVkcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBhdGg6IGVtYmVkLmV4dGVybmFsTGluayxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBlbWJlZC50aXRsZSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBlbWJlZC5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICAgIHNob3dJblRhZzogZW1iZWQuc2hvd25JblRhZyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZlYXR1cmUuZW1iZWRzID0gZW1iZWRzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyBnZXRGaXJzdEZlYXR1cmVGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPEZlYXR1cmU+IHtcclxuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IHRoaXMuZ2V0RmVhdHVyZXNGb3JTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBmaXJzdCA9IGZlYXR1cmVzLmZpbmQoKGZlYXQpID0+IGZlYXQuaW5kZXggPT09IDEpO1xyXG4gICAgICAgIHJldHVybiBmaXJzdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVJY29uRm9yQWxsRmVhdHVyZXNJblNwYWNlKFxyXG4gICAgICAgIHRhZ0ljb246IHN0cmluZyxcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgY2F0ZWdvcnlJRDogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8eyBmZWF0dXJlczogRmVhdHVyZVtdOyBwb2lzOiBQT0lbXTsgfT4ge1xyXG4gICAgICAgIGxldCBmZWF0dXJlcyA9IGF3YWl0IHRoaXMuZ2V0RmVhdHVyZXNGb3JTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICBpZiAoY2F0ZWdvcnlJRCkge1xyXG4gICAgICAgICAgICBmZWF0dXJlcyA9IGZlYXR1cmVzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChmZWF0dXJlKSA9PiBmZWF0dXJlLmRvbWFpbklEID09PSBjYXRlZ29yeUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwb2lzID0gYXdhaXQgdGhpcy51cGRhdGVJY29uRm9yQWxsT2JqZWN0cyhmZWF0dXJlcywgdGFnSWNvbik7XHJcbiAgICAgICAgcmV0dXJuIHsgZmVhdHVyZXMsIHBvaXMgfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRDcmVhdGVkSW5kaWNlc0ZvckZlYXR1cmVzSW5TcGFjZShcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPG51bWJlcltdPiB7XHJcbiAgICAgICAgbGV0IGZlYXR1cmVzID0gKGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5GZWF0dXJlc0J5U3BhY2Uoc3BhY2VJRCkpLml0ZW1zO1xyXG4gICAgICAgIGZlYXR1cmVzID0gZmVhdHVyZXMuZmlsdGVyKChmZWF0KSA9PiBmZWF0LmluZGV4KTtcclxuICAgICAgICByZXR1cm4gZmVhdHVyZXMubWFwKChmZWF0KSA9PiBmZWF0LmluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREZXNrc0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8RmVhdHVyZVtdPiB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBhd2FpdCB0aGlzLmdldEZlYXR1cmVzRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzLmZpbHRlcigoZmVhdCkgPT4gZmVhdC5pc0Jvb2tpbmdQbGFjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIGFyY2hpdmVkIHRoaXMgZmVhdHVyZSAqL1xyXG4gICAgaXNBcmNoaXZlZChmZWF0dXJlOiBGZWF0dXJlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZlYXR1cmUuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgICAgICAgPyBmZWF0dXJlLmFyY2hpdmVkRm9yTWlzc2lvbklELmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihmZWF0dXJlLnNwYWNlSUQpLmlkLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QXJjaGl2ZWQoZmVhdHVyZTogRmVhdHVyZSwgYXJjaGl2ZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgYXJjaGl2ZWRMaXN0ID0gZmVhdHVyZS5hcmNoaXZlZEZvck1pc3Npb25JRFxyXG4gICAgICAgICAgICA/IGZlYXR1cmUuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICBjb25zdCBtaXNzaW9uSUQgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGZlYXR1cmUuc3BhY2VJRCkuaWQ7XHJcblxyXG4gICAgICAgIGFyY2hpdmVkTGlzdCA9IGFyY2hpdmVkTGlzdC5maWx0ZXIoKG0pID0+IG0gIT09IG1pc3Npb25JRCk7XHJcblxyXG4gICAgICAgIGlmIChhcmNoaXZlZCkge1xyXG4gICAgICAgICAgICBhcmNoaXZlZExpc3QucHVzaChtaXNzaW9uSUQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRmVhdHVyZSh7XHJcbiAgICAgICAgICAgIGlkOiBmZWF0dXJlLmlkLFxyXG4gICAgICAgICAgICBhcmNoaXZlZEZvck1pc3Npb25JRDogYXJjaGl2ZWRMaXN0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyB1cGRhdGVEdWVUb0NyZWF0ZShmZWF0dXJlOiBGZWF0dXJlKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RmVhdHVyZXMuc3BhY2UudW5zaGlmdChmZWF0dXJlKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGZWF0dXJlcy56b25lLnVuc2hpZnQoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5mZWF0dXJlVXBkYXRlZC5uZXh0KHtcclxuICAgICAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEZlYXR1cmVzLnNwYWNlLFxyXG4gICAgICAgICAgICB6b25lOiB0aGlzLmN1cnJlbnRGZWF0dXJlcy56b25lLFxyXG4gICAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlRHVlVG9EZWxldGUoZGVsZXRlZEZlYXR1cmU6IEZlYXR1cmUpIHtcclxuICAgICAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5jdXJyZW50RmVhdHVyZXMuc3BhY2UuZmluZChcclxuICAgICAgICAgICAgKF9mZWF0dXJlKSA9PiBfZmVhdHVyZS5pZCA9PT0gZGVsZXRlZEZlYXR1cmUuaWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZmVhdHVyZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEZlYXR1cmVzLnNwYWNlLmluZGV4T2YoZmVhdHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZlYXR1cmVzLnNwYWNlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHpvbmVGZWF0dXJlID0gdGhpcy5jdXJyZW50RmVhdHVyZXMuem9uZS5maW5kKFxyXG4gICAgICAgICAgICAoX2ZlYXR1cmUpID0+IF9mZWF0dXJlLmlkID09PSBkZWxldGVkRmVhdHVyZS5pZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh6b25lRmVhdHVyZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEZlYXR1cmVzLnpvbmUuaW5kZXhPZih6b25lRmVhdHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZlYXR1cmVzLnpvbmUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mZWF0dXJlVXBkYXRlZC5uZXh0KHtcclxuICAgICAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEZlYXR1cmVzLnNwYWNlLFxyXG4gICAgICAgICAgICB6b25lOiB0aGlzLmN1cnJlbnRGZWF0dXJlcy56b25lLFxyXG4gICAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
364
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvZmVhdHVyZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQywyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQW9CLFdBQVcsRUFBRSxXQUFXLEVBQU8sT0FBTyxFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBSW5ILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7O0FBVTFELE1BQU0sT0FBTyxjQUFlLFNBQVEsaUJBQWlCO0lBdUNqRCxZQUNpQyxXQUFnQixFQUNyQyxnQkFBa0MsRUFDbEMsYUFBNEIsRUFDcEMsVUFBc0IsRUFDZCxjQUE4QixFQUM5QixXQUE0QixFQUNwQyxpQkFBb0MsRUFDNUIsY0FBOEIsRUFDOUIsaUJBQW9DO1FBRTVDLEtBQUssQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQVQ3QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBRTVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFFNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUE3Q2hELG1CQUFjLEdBR1QsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVuQixvQkFBZSxHQUEyQztZQUN0RCxLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQUVGLGdCQUFXLEdBQXVCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFaEQsb0JBQWUsR0FBYyxFQUFFLENBQUM7UUFFaEMsZUFBVSxHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBTTdDLGFBQVEsR0FBcUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUUzQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLHdCQUFtQixHQUFhLElBQUksQ0FBQztRQUVyQyxxQkFBZ0IsR0FBYSxJQUFJLENBQUM7UUFFbEMsd0JBQW1CLEdBQXFCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFL0Msb0JBQWUsR0FBYyxFQUFFLENBQUM7UUFFdkMscUJBQWdCLEdBQXFCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFbkQscUJBQWdCLEdBQXFCLElBQUksT0FBTyxFQUFFLENBQUM7UUFjL0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDO1lBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzthQUM1QjtpQkFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDN0YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDdkI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN2QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ25DO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDbkM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7TUFFRTtJQUNGLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBZ0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBZ0I7UUFDaEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0UsSUFBSSxPQUFPLEVBQUU7WUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLElBQUksR0FBRyxFQUFFO2dCQUNMLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNDO1lBQ0Qsa0JBQWtCO1lBQ2xCLEtBQUssTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7Z0JBQzFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0o7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFZO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQVU7UUFDdkIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBWSxDQUFDO1FBQ3JFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFHRCxLQUFLLENBQUMsWUFBWTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FDaEUsSUFBSSxDQUFDLGNBQWMsQ0FDdEIsQ0FBQztRQUNGLHFDQUFxQztRQUNyQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQ3hDLElBQUkscUJBQXFCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUMvQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxDQUNqRCxDQUFDO1lBQ0YsSUFBSSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUN2QyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxDQUNqRCxDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzFCLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FDaEQsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNSLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3pCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDUCxPQUFPLENBQUMsTUFBTSxJQUFJLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDckQsQ0FDUixDQUFDO2FBQ0w7WUFDRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDdkIsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN0QixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1AsT0FBTyxDQUFDLE1BQU0sSUFBSSxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ3JELENBQ0osQ0FBQzthQUNMO1lBQ0QsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUM5QyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FDOUIsQ0FBQztZQUNGLHdEQUF3RDtZQUN4RCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ25CLGdCQUFnQjtvQkFDWixDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FDMUMsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxZQUFZLENBQ3BCLENBQWMsQ0FBQzthQUN2QjtZQUVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7WUFFekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUM3QyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FDOUIsQ0FBQztZQUNGLHFDQUFxQztZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7U0FDdEU7YUFBTTtZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtTQUN6RTtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQ3JCLE9BQWUsRUFDZixlQUF3QixLQUFLO1FBRTdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDbkUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQy9CLENBQUM7UUFDRixJQUFJLGVBQWUsR0FDZixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsbUNBQW1DLENBQ3hELFFBQVEsRUFDUixPQUFPLENBQ1YsQ0FBQztRQUNOLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDZixlQUFlLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FDcEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FDekMsQ0FBQztTQUNMO1FBQ0QsS0FBSyxNQUFNLE9BQU8sSUFBSSxlQUFlLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxPQUFlO1FBQ3BELElBQUksUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDakUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQy9CLENBQUM7UUFDRixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDdEIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FDekMsQ0FBQztRQUNGLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO1lBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNoQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZ0I7UUFDM0IsT0FBTyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0QsQ0FBQztJQUdELGFBQWEsQ0FBQyxPQUFnQjtRQUMxQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQzFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUM1QixDQUFDO1FBQ0YsSUFBSSxVQUFVLEVBQUU7WUFDWixPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDMUMsT0FBTztTQUNWO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3hFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUYsMENBQTBDO1lBQzFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsOEJBQThCLGNBQWMsQ0FBQyxZQUFZLFFBQVEsQ0FBQztZQUMxRixPQUFPO1NBQ1Y7UUFDRCxJQUNJLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQ3RFO1lBQ0UsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUM1QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsS0FBSyxDQUMxQyxDQUFDO1lBQ0YsT0FBTyxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO1NBQy9DO0lBRUwsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FDdkIsT0FBZ0IsRUFDaEIsT0FBc0IsRUFDdEIsT0FBZTtRQUVmLE1BQU0sUUFBUSxHQUFHO1lBQ2IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtZQUN6QyxJQUFJLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUk7WUFDMUQsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ3JCLFFBQVEsRUFBRSxPQUFPLENBQUMsaUJBQWlCLEVBQUU7WUFDckMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRTtTQUNuQyxDQUFDO1FBQ1QsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFnQjtRQUN0QixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7YUFDeEMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUM7YUFDL0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEtBQUssTUFBTSxLQUFLLElBQUksY0FBYyxFQUFFO1lBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNsQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxVQUFVO2FBQzlCLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFnQjtRQUN0QixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7YUFDeEMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsT0FBTyxDQUFDO2FBQ25GLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixLQUFLLE1BQU0sS0FBSyxJQUFJLGNBQWMsRUFBRTtZQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNSLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUMvRyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2FBQ25CLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFnQjtRQUN6QixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSzthQUMxQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLFFBQVEsQ0FBQzthQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxnQkFBZ0IsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNOLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTTtnQkFDckIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7YUFDcEMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQWdCO1FBQ3JCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSzthQUN2QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQzthQUMvQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLEVBQUU7WUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDUixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU07Z0JBQ2xCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2FBQ2pDLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQWdCO1FBQzdCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSzthQUN2QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLEdBQUcsQ0FBQzthQUM3QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUU7WUFDOUIsYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDN0IsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUMxQyxDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWdCO1FBQ3RCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSzthQUN2QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQzthQUMvQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLEVBQUU7WUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDUixJQUFJLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQ3hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixTQUFTLEVBQUUsS0FBSyxDQUFDLFVBQVU7YUFDOUIsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBR0QsS0FBSyxDQUFDLHVCQUF1QixDQUFDLE9BQWU7UUFDekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4RCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLCtCQUErQixDQUNqQyxPQUFlLEVBQ2YsT0FBZSxFQUNmLGFBQXFCLElBQUk7UUFFekIsSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsSUFBSSxVQUFVLEVBQUU7WUFDWixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDdEIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUMvQyxDQUFDO1NBQ0w7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLG1DQUFtQyxDQUNyQyxPQUFlO1FBRWYsSUFBSSxRQUFRLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN6RSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBZTtRQUNsQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLFVBQVUsQ0FBQyxPQUFnQjtRQUN2QixPQUFPLE9BQU8sQ0FBQyxvQkFBb0I7WUFDL0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQ3REO1lBQ0QsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNoQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQWdCLEVBQUUsUUFBaUI7UUFDM0MsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLG9CQUFvQjtZQUMzQyxDQUFDLENBQUMsT0FBTyxDQUFDLG9CQUFvQjtZQUM5QixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV0RSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBRTNELElBQUksUUFBUSxFQUFFO1lBQ1YsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNoQztRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDZCxvQkFBb0IsRUFBRSxZQUFZO1NBQ3JDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBZ0I7UUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLO1lBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUk7U0FDbEMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsY0FBdUI7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUMzQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxjQUFjLENBQUMsRUFBRSxDQUNsRCxDQUFDO1FBQ0YsSUFBSSxPQUFPLEVBQUU7WUFDVCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMvQztRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDOUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssY0FBYyxDQUFDLEVBQUUsQ0FDbEQsQ0FBQztRQUNGLElBQUksV0FBVyxFQUFFO1lBQ2IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLO1lBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUk7U0FDbEMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO0lBQzNCLENBQUM7OzJHQTFjUSxjQUFjLGtCQXdDWCxtQkFBbUI7K0dBeEN0QixjQUFjLGNBRlgsTUFBTTsyRkFFVCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBeUNRLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBNYXR0ZXJ0YWdEYXRhIH0gZnJvbSBcIi4uLy4uL21hdHRlcnRhZ0RhdGFcIjtcclxuaW1wb3J0IHsgRmVhdHVyZSwgSGFzaHRhZywgRmVhdHVyZVR5cGUsIENvbW1lbnRUeXBlLCBQT0ksIFBvaVR5cGUsIEV2ZW50LCBMZXZlbFN0YXR1cyB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vZmlsdGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTmF2aWdhdG9yU2VydmljZSB9IGZyb20gXCIuLi9uYXZpZ2F0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UgfSBmcm9tIFwiLi4vdXNlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VPYmplY3RTZXJ2aWNlIH0gZnJvbSBcIi4vYmFzZS1vYmplY3Quc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb21tZW50U2VydmljZSB9IGZyb20gXCIuL2NvbW1lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBIYXNodGFnU2VydmljZSB9IGZyb20gXCIuL2hhc2h0YWcuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCIuL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSBcIi4vcG9pLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtab25lQ2hhbmdlU2VydmljZX0gZnJvbSBcIi4uL3pvbmVDaGFuZ2Uuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWF0dXJlU2VydmljZSBleHRlbmRzIEJhc2VPYmplY3RTZXJ2aWNlIHtcclxuICAgIEFQSTogYW55OyAvL0FXU1xyXG5cclxuICAgIGZlYXR1cmVVcGRhdGVkOiBTdWJqZWN0PHtcclxuICAgICAgICBzcGFjZTogRmVhdHVyZVtdO1xyXG4gICAgICAgIHpvbmU6IEZlYXR1cmVbXTtcclxuICAgIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBjdXJyZW50RmVhdHVyZXM6IHsgc3BhY2U6IEZlYXR1cmVbXTsgem9uZTogRmVhdHVyZVtdOyB9ID0ge1xyXG4gICAgICAgIHNwYWNlOiBbXSxcclxuICAgICAgICB6b25lOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgZmVhdHVyZVRhZ3M6IFN1YmplY3Q8RmVhdHVyZVtdPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgZmVhdHVyZUZpbHRlcmVkOiBGZWF0dXJlW10gPSBbXTtcclxuXHJcbiAgICB1cGRhdGVEb25lOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICB6b25lSURGaWx0ZXI6IHN0cmluZztcclxuXHJcbiAgICBjdXJyZW50U3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICAgIHVwZGF0aW5nOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBpc1VwZGF0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgZmVhdHVyZURvbWFpbkZpbHRlcjogc3RyaW5nW10gPSBudWxsO1xyXG5cclxuICAgIGRlc2tEb21haW5GaWx0ZXI6IHN0cmluZ1tdID0gbnVsbDtcclxuXHJcbiAgICBkZXNrQm9va2luZ3NVcGRhdGVkOiBTdWJqZWN0PEV2ZW50W10+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudEhhc2h0YWdzOiBIYXNodGFnW10gPSBbXTtcclxuXHJcbiAgICBjcmVhdGVPYnNlcnZhYmxlOiBTdWJqZWN0PEZlYXR1cmU+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBkZWxldGVPYnNlcnZhYmxlOiBTdWJqZWN0PEZlYXR1cmU+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnksXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcclxuICAgICAgICBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY29tbWVudFNlcnZpY2U6IENvbW1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBoYXNodGFnU2VydmljZTogSGFzaHRhZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lQ2hhbmdlU2VydmljZTogWm9uZUNoYW5nZVNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihwb2lTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgICAgICB0aGlzLmZlYXR1cmVVcGRhdGVkLnN1YnNjcmliZSgobGlzdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGZWF0dXJlcyA9IGxpc3Q7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy56b25lQ2hhbmdlU2VydmljZS56b25lQ2hhbmdlLnN1YnNjcmliZSgoem9uZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlEID0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVRhZ3MubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVVwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogbnVsbCB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh6b25lLmlkICE9PSB0aGlzLnpvbmVJREZpbHRlciAmJiAhdGhpcy51c2VyU2VydmljZS5pc011c2V1bVVzZXIodGhpcy5jdXJyZW50U3BhY2VJRCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gem9uZS5pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEZlYXR1cmVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURvbmUuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEZlYXR1cmVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5kZWxldGVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0RlbGV0ZShmZWF0dXJlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZU9ic2VydmFibGUuc3Vic2NyaWJlKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUR1ZVRvQ3JlYXRlKGZlYXR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICogQ1JVRFxyXG4gICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZUZlYXR1cmUoZmVhdHVyZTogRmVhdHVyZSk6IFByb21pc2U8RmVhdHVyZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlRmVhdHVyZShmZWF0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVGZWF0dXJlKGZlYXR1cmU6IEZlYXR1cmUpOiBQcm9taXNlPEZlYXR1cmU+IHtcclxuICAgICAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZUZlYXR1cmUoeyBpZDogZmVhdHVyZS5pZCB9KTtcclxuICAgICAgICBpZiAoZGVsZXRlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pQnlFbGVtZW50SWQoZmVhdHVyZS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChwb2kpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucG9pU2VydmljZS5kZWxldGVQb2kocG9pLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBkZWxldGUgY29tbWVudHNcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21tZW50IG9mIGRlbGV0ZWQuY29tbWVudHMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuZGVsZXRlQ29tbWVudChjb21tZW50LmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVsZXRlZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVGZWF0dXJlKGZlYXR1cmU6IGFueSk6IFByb21pc2U8RmVhdHVyZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlRmVhdHVyZShmZWF0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRGZWF0dXJlKGlkOiBzdHJpbmcpOiBQcm9taXNlPEZlYXR1cmU+IHtcclxuICAgICAgICBjb25zdCBmZWF0dXJlID0gKGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5HZXRGZWF0dXJlKGlkKSkgYXMgRmVhdHVyZTtcclxuICAgICAgICBmZWF0dXJlLmV2ZW50cz8uaXRlbXMuc29ydCgoYSwgYikgPT4gYi5yZWFsU3RhcnREYXRlIC0gYS5yZWFsU3RhcnREYXRlKTtcclxuICAgICAgICB0aGlzLnNldENvdmVySW1hZ2UoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5zZXRJbWFnZXMoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5zZXRWaWRlb3MoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5zZXREb2N1bWVudHMoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5zZXRBdWRpbyhmZWF0dXJlKTtcclxuICAgICAgICB0aGlzLnNldEV4dGVybmFsTGlua3MoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5zZXRFbWJlZHMoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5pc0Jvb2tpbmdQbGFjZShmZWF0dXJlKTtcclxuICAgICAgICByZXR1cm4gZmVhdHVyZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgaW5pdEZlYXR1cmVzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGZlYXR1cmVMaXN0ID0gYXdhaXQgdGhpcy5nZXRGZWF0dXJlc0ZvclNwYWNlKHRoaXMuY3VycmVudFNwYWNlSUQpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEhhc2h0YWdzID0gYXdhaXQgdGhpcy5oYXNodGFnU2VydmljZS5nZXRIYXNodGFnc0ZvclNwYWNlKFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlELFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jdXJyZW50SGFzaHRhZ3MpO1xyXG4gICAgICAgIGlmIChmZWF0dXJlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJlZEZlYXR1cmVzID0gWy4uLmZlYXR1cmVMaXN0XTtcclxuICAgICAgICAgICAgbGV0IGZpbHRlcmVkUG9pbnRJbnRlcmVzdCA9IGZpbHRlcmVkRmVhdHVyZXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGZlYXR1cmUpID0+IGZlYXR1cmUudHlwZSAhPT0gRmVhdHVyZVR5cGUuREVTSyxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgbGV0IGZpbHRlcmVkRGVza3MgPSBmaWx0ZXJlZEZlYXR1cmVzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChmZWF0dXJlKSA9PiBmZWF0dXJlLnR5cGUgPT09IEZlYXR1cmVUeXBlLkRFU0ssXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVEb21haW5GaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcmVkUG9pbnRJbnRlcmVzdCA9IGZpbHRlcmVkUG9pbnRJbnRlcmVzdC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZlYXR1cmUpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZURvbWFpbkZpbHRlci5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvbWFpbikgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmRvbWFpbiAmJiBkb21haW4gPT09IGZlYXR1cmUuZG9tYWluLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kZXNrRG9tYWluRmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZERlc2tzID0gZmlsdGVyZWREZXNrcy5maWx0ZXIoKGZlYXR1cmUpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNrRG9tYWluRmlsdGVyLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkb21haW4pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmRvbWFpbiAmJiBkb21haW4gPT09IGZlYXR1cmUuZG9tYWluLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRmVhdHVyZXMgPSBbLi4uZmlsdGVyZWRQb2ludEludGVyZXN0LCAuLi5maWx0ZXJlZERlc2tzXTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RmVhdHVyZXMuc3BhY2UgPSBmaWx0ZXJlZEZlYXR1cmVzLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIGVtaXQgb24gdGFncyBzaG91bGQgYmUgYWZ0ZXIgc2V0dGluZyBjdXJyZW50LnNwYWNlICEhXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnpvbmVJREZpbHRlcikge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyZWRGZWF0dXJlcyA9XHJcbiAgICAgICAgICAgICAgICAgICAgKGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRGZWF0dXJlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgKSkgYXMgRmVhdHVyZVtdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVUYWdzLm5leHQoZmlsdGVyZWRGZWF0dXJlcyk7IC8vIGZvciB0aGlzIHpvbmVcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZlYXR1cmVzLnpvbmUgPSBmaWx0ZXJlZEZlYXR1cmVzLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudEZlYXR1cmVzKTtcclxuICAgICAgICAgICAgdGhpcy5mZWF0dXJlVXBkYXRlZC5uZXh0KHRoaXMuY3VycmVudEZlYXR1cmVzKTsgLy8gZm9yIGxhdGVyYWwgbWVudVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZVVwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRGZWF0dXJlc0ZvclNwYWNlKFxyXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgICAgICBrZWVwQXJjaGl2ZWQ6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICk6IFByb21pc2U8RmVhdHVyZVtdPiB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uRmVhdHVyZXNCeVNwYWNlKHNwYWNlSUQpLnRoZW4oXHJcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4gcmVzcG9uc2UuaXRlbXMsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgZmVhdHVyZXNGb3JVc2VyID1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckZlYXR1cmVzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGlmICgha2VlcEFyY2hpdmVkKSB7XHJcbiAgICAgICAgICAgIGZlYXR1cmVzRm9yVXNlciA9IGZlYXR1cmVzRm9yVXNlci5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoZmVhdHVyZSkgPT4gIXRoaXMuaXNBcmNoaXZlZChmZWF0dXJlKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzRm9yVXNlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvdmVySW1hZ2UoZmVhdHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNCb29raW5nUGxhY2UoZmVhdHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmZWF0dXJlc0ZvclVzZXI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RmVhdHVyZXNCeVNwYWNlV2l0aG91dEZpbHRlcmluZyhzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPEZlYXR1cmVbXT4ge1xyXG4gICAgICAgIGxldCBmZWF0dXJlcyA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5GZWF0dXJlc0J5U3BhY2Uoc3BhY2VJRCkudGhlbihcclxuICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcyxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZlYXR1cmVzID0gZmVhdHVyZXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZmVhdHVyZSkgPT4gIXRoaXMuaXNBcmNoaXZlZChmZWF0dXJlKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvdmVySW1hZ2UoZmVhdHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNCb29raW5nUGxhY2UoZmVhdHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmZWF0dXJlcztcclxuICAgIH1cclxuXHJcbiAgICBpc0Jvb2tpbmdQbGFjZShmZWF0dXJlOiBGZWF0dXJlKSB7XHJcbiAgICAgICAgZmVhdHVyZS5pc0Jvb2tpbmdQbGFjZSA9IGZlYXR1cmUudHlwZSA9PT0gRmVhdHVyZVR5cGUuREVTSztcclxuICAgIH1cclxuXHJcblxyXG4gICAgc2V0Q292ZXJJbWFnZShmZWF0dXJlOiBGZWF0dXJlKSB7XHJcbiAgICAgICAgY29uc3QgY292ZXJJbWFnZSA9IGZlYXR1cmUuY29tbWVudHMuaXRlbXMuZmluZChcclxuICAgICAgICAgICAgKGNvbSkgPT4gY29tLmlzQ292ZXJJbWFnZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjb3ZlckltYWdlKSB7XHJcbiAgICAgICAgICAgIGZlYXR1cmUuY292ZXJJbWFnZVVybCA9IGNvdmVySW1hZ2UuYW5uZXhlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmZWF0dXJlLmNvbW1lbnRzLml0ZW1zLnNvbWUoKGNvbSkgPT4gY29tLnR5cGUgPT09IENvbW1lbnRUeXBlLllPVVRVQkUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHlvdXR1YmVDb21tZW50ID0gZmVhdHVyZS5jb21tZW50cy5pdGVtcy5maW5kKChjb20pID0+IGNvbS50eXBlID09PSBDb21tZW50VHlwZS5ZT1VUVUJFKTtcclxuICAgICAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGUgcHJldmlldyBpbWFnZSBvZiB5b3V0dWJlXHJcbiAgICAgICAgICAgIGZlYXR1cmUuY292ZXJJbWFnZVVybCA9IGBodHRwczovL2ltZy55b3V0dWJlLmNvbS92aS8ke3lvdXR1YmVDb21tZW50LmV4dGVybmFsTGlua30vMC5qcGdgO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgZmVhdHVyZS5jb21tZW50cy5pdGVtcy5zb21lKChjb20pID0+IGNvbS50eXBlID09PSBDb21tZW50VHlwZS5JTUFHRSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgaW1hZ2VDb21tZW50ID0gZmVhdHVyZS5jb21tZW50cy5pdGVtcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGNvbSkgPT4gY29tLnR5cGUgPT09IENvbW1lbnRUeXBlLklNQUdFLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBmZWF0dXJlLmNvdmVySW1hZ2VVcmwgPSBpbWFnZUNvbW1lbnQuYW5uZXhlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlRmVhdHVyZUxvY2F0aW9uKFxyXG4gICAgICAgIGZlYXR1cmU6IEZlYXR1cmUsXHJcbiAgICAgICAgdGFnRGF0YTogTWF0dGVydGFnRGF0YSxcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPFBPST4ge1xyXG4gICAgICAgIGNvbnN0IHBvaUlucHV0ID0ge1xyXG4gICAgICAgICAgICBjb29yZGluYXRlOiB0YWdEYXRhLmdldENvb3JkaW5hdGVTdHJpbmcoKSxcclxuICAgICAgICAgICAgdHlwZTogZmVhdHVyZS5pc0Jvb2tpbmdQbGFjZSA/IFBvaVR5cGUuREVTSyA6IFBvaVR5cGUuREFUQSxcclxuICAgICAgICAgICAgZWxlbWVudElEOiBmZWF0dXJlLmlkLFxyXG4gICAgICAgICAgICBtZXRhZGF0YTogdGFnRGF0YS5nZXRNZXRhZGF0YVN0cmluZygpLFxyXG4gICAgICAgICAgICBtYXR0ZXJwb3J0U3dlZXBJRDogdGFnRGF0YS5nZXRTd2VlcElEKCksXHJcbiAgICAgICAgfSBhcyBQT0k7XHJcbiAgICAgICAgY29uc3QgcG9pID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmNyZWF0ZVBPSUZvclNwYWNlSUQocG9pSW5wdXQpO1xyXG4gICAgICAgIHJldHVybiBwb2k7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW1hZ2VzKGZlYXR1cmU6IEZlYXR1cmUpIHtcclxuICAgICAgICBjb25zdCBpbWFnZXNDb21tZW50cyA9IGZlYXR1cmUuY29tbWVudHMuaXRlbXNcclxuICAgICAgICAgICAgLmZpbHRlcigoY29tKSA9PiBjb20udHlwZSA9PT0gQ29tbWVudFR5cGUuSU1BR0UpXHJcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBpbWFnZSBvZiBpbWFnZXNDb21tZW50cykge1xyXG4gICAgICAgICAgICBpbWFnZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwYXRoOiBpbWFnZS5hbm5leGUsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogaW1hZ2UudGl0bGUsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaW1hZ2UuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgICAgICBzaG93SW5UYWc6IGltYWdlLnNob3duSW5UYWcsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmZWF0dXJlLmltYWdlcyA9IGltYWdlcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRWaWRlb3MoZmVhdHVyZTogRmVhdHVyZSkge1xyXG4gICAgICAgIGNvbnN0IHZpZGVvc0NvbW1lbnRzID0gZmVhdHVyZS5jb21tZW50cy5pdGVtc1xyXG4gICAgICAgICAgICAuZmlsdGVyKChjb20pID0+IGNvbS50eXBlID09PSBDb21tZW50VHlwZS5WSURFTyB8fCBjb20udHlwZSA9PT0gQ29tbWVudFR5cGUuWU9VVFVCRSlcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcclxuICAgICAgICBjb25zdCB2aWRlb3MgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZpZGVvIG9mIHZpZGVvc0NvbW1lbnRzKSB7XHJcbiAgICAgICAgICAgIHZpZGVvcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBhdGg6IHZpZGVvLnR5cGUgPT09IENvbW1lbnRUeXBlLllPVVRVQkUgPyAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJyArIHZpZGVvLmV4dGVybmFsTGluayA6IHZpZGVvLmFubmV4ZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB2aWRlby50aXRsZSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2aWRlby5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICAgIHR5cGU6IHZpZGVvLnR5cGUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmZWF0dXJlLnZpZGVvcyA9IHZpZGVvcztcclxuICAgIH1cclxuXHJcbiAgICBzZXREb2N1bWVudHMoZmVhdHVyZTogRmVhdHVyZSkge1xyXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q29tbWVudHMgPSBmZWF0dXJlLmNvbW1lbnRzLml0ZW1zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbSkgPT4gY29tLnR5cGUgPT09IENvbW1lbnRUeXBlLkRPQ1VNRU5UKVxyXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGRvY3MgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvY3VtZW50Q29tbWVudHMpIHtcclxuICAgICAgICAgICAgZG9jcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBhdGg6IGRvY3VtZW50LmFubmV4ZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBkb2N1bWVudC50aXRsZSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkb2N1bWVudC5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZlYXR1cmUuZG9jdW1lbnRzID0gZG9jcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRBdWRpbyhmZWF0dXJlOiBGZWF0dXJlKSB7XHJcbiAgICAgICAgY29uc3QgYXVkaW9Db21tZW50cyA9IGZlYXR1cmUuY29tbWVudHMuaXRlbXNcclxuICAgICAgICAgICAgLmZpbHRlcigoY29tKSA9PiBjb20udHlwZSA9PT0gQ29tbWVudFR5cGUuQVVESU8pXHJcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XHJcbiAgICAgICAgY29uc3QgYXVkaW9zID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBhdWRpbyBvZiBhdWRpb0NvbW1lbnRzKSB7XHJcbiAgICAgICAgICAgIGF1ZGlvcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBhdGg6IGF1ZGlvLmFubmV4ZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBhdWRpby50aXRsZSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhdWRpby5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZlYXR1cmUuYXVkaW9zID0gYXVkaW9zO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEV4dGVybmFsTGlua3MoZmVhdHVyZTogRmVhdHVyZSkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzQ29tbWVudHMgPSBmZWF0dXJlLmNvbW1lbnRzLml0ZW1zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbSkgPT4gY29tLnR5cGUgPT09IENvbW1lbnRUeXBlLlVSTClcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcclxuICAgICAgICBjb25zdCBleHRlcm5hbExpbmtzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzQ29tbWVudHMpIHtcclxuICAgICAgICAgICAgZXh0ZXJuYWxMaW5rcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBhdGg6IGxpbmsuZXh0ZXJuYWxMaW5rLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IGxpbmsudGl0bGUsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogbGluay5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICAgIHNob3dJblRhZzogbGluay5zaG93bkluVGFnLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmVhdHVyZS5leHRlcm5hbExpbmtzID0gZXh0ZXJuYWxMaW5rcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRFbWJlZHMoZmVhdHVyZTogRmVhdHVyZSkge1xyXG4gICAgICAgIGNvbnN0IGVtYmVkQ29tbWVudHMgPSBmZWF0dXJlLmNvbW1lbnRzLml0ZW1zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbSkgPT4gY29tLnR5cGUgPT09IENvbW1lbnRUeXBlLkVNQkVEKVxyXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGVtYmVkcyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgZW1iZWQgb2YgZW1iZWRDb21tZW50cykge1xyXG4gICAgICAgICAgICBlbWJlZHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwYXRoOiBlbWJlZC5leHRlcm5hbExpbmssXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogZW1iZWQudGl0bGUsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZW1iZWQuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgICAgICBzaG93SW5UYWc6IGVtYmVkLnNob3duSW5UYWcsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmZWF0dXJlLmVtYmVkcyA9IGVtYmVkcztcclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgZ2V0Rmlyc3RGZWF0dXJlRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxGZWF0dXJlPiB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBhd2FpdCB0aGlzLmdldEZlYXR1cmVzRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgY29uc3QgZmlyc3QgPSBmZWF0dXJlcy5maW5kKChmZWF0KSA9PiBmZWF0LmluZGV4ID09PSAxKTtcclxuICAgICAgICByZXR1cm4gZmlyc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlSWNvbkZvckFsbEZlYXR1cmVzSW5TcGFjZShcclxuICAgICAgICB0YWdJY29uOiBzdHJpbmcsXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgICAgIGNhdGVnb3J5SUQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICApOiBQcm9taXNlPHsgZmVhdHVyZXM6IEZlYXR1cmVbXTsgcG9pczogUE9JW107IH0+IHtcclxuICAgICAgICBsZXQgZmVhdHVyZXMgPSBhd2FpdCB0aGlzLmdldEZlYXR1cmVzRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgaWYgKGNhdGVnb3J5SUQpIHtcclxuICAgICAgICAgICAgZmVhdHVyZXMgPSBmZWF0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoZmVhdHVyZSkgPT4gZmVhdHVyZS5kb21haW5JRCA9PT0gY2F0ZWdvcnlJRCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcG9pcyA9IGF3YWl0IHRoaXMudXBkYXRlSWNvbkZvckFsbE9iamVjdHMoZmVhdHVyZXMsIHRhZ0ljb24pO1xyXG4gICAgICAgIHJldHVybiB7IGZlYXR1cmVzLCBwb2lzIH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Q3JlYXRlZEluZGljZXNGb3JGZWF0dXJlc0luU3BhY2UoXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxudW1iZXJbXT4ge1xyXG4gICAgICAgIGxldCBmZWF0dXJlcyA9IChhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uRmVhdHVyZXNCeVNwYWNlKHNwYWNlSUQpKS5pdGVtcztcclxuICAgICAgICBmZWF0dXJlcyA9IGZlYXR1cmVzLmZpbHRlcigoZmVhdCkgPT4gZmVhdC5pbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzLm1hcCgoZmVhdCkgPT4gZmVhdC5pbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGVza3NGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPEZlYXR1cmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gYXdhaXQgdGhpcy5nZXRGZWF0dXJlc0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIHJldHVybiBmZWF0dXJlcy5maWx0ZXIoKGZlYXQpID0+IGZlYXQuaXNCb29raW5nUGxhY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBhcmNoaXZlZCB0aGlzIGZlYXR1cmUgKi9cclxuICAgIGlzQXJjaGl2ZWQoZmVhdHVyZTogRmVhdHVyZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmZWF0dXJlLmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgICAgICAgID8gZmVhdHVyZS5hcmNoaXZlZEZvck1pc3Npb25JRC5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oZmVhdHVyZS5zcGFjZUlEKS5pZCxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEFyY2hpdmVkKGZlYXR1cmU6IEZlYXR1cmUsIGFyY2hpdmVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgbGV0IGFyY2hpdmVkTGlzdCA9IGZlYXR1cmUuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgICAgICAgPyBmZWF0dXJlLmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbklEID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihmZWF0dXJlLnNwYWNlSUQpLmlkO1xyXG5cclxuICAgICAgICBhcmNoaXZlZExpc3QgPSBhcmNoaXZlZExpc3QuZmlsdGVyKChtKSA9PiBtICE9PSBtaXNzaW9uSUQpO1xyXG5cclxuICAgICAgICBpZiAoYXJjaGl2ZWQpIHtcclxuICAgICAgICAgICAgYXJjaGl2ZWRMaXN0LnB1c2gobWlzc2lvbklEKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUZlYXR1cmUoe1xyXG4gICAgICAgICAgICBpZDogZmVhdHVyZS5pZCxcclxuICAgICAgICAgICAgYXJjaGl2ZWRGb3JNaXNzaW9uSUQ6IGFyY2hpdmVkTGlzdCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgdXBkYXRlRHVlVG9DcmVhdGUoZmVhdHVyZTogRmVhdHVyZSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZlYXR1cmVzLnNwYWNlLnVuc2hpZnQoZmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RmVhdHVyZXMuem9uZS51bnNoaWZ0KGZlYXR1cmUpO1xyXG4gICAgICAgIHRoaXMuZmVhdHVyZVVwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRGZWF0dXJlcy5zcGFjZSxcclxuICAgICAgICAgICAgem9uZTogdGhpcy5jdXJyZW50RmVhdHVyZXMuem9uZSxcclxuICAgICAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZUR1ZVRvRGVsZXRlKGRlbGV0ZWRGZWF0dXJlOiBGZWF0dXJlKSB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuY3VycmVudEZlYXR1cmVzLnNwYWNlLmZpbmQoXHJcbiAgICAgICAgICAgIChfZmVhdHVyZSkgPT4gX2ZlYXR1cmUuaWQgPT09IGRlbGV0ZWRGZWF0dXJlLmlkLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGZlYXR1cmUpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRGZWF0dXJlcy5zcGFjZS5pbmRleE9mKGZlYXR1cmUpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGZWF0dXJlcy5zcGFjZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB6b25lRmVhdHVyZSA9IHRoaXMuY3VycmVudEZlYXR1cmVzLnpvbmUuZmluZChcclxuICAgICAgICAgICAgKF9mZWF0dXJlKSA9PiBfZmVhdHVyZS5pZCA9PT0gZGVsZXRlZEZlYXR1cmUuaWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoem9uZUZlYXR1cmUpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRGZWF0dXJlcy56b25lLmluZGV4T2Yoem9uZUZlYXR1cmUpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGZWF0dXJlcy56b25lLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmVhdHVyZVVwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRGZWF0dXJlcy5zcGFjZSxcclxuICAgICAgICAgICAgem9uZTogdGhpcy5jdXJyZW50RmVhdHVyZXMuem9uZSxcclxuICAgICAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|