@smarterplan/ngx-smarterplan-core 0.4.21 → 0.4.24
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/config.mjs +1 -1
- package/esm2020/lib/services/matterport.service.mjs +10 -3
- package/esm2020/lib/services/models/feature.service.mjs +2 -2
- package/esm2020/lib/services/viewer.service.mjs +9 -1
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +21 -3
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +18 -3
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/config.d.ts +1 -0
- package/lib/services/matterport.service.d.ts +1 -0
- package/lib/services/viewer.service.d.ts +1 -0
- package/package.json +1 -1
package/esm2020/lib/config.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export class Config {
|
|
2
2
|
constructor() { }
|
|
3
3
|
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxPQUFPLE1BQU07SUFtQmYsZ0JBQWdCLENBQUM7Q0FDcEIiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IGNsYXNzIENvbmZpZyB7XHJcbiAgICBteV9jb25maWc6IHtcclxuICAgICAgICBpY29uX3RpY2tldD86IHN0cmluZztcclxuICAgICAgICBpY29uX2VxdWlwbWVudD86IHN0cmluZztcclxuICAgICAgICBpY29uX21lYXN1cmU/OiBzdHJpbmc7XHJcbiAgICAgICAgaWNvbl9kYXRhPzogc3RyaW5nO1xyXG4gICAgICAgIGljb25fcG9zaXRpb246IHN0cmluZztcclxuICAgICAgICBNQVhfQ0hBUkFDVEVSX0RFU0NSSVBUSU9OX1RBRzogbnVtYmVyO1xyXG4gICAgICAgIERFRkFVTFRfSEVJR0hUX0hUTUxfVEFHOiBudW1iZXI7XHJcbiAgICAgICAgREVGQVVMVF9PUEFDSVRZX1RBRzogbnVtYmVyO1xyXG4gICAgICAgIENPTERfTElNSVQ/OiBudW1iZXI7XHJcbiAgICAgICAgSE9UX0xJTUlUPzogbnVtYmVyO1xyXG4gICAgICAgIERFRkFVTFRfV0lEVEhfSFRNTF9UQUc6IG51bWJlcjtcclxuICAgICAgICBNQVhfSU1BR0VfSEVJR0hUX0hUTUxfVEFHOiBudW1iZXI7XHJcbiAgICAgICAgaWNvbl9yb29tX2F2YWlsYWJsZT86IHN0cmluZztcclxuICAgICAgICBpY29uX3Jvb21fdW5hdmFpbGFibGU/OiBzdHJpbmc7XHJcbiAgICAgICAgaWNvbl9yb29tX2Nob3Nlbj86IHN0cmluZztcclxuICAgIH07XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxufVxyXG4iXX0=
|
|
@@ -88,6 +88,7 @@ export class MatterportService {
|
|
|
88
88
|
this.sdk.Mattertag.registerIcon("icon-ticket", this.config.my_config.icon_ticket);
|
|
89
89
|
this.sdk.Mattertag.registerIcon("icon-equipment", this.config.my_config.icon_equipment);
|
|
90
90
|
this.sdk.Mattertag.registerIcon("icon-measure", this.config.my_config.icon_measure);
|
|
91
|
+
this.sdk.Mattertag.registerIcon("icon-data", this.config.my_config.icon_data);
|
|
91
92
|
this.sdk.Measurements.data.subscribe({
|
|
92
93
|
onAdded: function (index, item, collection) {
|
|
93
94
|
// console.log(
|
|
@@ -109,16 +110,18 @@ export class MatterportService {
|
|
|
109
110
|
// console.log('Is measurement mode currently active? ', measurementModeState.active);
|
|
110
111
|
}.bind(this));
|
|
111
112
|
break;
|
|
113
|
+
case SpModule.MUSEUM:
|
|
114
|
+
this.sdk.Mattertag.registerIcon("icon-data", this.config.my_config.icon_data);
|
|
115
|
+
break;
|
|
112
116
|
case SpModule.HOTEL:
|
|
113
|
-
// @TODO: hm...
|
|
114
117
|
this.sdk.Mattertag.registerIcon("icon_room_available", this.config.my_config.icon_room_available);
|
|
115
118
|
this.sdk.Mattertag.registerIcon("icon_room_unavailable", this.config.my_config.icon_room_unavailable);
|
|
119
|
+
this.sdk.Mattertag.registerIcon("icon_room_chosen", this.config.my_config.icon_room_chosen);
|
|
116
120
|
break;
|
|
117
121
|
default:
|
|
118
122
|
break;
|
|
119
123
|
}
|
|
120
124
|
// Load Mattertag icons
|
|
121
|
-
this.sdk.Mattertag.registerIcon("icon-data", this.config.my_config.icon_data);
|
|
122
125
|
this.sdk.Mattertag.registerIcon("icon-position", this.config.my_config.icon_position);
|
|
123
126
|
// 3D position's pointer
|
|
124
127
|
this.sdk.Pointer.intersection.subscribe(function (intersection) {
|
|
@@ -327,6 +330,10 @@ export class MatterportService {
|
|
|
327
330
|
this.pointerButton.style.display = "block";
|
|
328
331
|
}
|
|
329
332
|
}
|
|
333
|
+
async addNewIconAndSetForTag(mattertagID, iconPath) {
|
|
334
|
+
await this.sdk.Mattertag.registerIcon(`icon_${mattertagID}`, iconPath);
|
|
335
|
+
this.sdk.Mattertag.editIcon(mattertagID, `icon_${mattertagID}`);
|
|
336
|
+
}
|
|
330
337
|
async editTagStyle(mattertagID, mattertagData) {
|
|
331
338
|
if (this.SPModule === SpModule.HOTEL) {
|
|
332
339
|
const room = mattertagData.getObject();
|
|
@@ -887,4 +894,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
887
894
|
type: Inject,
|
|
888
895
|
args: ['config']
|
|
889
896
|
}] }, { type: i1.Router }, { type: i2.BaseVisibilityService }]; } });
|
|
890
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQWdCLFdBQVcsRUFBTyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQVNwSCxNQUFNLE9BQU8saUJBQWlCO0lBOEYxQixZQUNzQixNQUFjLEVBQ3hCLE1BQWMsRUFDZCxpQkFBd0M7UUFEeEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBdUI7UUFsRnBELGVBQWU7UUFDUCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUVoQyxTQUFTO1FBQ0QsbUJBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVwQixvQkFBZSxHQUFXLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztRQUVyRCxlQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUUvQixvQkFBZSxHQUFzRSxJQUFJLEdBQUcsQ0FBQztRQUU3RixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQix5QkFBb0IsR0FBYSxFQUFFLENBQUM7UUFFcEMsZUFBVSxHQUFHO1lBQ2pCLEtBQUssRUFBRSxHQUFHO1lBQ1YsTUFBTSxFQUFFLEdBQUc7U0FDZCxDQUFDO1FBRU0sZUFB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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cywgcG9pVHlwZVRvU3RyaW5nLCB3YWl0IH0gZnJvbSAnLi4vaGVscGVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVydGFnRGF0YSB9IGZyb20gJy4uL21hdHRlcnRhZ0RhdGEnO1xyXG5pbXBvcnQgeyBEYk9iamVjdFR5cGUsIEZlYXR1cmVUeXBlLCBQT0ksIFBvaVR5cGUsIFNwTW9kdWxlLCBUYWdBY3Rpb24sIFZpZXdlckludGVyYWN0aW9ucyB9IGZyb20gJy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlVGFnU2VydmljZSB9IGZyb20gJy4vdGFnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuL2Jhc2VWaXNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydFNlcnZpY2Uge1xyXG4gICAgcHVibGljIHNkazogYW55O1xyXG5cclxuICAgIHByaXZhdGUgY29udGFpbmVyOiBhbnk7XHJcblxyXG4gICAgLy8gUG9zaXRpb24gY2FtZXJhXHJcbiAgICBwcml2YXRlIHBvc2VNYXR0ZXJwb3J0OiBhbnk7XHJcblxyXG4gICAgcHVibGljIHBvc2VDYW1lcmE6IHsgcm90YXRpb246IGFueTsgcG9zaXRpb246IGFueTsgc3dlZXA6IGFueTsgfTtcclxuXHJcbiAgICAvLyBQb2ludGVyIHRyaWNrXHJcbiAgICBwcml2YXRlIHBvaW50ZXJCdXR0b246IGFueTtcclxuXHJcbiAgICBwcml2YXRlIG9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb246IGFueTtcclxuXHJcbiAgICAvLyBNZWFzdXJlIG1vZGVcclxuICAgIHByaXZhdGUgaXNNZWFzdXJlTW9kZU9uID0gZmFsc2U7XHJcblxyXG4gICAgLy8gVGltZXJzXHJcbiAgICBwcml2YXRlIGxhc3RBY3Rpb25UaW1lID0gLTE7XHJcblxyXG4gICAgcHJpdmF0ZSBpbnRlcmFjdGlvbk1vZGU6IG51bWJlciA9IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUO1xyXG5cclxuICAgIHByaXZhdGUgbWF0dGVydGFnczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgZGljdGlvbm5hcnlUYWdzOiBNYXA8c3RyaW5nLCB7IG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGE7IGVsZW1lbnRJRDogc3RyaW5nOyB9PiA9IG5ldyBNYXA7XHJcblxyXG4gICAgcHJpdmF0ZSBsYXN0TWVhc3VyZSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgZGlzdGFuY2VzTGFzdE1lYXN1cmU6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSByZXNvbHV0aW9uID0ge1xyXG4gICAgICAgIHdpZHRoOiA1MDAsXHJcbiAgICAgICAgaGVpZ2h0OiA2MDAsXHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgdmlzaWJpbGl0eSA9IHtcclxuICAgICAgICBtYXR0ZXJ0YWdzOiBmYWxzZSxcclxuICAgICAgICBzd2VlcHM6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgbGFzdFNjcmVlbnNob3RVcmk6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgc3dlZXBzOiBBcnJheTxzdHJpbmc+IHwgbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudFN3ZWVwOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAgIC8vY2FtZXJhIHBvc2l0aW9uIHdpdGggcm90YXRpb25cclxuICAgIHB1YmxpYyBjdXJyZW50Q2FtZXJhUG9zZTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBwcml2YXRlIGZsb29ycz86IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBzZXF1ZW5jZTogbnVtYmVyOyB9PiB8IG51bGw7XHJcblxyXG4gICAgcHJpdmF0ZSBfY3VycmVudFNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRTcGFjZUlEKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTcGFjZUlEO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgY3VycmVudFNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTcGFjZUlEID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGltZXJQb2ludGVyOiBhbnk7XHJcblxyXG4gICAgZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyB0YWdBY3Rpb246IFN1YmplY3Q8eyBhY3Rpb246IHN0cmluZzsgZGF0YTogc3RyaW5nOyB9PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgcHVibGljIG1hdHRlcnRhZ1RvRm9sbG93OiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICAgIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlO1xyXG5cclxuICAgIGNvbmZpZzogQ29uZmlnO1xyXG5cclxuICAgIHB1YmxpYyBpblRyYW5zaXRpb25Nb2RlID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcblxyXG4gICAgdGFnTWVzc2VuZ2VyT24gPSBmYWxzZTtcclxuXHJcbiAgICBTUE1vZHVsZTogU3BNb2R1bGU7XHJcblxyXG4gICAgcG9pbnRlckxlZnRDbGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hZGRNYXR0ZXJ0YWcoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uSW5UYWdEYXRhKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHBvaW50ZXJSaWdodENsaWNrSGFuZGxlciA9IChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJjYW5jZWwgb24gcmlnaHQgY2xpY2tcIik7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uX2NhbmNlbGVkKCk7XHJcbiAgICAgICAgYWxlcnQoXCJhY3Rpb24gY2FuY2VsbGVkXCIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCdjb25maWcnKSBjb25maWc6IENvbmZpZyxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgdmlzaWJpbGl0eVNlcnZpY2U6IEJhc2VWaXNpYmlsaXR5U2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIFV0aWxzIGFzeW5jXHJcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICBhc3luYyBpbml0U2RrKHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlLCBtb2R1bGU6IFNwTW9kdWxlID0gU3BNb2R1bGUuSU1NTyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNkaykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlID0gdGFnU2VydmljZTtcclxuICAgICAgICB0aGlzLlNQTW9kdWxlID0gbW9kdWxlO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIFJldHJpZXZlIERPTSBlbGVtZW50c1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgXCIjdmlld2VyLXBvaW50ZXItdHJpY2tcIixcclxuICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgXCIjdmlld2VyLW1vZHVsZVwiLFxyXG4gICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgXCIjdmlld2VyLW1vZHVsZVwiLFxyXG4gICAgICAgICAgICApIGFzIEhUTUxJRnJhbWVFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoIWlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgbGlzdGVuZXJzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvaW50ZXJCdXR0b24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICAgICAgIFwiY2xpY2tcIixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIC8vIGNhbmNlbCBvbiByaWdodCBjbGlja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb250ZXh0bWVudVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gTG9hZCBTREtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJMb2FkaW5nIE1hdHRlcnBvcnQgU0RLXCIpO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHdpbmRvdy5NUF9TREsuY29ubmVjdChcclxuICAgICAgICAgICAgICAgIGlmcmFtZSxcclxuICAgICAgICAgICAgICAgIFwicW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZFwiLFxyXG4gICAgICAgICAgICAgICAgXCIzLjExXCIsXHJcbiAgICAgICAgICAgICkudGhlbihhc3luYyAoc2RrOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEluc3RhbmNpYXRlIHNka1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsgPSBzZGs7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3BNb2R1bGUuSU1NTzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbi10aWNrZXRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3RpY2tldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbi1lcXVpcG1lbnRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX2VxdWlwbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbi1tZWFzdXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9tZWFzdXJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkZWQ6IGZ1bmN0aW9uIChpbmRleDogYW55LCBpdGVtOiB7IHBvaW50czogYW55OyB9LCBjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgXCJpdGVtIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5tZWFzdXJlbWVudHNbaW5kZXhdID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RNZWFzdXJlID0gaXRlbS5wb2ludHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiAoY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoZSBlbnRpcmUgdXAtdG8tZGF0ZSBjb2xsZWN0aW9uJywgY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREaXN0YW5jZUZvckxhc3RNZWFzdXJlbWVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLm1vZGUuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG1lYXN1cmVtZW50TW9kZVN0YXRlOiB7IGFjdGl2ZTogYW55OyB9KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVhc3VyZW1lbnQgbW9kZSBzdGF0ZSBoYXMgY2hhbmdlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNZWFzdXJlTW9kZU9uID0gbWVhc3VyZW1lbnRNb2RlU3RhdGUuYWN0aXZlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdJcyBtZWFzdXJlbWVudCBtb2RlIGN1cnJlbnRseSBhY3RpdmU/ICcsIG1lYXN1cmVtZW50TW9kZVN0YXRlLmFjdGl2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3BNb2R1bGUuSE9URUw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEBUT0RPOiBobS4uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpY29uX3Jvb21fYXZhaWxhYmxlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX2F2YWlsYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbl9yb29tX3VuYXZhaWxhYmxlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX3VuYXZhaWxhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIExvYWQgTWF0dGVydGFnIGljb25zXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICBcImljb24tZGF0YVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGEsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICBcImljb24tcG9zaXRpb25cIixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9wb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAvLyAzRCBwb3NpdGlvbidzIHBvaW50ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLlBvaW50ZXIuaW50ZXJzZWN0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoaW50ZXJzZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydCA9IGludGVyc2VjdGlvbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVyYWN0aW9uTW9kZSAhPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9sbG93IHRoZSBwb2ludGVyIGFuZCBjaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCB0YWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh3ZSBhcmUgYWJvdXQgdG8gdmFsaWRhdGUsIGJ1dCBpdCBleGlzdHMgaW4gc2RrIGFscmVhZHkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZV9mb2xsb3dpbmdfdGFnKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDYW1lcmEncyB2aWV3cG9pbnRcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLkNhbWVyYS5wb3NlLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdWJzY3IocG9zZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zZUNhbWVyYSA9IHBvc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbWVyYVBvc2UubmV4dChwb3NlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgcG9zaXRpb24gaXMgJywgcG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdSb3RhdGlvbiBhbmdsZSBpcyAnLCBwb3NlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTd2VlcCBVVUlEIGlzXCIsIHBvc2Uuc3dlZXApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIHN3ZWVwc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHN1YnNjcihjb2xsZWN0aW9uOiB7fSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBzdWJzY3JpYmUgdG8gY3VycmVudCBzd2VlcFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuY3VycmVudC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3Vic2NyKGN1cnJlbnRTd2VlcDogeyBzaWQ6IHN0cmluZzsgfSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdG8gdGhlIGN1cnJlbnQgc3dlZXAgaGFzIG9jY3VycmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN3ZWVwLnNpZCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ05vdCBjdXJyZW50bHkgc3RhdGlvbmVkIGF0IGEgc3dlZXAgcG9zaXRpb24nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZW1taXRpbmcgc3dlZXBcIiwgY3VycmVudFN3ZWVwLnNpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTd2VlcC5uZXh0KGN1cnJlbnRTd2VlcC5zaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gRmxvb3IgZGF0YVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuRmxvb3IuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZCh0aGlzOiBhbnksIGNvbGxlY3Rpb246IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZsb29ycyA9IE9iamVjdC52YWx1ZXMoY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gb24gdGFnIGNsaWNrIG9wZW4gZGV0YWlscyBwYWdlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5vbihcInRhZy5jbGlja1wiLCAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBnZXQgb2JqZWN0IG9mIHRoaXMgdGFnXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChzaWQpPy5tYXR0ZXJ0YWdEYXRhITtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGFnU2VydmljZS5nZXRVcmxGb3JTZWVEZXRhaWxzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBzaG93IGRldGFpbHMgZm9yIHRhZ1wiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBQb2ludGVyIHRyaWNrXHJcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBkaXYgdGhhdCB3aWxsIGFwcGVhciB3aGVuIHRoZSBjdXJzb3IgaXMgc3RpbGxcclxuICAgICAgICAgICAgICAgIC8vIEl0IHdpbGwgaW50ZXJjZXB0IHRoZSBjbGljayBvZiB0aGUgbW91c2UgYmVmb3JlIGl0IHRyaWdlcnJpbmcgdGhlIE1hdHRlcnBvcnQncyB0b3VyIG5hdmlnYXRpb25cclxuICAgICAgICAgICAgICAgIHRoaXMudGltZXJQb2ludGVyID0gc2V0SW50ZXJ2YWwoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb2ludGVyVHJpY2suYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICA1MCxcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICAgKiBUcmFuc2l0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLm9uKFwidmlld21vZGUuY2hhbmdlc3RhcnRcIiwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1N0YXJ0aW5nIHRvIG1vdmUgdG8gJyArIHRvICsgJyBmcm9tICcgKyBmcm9tKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5vbihcInZpZXdtb2RlLmNoYW5nZWVuZFwiLCBmdW5jdGlvbiAob2xkTW9kZSwgbmV3TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbmRlZCB0byBtb3ZlIHRvICcgKyBuZXdNb2RlICsgJyBmcm9tICcgKyBvbGRNb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3TW9kZSAhPT0gXCJtb2RlLnRyYW5zaXRpb25pbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLm9uKHNkay5Td2VlcC5FdmVudC5FTlRFUixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAob2xkU3dlZXAsIG5ld1N3ZWVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdMZWF2aW5nIHN3ZWVwICcgKyBvbGRTd2VlcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbnRlcmluZyBzd2VlcCAnICsgbmV3U3dlZXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsub24oc2RrLlN3ZWVwLkV2ZW50LkVYSVQsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGZyb21Td2VlcCwgdG9Td2VlcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdMZWF2aW5nIHN3ZWVwICcgKyBmcm9tU3dlZXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdUcmFuc2l0aW9uaW5nIHRvIHN3ZWVwICcgKyB0b1N3ZWVwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgTWF0dGVydGFnIHRvIHRoZSBkaWN0aW9ubmFyeSBvZiB0aGUgY3VycmVudCB0YWdzXHJcbiAgICAgKiBAcGFyYW0gbWF0dGVydGFnSURcclxuICAgICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhXHJcbiAgICAgKiBAcGFyYW0gdGFnVHlwZVxyXG4gICAgICogQHBhcmFtIHRpY2tldElEXHJcbiAgICAgKi9cclxuICAgIGFkZE1hdHRlcnRhZ1RvT2JqZWN0KG1hdHRlcnRhZ0lEOiBzdHJpbmcsIG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5zZGspIHtcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdzLnB1c2gobWF0dGVydGFnSUQpO1xyXG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5zZXQobWF0dGVydGFnSUQsIHtcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50SUQ6IG1hdHRlcnRhZ0RhdGEuZWxlbWVudElELFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5lZGl0VGFnU3R5bGUobWF0dGVydGFnSUQsIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXREaXN0YW5jZUZvckxhc3RNZWFzdXJlbWVudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5sYXN0TWVhc3VyZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlclBvaW50cyA9IHRoaXMubGFzdE1lYXN1cmUubGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBudW1iZXJQb2ludHM7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXggLSAxXSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RNZWFzdXJlW2luZGV4XSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlLnB1c2goZGlzdGFuY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudGFrZVNjcmVlblNob3QoKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub01lbnUoYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX21lYXN1cmVtZW50YCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXQgdGhlIE1hdHRlcnRhZyB0aGF0IHdpbGwgZm9sbG93IHRoZSBjdXJzb3JcclxuICAgICAqIEBwYXJhbSB0YWdUeXBlXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFkZF9jdXJzb3JfbWF0dGVydGFnKFxyXG4gICAgICAgIHRhZ1R5cGU6IFBvaVR5cGUsXHJcbiAgICAgICAgZWxlbWVudD86IGFueSxcclxuICAgICAgICBwb3NpdGlvbmluZzogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvc2VNYXR0ZXJwb3J0KSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IG5ldyBNYXR0ZXJ0YWdEYXRhKHRhZ1R5cGUpO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbmluZykge1xyXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBleGlzdGluZyB0YWdcclxuICAgICAgICAgICAgY29uc3QgW3BvaV0gPSBlbGVtZW50LnBvaXMuaXRlbXM7XHJcbiAgICAgICAgICAgIGlmIChwb2kgJiYgcG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9zaXRpb24oSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb2kocG9pKTsgLy8gdG8ga2VlcCBjdXN0b20gdGFnSW9uIGFuZCBvcGFjaXR5XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRTd2VlcElEKHRoaXMucG9zZUNhbWVyYS5zd2VlcCk7XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRSb3RhdGlvbih0aGlzLnBvc2VDYW1lcmEucm90YXRpb24pO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KGVsZW1lbnQsIHRhZ1R5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ID0gYXdhaXQgdGhpcy5hZGRfbWF0dGVydGFnX3RvX3ZpZXdlcihcclxuICAgICAgICAgICAgbWF0dGVydGFnRGF0YSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbmluZykge1xyXG4gICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdEljb24oXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LFxyXG4gICAgICAgICAgICAgICAgXCJpY29uLXBvc2l0aW9uXCIsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0T3BhY2l0eSh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgTWF0dGVydGFnIGZyb20gaXRzIGRhdGFcclxuICAgICAqIEBwYXJhbSB0YWdJRFxyXG4gICAgICogQHBhcmFtIHRhZ1R5cGVcclxuICAgICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFkZF9tYXR0ZXJ0YWdfdG9fdmlld2VyKFxyXG4gICAgICAgIG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEsXHJcbiAgICApOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuICAgICAgICBsZXQgc2lkTGlzdDtcclxuICAgICAgICBpZiAoIXRoaXMuc2RrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzaWRMaXN0ID0gYXdhaXQgdGhpcy5zZGsuTWF0dGVydGFnLmFkZChtYXR0ZXJ0YWdEYXRhLmdldERhdGEoKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICBcIlRhZyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHZpc2l0XCIsXHJcbiAgICAgICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuZ2V0RGF0YSgpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2lkTGlzdCkge1xyXG4gICAgICAgICAgICBjb25zdCBtYXR0ZXJ0YWdJRCA9IHNpZExpc3RbMF07XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkZWQgdGFnXCIsIG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpLCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkTWF0dGVydGFnVG9PYmplY3QobWF0dGVydGFnSUQsIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0dGVydGFnSUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBVdGlscyAtIE1hdHRlcnRhZ1xyXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgYWRkTWF0dGVydGFnKCkge1xyXG4gICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUKTtcclxuICAgICAgICB0aGlzLmFjdGlvbl9vcGVuX21lbnUodGhpcy5nZXRNZW51VG9PcGVuRm9yTGFzdFRhZygpKTtcclxuICAgICAgICB0aGlzLnJlc2V0QWN0aW9uVGltZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVBvaW50ZXJUcmljaygpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25Nb2RlICE9PSBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCAmJlxyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ICYmXHJcbiAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXREaXN0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICApID4gMjVcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgICAgICAgICAgICB3OiB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgIGg6IHRoaXMuY29udGFpbmVyLmNsaWVudEhlaWdodCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gdGhpcy5zZGsuQ29udmVyc2lvbi53b3JsZFRvU2NyZWVuKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7Y29vcmRzLnggKiBNYXRoLnNpZ24oY29vcmRzLngpIC0gMjVcclxuICAgICAgICAgICAgICAgIH1weGA7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS50b3AgPSBgJHtjb29yZHMueSAqIE1hdGguc2lnbihjb29yZHMueCkgLSAyNVxyXG4gICAgICAgICAgICAgICAgfXB4YDtcclxuICAgICAgICAgICAgdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZWRpdFRhZ1N0eWxlKG1hdHRlcnRhZ0lEOiBzdHJpbmcsIG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5TUE1vZHVsZSA9PT0gU3BNb2R1bGUuSE9URUwpIHtcclxuICAgICAgICAgICAgY29uc3Qgcm9vbSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgICAgICAgIGxldCBpY29uTmFtZSA9IGBpY29uX3Jvb21gO1xyXG4gICAgICAgICAgICBpZiAocm9vbS5hdmFpbGFibGUpIHtcclxuICAgICAgICAgICAgICAgIGljb25OYW1lID0gYCR7aWNvbk5hbWV9X2F2YWlsYWJsZWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpY29uTmFtZSA9IGAke2ljb25OYW1lfV91bmF2YWlsYWJsZWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBpY29uTmFtZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RyaW5nVGFnVHlwZSA9IHBvaVR5cGVUb1N0cmluZyhtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSk7XHJcbiAgICAgICAgbGV0IG9wYWNpdHkgPSB0aGlzLmNvbmZpZy5teV9jb25maWcuREVGQVVMVF9PUEFDSVRZX1RBRztcclxuICAgICAgICBsZXQgaWNvbk5hbWUgPSBgaWNvbi0ke3N0cmluZ1RhZ1R5cGV9YDtcclxuICAgICAgICBjb25zdCBwb2kgPSBtYXR0ZXJ0YWdEYXRhLmdldFBvaSgpO1xyXG4gICAgICAgIGlmIChwb2kgJiYgcG9pLnRhZ0ljb24pIHtcclxuICAgICAgICAgICAgY29uc3QgdGFnSWNvbiA9IEpTT04ucGFyc2UocG9pLnRhZ0ljb24pO1xyXG4gICAgICAgICAgICAvLyBUT0RPIGZvciBpbmRpY2F0b3JzXHJcbiAgICAgICAgICAgIGlmIChtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSA9PT0gUG9pVHlwZS5EQVRBKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKTtcclxuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLnR5cGUgPT09IEZlYXR1cmVUeXBlLklORElDQVRPUl9URU1QKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFnSWNvbi5zcmMgPSB0aGlzLnRhZ1NlcnZpY2UuZ2V0SWNvblRhZ0ltYWdlRm9yRmVhdHVyZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pLnRhZ0ljb24gPSB0YWdJY29uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0YWdJY29uLnNyYykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aFNpZ25lZCA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRTaWduZWRUYWdJY29uU291cmNlKHRhZ0ljb24uc3JjKTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXRoU2lnbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbk5hbWUgPSBgaWNvbi0ke3N0cmluZ1RhZ1R5cGV9LSR7bWF0dGVydGFnSUR9LSR7bWF0dGVydGFnRGF0YS5jdXN0b21JY29uSW5kZXh9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFNpZ25lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5jdXN0b21JY29uSW5kZXggKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJlcnJvciByZWdpc3Rlckljb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0YWdJY29uLm9wYWNpdHkpIHtcclxuICAgICAgICAgICAgICAgIG9wYWNpdHkgPSB0YWdJY29uLm9wYWNpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBpY29uTmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0T3BhY2l0eShtYXR0ZXJ0YWdJRCwgb3BhY2l0eSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFcnJvciBlZGl0SWNvbiBvciBvcGFjaXR5XCIsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGVuYWJsZV9mb2xsb3dpbmdfdGFnKG1hdHRlcnRhZzogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWcsIHtcclxuICAgICAgICAgICAgYW5jaG9yUG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgIHg6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueCAqIDEsXHJcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnkgKiAxLFxyXG4gICAgICAgICAgICAgICAgejogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi56ICogMSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3RlbVZlY3Rvcjoge1xyXG4gICAgICAgICAgICAgICAgeDogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueCAqIDAuMyxcclxuICAgICAgICAgICAgICAgIHk6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnkgKiAwLjMsXHJcbiAgICAgICAgICAgICAgICB6OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC56ICogMC4zLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0QWN0aW9uVGltZSgpIHtcclxuICAgICAgICB0aGlzLmxhc3RBY3Rpb25UaW1lID0gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgZ29Ub0xhc3RUYWcoKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgICAgICAgICAgdGhpcy5nb1RvVGFnKGxhc3RUYWcpO1xyXG4gICAgICAgIH0sIDIwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdvVG9UYWcobWF0dGVydGFnSUQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChtYXR0ZXJ0YWdJRCA9PT0gXCJcIikgcmV0dXJuO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5uYXZpZ2F0ZVRvVGFnKFxyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuVHJhbnNpdGlvbi5GTFksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJjYW5ub3QgbmF2aWdhdGUgdG8gdGFnXCIsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ29Ub01lbnUobWVudVVybDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW21lbnVVcmxdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgZGlzdGFuY2UgYmV0d3dlZW4gdHdvIDNEIHBvc2l0aW9uc1xyXG4gICAgICogVXNlZCBpbiBvcmRlciB0byBzZWUgaG93IG11Y2ggdGhlIGN1cnNvciBoYXMgbW92ZWQgZnJvbSB0aGUgcHJldmlvdXMgcG9zaXRpb25cclxuICAgICAqIEBwYXJhbSBwb3MxXHJcbiAgICAgKiBAcGFyYW0gcG9zMlxyXG4gICAgICovXHJcbiAgICBnZXREaXN0UG9zaXRpb24ocG9zMTogYW55LCBwb3MyOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBzaXplID0ge1xyXG4gICAgICAgICAgICB3OiB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgaDogdGhpcy5jb250YWluZXIuY2xpZW50SGVpZ2h0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgY29vcmRzMSA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgICAgICAgcG9zMSxcclxuICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgY29vcmRzMiA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgICAgICAgcG9zMixcclxuICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChcclxuICAgICAgICAgICAgKGNvb3JkczEueCAtIGNvb3JkczIueCkgKiogMiArIChjb29yZHMxLnkgLSBjb29yZHMyLnkpICoqIDIsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQb3NpdGlvbkluVGFnRGF0YSgpIHtcclxuICAgICAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpIS5tYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpIS5tYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbChcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHRlclRhZ0Zyb21JZChsYXN0VGFnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlTWF0dGVyVGFnRnJvbUlkKFxyXG4gICAgICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICAgICAgb2JqZWN0OiBhbnkgPSBudWxsLFxyXG4gICAgICAgIHRhZ1R5cGU6IFBvaVR5cGUgfCBudWxsID0gbnVsbCxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0QmlsbGJvYXJkKFxyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKSEubWF0dGVydGFnRGF0YS5nZXREYXRhKCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAob2JqZWN0ICYmIHRhZ1R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbmplY3RIdG1sSW5UYWcodGFnVHlwZSwgb2JqZWN0LCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZWRpdFRhZ1N0eWxlKFxyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKSEubWF0dGVydGFnRGF0YSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZU1hdHRlcnRhZ0Zyb21JZChtYXR0ZXJ0YWdJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlbW92ZShtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZGVsZXRlKG1hdHRlcnRhZ0lEKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVMYXN0TWF0dGVydGFnKCkge1xyXG4gICAgICAgIGNvbnN0IG1hdHRlcnRhZ0lEID0gdGhpcy5tYXR0ZXJ0YWdzLnBvcCgpO1xyXG4gICAgICAgIGlmIChtYXR0ZXJ0YWdJRCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZU1hdHRlcnRhZ0Zyb21JZChtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgVXRpbHMgLSBUb29sYmFyXHJcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICBhY3Rpb25fdG9vbGJveF9mbG9vcnBsYW4oKSB7XHJcbiAgICAgICAgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oXCJtb2RlLmZsb29ycGxhblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpIHtcclxuICAgICAgICB0aGlzLnNkay5Nb2RlLm1vdmVUbyhcIm1vZGUuaW5zaWRlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl90b29sYm94X2RvbGxob3VzZSgpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJtb2RlOiBcIiwgdGhpcy5pblRyYW5zaXRpb25Nb2RlLCBcIiBzd2VlcDogXCIsIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidmlld2VyIGlzIGluIHRyYW5zaXRpb24sIGNhbm5vdCBnbyBkb2xsaG91c2VcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLk1vZGUubW92ZVRvKFwibW9kZS5kb2xsaG91c2VcIik7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Fubm90IGdvIHRvIGRvbGxob3VzZVwiLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIGFjdGlvbl90b29sYm94X21lc3VyZSgpIHtcclxuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9ICF0aGlzLmlzTWVhc3VyZU1vZGVPbjtcclxuICAgICAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMudG9nZ2xlTW9kZShuZXdTdGF0ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgYE1lYXN1cmVtZW50IG1vZGUgaXMgbm93ICR7bmV3U3RhdGUgPyBcImVuYWJsZWRcIiA6IFwiZGlzYWJsZWRcIn1gLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFjdGlvbl90b29sYm94X2NhbmNlbF9tZXN1cmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNNZWFzdXJlTW9kZU9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBBY3Rpb25zXHJcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fYWRkX21hdHRlcnRhZ19mcm9tX1BPSShcclxuICAgICAgICB0YWdUeXBlOiBQb2lUeXBlLFxyXG4gICAgICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgICAgIHBvaTogUE9JLFxyXG4gICAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICAvLyBjaGVjayBpZiB0YWcgZXhpc3RzIGFscmVhZHlcclxuICAgICAgICBjb25zdCB7IHRhZywgc3dlZXAgfSA9IHRoaXMuZ2V0VGFnRnJvbUVsZW1lbnRJZChvYmplY3QuaWQpO1xyXG4gICAgICAgIGlmICh0YWcpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJ0YWcgZXhpc3RzXCIsIG9iamVjdClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhID0gbmV3IE1hdHRlcnRhZ0RhdGEodGFnVHlwZSk7XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRPYmplY3Qob2JqZWN0LCB0YWdUeXBlKTtcclxuICAgICAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb2kubWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFnTWV0YWRhdGEgPSBKU09OLnBhcnNlKHBvaS5tZXRhZGF0YSk7XHJcbiAgICAgICAgICAgIGlmICh0YWdNZXRhZGF0YS5ub3JtYWwpIHtcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0Tm9ybWFsKHRhZ01ldGFkYXRhLm5vcm1hbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7IHg6IDAsIHk6IC0wLjE1LCB6OiAwIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb2kubWF0dGVycG9ydFN3ZWVwSUQpIHtcclxuICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRTd2VlcElEKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9pKHBvaSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRUYWcgPSBhd2FpdCB0aGlzLmFkZF9tYXR0ZXJ0YWdfdG9fdmlld2VyKG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICAgIGlmIChjcmVhdGVkVGFnICYmIHRoaXMuc2RrKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgY3JlYXRlZFRhZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluamVjdEh0bWxJblRhZyhcclxuICAgICAgICB0YWdUeXBlOiBQb2lUeXBlLFxyXG4gICAgICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgICAgIHRhZ0lEOiBzdHJpbmcsXHJcbiAgICApIHtcclxuICAgICAgICBsZXQgeyBodG1sLCBoZWlnaHQgfSA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRIdG1sVG9JbmplY3QoXHJcbiAgICAgICAgICAgIHRhZ1R5cGUsXHJcbiAgICAgICAgICAgIG9iamVjdCxcclxuICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLkRFRkFVTFRfSEVJR0hUX0hUTUxfVEFHXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaHRtbCAhPT0gXCJcIiAmJiB0aGlzLnNkaykge1xyXG4gICAgICAgICAgICBjb25zdCBzY3JpcHRUYWcgPSB0aGlzLnRhZ1NlcnZpY2UuZ2V0U2NyaXB0Rm9yVGFnKG9iamVjdCwgdGFnVHlwZSk7XHJcbiAgICAgICAgICAgIGh0bWwgKz0gYCR7c2NyaXB0VGFnfWA7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5pbmplY3RIVE1MKHRhZ0lELCBodG1sLCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdzogdGhpcy5jb25maWcubXlfY29uZmlnLkRFRkFVTFRfV0lEVEhfSFRNTF9UQUcsXHJcbiAgICAgICAgICAgICAgICAgICAgaDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC50aGVuKChtZXNzZW5nZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50YWdNZXNzZW5nZXJPbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFnTWVzc2VuZ2VyT24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlQ2xpY2sgPSAoZmVhdHVyZUlEOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJpbWFnZSBjbGljayBoYW5kbGVyXCIsIGZlYXR1cmVJRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkltYWdlQ2xpY2soZmVhdHVyZUlEKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb0NsaWNrID0gKGF1ZGlvQ29tbWVudElEOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJhdWRpbyBjbGljayBoYW5kbGVyXCIsIGF1ZGlvQ29tbWVudElEKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uQXVkaW9DbGljayhhdWRpb0NvbW1lbnRJRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWRlb0NsaWNrID0gKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkF1ZGlvQ2xpY2sodXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFnQWN0aW9uLkRFVEFJTF9DTElDSyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRGV0YWlsQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0FjdGlvbi5USUNLRVRfQ0xJQ0ssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkRldGFpbENsaWNrLmJpbmQodGhpcy50YWdTZXJ2aWNlKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYWdBY3Rpb24uQVVESU9fQ0xJQ0ssIGF1ZGlvQ2xpY2tcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFnQWN0aW9uLklNQUdFX0NMSUNLLCBpbWFnZUNsaWNrXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0FjdGlvbi5WSURFT19DTElDSywgdmlkZW9DbGlja1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYWdBY3Rpb24uRE9DX0NMSUNLLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25Eb2NDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFnQWN0aW9uLllPVVRVQkVfQ0xJQ0ssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbllvdXR1YmVDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBpbmplY3QgaHRtbCBmb3IgdGFnXCIsIHRhZ0lELCBlcnJvciksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKCkge1xyXG4gICAgICAgIC8vIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIHRoaXMubWF0dGVydGFncy5tYXAoYXN5bmMgKHRhZykgPT4ge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5NYXR0ZXJ0YWcucmVtb3ZlKHRhZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgICB0aGlzLm1hdHRlcnRhZ3MgPSBbXTtcclxuICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9kZWxldGVfZWxlbWVudChcclxuICAgICAgICBlbGVtZW50OiBEYk9iamVjdFR5cGUsXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBzaWRUYWcgPSB0aGlzLmdldFRhZ0Zyb21FbGVtZW50SWQoZWxlbWVudC5pZCEpLnRhZztcclxuICAgICAgICBpZiAoc2lkVGFnKSB7XHJcbiAgICAgICAgICAgIGxldCByZXNwO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzcCA9IGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5yZW1vdmUoc2lkVGFnKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2Fubm90IGRlbGV0ZSB0YWdcIiwgc2lkVGFnLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmRlbGV0ZShzaWRUYWcpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1hdHRlcnRhZ3MuaW5kZXhPZihzaWRUYWcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWN0aW9uX3Bvc2l0aW9uX2VsZW1lbnQoXHJcbiAgICAgICAgcG9pVHlwZTogUG9pVHlwZSxcclxuICAgICAgICBlbGVtZW50OiBEYk9iamVjdFR5cGUsXHJcbiAgICApIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmFkZF9jdXJzb3JfbWF0dGVydGFnKHBvaVR5cGUsIGVsZW1lbnQsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5QT1NJVElPTklORyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWRkRWxlbWVudEFzTWF0dGVydGFnKHBvaVR5cGU6IFBvaVR5cGUpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmFkZF9jdXJzb3JfbWF0dGVydGFnKHBvaVR5cGUpO1xyXG4gICAgICAgIHN3aXRjaCAocG9pVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuREFUQTpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5BRERJTkdfRkVBVFVSRSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkRFU0s6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HX0ZFQVRVUkUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5USUNLRVQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HX1RJQ0tFVCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5BRERJTkdfRVFVSVBNRU5UKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuTUVBU1VSRTpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5BRERJTkdfTUVBU1VSRSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLlJPT006XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HX1JPT00pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFjdGlvbl9jb21wbGV0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgRGF0ZS5ub3coKSAtIHRoaXMubGFzdEFjdGlvblRpbWUgPiAyMDAwICYmXHJcbiAgICAgICAgICAgIHRoaXMubGFzdEFjdGlvblRpbWUgIT09IC0xXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fY2FuY2VsZWQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQpO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlTGFzdE1hdHRlcnRhZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFjdGlvbl9vcGVuX21lbnUobWVudTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5kZXRhaWxTaG93aW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IHRoaXMuZ2V0TGFzdFRhZygpO1xyXG4gICAgICAgIHN3aXRjaCAobWVudSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYWRkX2VxdWlwXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9NZW51KGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9lcXVpcGApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJhZGRfdGlja2V0XCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9NZW51KGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF90aWNrZXRgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYWRkX2ZlYXR1cmVcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICAgICAgICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoXCI/XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdGhpcy5yb3V0ZXIudXJsLnN1YnN0cmluZygwLCB0aGlzLnJvdXRlci51cmwuaW5kZXhPZihcIj9cIikpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh1cmwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTWVudShgJHt1cmx9L2FkZF9mZWF0dXJlYCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImFkZF9kZXNrXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgICBbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX2ZlYXR1cmVgXSxcclxuICAgICAgICAgICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IGlzRGVzazogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwiYWRkX3Jvb21cIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfcm9vbWBdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwb3NpdGlvbmluZ190aWNrZXRcIjpcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicG9zaXRpb25pbmdfdGlja2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vZGV0YWlsLyR7dGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpLmVsZW1lbnRJRH1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0gfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwb3NpdGlvbmluZ19lcXVpcFwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vZXF1aXAvJHt0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobGFzdFRhZykuZWxlbWVudElEfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInBvc2l0aW9uaW5nX2ZlYXR1cmVcIjpcclxuICAgICAgICAgICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucm91dGVyLnVybH1gXSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogeyBwb3NpdGlvbmluZzogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwb3NpdGlvbmluZ19yb29tXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLnJvdXRlci51cmx9YF0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucm91dGVyLnVybH1gXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWN0aW9uX2dvX3RvX2Zsb29yKGZsb29yTmFtZTogc3RyaW5nLCBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZTogbnVtYmVyID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5mbG9vcnMpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGbG9vciBhcmUgbm90IGxvYWRlZCB5ZXRcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5mbG9vcnMpO1xyXG4gICAgICAgIC8vIGxvb2sgdXAgZm9yIHNlcXVlbmNlIG51bWJlciAodGhlIHNhZmVzdCBtZXRob2QpXHJcbiAgICAgICAgbGV0IGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoXHJcbiAgICAgICAgICAgIChmbG9vcikgPT4gZmxvb3Iuc2VxdWVuY2UgPT09IG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZChcclxuICAgICAgICAgICAgICAgIChmbG9vcikgPT4gZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpICYmIGZsb29yLm5hbWUgIT0gXCJcIixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZCgoZmxvb3IpID0+XHJcbiAgICAgICAgICAgICAgICBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IuaWQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vck1hdHRlcnBvcnQpXHJcbiAgICAgICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICBsZXQgcmV0cnkgPSB0cnVlO1xyXG4gICAgICAgICAgICB3aGlsZSAocmV0cnkpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvb3JJbmRleCA9IGF3YWl0IHRoaXMuc2RrLkZsb29yLm1vdmVUbyhmbG9vck1hdHRlcnBvcnQuc2VxdWVuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibW92ZWQgdG8gZmxvb3JJbmRleFwiLCBmbG9vckluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICByZXRyeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBtb3ZlIHRvIEZsb29yXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB3YWl0KDEwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBtYXR0ZXJwb3J0IGZsb29yIGZvdW5kIHRvIG1vdmUgdG9cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9nb190b19zd2VlcChcclxuICAgICAgICBzd2VlcDogc3RyaW5nLFxyXG4gICAgICAgIHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9ID0gbnVsbCxcclxuICAgICkge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcmJpZGRlblN3ZWVwcy5pbmNsdWRlcyhzd2VlcCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ1c2VyIGlzIG5vdCBhbGxvd2VkIHRvIGdvIHRvIHRoaXMgc3dlZXBcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJnb2luZyB0byBzd2VlcFwiLCBzd2VlcCwgXCJ3aXRoIHJvdGF0aW9uOlwiLCByb3RhdGlvbik7XHJcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3QgZ28gdG8gc3dlZXAsIGluIHRyYW5zaXRpb25cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAubW92ZVRvKHN3ZWVwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogXCJ0cmFuc2l0aW9uLmZseVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UaW1lOiAxNTAwLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBtb3ZlIHRvIHN3ZWVwXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLkNhbWVyYS5zZXRSb3RhdGlvbihyb3RhdGlvbiwgeyBzcGVlZDogMTAwIH0pOyAvLyBzcGVlZCBpcyBkZWdyZWVzIHBlciBzZWNvbmRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRTd2VlcCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5wb3NlQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2VDYW1lcmEuc3dlZXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRDYW1lcmFQb3NpdGlvbigpOiB7XHJcbiAgICAgICAgcm90YXRpb246IGFueTtcclxuICAgICAgICBwb3NpdGlvbjogYW55O1xyXG4gICAgICAgIHN3ZWVwOiBhbnk7XHJcbiAgICB9IHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9zZUNhbWVyYSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NlQ2FtZXJhO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgU2V0dGVyc1xyXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgc2V0SW50ZXJhY3Rpb25Nb2RlKGludGVyYWN0aW9uTW9kZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgPSBpbnRlcmFjdGlvbk1vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0T2JqZWN0QW5kUG9pSW5UYWcobWF0dGVydGFnSUQ6IHN0cmluZywgb2JqZWN0OiBEYk9iamVjdFR5cGUsIHBvaVR5cGU6IFBvaVR5cGUsIHBvaTogUE9JIHwgbnVsbCA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLm1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KG9iamVjdCwgcG9pVHlwZSk7XHJcbiAgICAgICAgaWYgKHBvaSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLm1hdHRlcnRhZ0RhdGEuc2V0UG9pKHBvaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkuZWxlbWVudElEID0gb2JqZWN0LmlkO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTWF0dGVyVGFnRnJvbUlkKG1hdHRlcnRhZ0lELCBvYmplY3QsIHBvaVR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBHZXR0ZXJzXHJcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICBnZXRJbnRlcmFjdGlvbk1vZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJhY3Rpb25Nb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJRDogc3RyaW5nKToge1xyXG4gICAgICAgIHRhZzogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICBzd2VlcDogc3RyaW5nIHwgbnVsbDtcclxuICAgIH0ge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm1hdHRlcnRhZ3MubGVuZ3RoOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldCh0aGlzLm1hdHRlcnRhZ3NbaW5kZXhdKS5lbGVtZW50SUQgPT09XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50SURcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IG1hdHRlcnRhZ0RhdGEgfSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHRoaXMubWF0dGVydGFnc1tpbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3dlZXAgPSBtYXR0ZXJ0YWdEYXRhLmdldFN3ZWVwSUQoKTtcclxuICAgICAgICAgICAgICAgIGlmICghc3dlZXApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB0YWc6IHRoaXMubWF0dGVydGFnc1tpbmRleF0sIHN3ZWVwOiBudWxsIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zd2VlcHMgJiYgdGhpcy5zd2VlcHMuaW5jbHVkZXMoc3dlZXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdGFnOiB0aGlzLm1hdHRlcnRhZ3NbaW5kZXhdLCBzd2VlcCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGFnOiBudWxsLCBzd2VlcCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRhZzogbnVsbCwgc3dlZXA6IG51bGwgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUYWdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hdHRlcnRhZ3M7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGFzdFRhZygpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICAgICAgPyBudWxsXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMubWF0dGVydGFnc1t0aGlzLm1hdHRlcnRhZ3MubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldE1lbnVUb09wZW5Gb3JMYXN0VGFnKCkge1xyXG4gICAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpLm1hdHRlcnRhZ0RhdGEuZ2V0TWVudVRvT3BlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUYWdEYXRhRnJvbUlkKG1hdHRlcnRhZ0lEOiBzdHJpbmcpOiBNYXR0ZXJ0YWdEYXRhIHwgbnVsbCB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkhLm1hdHRlcnRhZ0RhdGE7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Fubm90IHJldHJpZXZlIG1hdHRlcnRhZ0RhdGEgZm9yIHRhZ1wiLCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3REaXN0YW5jZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzdGFuY2VzTGFzdE1lYXN1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgdGFrZVNjcmVlblNob3QoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZGsuUmVuZGVyZXIudGFrZVNjcmVlblNob3QoXHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x1dGlvbixcclxuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5LFxyXG4gICAgICAgICkudGhlbihcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHNjcmVlblNob3RVcmk6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYmFzZTY0IHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2NyZWVuc2hvdFVyaSA9IHNjcmVlblNob3RVcmk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNjcmVlblNob3RVcmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFNjcmVlbnNob3RVcmk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGFzdE1lYXN1cmVtZW50KCk6IE9iamVjdCB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgbWVhc3VyZTogdGhpcy5sYXN0TWVhc3VyZSxcclxuICAgICAgICAgICAgc3dlZXA6IHRoaXMucG9zZUNhbWVyYS5zd2VlcCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNsZWFyQWxsKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVtb3Zpbmcgdmlld2VyXCIpO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpO1xyXG4gICAgICAgIHRoaXMuZmxvb3JzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN3ZWVwcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZGsgPSBudWxsO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lclBvaW50ZXIpO1xyXG4gICAgICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gW107XHJcbiAgICAgICAgdGhpcy50YWdNZXNzZW5nZXJPbiA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGNhbmNlbCBzdWJzY3JpcHRpb25zXHJcbiAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyKTtcclxuICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMucG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gWy4uLmZvcmJpZGRlblN3ZWVwc107XHJcbiAgICAgICAgbGV0IHJlbW92ZWQgPSAwO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBmb3JiaWRkZW5Td2VlcHMubWFwKGFzeW5jIChzd2VlcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5kaXNhYmxlKHN3ZWVwKTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkICs9IDE7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInJlbW92ZWQgc3dlZXBzOlwiLCByZW1vdmVkKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
897
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQWdCLFdBQVcsRUFBTyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQVNwSCxNQUFNLE9BQU8saUJBQWlCO0lBOEYxQixZQUNzQixNQUFjLEVBQ3hCLE1BQWMsRUFDZCxpQkFBd0M7UUFEeEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBdUI7UUFsRnBELGVBQWU7UUFDUCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUVoQyxTQUFTO1FBQ0QsbUJBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVwQixvQkFBZSxHQUFXLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztRQUVyRCxlQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUUvQixvQkFBZSxHQUFzRSxJQUFJLEdBQUcsQ0FBQztRQUU3RixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQix5QkFBb0IsR0FBYSxFQUFFLENBQUM7UUFFcEMsZUFBVSxHQUFHO1lBQ2pCLEtBQUssRUFBRSxHQUFHO1lBQ1YsTUFBTSxFQUFFLEdBQUc7U0FDZCxDQUFDO1FBRU0sZUFB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QyxHQUFHLENBQ2IsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEMsSUFBSTtnQkFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxJQUFJLENBQUMsQ0FBQzthQUNoQjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEI7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDOzs4R0F6cUNRLGlCQUFpQixrQkErRmQsUUFBUTtrSEEvRlgsaUJBQWlCLGNBRmQsTUFBTTsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFnR1EsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzLCBwb2lUeXBlVG9TdHJpbmcsIHdhaXQgfSBmcm9tICcuLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJ0YWdEYXRhIH0gZnJvbSAnLi4vbWF0dGVydGFnRGF0YSc7XHJcbmltcG9ydCB7IERiT2JqZWN0VHlwZSwgRmVhdHVyZVR5cGUsIFBPSSwgUG9pVHlwZSwgU3BNb2R1bGUsIFRhZ0FjdGlvbiwgVmlld2VySW50ZXJhY3Rpb25zIH0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VUYWdTZXJ2aWNlIH0gZnJvbSAnLi90YWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VWaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vYmFzZVZpc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0U2VydmljZSB7XHJcbiAgICBwdWJsaWMgc2RrOiBhbnk7XHJcblxyXG4gICAgcHJpdmF0ZSBjb250YWluZXI6IGFueTtcclxuXHJcbiAgICAvLyBQb3NpdGlvbiBjYW1lcmFcclxuICAgIHByaXZhdGUgcG9zZU1hdHRlcnBvcnQ6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgcG9zZUNhbWVyYTogeyByb3RhdGlvbjogYW55OyBwb3NpdGlvbjogYW55OyBzd2VlcDogYW55OyB9O1xyXG5cclxuICAgIC8vIFBvaW50ZXIgdHJpY2tcclxuICAgIHByaXZhdGUgcG9pbnRlckJ1dHRvbjogYW55O1xyXG5cclxuICAgIHByaXZhdGUgb2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbjogYW55O1xyXG5cclxuICAgIC8vIE1lYXN1cmUgbW9kZVxyXG4gICAgcHJpdmF0ZSBpc01lYXN1cmVNb2RlT24gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBUaW1lcnNcclxuICAgIHByaXZhdGUgbGFzdEFjdGlvblRpbWUgPSAtMTtcclxuXHJcbiAgICBwcml2YXRlIGludGVyYWN0aW9uTW9kZTogbnVtYmVyID0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQ7XHJcblxyXG4gICAgcHJpdmF0ZSBtYXR0ZXJ0YWdzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBkaWN0aW9ubmFyeVRhZ3M6IE1hcDxzdHJpbmcsIHsgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YTsgZWxlbWVudElEOiBzdHJpbmc7IH0+ID0gbmV3IE1hcDtcclxuXHJcbiAgICBwcml2YXRlIGxhc3RNZWFzdXJlID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBkaXN0YW5jZXNMYXN0TWVhc3VyZTogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIHJlc29sdXRpb24gPSB7XHJcbiAgICAgICAgd2lkdGg6IDUwMCxcclxuICAgICAgICBoZWlnaHQ6IDYwMCxcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSB2aXNpYmlsaXR5ID0ge1xyXG4gICAgICAgIG1hdHRlcnRhZ3M6IGZhbHNlLFxyXG4gICAgICAgIHN3ZWVwczogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBsYXN0U2NyZWVuc2hvdFVyaTogYW55O1xyXG5cclxuICAgIHB1YmxpYyBzd2VlcHM6IEFycmF5PHN0cmluZz4gfCBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50U3dlZXA6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgLy9jYW1lcmEgcG9zaXRpb24gd2l0aCByb3RhdGlvblxyXG4gICAgcHVibGljIGN1cnJlbnRDYW1lcmFQb3NlOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAgIHByaXZhdGUgZmxvb3JzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHNlcXVlbmNlOiBudW1iZXI7IH0+IHwgbnVsbDtcclxuXHJcbiAgICBwcml2YXRlIF9jdXJyZW50U3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFNwYWNlSUQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFNwYWNlSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBjdXJyZW50U3BhY2VJRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFNwYWNlSUQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aW1lclBvaW50ZXI6IGFueTtcclxuXHJcbiAgICBmb3JiaWRkZW5Td2VlcHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgcHVibGljIHRhZ0FjdGlvbjogU3ViamVjdDx7IGFjdGlvbjogc3RyaW5nOyBkYXRhOiBzdHJpbmc7IH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBwdWJsaWMgbWF0dGVydGFnVG9Gb2xsb3c6IHN0cmluZyB8IG51bGw7XHJcblxyXG4gICAgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2U7XHJcblxyXG4gICAgY29uZmlnOiBDb25maWc7XHJcblxyXG4gICAgcHVibGljIGluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuXHJcbiAgICB0YWdNZXNzZW5nZXJPbiA9IGZhbHNlO1xyXG5cclxuICAgIFNQTW9kdWxlOiBTcE1vZHVsZTtcclxuXHJcbiAgICBwb2ludGVyTGVmdENsaWNrSGFuZGxlciA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmFkZE1hdHRlcnRhZygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25JblRhZ0RhdGEoKTtcclxuICAgIH07XHJcblxyXG4gICAgcG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyID0gKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImNhbmNlbCBvbiByaWdodCBjbGlja1wiKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25fY2FuY2VsZWQoKTtcclxuICAgICAgICBhbGVydChcImFjdGlvbiBjYW5jZWxsZWRcIik7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJ2NvbmZpZycpIGNvbmZpZzogQ29uZmlnLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSB2aXNpYmlsaXR5U2VydmljZTogQmFzZVZpc2liaWxpdHlTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgVXRpbHMgYXN5bmNcclxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAgIGFzeW5jIGluaXRTZGsodGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsIG1vZHVsZTogU3BNb2R1bGUgPSBTcE1vZHVsZS5JTU1PKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2RrKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhZ1NlcnZpY2UgPSB0YWdTZXJ2aWNlO1xyXG4gICAgICAgIHRoaXMuU1BNb2R1bGUgPSBtb2R1bGU7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgLy8gUmV0cmlldmUgRE9NIGVsZW1lbnRzXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgICAgICBcIiN2aWV3ZXItcG9pbnRlci10cmlja1wiLFxyXG4gICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgICAgICBcIiN2aWV3ZXItbW9kdWxlXCIsXHJcbiAgICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgICAgICBcIiN2aWV3ZXItbW9kdWxlXCIsXHJcbiAgICAgICAgICAgICkgYXMgSFRNTElGcmFtZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICghaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCBsaXN0ZW5lcnNcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9pbnRlckJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjbGlja1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlckxlZnRDbGlja0hhbmRsZXIsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FuY2VsIG9uIHJpZ2h0IGNsaWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICAgICAgICAgICBcImNvbnRleHRtZW51XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb2ludGVyUmlnaHRDbGlja0hhbmRsZXIsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBMb2FkIFNES1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkxvYWRpbmcgTWF0dGVycG9ydCBTREtcIik7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgd2luZG93Lk1QX1NESy5jb25uZWN0KFxyXG4gICAgICAgICAgICAgICAgaWZyYW1lLFxyXG4gICAgICAgICAgICAgICAgXCJxbjl3c2FzdXk1aDJmenJicm4xbnpyMGlkXCIsXHJcbiAgICAgICAgICAgICAgICBcIjMuMTFcIixcclxuICAgICAgICAgICAgKS50aGVuKGFzeW5jIChzZGs6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gSW5zdGFuY2lhdGUgc2RrXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkayA9IHNkaztcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTcE1vZHVsZS5JTU1POlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpY29uLXRpY2tldFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fdGlja2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpY29uLWVxdWlwbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZXF1aXBtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpY29uLW1lYXN1cmVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX21lYXN1cmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImljb24tZGF0YVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1lYXN1cmVtZW50cy5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZGVkOiBmdW5jdGlvbiAoaW5kZXg6IGFueSwgaXRlbTogeyBwb2ludHM6IGFueTsgfSwgY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIFwiaXRlbSBhZGRlZCB0byB0aGUgY29sbGVjdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBpbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubWVhc3VyZW1lbnRzW2luZGV4XSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0TWVhc3VyZSA9IGl0ZW0ucG9pbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gKGNvbGxlY3Rpb246IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGUgZW50aXJlIHVwLXRvLWRhdGUgY29sbGVjdGlvbicsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGlzdGFuY2VGb3JMYXN0TWVhc3VyZW1lbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1lYXN1cmVtZW50cy5tb2RlLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtZWFzdXJlbWVudE1vZGVTdGF0ZTogeyBhY3RpdmU6IGFueTsgfSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1lYXN1cmVtZW50IG1vZGUgc3RhdGUgaGFzIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTWVhc3VyZU1vZGVPbiA9IG1lYXN1cmVtZW50TW9kZVN0YXRlLmFjdGl2ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnSXMgbWVhc3VyZW1lbnQgbW9kZSBjdXJyZW50bHkgYWN0aXZlPyAnLCBtZWFzdXJlbWVudE1vZGVTdGF0ZS5hY3RpdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFNwTW9kdWxlLk1VU0VVTTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbi1kYXRhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFNwTW9kdWxlLkhPVEVMOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpY29uX3Jvb21fYXZhaWxhYmxlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX2F2YWlsYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbl9yb29tX3VuYXZhaWxhYmxlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX3VuYXZhaWxhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpY29uX3Jvb21fY2hvc2VuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX2Nob3NlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIExvYWQgTWF0dGVydGFnIGljb25zXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaWNvbi1wb3NpdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Bvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIC8vIDNEIHBvc2l0aW9uJ3MgcG9pbnRlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuUG9pbnRlci5pbnRlcnNlY3Rpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChpbnRlcnNlY3Rpb246IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0ID0gaW50ZXJzZWN0aW9uO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgejogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25Nb2RlICE9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb2xsb3cgdGhlIHBvaW50ZXIgYW5kIGNoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHRhZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdlIGFyZSBhYm91dCB0byB2YWxpZGF0ZSwgYnV0IGl0IGV4aXN0cyBpbiBzZGsgYWxyZWFkeSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlX2ZvbGxvd2luZ190YWcodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENhbWVyYSdzIHZpZXdwb2ludFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuQ2FtZXJhLnBvc2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN1YnNjcihwb3NlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhID0gcG9zZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhUG9zZS5uZXh0KHBvc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBwb3NpdGlvbiBpcyAnLCBwb3NlLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1JvdGF0aW9uIGFuZ2xlIGlzICcsIHBvc2Uucm90YXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlN3ZWVwIFVVSUQgaXNcIiwgcG9zZS5zd2VlcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBzdWJzY3JpYmUgdG8gc3dlZXBzXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5Td2VlcC5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gc3Vic2NyKGNvbGxlY3Rpb246IHt9KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN3ZWVwcyA9IE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBjdXJyZW50IHN3ZWVwXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5Td2VlcC5jdXJyZW50LnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdWJzY3IoY3VycmVudFN3ZWVwOiB7IHNpZDogc3RyaW5nOyB9KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZSB0byB0aGUgY3VycmVudCBzd2VlcCBoYXMgb2NjdXJyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3dlZXAuc2lkID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnTm90IGN1cnJlbnRseSBzdGF0aW9uZWQgYXQgYSBzd2VlcCBwb3NpdGlvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJlbW1pdGluZyBzd2VlcFwiLCBjdXJyZW50U3dlZXAuc2lkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN3ZWVwLm5leHQoY3VycmVudFN3ZWVwLnNpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBGbG9vciBkYXRhXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKHRoaXM6IGFueSwgY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JzID0gT2JqZWN0LnZhbHVlcyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBvbiB0YWcgY2xpY2sgb3BlbiBkZXRhaWxzIHBhZ2VcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLm9uKFwidGFnLmNsaWNrXCIsIChzaWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGdldCBvYmplY3Qgb2YgdGhpcyB0YWdcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHNpZCk/Lm1hdHRlcnRhZ0RhdGEhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0YWdTZXJ2aWNlLmdldFVybEZvclNlZURldGFpbHMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXRUeXBlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2Fubm90IHNob3cgZGV0YWlscyBmb3IgdGFnXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFBvaW50ZXIgdHJpY2tcclxuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgYXBwZWFyIHdoZW4gdGhlIGN1cnNvciBpcyBzdGlsbFxyXG4gICAgICAgICAgICAgICAgLy8gSXQgd2lsbCBpbnRlcmNlcHQgdGhlIGNsaWNrIG9mIHRoZSBtb3VzZSBiZWZvcmUgaXQgdHJpZ2VycmluZyB0aGUgTWF0dGVycG9ydCdzIHRvdXIgbmF2aWdhdGlvblxyXG4gICAgICAgICAgICAgICAgdGhpcy50aW1lclBvaW50ZXIgPSBzZXRJbnRlcnZhbChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBvaW50ZXJUcmljay5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgIDUwLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgICAqIFRyYW5zaXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsub24oXCJ2aWV3bW9kZS5jaGFuZ2VzdGFydFwiLCBmdW5jdGlvbiAodG8sIGZyb20pIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnU3RhcnRpbmcgdG8gbW92ZSB0byAnICsgdG8gKyAnIGZyb20gJyArIGZyb20pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uTW9kZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLm9uKFwidmlld21vZGUuY2hhbmdlZW5kXCIsIGZ1bmN0aW9uIChvbGRNb2RlLCBuZXdNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0VuZGVkIHRvIG1vdmUgdG8gJyArIG5ld01vZGUgKyAnIGZyb20gJyArIG9sZE1vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdNb2RlICE9PSBcIm1vZGUudHJhbnNpdGlvbmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsub24oc2RrLlN3ZWVwLkV2ZW50LkVOVEVSLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChvbGRTd2VlcCwgbmV3U3dlZXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0xlYXZpbmcgc3dlZXAgJyArIG9sZFN3ZWVwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0VudGVyaW5nIHN3ZWVwICcgKyBuZXdTd2VlcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5vbihzZGsuU3dlZXAuRXZlbnQuRVhJVCxcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZnJvbVN3ZWVwLCB0b1N3ZWVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ0xlYXZpbmcgc3dlZXAgJyArIGZyb21Td2VlcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ1RyYW5zaXRpb25pbmcgdG8gc3dlZXAgJyArIHRvU3dlZXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBNYXR0ZXJ0YWcgdG8gdGhlIGRpY3Rpb25uYXJ5IG9mIHRoZSBjdXJyZW50IHRhZ3NcclxuICAgICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRFxyXG4gICAgICogQHBhcmFtIG1hdHRlcnRhZ0RhdGFcclxuICAgICAqIEBwYXJhbSB0YWdUeXBlXHJcbiAgICAgKiBAcGFyYW0gdGlja2V0SURcclxuICAgICAqL1xyXG4gICAgYWRkTWF0dGVydGFnVG9PYmplY3QobWF0dGVydGFnSUQ6IHN0cmluZywgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNkaykge1xyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ3MucHVzaChtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLnNldChtYXR0ZXJ0YWdJRCwge1xyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRJRDogbWF0dGVydGFnRGF0YS5lbGVtZW50SUQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRUYWdTdHlsZShtYXR0ZXJ0YWdJRCwgbWF0dGVydGFnRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldERpc3RhbmNlRm9yTGFzdE1lYXN1cmVtZW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxhc3RNZWFzdXJlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyUG9pbnRzID0gdGhpcy5sYXN0TWVhc3VyZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2VzTGFzdE1lYXN1cmUgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IG51bWJlclBvaW50czsgaW5kZXggKz0gMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBnZXREaXN0YW5jZUJldHdlZW5Ud29Qb2ludHMoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0TWVhc3VyZVtpbmRleCAtIDFdLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzdGFuY2VzTGFzdE1lYXN1cmUucHVzaChkaXN0YW5jZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50YWtlU2NyZWVuU2hvdCgpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTWVudShgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfbWVhc3VyZW1lbnRgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdCB0aGUgTWF0dGVydGFnIHRoYXQgd2lsbCBmb2xsb3cgdGhlIGN1cnNvclxyXG4gICAgICogQHBhcmFtIHRhZ1R5cGVcclxuICAgICAqL1xyXG4gICAgYXN5bmMgYWRkX2N1cnNvcl9tYXR0ZXJ0YWcoXHJcbiAgICAgICAgdGFnVHlwZTogUG9pVHlwZSxcclxuICAgICAgICBlbGVtZW50PzogYW55LFxyXG4gICAgICAgIHBvc2l0aW9uaW5nOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoIXRoaXMucG9zZU1hdHRlcnBvcnQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gbmV3IE1hdHRlcnRhZ0RhdGEodGFnVHlwZSk7XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uaW5nKSB7XHJcbiAgICAgICAgICAgIC8vIHNldCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGV4aXN0aW5nIHRhZ1xyXG4gICAgICAgICAgICBjb25zdCBbcG9pXSA9IGVsZW1lbnQucG9pcy5pdGVtcztcclxuICAgICAgICAgICAgaWYgKHBvaSAmJiBwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKSk7XHJcbiAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvaShwb2kpOyAvLyB0byBrZWVwIGN1c3RvbSB0YWdJb24gYW5kIG9wYWNpdHlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldFN3ZWVwSUQodGhpcy5wb3NlQ2FtZXJhLnN3ZWVwKTtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldFJvdGF0aW9uKHRoaXMucG9zZUNhbWVyYS5yb3RhdGlvbik7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRPYmplY3QoZWxlbWVudCwgdGFnVHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cgPSBhd2FpdCB0aGlzLmFkZF9tYXR0ZXJ0YWdfdG9fdmlld2VyKFxyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0SWNvbihcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3csXHJcbiAgICAgICAgICAgICAgICBcImljb24tcG9zaXRpb25cIixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRPcGFjaXR5KHRoaXMubWF0dGVydGFnVG9Gb2xsb3csIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBNYXR0ZXJ0YWcgZnJvbSBpdHMgZGF0YVxyXG4gICAgICogQHBhcmFtIHRhZ0lEXHJcbiAgICAgKiBAcGFyYW0gdGFnVHlwZVxyXG4gICAgICogQHBhcmFtIG1hdHRlcnRhZ0RhdGFcclxuICAgICAqL1xyXG4gICAgYXN5bmMgYWRkX21hdHRlcnRhZ190b192aWV3ZXIoXHJcbiAgICAgICAgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSxcclxuICAgICk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgICAgIGxldCBzaWRMaXN0O1xyXG4gICAgICAgIGlmICghdGhpcy5zZGspIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHNpZExpc3QgPSBhd2FpdCB0aGlzLnNkay5NYXR0ZXJ0YWcuYWRkKG1hdHRlcnRhZ0RhdGEuZ2V0RGF0YSgpKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgIFwiVGFnIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgdmlzaXRcIixcclxuICAgICAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXREYXRhKCksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaWRMaXN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdHRlcnRhZ0lEID0gc2lkTGlzdFswXTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJhZGRlZCB0YWdcIiwgbWF0dGVydGFnRGF0YS5nZXRUeXBlKCksIG1hdHRlcnRhZ0lEKTtcclxuICAgICAgICAgICAgdGhpcy5hZGRNYXR0ZXJ0YWdUb09iamVjdChtYXR0ZXJ0YWdJRCwgbWF0dGVydGFnRGF0YSk7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXR0ZXJ0YWdJRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIFV0aWxzIC0gTWF0dGVydGFnXHJcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICBhZGRNYXR0ZXJ0YWcoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQpO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uX29wZW5fbWVudSh0aGlzLmdldE1lbnVUb09wZW5Gb3JMYXN0VGFnKCkpO1xyXG4gICAgICAgIHRoaXMucmVzZXRBY3Rpb25UaW1lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUG9pbnRlclRyaWNrKCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmXHJcbiAgICAgICAgICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cgJiZcclxuICAgICAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydCAmJlxyXG4gICAgICAgICAgICB0aGlzLmdldERpc3RQb3NpdGlvbihcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICkgPiAyNVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHtcclxuICAgICAgICAgICAgICAgIHc6IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaDogdGhpcy5jb250YWluZXIuY2xpZW50SGVpZ2h0LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBjb29yZHMgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4oXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmxlZnQgPSBgJHtjb29yZHMueCAqIE1hdGguc2lnbihjb29yZHMueCkgLSAyNVxyXG4gICAgICAgICAgICAgICAgfXB4YDtcclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLnRvcCA9IGAke2Nvb3Jkcy55ICogTWF0aC5zaWduKGNvb3Jkcy54KSAtIDI1XHJcbiAgICAgICAgICAgICAgICB9cHhgO1xyXG4gICAgICAgICAgICB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZGROZXdJY29uQW5kU2V0Rm9yVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcsIGljb25QYXRoOiBzdHJpbmcpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICBgaWNvbl8ke21hdHRlcnRhZ0lEfWAsXHJcbiAgICAgICAgICAgIGljb25QYXRoLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBgaWNvbl8ke21hdHRlcnRhZ0lEfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVkaXRUYWdTdHlsZShtYXR0ZXJ0YWdJRDogc3RyaW5nLCBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuU1BNb2R1bGUgPT09IFNwTW9kdWxlLkhPVEVMKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvb20gPSBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpO1xyXG4gICAgICAgICAgICBsZXQgaWNvbk5hbWUgPSBgaWNvbl9yb29tYDtcclxuICAgICAgICAgICAgaWYgKHJvb20uYXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBpY29uTmFtZSA9IGAke2ljb25OYW1lfV9hdmFpbGFibGVgO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWNvbk5hbWUgPSBgJHtpY29uTmFtZX1fdW5hdmFpbGFibGVgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN0cmluZ1RhZ1R5cGUgPSBwb2lUeXBlVG9TdHJpbmcobWF0dGVydGFnRGF0YS5nZXRUeXBlKCkpO1xyXG4gICAgICAgIGxldCBvcGFjaXR5ID0gdGhpcy5jb25maWcubXlfY29uZmlnLkRFRkFVTFRfT1BBQ0lUWV9UQUc7XHJcbiAgICAgICAgbGV0IGljb25OYW1lID0gYGljb24tJHtzdHJpbmdUYWdUeXBlfWA7XHJcbiAgICAgICAgY29uc3QgcG9pID0gbWF0dGVydGFnRGF0YS5nZXRQb2koKTtcclxuICAgICAgICBpZiAocG9pICYmIHBvaS50YWdJY29uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhZ0ljb24gPSBKU09OLnBhcnNlKHBvaS50YWdJY29uKTtcclxuICAgICAgICAgICAgLy8gVE9ETyBmb3IgaW5kaWNhdG9yc1xyXG4gICAgICAgICAgICBpZiAobWF0dGVydGFnRGF0YS5nZXRUeXBlKCkgPT09IFBvaVR5cGUuREFUQSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS50eXBlID09PSBGZWF0dXJlVHlwZS5JTkRJQ0FUT1JfVEVNUCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhZ0ljb24uc3JjID0gdGhpcy50YWdTZXJ2aWNlLmdldEljb25UYWdJbWFnZUZvckZlYXR1cmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaS50YWdJY29uID0gdGFnSWNvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGFnSWNvbi5zcmMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhTaWduZWQgPSBhd2FpdCB0aGlzLnRhZ1NlcnZpY2UuZ2V0U2lnbmVkVGFnSWNvblNvdXJjZSh0YWdJY29uLnNyYyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0aFNpZ25lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25OYW1lID0gYGljb24tJHtzdHJpbmdUYWdUeXBlfS0ke21hdHRlcnRhZ0lEfS0ke21hdHRlcnRhZ0RhdGEuY3VzdG9tSWNvbkluZGV4fWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhTaWduZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuY3VzdG9tSWNvbkluZGV4ICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3IgcmVnaXN0ZXJJY29uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGFnSWNvbi5vcGFjaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5ID0gdGFnSWNvbi5vcGFjaXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdE9wYWNpdHkobWF0dGVydGFnSUQsIG9wYWNpdHkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgZWRpdEljb24gb3Igb3BhY2l0eVwiLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBlbmFibGVfZm9sbG93aW5nX3RhZyhtYXR0ZXJ0YWc6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0UG9zaXRpb24obWF0dGVydGFnLCB7XHJcbiAgICAgICAgICAgIGFuY2hvclBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICB4OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnggKiAxLFxyXG4gICAgICAgICAgICAgICAgeTogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi55ICogMSxcclxuICAgICAgICAgICAgICAgIHo6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueiAqIDEsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0ZW1WZWN0b3I6IHtcclxuICAgICAgICAgICAgICAgIHg6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnggKiAwLjMsXHJcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC55ICogMC4zLFxyXG4gICAgICAgICAgICAgICAgejogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueiAqIDAuMyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldEFjdGlvblRpbWUoKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0QWN0aW9uVGltZSA9IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIGdvVG9MYXN0VGFnKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ29Ub1RhZyhsYXN0VGFnKTtcclxuICAgICAgICB9LCAyMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnb1RvVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAobWF0dGVydGFnSUQgPT09IFwiXCIpIHJldHVybjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5NYXR0ZXJ0YWcubmF2aWdhdGVUb1RhZyhcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLlRyYW5zaXRpb24uRkxZLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Fubm90IG5hdmlnYXRlIHRvIHRhZ1wiLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdvVG9NZW51KG1lbnVVcmw6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFttZW51VXJsXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIGRpc3RhbmNlIGJldHd3ZWVuIHR3byAzRCBwb3NpdGlvbnNcclxuICAgICAqIFVzZWQgaW4gb3JkZXIgdG8gc2VlIGhvdyBtdWNoIHRoZSBjdXJzb3IgaGFzIG1vdmVkIGZyb20gdGhlIHByZXZpb3VzIHBvc2l0aW9uXHJcbiAgICAgKiBAcGFyYW0gcG9zMVxyXG4gICAgICogQHBhcmFtIHBvczJcclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdFBvc2l0aW9uKHBvczE6IGFueSwgcG9zMjogYW55KSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHtcclxuICAgICAgICAgICAgdzogdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgIGg6IHRoaXMuY29udGFpbmVyLmNsaWVudEhlaWdodCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNvb3JkczEgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4oXHJcbiAgICAgICAgICAgIHBvczEsXHJcbiAgICAgICAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGNvb3JkczIgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4oXHJcbiAgICAgICAgICAgIHBvczIsXHJcbiAgICAgICAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoXHJcbiAgICAgICAgICAgIChjb29yZHMxLnggLSBjb29yZHMyLngpICoqIDIgKyAoY29vcmRzMS55IC0gY29vcmRzMi55KSAqKiAyLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUG9zaXRpb25JblRhZ0RhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IHRoaXMuZ2V0TGFzdFRhZygpO1xyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKSEubWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKSEubWF0dGVydGFnRGF0YS5zZXROb3JtYWwoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNYXR0ZXJUYWdGcm9tSWQobGFzdFRhZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZU1hdHRlclRhZ0Zyb21JZChcclxuICAgICAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgICAgIG9iamVjdDogYW55ID0gbnVsbCxcclxuICAgICAgICB0YWdUeXBlOiBQb2lUeXBlIHwgbnVsbCA9IG51bGwsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdEJpbGxib2FyZChcclxuICAgICAgICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkhLm1hdHRlcnRhZ0RhdGEuZ2V0RGF0YSgpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG9iamVjdCAmJiB0YWdUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgbWF0dGVydGFnSUQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVkaXRUYWdTdHlsZShcclxuICAgICAgICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkhLm1hdHRlcnRhZ0RhdGEsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVNYXR0ZXJ0YWdGcm9tSWQobWF0dGVydGFnSUQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZW1vdmUobWF0dGVydGFnSUQpO1xyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmRlbGV0ZShtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlTGFzdE1hdHRlcnRhZygpIHtcclxuICAgICAgICBjb25zdCBtYXR0ZXJ0YWdJRCA9IHRoaXMubWF0dGVydGFncy5wb3AoKTtcclxuICAgICAgICBpZiAobWF0dGVydGFnSUQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVNYXR0ZXJ0YWdGcm9tSWQobWF0dGVydGFnSUQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIFV0aWxzIC0gVG9vbGJhclxyXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgYWN0aW9uX3Rvb2xib3hfZmxvb3JwbGFuKCkge1xyXG4gICAgICAgIHRoaXMuc2RrLk1vZGUubW92ZVRvKFwibW9kZS5mbG9vcnBsYW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKSB7XHJcbiAgICAgICAgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oXCJtb2RlLmluc2lkZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fdG9vbGJveF9kb2xsaG91c2UoKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwibW9kZTogXCIsIHRoaXMuaW5UcmFuc2l0aW9uTW9kZSwgXCIgc3dlZXA6IFwiLCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInZpZXdlciBpcyBpbiB0cmFuc2l0aW9uLCBjYW5ub3QgZ28gZG9sbGhvdXNlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Nb2RlLm1vdmVUbyhcIm1vZGUuZG9sbGhvdXNlXCIpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNhbm5vdCBnbyB0byBkb2xsaG91c2VcIiwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMjAwKTtcclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fdG9vbGJveF9tZXN1cmUoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSAhdGhpcy5pc01lYXN1cmVNb2RlT247XHJcbiAgICAgICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLnRvZ2dsZU1vZGUobmV3U3RhdGUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgIGBNZWFzdXJlbWVudCBtb2RlIGlzIG5vdyAke25ld1N0YXRlID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTWVhc3VyZU1vZGVPbikge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbl90b29sYm94X21lc3VyZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgQWN0aW9uc1xyXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgYXN5bmMgYWN0aW9uX2FkZF9tYXR0ZXJ0YWdfZnJvbV9QT0koXHJcbiAgICAgICAgdGFnVHlwZTogUG9pVHlwZSxcclxuICAgICAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgICAgICBwb2k6IFBPSSxcclxuICAgICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgdGFnIGV4aXN0cyBhbHJlYWR5XHJcbiAgICAgICAgY29uc3QgeyB0YWcsIHN3ZWVwIH0gPSB0aGlzLmdldFRhZ0Zyb21FbGVtZW50SWQob2JqZWN0LmlkKTtcclxuICAgICAgICBpZiAodGFnKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwidGFnIGV4aXN0c1wiLCBvYmplY3QpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSA9IG5ldyBNYXR0ZXJ0YWdEYXRhKHRhZ1R5cGUpO1xyXG4gICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KG9iamVjdCwgdGFnVHlwZSk7XHJcbiAgICAgICAgaWYgKHBvaS5jb29yZGluYXRlKSB7XHJcbiAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9zaXRpb24oSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9pLm1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhZ01ldGFkYXRhID0gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpO1xyXG4gICAgICAgICAgICBpZiAodGFnTWV0YWRhdGEubm9ybWFsKSB7XHJcbiAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh0YWdNZXRhZGF0YS5ub3JtYWwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5zZXROb3JtYWwoeyB4OiAwLCB5OiAtMC4xNSwgejogMCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9pLm1hdHRlcnBvcnRTd2VlcElEKSB7XHJcbiAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0U3dlZXBJRChwb2kubWF0dGVycG9ydFN3ZWVwSUQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvaShwb2kpO1xyXG5cclxuICAgICAgICBjb25zdCBjcmVhdGVkVGFnID0gYXdhaXQgdGhpcy5hZGRfbWF0dGVydGFnX3RvX3ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgICBpZiAoY3JlYXRlZFRhZyAmJiB0aGlzLnNkaykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmluamVjdEh0bWxJblRhZyh0YWdUeXBlLCBvYmplY3QsIGNyZWF0ZWRUYWcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbmplY3RIdG1sSW5UYWcoXHJcbiAgICAgICAgdGFnVHlwZTogUG9pVHlwZSxcclxuICAgICAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgICAgICB0YWdJRDogc3RyaW5nLFxyXG4gICAgKSB7XHJcbiAgICAgICAgbGV0IHsgaHRtbCwgaGVpZ2h0IH0gPSBhd2FpdCB0aGlzLnRhZ1NlcnZpY2UuZ2V0SHRtbFRvSW5qZWN0KFxyXG4gICAgICAgICAgICB0YWdUeXBlLFxyXG4gICAgICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5ERUZBVUxUX0hFSUdIVF9IVE1MX1RBR1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGh0bWwgIT09IFwiXCIgJiYgdGhpcy5zZGspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NyaXB0VGFnID0gdGhpcy50YWdTZXJ2aWNlLmdldFNjcmlwdEZvclRhZyhvYmplY3QsIHRhZ1R5cGUpO1xyXG4gICAgICAgICAgICBodG1sICs9IGAke3NjcmlwdFRhZ31gO1xyXG4gICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuaW5qZWN0SFRNTCh0YWdJRCwgaHRtbCwge1xyXG4gICAgICAgICAgICAgICAgc2l6ZToge1xyXG4gICAgICAgICAgICAgICAgICAgIHc6IHRoaXMuY29uZmlnLm15X2NvbmZpZy5ERUZBVUxUX1dJRFRIX0hUTUxfVEFHLFxyXG4gICAgICAgICAgICAgICAgICAgIGg6IGhlaWdodCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAudGhlbigobWVzc2VuZ2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGFnTWVzc2VuZ2VyT24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ01lc3Nlbmdlck9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZUNsaWNrID0gKGZlYXR1cmVJRDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiaW1hZ2UgY2xpY2sgaGFuZGxlclwiLCBmZWF0dXJlSUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25JbWFnZUNsaWNrKGZlYXR1cmVJRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9DbGljayA9IChhdWRpb0NvbW1lbnRJRDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXVkaW8gY2xpY2sgaGFuZGxlclwiLCBhdWRpb0NvbW1lbnRJRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkF1ZGlvQ2xpY2soYXVkaW9Db21tZW50SUQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlkZW9DbGljayA9ICh1cmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25BdWRpb0NsaWNrKHVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0FjdGlvbi5ERVRBSUxfQ0xJQ0ssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkRldGFpbENsaWNrLmJpbmQodGhpcy50YWdTZXJ2aWNlKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYWdBY3Rpb24uVElDS0VUX0NMSUNLLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25EZXRhaWxDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFnQWN0aW9uLkFVRElPX0NMSUNLLCBhdWRpb0NsaWNrXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0FjdGlvbi5JTUFHRV9DTElDSywgaW1hZ2VDbGlja1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYWdBY3Rpb24uVklERU9fQ0xJQ0ssIHZpZGVvQ2xpY2tcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFnQWN0aW9uLkRPQ19DTElDSyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRG9jQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0FjdGlvbi5ZT1VUVUJFX0NMSUNLLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25Zb3V0dWJlQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3QgaW5qZWN0IGh0bWwgZm9yIHRhZ1wiLCB0YWdJRCwgZXJyb3IpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpIHtcclxuICAgICAgICAvLyBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICB0aGlzLm1hdHRlcnRhZ3MubWFwKGFzeW5jICh0YWcpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuTWF0dGVydGFnLnJlbW92ZSh0YWcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vICk7XHJcbiAgICAgICAgdGhpcy5tYXR0ZXJ0YWdzID0gW107XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuY2xlYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fZGVsZXRlX2VsZW1lbnQoXHJcbiAgICAgICAgZWxlbWVudDogRGJPYmplY3RUeXBlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3Qgc2lkVGFnID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnQuaWQhKS50YWc7XHJcbiAgICAgICAgaWYgKHNpZFRhZykge1xyXG4gICAgICAgICAgICBsZXQgcmVzcDtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlc3AgPSBhd2FpdCB0aGlzLnNkay5NYXR0ZXJ0YWcucmVtb3ZlKHNpZFRhZyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBkZWxldGUgdGFnXCIsIHNpZFRhZywgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5kZWxldGUoc2lkVGFnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tYXR0ZXJ0YWdzLmluZGV4T2Yoc2lkVGFnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0dGVydGFncy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9wb3NpdGlvbl9lbGVtZW50KFxyXG4gICAgICAgIHBvaVR5cGU6IFBvaVR5cGUsXHJcbiAgICAgICAgZWxlbWVudDogRGJPYmplY3RUeXBlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRfY3Vyc29yX21hdHRlcnRhZyhwb2lUeXBlLCBlbGVtZW50LCB0cnVlKTtcclxuICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuUE9TSVRJT05JTkcpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFkZEVsZW1lbnRBc01hdHRlcnRhZyhwb2lUeXBlOiBQb2lUeXBlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRfY3Vyc29yX21hdHRlcnRhZyhwb2lUeXBlKTtcclxuICAgICAgICBzd2l0Y2ggKHBvaVR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkRBVEE6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HX0ZFQVRVUkUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5ERVNLOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkFERElOR19GRUFUVVJFKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuVElDS0VUOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkFERElOR19USUNLRVQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HX0VRVUlQTUVOVCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLk1FQVNVUkU6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HX01FQVNVUkUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5ST09NOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkFERElOR19ST09NKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fY29tcGxldGVkKCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIERhdGUubm93KCkgLSB0aGlzLmxhc3RBY3Rpb25UaW1lID4gMjAwMCAmJlxyXG4gICAgICAgICAgICB0aGlzLmxhc3RBY3Rpb25UaW1lICE9PSAtMVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aW9uX2NhbmNlbGVkKCkge1xyXG4gICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUKTtcclxuICAgICAgICB0aGlzLmRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKTtcclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fb3Blbl9tZW51KG1lbnU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgICAgICBzd2l0Y2ggKG1lbnUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImFkZF9lcXVpcFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTWVudShgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfZXF1aXBgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYWRkX3RpY2tldFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTWVudShgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfdGlja2V0YCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImFkZF9mZWF0dXJlXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKFwiP1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHRoaXMucm91dGVyLnVybC5zdWJzdHJpbmcoMCwgdGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoXCI/XCIpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2codXJsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub01lbnUoYCR7dXJsfS9hZGRfZmVhdHVyZWApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJhZGRfZGVza1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9mZWF0dXJlYF0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBxdWVyeVBhcmFtczogeyBpc0Rlc2s6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBcImFkZF9yb29tXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgICBbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX3Jvb21gXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicG9zaXRpb25pbmdfdGlja2V0XCI6XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInBvc2l0aW9uaW5nX3RpY2tldFwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2RldGFpbC8ke3RoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKS5lbGVtZW50SUR9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBxdWVyeVBhcmFtczogeyBwb3NpdGlvbmluZzogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicG9zaXRpb25pbmdfZXF1aXBcIjpcclxuICAgICAgICAgICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2VxdWlwLyR7dGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpLmVsZW1lbnRJRH1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0gfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwb3NpdGlvbmluZ19mZWF0dXJlXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLnJvdXRlci51cmx9YF0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicG9zaXRpb25pbmdfcm9vbVwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5yb3V0ZXIudXJsfWBdLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLnJvdXRlci51cmx9YF0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9nb190b19mbG9vcihmbG9vck5hbWU6IHN0cmluZywgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmxvb3JzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmxvb3IgYXJlIG5vdCBsb2FkZWQgeWV0XCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZmxvb3JzKTtcclxuICAgICAgICAvLyBsb29rIHVwIGZvciBzZXF1ZW5jZSBudW1iZXIgKHRoZSBzYWZlc3QgbWV0aG9kKVxyXG4gICAgICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKFxyXG4gICAgICAgICAgICAoZmxvb3IpID0+IGZsb29yLnNlcXVlbmNlID09PSBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgICAgICAgIGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoZmxvb3IpID0+IGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5uYW1lKSAmJiBmbG9vci5uYW1lICE9IFwiXCIsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgICAgICAgIGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoKGZsb29yKSA9PlxyXG4gICAgICAgICAgICAgICAgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLmlkKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmxvb3JNYXR0ZXJwb3J0KVxyXG4gICAgICAgIGlmIChmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgICAgICAgbGV0IHJldHJ5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgd2hpbGUgKHJldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb29ySW5kZXggPSBhd2FpdCB0aGlzLnNkay5GbG9vci5tb3ZlVG8oZmxvb3JNYXR0ZXJwb3J0LnNlcXVlbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm1vdmVkIHRvIGZsb29ySW5kZXhcIiwgZmxvb3JJbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0cnkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3QgbW92ZSB0byBGbG9vclwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgd2FpdCgxMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiTm8gbWF0dGVycG9ydCBmbG9vciBmb3VuZCB0byBtb3ZlIHRvXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fZ29fdG9fc3dlZXAoXHJcbiAgICAgICAgc3dlZXA6IHN0cmluZyxcclxuICAgICAgICByb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSA9IG51bGwsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5mb3JiaWRkZW5Td2VlcHMuaW5jbHVkZXMoc3dlZXApKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidXNlciBpcyBub3QgYWxsb3dlZCB0byBnbyB0byB0aGlzIHN3ZWVwXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZ29pbmcgdG8gc3dlZXBcIiwgc3dlZXAsIFwid2l0aCByb3RhdGlvbjpcIiwgcm90YXRpb24pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2Fubm90IGdvIHRvIHN3ZWVwLCBpbiB0cmFuc2l0aW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLlN3ZWVwLm1vdmVUbyhzd2VlcCwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IFwidHJhbnNpdGlvbi5mbHlcIixcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVGltZTogMTUwMCxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3QgbW92ZSB0byBzd2VlcFwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5DYW1lcmEuc2V0Um90YXRpb24ocm90YXRpb24sIHsgc3BlZWQ6IDEwMCB9KTsgLy8gc3BlZWQgaXMgZGVncmVlcyBwZXIgc2Vjb25kXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50U3dlZXAoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9zZUNhbWVyYSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NlQ2FtZXJhLnN3ZWVwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50Q2FtZXJhUG9zaXRpb24oKToge1xyXG4gICAgICAgIHJvdGF0aW9uOiBhbnk7XHJcbiAgICAgICAgcG9zaXRpb246IGFueTtcclxuICAgICAgICBzd2VlcDogYW55O1xyXG4gICAgfSB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLnBvc2VDYW1lcmEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zZUNhbWVyYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIFNldHRlcnNcclxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAgIHNldEludGVyYWN0aW9uTW9kZShpbnRlcmFjdGlvbk1vZGU6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25Nb2RlID0gaW50ZXJhY3Rpb25Nb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE9iamVjdEFuZFBvaUluVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcsIG9iamVjdDogRGJPYmplY3RUeXBlLCBwb2lUeXBlOiBQb2lUeXBlLCBwb2k6IFBPSSB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5tYXR0ZXJ0YWdEYXRhLnNldE9iamVjdChvYmplY3QsIHBvaVR5cGUpO1xyXG4gICAgICAgIGlmIChwb2kpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5tYXR0ZXJ0YWdEYXRhLnNldFBvaShwb2kpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLmVsZW1lbnRJRCA9IG9iamVjdC5pZDtcclxuICAgICAgICB0aGlzLnVwZGF0ZU1hdHRlclRhZ0Zyb21JZChtYXR0ZXJ0YWdJRCwgb2JqZWN0LCBwb2lUeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgR2V0dGVyc1xyXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgZ2V0SW50ZXJhY3Rpb25Nb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uTW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGFnRnJvbUVsZW1lbnRJZChlbGVtZW50SUQ6IHN0cmluZyk6IHtcclxuICAgICAgICB0YWc6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgc3dlZXA6IHN0cmluZyB8IG51bGw7XHJcbiAgICB9IHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5tYXR0ZXJ0YWdzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQodGhpcy5tYXR0ZXJ0YWdzW2luZGV4XSkuZWxlbWVudElEID09PVxyXG4gICAgICAgICAgICAgICAgZWxlbWVudElEXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBtYXR0ZXJ0YWdEYXRhIH0gPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldCh0aGlzLm1hdHRlcnRhZ3NbaW5kZXhdKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN3ZWVwID0gbWF0dGVydGFnRGF0YS5nZXRTd2VlcElEKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN3ZWVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdGFnOiB0aGlzLm1hdHRlcnRhZ3NbaW5kZXhdLCBzd2VlcDogbnVsbCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3dlZXBzICYmIHRoaXMuc3dlZXBzLmluY2x1ZGVzKHN3ZWVwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHRhZzogdGhpcy5tYXR0ZXJ0YWdzW2luZGV4XSwgc3dlZXAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRhZzogbnVsbCwgc3dlZXAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0YWc6IG51bGwsIHN3ZWVwOiBudWxsIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3RUYWcoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0dGVydGFnVG9Gb2xsb3c7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0dGVydGFncy5sZW5ndGggPT09IDBcclxuICAgICAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLm1hdHRlcnRhZ3NbdGhpcy5tYXR0ZXJ0YWdzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51VG9PcGVuRm9yTGFzdFRhZygpIHtcclxuICAgICAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKS5tYXR0ZXJ0YWdEYXRhLmdldE1lbnVUb09wZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFnRGF0YUZyb21JZChtYXR0ZXJ0YWdJRDogc3RyaW5nKTogTWF0dGVydGFnRGF0YSB8IG51bGwge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpIS5tYXR0ZXJ0YWdEYXRhO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImNhbm5vdCByZXRyaWV2ZSBtYXR0ZXJ0YWdEYXRhIGZvciB0YWdcIiwgbWF0dGVydGFnSUQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXN0RGlzdGFuY2VzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHRha2VTY3JlZW5TaG90KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2RrLlJlbmRlcmVyLnRha2VTY3JlZW5TaG90KFxyXG4gICAgICAgICAgICB0aGlzLnJlc29sdXRpb24sXHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eSxcclxuICAgICAgICApLnRoZW4oXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChzY3JlZW5TaG90VXJpOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGJhc2U2NCBzdHJpbmdcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNjcmVlbnNob3RVcmkgPSBzY3JlZW5TaG90VXJpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTY3JlZW5TaG90VXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RTY3JlZW5zaG90VXJpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3RNZWFzdXJlbWVudCgpOiBPYmplY3Qge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIG1lYXN1cmU6IHRoaXMubGFzdE1lYXN1cmUsXHJcbiAgICAgICAgICAgIHN3ZWVwOiB0aGlzLnBvc2VDYW1lcmEuc3dlZXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbGVhckFsbCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInJlbW92aW5nIHZpZXdlclwiKTtcclxuICAgICAgICB0aGlzLmFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKTtcclxuICAgICAgICB0aGlzLmZsb29ycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zd2VlcHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2RrID0gbnVsbDtcclxuICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXJQb2ludGVyKTtcclxuICAgICAgICB0aGlzLmZvcmJpZGRlblN3ZWVwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGFnTWVzc2VuZ2VyT24gPSBmYWxzZTtcclxuICAgICAgICAvLyBjYW5jZWwgc3Vic2NyaXB0aW9uc1xyXG4gICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5wb2ludGVyTGVmdENsaWNrSGFuZGxlcik7XHJcbiAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLnBvaW50ZXJSaWdodENsaWNrSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVtb3ZlRm9yYmlkZGVuU3dlZXBzKGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLmZvcmJpZGRlblN3ZWVwcyA9IFsuLi5mb3JiaWRkZW5Td2VlcHNdO1xyXG4gICAgICAgIGxldCByZW1vdmVkID0gMDtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgZm9yYmlkZGVuU3dlZXBzLm1hcChhc3luYyAoc3dlZXApID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAuZGlzYWJsZShzd2VlcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJyZW1vdmVkIHN3ZWVwczpcIiwgcmVtb3ZlZCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|