@smartbit4all/ng-client 6.0.6 → 6.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +2 -2
- package/esm2022/lib/view-context/smart-view-context.service.mjs +8 -6
- package/fesm2022/smartbit4all-ng-client.mjs +8 -6
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
- package/package.json +1 -1
- package/smartbit4all-ng-client-6.0.8.tgz +0 -0
- package/smartbit4all-ng-client-6.0.6.tgz +0 -0
|
@@ -135,14 +135,16 @@ export class SmartViewContextService {
|
|
|
135
135
|
const vcRef = this.getEmbeddedSlot(containerUuid, ref.containerId);
|
|
136
136
|
if (!vcRef) {
|
|
137
137
|
// The slot is truly gone (its layout host was torn down and not recreated):
|
|
138
|
-
// a real orphan to destroy.
|
|
139
|
-
// reattaches its child (registerEmbeddedSlot); a STABLE slot is never detached
|
|
140
|
-
// in the first place. So a still-registered slot here always holds its view —
|
|
141
|
-
// no reattach branch is needed (that branch only ever patched the stable
|
|
142
|
-
// false-orphan, which detachAllEmbeddedViews no longer creates). (#28870)
|
|
138
|
+
// a real orphan to destroy.
|
|
143
139
|
orphaned.push(ref);
|
|
144
140
|
continue;
|
|
145
141
|
}
|
|
142
|
+
// Slot still registered but its view was detached by detachAllEmbeddedViews and
|
|
143
|
+
// never reattached, because the *ngFor reused the slot host (only a sibling
|
|
144
|
+
// widget changed) so no re-register fired. Reattach so every detach is paired.
|
|
145
|
+
if (vcRef.indexOf(ref.componentRef.hostView) < 0) {
|
|
146
|
+
vcRef.insert(ref.componentRef.hostView);
|
|
147
|
+
}
|
|
146
148
|
}
|
|
147
149
|
for (const ref of orphaned) {
|
|
148
150
|
if (!ref.componentRef.hostView.destroyed) {
|
|
@@ -1071,4 +1073,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
1071
1073
|
providedIn: 'root',
|
|
1072
1074
|
}]
|
|
1073
1075
|
}], ctorParameters: () => [] });
|
|
1074
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUlkLFFBQVEsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxQyxPQUFPLEVBT0wsY0FBYyxFQVdkLFNBQVMsRUFFVCxRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQVNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBb0IsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRixPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUNMLDZCQUE2QixHQUU5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQUV4RSxNQUFNLENBQUMsTUFBTSxzQ0FBc0MsR0FBRyx3Q0FBd0MsQ0FBQztBQUMvRixNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FB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WUFBWTtRQUNoQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakQsWUFBWSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDOytHQXRDVSxlQUFlO21IQUFmLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgSW5qZWN0LFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgSW5qZWN0b3IsXHJcbiAgbW9kZWwsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9wdGlvbmFsLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1JbnZhbGlkRmllbGRzIH0gZnJvbSAnLi4vc21hcnQtZm9ybS9zbWFydGZvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbi9zbWFydC1zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIENsaXBib2FyZERhdGEsXHJcbiAgQ29tcG9uZW50TW9kZWwsXHJcbiAgQ29tcG9uZW50TW9kZWxDaGFuZ2UsXHJcbiAgRGF0YUNoYW5nZSxcclxuICBEb3dubG9hZGVkRmlsZSxcclxuICBMaW5rLFxyXG4gIExpbmtUYXJnZXRFbnVtLFxyXG4gIE1lc3NhZ2VEYXRhLFxyXG4gIE1lc3NhZ2VSZXN1bHQsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG4gIFVpQWN0aW9uUmVxdWVzdCxcclxuICBWaWV3Q29uc3RyYWludCxcclxuICBWaWV3Q29udGV4dENoYW5nZSxcclxuICBWaWV3Q29udGV4dERhdGEsXHJcbiAgVmlld0NvbnRleHRVcGRhdGUsXHJcbiAgVmlld0RhdGEsXHJcbiAgVmlld1NlcnZpY2UsXHJcbiAgVmlld1N0YXRlLFxyXG4gIFZpZXdTdGF0ZVVwZGF0ZSxcclxuICBWaWV3VHlwZSxcclxufSBmcm9tICcuL2FwaSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL21lc3NhZ2UtZGlhbG9nL21lc3NhZ2UtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRFbWJlZGRlZFZpZXdSZWYsXHJcbiAgU21hcnRUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gIFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcixcclxuICBTbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzLFxyXG4gIFNtYXJ0Vmlld0RpYWxvZ1JlZixcclxuICBTbWFydFZpZXdIYW5kbGVyTW9kZWwsXHJcbn0gZnJvbSAnLi9zbWFydC12aWV3LWNvbnRleHQubW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydFN1YmplY3QgfSBmcm9tICcuLi9zbWFydC1zdWJqZWN0L3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnRWaWV3Q29udGV4dERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LXZpZXctY29udGV4dC1kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4vdXRpbGl0eS9jb21wb25lbnRMaWJyYXJ5JztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyByZXNvbHZlU2xvdCwgU2xvdEtpbmQgfSBmcm9tICcuL3ZpZXctc2xvdC1yZXNvbHV0aW9uJztcclxuaW1wb3J0IHtcclxuICBTTUFSVF9ERUZBVUxUX1ZJRVdfQ09NUE9ORU5UUyxcclxuICBEZWZhdWx0Vmlld0NvbXBvbmVudEVudHJ5LFxyXG59IGZyb20gJy4vZGVmYXVsdC12aWV3LWNvbXBvbmVudHMudG9rZW4nO1xyXG5pbXBvcnQgeyByZXNvbHZlVmlld0hhbmRsZXIgfSBmcm9tICcuL3ZpZXctaGFuZGxlci1yZXNvbHV0aW9uJztcclxuaW1wb3J0IHsgYnVpbGRWaWV3T3BzIH0gZnJvbSAnLi92aWV3LW9wJztcclxuaW1wb3J0IHsgUkVVU0VfUk9VVEVSX1NMT1RfQ09NUE9ORU5UIH0gZnJvbSAnLi9yZXVzZS1yb3V0ZXItc2xvdC50b2tlbic7XHJcblxyXG5leHBvcnQgY29uc3QgU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nQnV0dG9uTGFiZWwgPSAnU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nQnV0dG9uTGFiZWwnO1xyXG5leHBvcnQgY29uc3QgU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nVGl0bGUgPSAnU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nVGl0bGUnO1xyXG5leHBvcnQgY29uc3QgU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nTWVzc2FnZSA9ICdTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dNZXNzYWdlJztcclxuZXhwb3J0IGNvbnN0IERlZmF1bHRVaUFjdGlvbkNvZGVfQ0xPU0UgPSAnREVGQVVMVF9DTE9TRSc7XHJcblxyXG5leHBvcnQgY29uc3QgRElBTE9HX0RJU0FCTEVfQ0xPU0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4oJ2RpYWxvZ0Rpc2FibGVDbG9zZScpO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250ZXh0VXVpZE5hbWU6IHN0cmluZyA9ICd2aWV3Q29udGV4dFV1aWQnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRleHRVdWlkSGVhZGVyTmFtZTogc3RyaW5nID0gJ3ZpZXdDb250ZXh0VXVpZCc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwYWdlTmFtZVByZWZpeDogc3RyaW5nID0gJ3BhZ2UuJztcclxuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudE5hbWVQcmVmaXg6IHN0cmluZyA9ICdjb21wb25lbnQuJztcclxuICBwdWJsaWMgbWVzc2FnZURpYWxvZ25hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIHVybD86IHN0cmluZztcclxuICBwcml2YXRlIHZpZXdDb250ZXh0PzogVmlld0NvbnRleHREYXRhO1xyXG4gIHByaXZhdGUgdmlld0hhbmRsZXJzOiBBcnJheTxTbWFydFZpZXdIYW5kbGVyTW9kZWw+ID0gbmV3IEFycmF5KCk7XHJcbiAgcHJpdmF0ZSBkZWZhdWx0Q29tcG9uZW50czogTWFwPHN0cmluZywgQ29tcG9uZW50VHlwZTxhbnk+PiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIG9wZW5lZFZpZXdVdWlkczogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheSgpO1xyXG4gIHByaXZhdGUgb3BlbmVkVmlld0RhdGE6IEFycmF5PFZpZXdEYXRhPiA9IG5ldyBBcnJheSgpO1xyXG4gIC8vIE1vbm90b25pYyBjb3VudGVyIGJ1bXBlZCBvbiBldmVyeSBzdWNjZXNzZnVsIHN0YXJ0Vmlld0NvbnRleHQoKS4gQ2FsbGVyc1xyXG4gIC8vIHRoYXQgaG9sZCBhIHJlZmVyZW5jZSB0byBhIHZpZXctdXVpZCBmcm9tIGEgcHJldmlvdXMgdmlld2NvbnRleHQgY2FuXHJcbiAgLy8gZGV0ZWN0IGEgcmVidWlsZCBieSBjb21wYXJpbmcgc25hcHNob3RzIG9mIHRoaXMgdmFsdWUuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0aW9uOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcHVibGljIHV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcbiAgcHVibGljIHZpZXdDb250ZXh0SGFzQmVlblN5bmNlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJ1bm5pbmc6IFN1YmplY3Q8Vmlld0NvbnRleHREYXRhPiB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIGluaXRpTmV3Q29udGV4dFJ1bm5pbmc6IFN1YmplY3Q8dm9pZD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBzbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzPzogU21hcnRWaWV3Q29udGV4dEFwaUVycm9ycztcclxuXHJcbiAgcHVibGljIG9wZW5TbWFydExpbms6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG4gIHB1YmxpYyBpc09wZW5pbmdTbWFydExpbms6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBkaWFsb2dSZWZzOiBTbWFydFZpZXdEaWFsb2dSZWZbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGVtYmVkZGVkQ29udGFpbmVyczogTWFwPHN0cmluZywgTWFwPHN0cmluZywgRW1iZWRkZWRTbG90RW50cnk+PiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGVtYmVkZGVkVmlld1JlZnM6IFNtYXJ0RW1iZWRkZWRWaWV3UmVmW10gPSBbXTtcclxuICBwcml2YXRlIHBlbmRpbmdFbWJlZGRlZFZpZXdzOiBWaWV3RGF0YVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgYWN0aW9uRGVzY3JpcHRvcnM/OiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+O1xyXG5cclxuICBwcml2YXRlIG1vZHVsZVVybHNCeU1vZHVsZT86IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gIHB1YmxpYyBjb21tb25GZWVkYmFja1RleHQ/OiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBzbWFydEFwaUNsaWVudHM6IE1hcDxzdHJpbmcsIFNtYXJ0U3ViamVjdDxhbnk+PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHVibGljIHNldCB0cmFuc2xhdGVTZXJ2aWNlKHRyYW5zbGF0ZVNlcnZpY2U6IFNtYXJ0VHJhbnNsYXRlU2VydmljZSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IHRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkLm5leHQoKTtcclxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZUNoYW5nZWQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdHJhbnNsYXRlU2VydmljZSgpOiBTbWFydFRyYW5zbGF0ZVNlcnZpY2UgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZT86IFNtYXJ0VHJhbnNsYXRlU2VydmljZTtcclxuICBwdWJsaWMgdHJhbnNsYXRlU2VydmljZUNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuXHJcbiAgcHVibGljIGNvbXBvbmVudExpYnJhcnk6IENvbXBvbmVudExpYnJhcnkgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB2aWV3OiBWaWV3U2VydmljZSxcclxuICAgIHByaXZhdGUgc2Vzc2lvbjogU21hcnRTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBTbWFydFZpZXdDb250ZXh0RGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBpUXVldWVTZXJ2aWNlOiBBcGlRdWV1ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGluamVjdDogSW5qZWN0b3IsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeSxcclxuICAgIEBJbmplY3QoU01BUlRfREVGQVVMVF9WSUVXX0NPTVBPTkVOVFMpXHJcbiAgICBAT3B0aW9uYWwoKVxyXG4gICAgZGVmYXVsdFZpZXdDb21wb25lbnRzPzogRGVmYXVsdFZpZXdDb21wb25lbnRFbnRyeVtdXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNvbXBvbmVudExpYnJhcnkgPSBjb21wTGliO1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBkZWZhdWx0Vmlld0NvbXBvbmVudHMgPz8gW10pIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29tcG9uZW50cy5zZXQoZW50cnkuY29tcG9uZW50TmFtZSwgZW50cnkuY29tcG9uZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2xsb3codXVpZDogc3RyaW5nLCBkZXRlY3RDaGFuZ2U6IFNtYXJ0U3ViamVjdDxhbnk+KTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5zZXQodXVpZCwgZGV0ZWN0Q2hhbmdlKTtcclxuICB9XHJcbiAgcHVibGljIHVuZm9sbG93KHV1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydEFwaUNsaWVudHMuZGVsZXRlKHV1aWQpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJFbWJlZGRlZFNsb3QoXHJcbiAgICBjb250YWluZXJVdWlkOiBzdHJpbmcsXHJcbiAgICBjb250YWluZXJJZDogc3RyaW5nLFxyXG4gICAgdmNSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBraW5kOiBTbG90S2luZFxyXG4gICk6IHZvaWQge1xyXG4gICAgbGV0IGlubmVyTWFwID0gdGhpcy5lbWJlZGRlZENvbnRhaW5lcnMuZ2V0KGNvbnRhaW5lclV1aWQpO1xyXG4gICAgaWYgKCFpbm5lck1hcCkge1xyXG4gICAgICBpbm5lck1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgdGhpcy5lbWJlZGRlZENvbnRhaW5lcnMuc2V0KGNvbnRhaW5lclV1aWQsIGlubmVyTWFwKTtcclxuICAgIH1cclxuICAgIGlubmVyTWFwLnNldChjb250YWluZXJJZCwgeyB2Y1JlZiwga2luZCB9KTtcclxuXHJcbiAgICAvLyBSZWF0dGFjaCBlbWJlZGRlZCB2aWV3cyB0aGF0IHdlcmUgZGV0YWNoZWQgYmVmb3JlIGxheW91dCByZS1yZW5kZXJcclxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcihcclxuICAgICAgKHJlZikgPT4gcmVmLmNvbnRhaW5lclV1aWQgPT09IGNvbnRhaW5lclV1aWQgJiYgcmVmLmNvbnRhaW5lcklkID09PSBjb250YWluZXJJZFxyXG4gICAgKTtcclxuICAgIGZvciAoY29uc3QgcmVmIG9mIGV4aXN0aW5nKSB7XHJcbiAgICAgIGlmICghcmVmLmNvbXBvbmVudFJlZi5ob3N0Vmlldy5kZXN0cm95ZWQpIHtcclxuICAgICAgICB2Y1JlZi5pbnNlcnQocmVmLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBEcmFpbiBwZW5kaW5nIHF1ZXVlIChtYXRjaCBvbiB0aGUgcmVzb2x2ZWQgc2xvdCwgc28gcm91dGVyLXNsb3QgTk9STUFMIHZpZXdzIG1hdGNoIHRvbylcclxuICAgIGNvbnN0IG1hdGNoZXMgPSAodjogVmlld0RhdGEpID0+IHtcclxuICAgICAgY29uc3QgcyA9IHJlc29sdmVTbG90KHYpO1xyXG4gICAgICByZXR1cm4gcy5jb250YWluZXJVdWlkID09PSBjb250YWluZXJVdWlkICYmIHMuY29udGFpbmVySWQgPT09IGNvbnRhaW5lcklkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IG1hdGNoaW5nID0gdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cy5maWx0ZXIobWF0Y2hlcyk7XHJcbiAgICB0aGlzLnBlbmRpbmdFbWJlZGRlZFZpZXdzID0gdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cy5maWx0ZXIoKHYpID0+ICFtYXRjaGVzKHYpKTtcclxuXHJcbiAgICBpZiAobWF0Y2hpbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCB1cGRhdGVzOiAoVmlld1N0YXRlVXBkYXRlIHwgdW5kZWZpbmVkKVtdID0gbWF0Y2hpbmcubWFwKCh2KSA9PiB0aGlzLm9wZW5WaWV3KHYpKTtcclxuICAgICAgdGhpcy5zZW5kVmlld0NvbnRleHRVcGRhdGVzKHVwZGF0ZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGV0YWNoQWxsRW1iZWRkZWRWaWV3cyhjb250YWluZXJVdWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcigocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCk7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgIGlmIChjaGlsZC5jb21wb25lbnRSZWYuaG9zdFZpZXcuZGVzdHJveWVkKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgLy8gT25seSBkZXRhY2ggdmlld3MgbGl2aW5nIGluIGEgcmUtcmVuZGVyaW5nIExBWU9VVCBzbG90LiBBIFNUQUJMRSBkaXJlY3RpdmVcclxuICAgICAgLy8gc2xvdCAocm91dGVyLW91dGxldCkgbGl2ZXMgb3V0c2lkZSB0aGUgbGF5b3V0ICpuZ0ZvciBhbmQgc3Vydml2ZXMgdGhlIHBhcmVudFxyXG4gICAgICAvLyByZS1yZW5kZXIsIHNvIGl0cyBjaGlsZCBuZWVkcyBubyBkZXRhY2ggcHJvdGVjdGlvbiDigJQgZGV0YWNoaW5nIGl0IGhlcmUgaXNcclxuICAgICAgLy8gd2hhdCBwcm9kdWNlZCB0aGUgZmFsc2Utb3JwaGFuIGRlc3Ryb3kgaW4gbXVsdGktbGV2ZWwgTk9STUFMIG5lc3RpbmdcclxuICAgICAgLy8gKEhvbWUgLT4gTWFpbiAtPiBwYWdlKTogTWFpbiBnb3Qgc3dlcHQgdXAgYnkgSG9tZSdzIGxheW91dCBkYW5jZS4gKCMyODg3MClcclxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmVtYmVkZGVkQ29udGFpbmVycy5nZXQoY29udGFpbmVyVXVpZCk/LmdldChjaGlsZC5jb250YWluZXJJZCk7XHJcbiAgICAgIGlmICghZW50cnkgfHwgZW50cnkua2luZCA9PT0gJ3N0YWJsZScpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpZHggPSBlbnRyeS52Y1JlZi5pbmRleE9mKGNoaWxkLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XHJcbiAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgIGVudHJ5LnZjUmVmLmRldGFjaChpZHgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhbnVwT3JwaGFuZWRFbWJlZGRlZFZpZXdzKGNvbnRhaW5lclV1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgcmVmcyA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoKHJlZikgPT4gcmVmLmNvbnRhaW5lclV1aWQgPT09IGNvbnRhaW5lclV1aWQpO1xyXG4gICAgY29uc3Qgb3JwaGFuZWQ6IFNtYXJ0RW1iZWRkZWRWaWV3UmVmW10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgcmVmIG9mIHJlZnMpIHtcclxuICAgICAgaWYgKHJlZi5jb21wb25lbnRSZWYuaG9zdFZpZXcuZGVzdHJveWVkKSB7XHJcbiAgICAgICAgb3JwaGFuZWQucHVzaChyZWYpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHZjUmVmID0gdGhpcy5nZXRFbWJlZGRlZFNsb3QoY29udGFpbmVyVXVpZCwgcmVmLmNvbnRhaW5lcklkKTtcclxuICAgICAgaWYgKCF2Y1JlZikge1xyXG4gICAgICAgIC8vIFRoZSBzbG90IGlzIHRydWx5IGdvbmUgKGl0cyBsYXlvdXQgaG9zdCB3YXMgdG9ybiBkb3duIGFuZCBub3QgcmVjcmVhdGVkKTpcclxuICAgICAgICAvLyBhIHJlYWwgb3JwaGFuIHRvIGRlc3Ryb3kuIEEgTEFZT1VUIHNsb3QgdGhhdCBjYW1lIGJhY2sgcmUtcmVnaXN0ZXJzIGFuZFxyXG4gICAgICAgIC8vIHJlYXR0YWNoZXMgaXRzIGNoaWxkIChyZWdpc3RlckVtYmVkZGVkU2xvdCk7IGEgU1RBQkxFIHNsb3QgaXMgbmV2ZXIgZGV0YWNoZWRcclxuICAgICAgICAvLyBpbiB0aGUgZmlyc3QgcGxhY2UuIFNvIGEgc3RpbGwtcmVnaXN0ZXJlZCBzbG90IGhlcmUgYWx3YXlzIGhvbGRzIGl0cyB2aWV3IOKAlFxyXG4gICAgICAgIC8vIG5vIHJlYXR0YWNoIGJyYW5jaCBpcyBuZWVkZWQgKHRoYXQgYnJhbmNoIG9ubHkgZXZlciBwYXRjaGVkIHRoZSBzdGFibGVcclxuICAgICAgICAvLyBmYWxzZS1vcnBoYW4sIHdoaWNoIGRldGFjaEFsbEVtYmVkZGVkVmlld3Mgbm8gbG9uZ2VyIGNyZWF0ZXMpLiAoIzI4ODcwKVxyXG4gICAgICAgIG9ycGhhbmVkLnB1c2gocmVmKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCByZWYgb2Ygb3JwaGFuZWQpIHtcclxuICAgICAgaWYgKCFyZWYuY29tcG9uZW50UmVmLmhvc3RWaWV3LmRlc3Ryb3llZCkge1xyXG4gICAgICAgIHJlZi5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLmluZGV4T2YocmVmLnV1aWQpO1xyXG4gICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICB0aGlzLm9wZW5lZFZpZXdEYXRhLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmVtYmVkZGVkVmlld1JlZnMgPSB0aGlzLmVtYmVkZGVkVmlld1JlZnMuZmlsdGVyKChyZWYpID0+ICFvcnBoYW5lZC5pbmNsdWRlcyhyZWYpKTtcclxuICB9XHJcblxyXG4gIGdldENvbXBvc2l0ZU1vZGVsKGNvbnRhaW5lclV1aWQ6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xyXG4gICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoKHJlZikgPT4gcmVmLmNvbnRhaW5lclV1aWQgPT09IGNvbnRhaW5lclV1aWQpO1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICByZXN1bHRbY2hpbGQudXVpZF0gPSBjaGlsZC5jb21wb25lbnRSZWYuaW5zdGFuY2UuZ2V0TW9kZWwoKTtcclxuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHRoaXMuZ2V0Q29tcG9zaXRlTW9kZWwoY2hpbGQudXVpZCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHN1Ym1pdEVtYmVkZGVkRm9ybXMoY29udGFpbmVyVXVpZDogc3RyaW5nLCB2YWxpZGF0ZTogYm9vbGVhbik6IFNtYXJ0Rm9ybUludmFsaWRGaWVsZHMge1xyXG4gICAgY29uc3QgYWxsSW52YWxpZEtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdCBhbGxJbnZhbGlkTmFtZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoKHJlZikgPT4gcmVmLmNvbnRhaW5lclV1aWQgPT09IGNvbnRhaW5lclV1aWQpO1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNoaWxkLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcclxuICAgICAgaW5zdGFuY2Uuc3VibWl0Rm9ybSh2YWxpZGF0ZSk7XHJcbiAgICAgIGlmICh2YWxpZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGludmFsaWQ6IFNtYXJ0Rm9ybUludmFsaWRGaWVsZHMgPSBpbnN0YW5jZS5nZXRJbnZhbGlkRmllbGRzKCk7XHJcbiAgICAgICAgYWxsSW52YWxpZEtleXMucHVzaCguLi5pbnZhbGlkLmludmFsaWRGaWVsZEtleXMpO1xyXG4gICAgICAgIGFsbEludmFsaWROYW1lcy5wdXNoKC4uLmludmFsaWQuaW52YWxpZEZpZWxkTmFtZXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5lc3RlZCA9IHRoaXMuc3VibWl0RW1iZWRkZWRGb3JtcyhjaGlsZC51dWlkLCB2YWxpZGF0ZSk7XHJcbiAgICAgIGFsbEludmFsaWRLZXlzLnB1c2goLi4ubmVzdGVkLmludmFsaWRGaWVsZEtleXMpO1xyXG4gICAgICBhbGxJbnZhbGlkTmFtZXMucHVzaCguLi5uZXN0ZWQuaW52YWxpZEZpZWxkTmFtZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgaW52YWxpZEZpZWxkS2V5czogYWxsSW52YWxpZEtleXMsIGludmFsaWRGaWVsZE5hbWVzOiBhbGxJbnZhbGlkTmFtZXMgfTtcclxuICB9XHJcblxyXG4gIHVucmVnaXN0ZXJFbWJlZGRlZFNsb3QoY29udGFpbmVyVXVpZDogc3RyaW5nLCBjb250YWluZXJJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbm5lck1hcCA9IHRoaXMuZW1iZWRkZWRDb250YWluZXJzLmdldChjb250YWluZXJVdWlkKTtcclxuICAgIGlmIChpbm5lck1hcCkge1xyXG4gICAgICBpbm5lck1hcC5kZWxldGUoY29udGFpbmVySWQpO1xyXG4gICAgICBpZiAoaW5uZXJNYXAuc2l6ZSA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuZW1iZWRkZWRDb250YWluZXJzLmRlbGV0ZShjb250YWluZXJVdWlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbWJlZGRlZFNsb3QoXHJcbiAgICBjb250YWluZXJVdWlkOiBzdHJpbmcsXHJcbiAgICBjb250YWluZXJJZDogc3RyaW5nXHJcbiAgKTogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5lbWJlZGRlZENvbnRhaW5lcnMuZ2V0KGNvbnRhaW5lclV1aWQpPy5nZXQoY29udGFpbmVySWQpPy52Y1JlZjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0aGUgdmlldydzIGNvbXBvbmVudCBpbnRvIGl0cyByZXNvbHZlZCBzbG90LiBSZXR1cm5zIGZhbHNlIGFuZCBxdWV1ZXNcclxuICAgKiB0aGUgdmlldyBpZiB0aGUgc2xvdCBpcyBub3QgcmVnaXN0ZXJlZCB5ZXQgKGRyYWluZWQgb24gcmVnaXN0cmF0aW9uKS5cclxuICAgKi9cclxuICBwcml2YXRlIGluc2VydFZpZXdJbnRvU2xvdCh2aWV3OiBWaWV3RGF0YSwgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT4pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHsgY29udGFpbmVyVXVpZCwgY29udGFpbmVySWQgfSA9IHJlc29sdmVTbG90KHZpZXcpO1xyXG4gICAgY29uc3QgdmNSZWYgPSB0aGlzLmdldEVtYmVkZGVkU2xvdChjb250YWluZXJVdWlkLCBjb250YWluZXJJZCk7XHJcbiAgICBpZiAoIXZjUmVmKSB7XHJcbiAgICAgIC8vIFNsb3Qgbm90IHJlZ2lzdGVyZWQgeWV0OiBxdWV1ZSB0aGUgdmlldyBhbmQgZHJhaW4gaXQgd2hlbiBpdHMgc2xvdCByZWdpc3RlcnNcclxuICAgICAgLy8gKHJlZ2lzdGVyRW1iZWRkZWRTbG90KS4gVGhlIHN5bmNocm9ub3VzIGRldGVjdENoYW5nZXMgYmVsb3cgcmVuZGVycyBhIGZyZXNobHlcclxuICAgICAgLy8gbW91bnRlZCBwYXJlbnQncyB0ZW1wbGF0ZSBpbiB0aGUgc2FtZSBzeW5jVmlldyBwYXNzLCBzbyBhIHBhcmVudCAtPiBjaGlsZCAtPlxyXG4gICAgICAvLyBncmFuZGNoaWxkIGNoYWluIChIb21lIC0+IE1haW4gLT4gcGFnZSkgcmVnaXN0ZXJzIGV2ZXJ5IHNsb3QgaW1tZWRpYXRlbHkgYW5kXHJcbiAgICAgIC8vIHRoZSBxdWV1ZSBkcmFpbnMgd2l0aGluIHRoZSBwYXNzIOKAlCBldmVuIHdoZW4gcmVzdG9yZVZpZXdzIG9wZW5zIGEgY2hpbGQgYmVmb3JlXHJcbiAgICAgIC8vIGl0cyBwYXJlbnQuICgjMjg4NzApXHJcbiAgICAgIHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MucHVzaCh2aWV3KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdmNSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCk7XHJcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UudXVpZCA9IHZpZXcudXVpZDtcclxuICAgIHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5wdXNoKHsgdXVpZDogdmlldy51dWlkLCBjb250YWluZXJVdWlkLCBjb250YWluZXJJZCwgY29tcG9uZW50UmVmIH0pO1xyXG4gICAgLy8gUmVuZGVyIHRoZSBmcmVzaGx5IGNyZWF0ZWQgY29tcG9uZW50IHN5bmNocm9ub3VzbHkgc28gaXRzIG93biBlbWJlZGRlZC1zbG90XHJcbiAgICAvLyBkaXJlY3RpdmVzICh0aGUgcm91dGVyLW91dGxldCBzbG90IG9mIGEgbmVzdGVkIE5PUk1BTCB2aWV3KSByZWdpc3RlciB0aGVpclxyXG4gICAgLy8gY29udGFpbmVycyBpbW1lZGlhdGVseS4gVGhpcyBsZXRzIGEgcGFyZW50IC0+IGNoaWxkIC0+IGdyYW5kY2hpbGQgY2hhaW5cclxuICAgIC8vIChlLmcuIEhvbWUgLT4gTWFpbiAtPiBwYWdlKSBtb3VudCBpbiBhIHNpbmdsZSBzeW5jaHJvbm91cyBzeW5jVmlldyBwYXNzXHJcbiAgICAvLyBpbnN0ZWFkIG9mIGRlcGVuZGluZyBvbiBhIGNoYW5nZS1kZXRlY3Rpb24gdGljayBmaXJpbmcgYmV0d2VlbiBlYWNoIGxldmVsLlxyXG4gICAgLy8gV2l0aG91dCBpdCB0aGUgY2hpbGQgY2Fubm90IHJlc29sdmUgaXRzIHNsb3QsIHF1ZXVlcyBpbnRvXHJcbiAgICAvLyBwZW5kaW5nRW1iZWRkZWRWaWV3cywgYW5kIHRoZSBkcmFpbiByYWNlcyB0aGUgYXN5bmMgdXBkYXRlVmlld0NvbnRleHRcclxuICAgIC8vIHJvdW5kLXRyaXBzIOKAlCBpbnRlcm1pdHRlbnRseSBsZWF2aW5nIGEgcGFyZW50IE9QRU5FRCBpbiBiYWNrZW5kIGJvb2trZWVwaW5nXHJcbiAgICAvLyBidXQgbmV2ZXIgbW91bnRlZCBvbiB0aGUgY2xpZW50LCBzbyBpdHMgc2xvdCBjaGlsZCBzdGF5cyBibGFuay4gKCMyODg3MClcclxuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucnVuKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRBY3Rpb25EZXNjcmlwdG9ycyhhY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPik6IHZvaWQge1xyXG4gICAgdGhpcy5hY3Rpb25EZXNjcmlwdG9ycyA9IGFjdGlvbkRlc2NyaXB0b3JzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFjdGlvbkRlc2NyaXB0b3JzKCk6IE1hcDxzdHJpbmcsIFVpQWN0aW9uRGVzY3JpcHRvcj4gfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCF0aGlzLmFjdGlvbkRlc2NyaXB0b3JzKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGFjdGlvbiBkZXNjcmlwdG9ycyBoYXMgYmVlbiBzZXQgdG8gVmlld0NvbnRleHQuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5hY3Rpb25EZXNjcmlwdG9ycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaWV3SGFuZGxlcnModmlld0hhbmRsZXJzOiBBcnJheTxTbWFydFZpZXdIYW5kbGVyTW9kZWw+KTogdm9pZCB7XHJcbiAgICB0aGlzLnZpZXdIYW5kbGVycyA9IHZpZXdIYW5kbGVycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaWV3QXBpRXJyb3JzKHZpZXdBcGlFcnJvcnM6IFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMpOiB2b2lkIHtcclxuICAgIHRoaXMuc21hcnRWaWV3Q29udGV4dEFwaUVycm9ycyA9IHZpZXdBcGlFcnJvcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0TWVzc2FnZURpYWxvZ05hbWUobWVzc2FnZURpYWxvZ05hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tZXNzYWdlRGlhbG9nbmFtZSA9IG1lc3NhZ2VEaWFsb2dOYW1lO1xyXG4gICAgdGhpcy52aWV3SGFuZGxlcnMucHVzaCh7XHJcbiAgICAgIG5hbWU6IG1lc3NhZ2VEaWFsb2dOYW1lLFxyXG4gICAgICBjb21wb25lbnQ6IE1lc3NhZ2VEaWFsb2dDb21wb25lbnQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VXBVcmxGb3JWaWV3U2VydmljZSgpOiB2b2lkIHtcclxuICAgIHRoaXMudmlldy5jb25maWd1cmF0aW9uLmJhc2VQYXRoID0gdGhpcy51cmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TW9kdWxlVVJMKG1vZHVsZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5tb2R1bGVVcmxzQnlNb2R1bGUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNb2R1bGVzTWFwIGRvZXMgbm90IGV4aXN0LicpO1xyXG4gICAgfVxyXG4gICAgbGV0IG1vZHVsZVVybCA9IHRoaXMubW9kdWxlVXJsc0J5TW9kdWxlPy5nZXQobW9kdWxlKTtcclxuXHJcbiAgICBpZiAoIW1vZHVsZVVybCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZHVsZVVybCBkb2VzIG5vdCBleGlzdCB3aXRoIHRoZSBnaXZlbiBtb2R1bGUuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kdWxlVXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE1vZHVsZVVSTChtb2R1bGVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XHJcbiAgICB0aGlzLm1vZHVsZVVybHNCeU1vZHVsZSA9IG1vZHVsZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VXJsKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnVybCA9IHVybCArICcvdmlldyc7XHJcbiAgICB0aGlzLnNldFVwVXJsRm9yVmlld1NlcnZpY2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBbmRTeW5jVmlld0NvbnRleHQodXVpZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF1dWlkKSB7XHJcbiAgICAgIHV1aWQgPSB0aGlzLmdldFZpZXdDb250ZXh0VXVpZCgpO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5nZXRWaWV3Q29udGV4dCh1dWlkKS50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgYXdhaXQgdGhpcy5zeW5jVmlldygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Vmlld0NvbnRleHQodXVpZDogc3RyaW5nKTogUHJvbWlzZTxWaWV3Q29udGV4dERhdGE+IHtcclxuICAgIHRoaXMudmlld0NvbnRleHQgPSBhd2FpdCB0aGlzLnZpZXcuZ2V0Vmlld0NvbnRleHQodXVpZCkudG9Qcm9taXNlKCk7XHJcbiAgICBpZiAoIXRoaXMudmlld0NvbnRleHQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWV3Q29udGV4dCBkb2VzIG5vdCBleGlzdCB3aXRoIHRoZSBnaXZlbiB1dWlkLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Vmlld0NvbnRleHREYXRhQnlQYWdlTmFtZShwYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxWaWV3RGF0YT4ge1xyXG4gICAgaWYgKCF0aGlzLnZpZXdDb250ZXh0KSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodGhpcy5nZXRWaWV3Q29udGV4dFV1aWQoKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgcGFnZVV1aWQgPSB0aGlzLmdldFV1aWRPZlBhZ2UocGFnZU5hbWUpO1xyXG5cclxuICAgIGxldCB2aWV3Q29udGV4dEJ5UGFnZU5hbWUgPSB0aGlzLnZpZXdDb250ZXh0Py52aWV3cy5maW5kKCh2aWV3KSA9PiB2aWV3LnV1aWQgPT09IHBhZ2VVdWlkKTtcclxuICAgIGlmICghdmlld0NvbnRleHRCeVBhZ2VOYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFZpZXdEYXRhIG9mICR7cGFnZU5hbWV9IGlzIG5vdCBmb3VuZCFgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2aWV3Q29udGV4dEJ5UGFnZU5hbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBkYXRlVmlld0NvbnRleHQoXHJcbiAgICB2aWV3Q29udGV4dFVwZGF0ZTogVmlld0NvbnRleHRVcGRhdGVcclxuICApOiBQcm9taXNlPFZpZXdDb250ZXh0RGF0YSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgdmlld0NvbnRleHRVcGRhdGUuZGV2aWNlSW5mbyA/Pz0ge1xyXG4gICAgICBkZXZpY2VJZDogJ2lkJyxcclxuICAgICAgdXNlckFnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxyXG4gICAgICBwYXJhbWV0ZXJzOiBuZXcgTWFwKCksXHJcbiAgICB9O1xyXG4gICAgdmlld0NvbnRleHRVcGRhdGUuZGV2aWNlSW5mby5jb21wb25lbnRMaWJyYXJ5ID0gdGhpcy5jb21wb25lbnRMaWJyYXJ5O1xyXG5cclxuICAgIHRoaXMudmlld0NvbnRleHQgPSBhd2FpdCB0aGlzLnZpZXcudXBkYXRlVmlld0NvbnRleHQodmlld0NvbnRleHRVcGRhdGUpLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclNlc3Npb25TdG9yYWdlKCk6IHZvaWQge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcclxuICAgIHRoaXMuY2xlYXJFbWJlZGRlZFZpZXdzKCk7XHJcbiAgICB0aGlzLm9wZW5lZFZpZXdEYXRhID0gW107XHJcbiAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGVhciBkb3duIGFsbCBzbG90LWhvc3RlZCB2aWV3IGNvbXBvbmVudHMgb24gYSB2aWV3Q29udGV4dCByZXNldCAoZS5nLiBsb2dvdXQgL1xyXG4gICAqIHZpZXdjb250ZXh0LWxvc3QpLiBXaXRob3V0IHRoaXMgdGhlIHByZXZpb3VzIHZpZXcgdHJlZSBzdGF5cyBtb3VudGVkIGluIHRoZSByb290XHJcbiAgICogc2xvdCBhbmQgdGhlIG5ldyB0cmVlIGlzIGFwcGVuZGVkIGFsb25nc2lkZSBpdC4gRGVzdHJveWluZyBhIHBhcmVudCBjYXNjYWRlcyB0b1xyXG4gICAqIGl0cyBuZXN0ZWQgc2xvdCBkaXJlY3RpdmVzICh3aGljaCB1bnJlZ2lzdGVyIHRoZWlyIGNvbnRhaW5lcnMgdmlhIG5nT25EZXN0cm95KSxcclxuICAgKiBsZWF2aW5nIG9ubHkgdGhlIGhvc3Qtb3duZWQgcm9vdCBzbG90IHJlZ2lzdGVyZWQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjbGVhckVtYmVkZGVkVmlld3MoKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzLmVtYmVkZGVkVmlld1JlZnMpIHtcclxuICAgICAgaWYgKCFyZWYuY29tcG9uZW50UmVmLmhvc3RWaWV3LmRlc3Ryb3llZCkge1xyXG4gICAgICAgIHJlZi5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmVtYmVkZGVkVmlld1JlZnMgPSBbXTtcclxuICAgIHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MgPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdGFydFZpZXdDb250ZXh0KCk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhPiB7XHJcbiAgICB0aGlzLmNsZWFyU2Vzc2lvblN0b3JhZ2UoKTtcclxuICAgIHRoaXMuc2Vzc2lvbi5hZGRIZWFkZXJQYXJhbSh7XHJcbiAgICAgIGhlYWRlck5hbWU6IHRoaXMudmlld0NvbnRleHRVdWlkSGVhZGVyTmFtZSxcclxuICAgICAgdmFsdWU6ICcnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IG5ld1ZpZXdDb250ZXh0OiBWaWV3Q29udGV4dERhdGEgfCB1bmRlZmluZWQgPSBhd2FpdCB0aGlzLnZpZXdcclxuICAgICAgLmNyZWF0ZVZpZXdDb250ZXh0KClcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKCFuZXdWaWV3Q29udGV4dCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFZpZXdDb250ZXh0IHdhcyBjcmVhdGVkJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gbmV3Vmlld0NvbnRleHQ7XHJcbiAgICB0aGlzLnNldFZpZXdDb250ZXh0VXVpZChuZXdWaWV3Q29udGV4dC51dWlkISk7XHJcbiAgICB0aGlzLmdlbmVyYXRpb24rKztcclxuXHJcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRHZW5lcmF0aW9uKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUodXVpZD86IHN0cmluZyk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkPiB7XHJcbiAgICBpZiAodGhpcy5pbml0aWFsaXplUnVubmluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplUnVubmluZy50b1Byb21pc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcgPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAodGhpcy52aWV3SGFuZGxlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIFwiVGhlcmUgYXJlbid0IGFueSB2aWV3SGFuZGxlcnMgaW4gU21hcnRWaWV3Q29udGV4dFNlcnZpY2UhIFByb3ZpZGUgc29tZSB0byB1c2UgaXRzIGZ1bmN0aW9ucy5cIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VEaWFsb2duYW1lKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXNzYWdlRGlhbG9nTmFtZSBwcm92aWRlZCBieSB0aGUgYmFja2VuZCBoYXMgbm90IGJlZW4gc2V0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodXVpZCkge1xyXG4gICAgICAgICAgdGhpcy5zZXRWaWV3Q29udGV4dFV1aWQodXVpZCk7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRWaWV3Q29udGV4dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0Vmlld0NvbnRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0ITtcclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nLm5leHQodGhpcy52aWV3Q29udGV4dCEpO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5pdFZpZXdDb250ZXh0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHV1aWQ7XHJcbiAgICB0cnkge1xyXG4gICAgICB1dWlkID0gdGhpcy5nZXRWaWV3Q29udGV4dFV1aWQoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpO1xyXG4gICAgICB1dWlkID0gdGhpcy5nZXRWaWV3Q29udGV4dFV1aWQoKTtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSh1dWlkKTtcclxuICAgIGF3YWl0IHRoaXMucmVzdG9yZVZpZXdzKHV1aWQpO1xyXG4gICAgYXdhaXQgdGhpcy5nZXRBbmRTeW5jVmlld0NvbnRleHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEh5ZHJhdGVzIHRoZSB2aWV3LWNvbnRleHQgc3RhdGUgZnJvbSBhbiBhbHJlYWR5LWV4aXN0aW5nIFVVSUQgcHJvdmlkZWRcclxuICAgKiBleHRlcm5hbGx5IChlLmcuIGJ5IGEgbmF0aXZlIG1vYmlsZSBzaGVsbCB2aWEgVVJMIGZyYWdtZW50KS4gVW5saWtlXHJcbiAgICogYGluaXRpYWxpemUodXVpZClgLCB0aGlzIG1ldGhvZCBkb2VzIE5PVCBmYWxsIGJhY2sgdG8gY3JlYXRpbmcgYSBmcmVzaFxyXG4gICAqIHZpZXdDb250ZXh0IGlmIHRoZSBiYWNrZW5kIHJlamVjdHMgdGhlIFVVSUQg4oCUIHRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG9cclxuICAgKiBzdXJmYWNlIHRoZSBmYWlsdXJlICh0eXBpY2FsbHkgdmlhIHRoZSBib290c3RyYXAncyBgb25TdGFydEVycm9yYCBob29rKS5cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgaW5pdEZyb21FeGlzdGluZ1ZpZXdDb250ZXh0KHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zZXRWaWV3Q29udGV4dFV1aWQodXVpZCk7XHJcbiAgICBhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpO1xyXG4gICAgYXdhaXQgdGhpcy5yZXN0b3JlVmlld3ModXVpZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5pdE5ld1ZpZXdDb250ZXh0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuaW5pdGlOZXdDb250ZXh0UnVubmluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbml0aU5ld0NvbnRleHRSdW5uaW5nLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0aU5ld0NvbnRleHRSdW5uaW5nID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Vmlld0NvbnRleHQoKTtcclxuICAgICAgbGV0IHV1aWQgPSB0aGlzLmdldFZpZXdDb250ZXh0VXVpZCgpO1xyXG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemUodXVpZCk7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVzdG9yZVZpZXdzKHV1aWQpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pbml0aU5ld0NvbnRleHRSdW5uaW5nLm5leHQoKTtcclxuICAgICAgdGhpcy5pbml0aU5ld0NvbnRleHRSdW5uaW5nLmNvbXBsZXRlKCk7XHJcbiAgICAgIHRoaXMuaW5pdGlOZXdDb250ZXh0UnVubmluZyA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuVmlldyh2aWV3OiBWaWV3RGF0YSk6IFZpZXdTdGF0ZVVwZGF0ZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBsZXQgYWxyZWFkeU9wZW5lZCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLnNvbWUoKHV1aWQpID0+IHV1aWQgPT09IHZpZXcudXVpZCk7XHJcbiAgICBpZiAoYWxyZWFkeU9wZW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdCB2aWV3SGFuZGxlciA9IHJlc29sdmVWaWV3SGFuZGxlcih0aGlzLnZpZXdIYW5kbGVycywgdGhpcy5kZWZhdWx0Q29tcG9uZW50cywgdmlldyk7XHJcblxyXG4gICAgaWYgKCF2aWV3SGFuZGxlcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3YXMgbm90IGZvdW5kIGJ5IHZpZXcgbmFtZTogJHt2aWV3LnZpZXdOYW1lfSAoY29tcG9uZW50TmFtZTogJHt2aWV3LmNvbXBvbmVudE5hbWV9KWBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLkRJQUxPRykge1xyXG4gICAgICBpZiAoIXZpZXdIYW5kbGVyLmNvbXBvbmVudCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBDb21wb25lbnQgaXMgdW5kZWZpbmVkIGluIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3aXRoIG5hbWU6ICR7dmlldy52aWV3TmFtZX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgcmVmSXNBbHJhZHlBZGRlZCA9IHRoaXMuZGlhbG9nUmVmcy5zb21lKFxyXG4gICAgICAgIChyZWY6IFNtYXJ0Vmlld0RpYWxvZ1JlZikgPT4gcmVmLnV1aWQgPT09IHZpZXcudXVpZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIXJlZklzQWxyYWR5QWRkZWQpIHtcclxuICAgICAgICBsZXQgZGlhbG9nUmVmO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcy5wdXNoKHZpZXcudXVpZCk7XHJcbiAgICAgICAgICB0aGlzLm9wZW5lZFZpZXdEYXRhLnB1c2godmlldyk7XHJcbiAgICAgICAgICB0aGlzLnNldFV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlldy51dWlkLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcclxuICAgICAgICAgIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW5Db21wb25lbnRBc0RpYWxvZyhcclxuICAgICAgICAgICAgdmlld0hhbmRsZXIuY29tcG9uZW50LFxyXG4gICAgICAgICAgICB2aWV3SGFuZGxlci5uYW1lLFxyXG4gICAgICAgICAgICB2aWV3LnV1aWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcGVuZWRWaWV3VXVpZHMuaW5kZXhPZih2aWV3LnV1aWQpO1xyXG4gICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy5vcGVuZWRWaWV3RGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVXVpZE9mUGFnZSh2aWV3LnZpZXdOYW1lLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnNldFV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlldy51dWlkLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRpYWxvZ0Rpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgbGV0IGlzTWVzc2FnZURpYWxvZyA9IHZpZXcudmlld05hbWUgPT09IHRoaXMubWVzc2FnZURpYWxvZ25hbWU7XHJcbiAgICAgICAgaWYgKCFpc01lc3NhZ2VEaWFsb2cpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRpYWxvZ0Rpc2FibGVDbG9zZSA9IHRoaXMuaW5qZWN0LmdldChESUFMT0dfRElTQUJMRV9DTE9TRSk7XHJcbiAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHJlYWRpbmcgRElBTE9HX0RJU0FCTEVfQ0xPU0UnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRpYWxvZ1JlZiBpbnN0YW5jZW9mIE1hdERpYWxvZ1JlZikge1xyXG4gICAgICAgICAgZGlhbG9nUmVmLmRpc2FibGVDbG9zZSA9IGRpYWxvZ0Rpc2FibGVDbG9zZTtcclxuICAgICAgICAgIC8vIGlmIChpc01lc3NhZ2VEaWFsb2cpIHtcclxuICAgICAgICAgIC8vICAgaWYgKHZpZXcubWVzc2FnZT8ub3B0aW9ucyAmJiB2aWV3Lm1lc3NhZ2Uub3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgaWYgKCFkaWFsb2dEaXNhYmxlQ2xvc2UpIHtcclxuICAgICAgICAgICAgZGlhbG9nUmVmXHJcbiAgICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtQWN0aW9uKHZpZXcudXVpZCwgeyBjb2RlOiBEZWZhdWx0VWlBY3Rpb25Db2RlX0NMT1NFLCBwYXJhbXM6IHt9IH0pO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlhbG9nUmVmIGluc3RhbmNlb2YgRHluYW1pY0RpYWxvZ1JlZikge1xyXG4gICAgICAgICAgaWYgKCFkaWFsb2dEaXNhYmxlQ2xvc2UpIHtcclxuICAgICAgICAgICAgZGlhbG9nUmVmLm9uRGVzdHJveS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtQWN0aW9uKHZpZXcudXVpZCwgeyBjb2RlOiBEZWZhdWx0VWlBY3Rpb25Db2RlX0NMT1NFLCBwYXJhbXM6IHt9IH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmcy5wdXNoKHtcclxuICAgICAgICAgIHV1aWQ6IHZpZXcudXVpZCxcclxuICAgICAgICAgIGRpYWxvZ1JlZixcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLk5PUk1BTCkge1xyXG4gICAgICBpZiAoIXZpZXdIYW5kbGVyLmNvbXBvbmVudCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IGlzIHVuZGVmaW5lZCBpbiBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2l0aCBuYW1lOiAke3ZpZXcudmlld05hbWV9YCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gQ09NUEFUSUJJTElUWSBTSElNICgjMjg4NzAsIGludGVudGlvbmFsKTogc29tZSBjaGlsZCBzZXJ2aWNlcyAoU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UsXHJcbiAgICAgIC8vIFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZSkgYW5kIGdlbmVyaWMgY29tcG9uZW50cyAoU2VhcmNoUGFnZUNvbXBvbmVudCwgR2VuZXJpY1BhZ2VDb21wb25lbnQpXHJcbiAgICAgIC8vIHN0aWxsIHJlc29sdmUgdGhlaXIgdmlldyB1dWlkIHZpYSB0aGUgcGFnZU5hbWUgLT4gZ2V0VXVpZE9mUGFnZShzZXNzaW9uU3RvcmFnZSkgaW5kaXJlY3Rpb25cclxuICAgICAgLy8gaW4gdGhlaXIgQ09OU1RSVUNUT1IsIHdoaWNoIHJ1bnMgaW5zaWRlIGNyZWF0ZUNvbXBvbmVudCgpIGJlbG93IOKAlCBiZWZvcmUgb3BlblZpZXcncyBub3JtYWxcclxuICAgICAgLy8gYm9va2tlZXBpbmcuIFNvIHRoZSBtYXBwaW5nIG11c3QgYmUgd3JpdHRlbiBoZXJlLCBhaGVhZCBvZiBjb21wb25lbnQgY3JlYXRpb24uIFRoZSBwcm9wZXJcclxuICAgICAgLy8gZml4IChmZWVkIHRob3NlIGNvbnN1bWVycyB0aGUgaW5qZWN0ZWQgdXVpZCArIGRlZmVyIHRoZWlyIGluaXQpIGlzIGRlZmVycmVkIGNvbnN1bWVyIHBsdW1iaW5nO1xyXG4gICAgICAvLyB1bnRpbCB0aGVuIHRoaXMgd3JpdGUga2VlcHMgdGhlIGluZGlyZWN0aW9uIGNvcnJlY3QgaW4gdGhlIHNsb3Qgd29ybGQuXHJcbiAgICAgIHRoaXMuc2V0VXVpZE9mUGFnZSh2aWV3LnZpZXdOYW1lLCB2aWV3LnV1aWQsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xyXG4gICAgICAvLyBBIE5PUk1BTCB2aWV3IHdpdGggbm8gY29udGFpbmVyVXVpZCBsYW5kcyBpbiB0aGUgaG9zdCByb290IHNsb3QgKHJlc29sdmVTbG90IG1hcHNcclxuICAgICAgLy8gaXQgdG8gUk9PVF9DT05UQUlORVJfVVVJRCk7IGlmIG5vIHNsb3QgaXMgcmVnaXN0ZXJlZCB5ZXQgaXQgcXVldWVzIGFuZCBkcmFpbnMgbGF0ZXIuXHJcbiAgICAgIGNvbnN0IGluc2VydGVkID0gdGhpcy5pbnNlcnRWaWV3SW50b1Nsb3Qodmlldywgdmlld0hhbmRsZXIuY29tcG9uZW50KTtcclxuICAgICAgaWYgKCFpbnNlcnRlZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH0gZWxzZSBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5FTUJFRERFRCkge1xyXG4gICAgICBpZiAoIXZpZXdIYW5kbGVyLmNvbXBvbmVudCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBDb21wb25lbnQgaXMgdW5kZWZpbmVkIGluIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3aXRoIG5hbWU6ICR7dmlldy52aWV3TmFtZX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBXcml0ZSB0aGUgcGFnZS11dWlkIG1hcHBpbmcgYWhlYWQgb2YgY29tcG9uZW50IGNyZWF0aW9uIHNvIGNvbnN0cnVjdG9yLXRpbWVcclxuICAgICAgLy8gYW5kIG5lc3RlZCBnZXRVdWlkT2ZQYWdlKHZpZXdOYW1lKSBjb25zdW1lcnMgKGZpbHRlciwgdHJlZSkgcmVzb2x2ZS4gVGhlXHJcbiAgICAgIC8vIHBhZ2UuPHZpZXdOYW1lPiBrZXkgaXMgZGlzdGluY3QgcGVyIHZpZXcsIHNvIGl0IG5ldmVyIGNvbGxpZGVzLiBUaGVcclxuICAgICAgLy8gY29tcG9uZW50Ljxjb21wb25lbnROYW1lPiByZXZlcnNlIGtleSBDQU4gYmUgb3ZlcndyaXR0ZW4gYnkgYW5vdGhlclxyXG4gICAgICAvLyBjb25jdXJyZW50IGR5bmFtaWMgdmlldyBvZiB0aGUgc2FtZSBkZWZhdWx0IGNvbXBvbmVudCwgYnV0IGl0IGlzIHJlYWQgb25seVxyXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IGluIHRoZSBjb25zdHJ1Y3RvciAocmlnaHQgYWZ0ZXIgdGhpcyB3cml0ZSkgYW5kIHNsb3Qgdmlld3NcclxuICAgICAgLy8gbG9hZCB2aWEgdGhlIGluamVjdGVkIF91dWlkIGFmdGVyd2FyZHMsIHNvIHRoZSBvdmVyd3JpdGUgbmV2ZXIgbWlzLXJlc29sdmVzXHJcbiAgICAgIC8vIGF0IHJ1bnRpbWUuICgjMjg4NzApXHJcbiAgICAgIHRoaXMuc2V0VXVpZE9mUGFnZSh2aWV3LnZpZXdOYW1lLCB2aWV3LnV1aWQsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xyXG4gICAgICBjb25zdCBpbnNlcnRlZCA9IHRoaXMuaW5zZXJ0Vmlld0ludG9TbG90KHZpZXcsIHZpZXdIYW5kbGVyLmNvbXBvbmVudCk7XHJcbiAgICAgIGlmICghaW5zZXJ0ZWQpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0eXBlIG9mIHRoZSB2aWV3IGFuZCBpdHMgdmlld0hhbmRsZXIgaXMgbm90IHRoZSBzYW1lIScpO1xyXG4gICAgfVxyXG5cclxuICAgIHZpZXcuc3RhdGUgPSBWaWV3U3RhdGUuT1BFTkVEO1xyXG5cclxuICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnB1c2godmlldy51dWlkKTtcclxuICAgIHRoaXMub3BlbmVkVmlld0RhdGEucHVzaCh2aWV3KTtcclxuXHJcbiAgICBpZiAodmlldy50eXBlICE9PSBWaWV3VHlwZS5FTUJFRERFRCkge1xyXG4gICAgICB0aGlzLnNldFV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlldy51dWlkLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcclxuICAgICAgdGhpcy51dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWQubmV4dCh2aWV3LnZpZXdOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzdGF0ZTogVmlld1N0YXRlLk9QRU5FRCxcclxuICAgICAgdXVpZDogdmlldy51dWlkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZVZpZXcodmlldzogVmlld0RhdGEpOiBWaWV3U3RhdGVVcGRhdGVbXSB7XHJcbiAgICBjb25zdCB2aWV3SGFuZGxlciA9IHJlc29sdmVWaWV3SGFuZGxlcih0aGlzLnZpZXdIYW5kbGVycywgdGhpcy5kZWZhdWx0Q29tcG9uZW50cywgdmlldyk7XHJcblxyXG4gICAgaWYgKCF2aWV3SGFuZGxlcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3YXMgbm90IGZvdW5kIGJ5IHZpZXcgbmFtZTogJHt2aWV3LnZpZXdOYW1lfSAoY29tcG9uZW50TmFtZTogJHt2aWV3LmNvbXBvbmVudE5hbWV9KWBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cGRhdGVzOiBWaWV3U3RhdGVVcGRhdGVbXSA9IFtdO1xyXG5cclxuICAgIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLkRJQUxPRykge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dSZWZzLmZpbmQoXHJcbiAgICAgICAgKGRpYWxvZ1JlZjogU21hcnRWaWV3RGlhbG9nUmVmKSA9PiBkaWFsb2dSZWYudXVpZCA9PT0gdmlldy51dWlkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChkaWFsb2dSZWYpIHtcclxuICAgICAgICBkaWFsb2dSZWYuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5kaWFsb2dSZWZzLmluZGV4T2YoZGlhbG9nUmVmKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnRGlhbG9nUmVmIGlzIG5vdCBmb3VuZCBieSB1dWlkLicpO1xyXG4gICAgICB9XHJcbiAgICAgIHVwZGF0ZXMucHVzaCguLi50aGlzLmNsZWFudXBFbWJlZGRlZENoaWxkcmVuKHZpZXcudXVpZCkpO1xyXG4gICAgfSBlbHNlIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLk5PUk1BTCkge1xyXG4gICAgICAvLyBEZXN0cm95IG5lc3RlZCBjaGlsZHJlbiBmaXJzdCwgdGhlbiB0aGUgdmlldydzIG93biBzbG90IGNvbXBvbmVudC5cclxuICAgICAgLy8gZGVzdHJveVZpZXdSZWYgaXMgYSBuby1vcCBmb3IgdGhlIGxlZ2FjeSByb3V0ZS1yZW5kZXJlZCAocm9vdGxlc3MpIGNhc2UuXHJcbiAgICAgIHVwZGF0ZXMucHVzaCguLi50aGlzLmNsZWFudXBFbWJlZGRlZENoaWxkcmVuKHZpZXcudXVpZCkpO1xyXG4gICAgICB0aGlzLmRlc3Ryb3lWaWV3UmVmKHZpZXcudXVpZCk7XHJcbiAgICB9IGVsc2UgaWYgKHZpZXcudHlwZSA9PT0gVmlld1R5cGUuRU1CRURERUQpIHtcclxuICAgICAgdGhpcy5kZXN0cm95Vmlld1JlZih2aWV3LnV1aWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdHlwZSBvZiB0aGUgdmlldyBhbmQgaXRzIHZpZXdIYW5kbGVyIGlzIG5vdCB0aGUgc2FtZSEnKTtcclxuICAgIH1cclxuXHJcbiAgICB2aWV3LnN0YXRlID0gVmlld1N0YXRlLkNMT1NFRDtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLmluZGV4T2Yodmlldy51dWlkKTtcclxuICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgLy8gQ2xlYXIgZm9yIGV2ZXJ5IHR5cGU6IG9wZW5WaWV3IG5vdyB3cml0ZXMgdGhlIHBhZ2UtdXVpZCBtYXBwaW5nIGZvclxyXG4gICAgICAvLyBFTUJFRERFRCB2aWV3cyB0b28gKCMyODg3MCksIHNvIHRoZSBjbGVhciBtdXN0IGJlIHN5bW1ldHJpYyB0byBhdm9pZCBhXHJcbiAgICAgIC8vIHN0YWxlIHNlc3Npb25TdG9yYWdlIGVudHJ5LiBjbGVhclV1aWRPZlBhZ2UgaXMgYSBuby1vcCBmb3Iga2V5cyBuZXZlclxyXG4gICAgICAvLyB3cml0dGVuLCBzbyB0aGlzIHN0YXlzIHNhZmUgZm9yIHRoZSBsZWdhY3kgcm9vdGxlc3MgY2FzZS5cclxuICAgICAgdGhpcy5jbGVhclV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlcy5wdXNoKHtcclxuICAgICAgc3RhdGU6IFZpZXdTdGF0ZS5DTE9TRUQsXHJcbiAgICAgIHV1aWQ6IHZpZXcudXVpZCxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB1cGRhdGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhbnVwRW1iZWRkZWRDaGlsZHJlbihjb250YWluZXJVdWlkOiBzdHJpbmcpOiBWaWV3U3RhdGVVcGRhdGVbXSB7XHJcbiAgICBjb25zdCB1cGRhdGVzOiBWaWV3U3RhdGVVcGRhdGVbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcigocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCk7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgIGNoaWxkLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICAgIHVwZGF0ZXMucHVzaCh7IHN0YXRlOiBWaWV3U3RhdGUuQ0xPU0VELCB1dWlkOiBjaGlsZC51dWlkIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbWJlZGRlZFZpZXdSZWZzID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcihcclxuICAgICAgKHJlZikgPT4gcmVmLmNvbnRhaW5lclV1aWQgIT09IGNvbnRhaW5lclV1aWRcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cyA9IHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MuZmlsdGVyKFxyXG4gICAgICAodikgPT4gdi5jb250YWluZXJVdWlkICE9PSBjb250YWluZXJVdWlkXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZW1iZWRkZWRDb250YWluZXJzLmRlbGV0ZShjb250YWluZXJVdWlkKTtcclxuXHJcbiAgICByZXR1cm4gdXBkYXRlcztcclxuICB9XHJcblxyXG4gIC8qKiBEZXN0cm95IHRoZSBjb21wb25lbnQgZm9yIGEgdmlldyBsaXZpbmcgaW4gYSBzbG90LCBpZiBwcmVzZW50IChuby1vcCBmb3Igcm91dGUtcmVuZGVyZWQgdmlld3MpLiAqL1xyXG4gIHByaXZhdGUgZGVzdHJveVZpZXdSZWYodXVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWZJbmRleCA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maW5kSW5kZXgoKHJlZikgPT4gcmVmLnV1aWQgPT09IHV1aWQpO1xyXG4gICAgaWYgKHJlZkluZGV4ID49IDApIHtcclxuICAgICAgdGhpcy5lbWJlZGRlZFZpZXdSZWZzW3JlZkluZGV4XS5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLmVtYmVkZGVkVmlld1JlZnMuc3BsaWNlKHJlZkluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MgPSB0aGlzLnBlbmRpbmdFbWJlZGRlZFZpZXdzLmZpbHRlcigodikgPT4gdi51dWlkICE9PSB1dWlkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2VuZFZpZXdDb250ZXh0VXBkYXRlcyh1cGRhdGVzVG9TZW5kOiAoVmlld1N0YXRlVXBkYXRlIHwgdW5kZWZpbmVkKVtdKSB7XHJcbiAgICBjb25zdCB1cGRhdGVzOiBWaWV3U3RhdGVVcGRhdGVbXSA9IFtdO1xyXG4gICAgdXBkYXRlc1RvU2VuZC5mb3JFYWNoKCh1cGRhdGUpID0+IHtcclxuICAgICAgaWYgKHVwZGF0ZSAhPT0gdW5kZWZpbmVkICYmIHVwZGF0ZSAhPT0gbnVsbCkgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7XHJcbiAgICB9KTtcclxuICAgIGlmICh1cGRhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3Q29udGV4dCh7XHJcbiAgICAgICAgdXBkYXRlcyxcclxuICAgICAgICB1dWlkOiB0aGlzLnZpZXdDb250ZXh0Py51dWlkLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIGFzeW5jIHJlc3RvcmVWaWV3cyh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHVwZGF0ZXM6IFZpZXdTdGF0ZVVwZGF0ZVtdID0gW107XHJcbiAgICBpZiAoIXRoaXMudmlld0NvbnRleHQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRWaWV3Q29udGV4dCh1dWlkKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0IS52aWV3cy5maWx0ZXIoXHJcbiAgICAgICh2aWV3KSA9PiB2aWV3LnN0YXRlID09PSBWaWV3U3RhdGUuT1BFTkVEIHx8IHZpZXcuc3RhdGUgPT09IFZpZXdTdGF0ZS5UT19PUEVOXHJcbiAgICApLm1hcCgodmlldzogVmlld0RhdGEpID0+IHtcclxuICAgICAgY29uc3QgdXBkYXRlID0gdGhpcy5vcGVuVmlldyh2aWV3KTtcclxuICAgICAgaWYgKHVwZGF0ZSkge1xyXG4gICAgICAgIHVwZGF0ZXMucHVzaCh1cGRhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGF3YWl0IHRoaXMuc2VuZFZpZXdDb250ZXh0VXBkYXRlcyh1cGRhdGVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmV1c2VFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmluamVjdC5nZXQoUkVVU0VfUk9VVEVSX1NMT1RfQ09NUE9ORU5UKTtcclxuICAgICAgcmV0dXJuIHZhbHVlICE9PSBmYWxzZTsgLy8gZGVmYXVsdCBPTiB3aGVuIHVuc2V0L251bGxcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhlY3V0ZVJldXNlKG9sZFZpZXc6IFZpZXdEYXRhLCBuZXdWaWV3OiBWaWV3RGF0YSk6IFZpZXdTdGF0ZVVwZGF0ZVtdIHtcclxuICAgIGNvbnN0IHJlZiA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maW5kKChyKSA9PiByLnV1aWQgPT09IG9sZFZpZXcudXVpZCk7XHJcbiAgICBpZiAoIXJlZikge1xyXG4gICAgICAvLyBObyBsaXZlIGNvbXBvbmVudCB0byByZXVzZSAoZS5nLiB3YXMgcm91dGUtcmVuZGVyZWQpIOKAlCBmYWxsIGJhY2sgdG8gY2xvc2UgKyBvcGVuLlxyXG4gICAgICBjb25zdCB1cGRhdGVzID0gWy4uLnRoaXMuY2xvc2VWaWV3KG9sZFZpZXcpXTtcclxuICAgICAgY29uc3Qgb3BlbmVkID0gdGhpcy5vcGVuVmlldyhuZXdWaWV3KTtcclxuICAgICAgaWYgKG9wZW5lZCkgdXBkYXRlcy5wdXNoKG9wZW5lZCk7XHJcbiAgICAgIHJldHVybiB1cGRhdGVzO1xyXG4gICAgfVxyXG4gICAgLy8gVGhlIHJldXNlZCBwYXJlbnQgaXMgbG9naWNhbGx5IGEgZnJlc2ggcGFnZSAobmV3IHV1aWQpOyBpdHMgcHJldmlvdXMgZW1iZWRkZWRcclxuICAgIC8vIGNoaWxkcmVuIGRvIG5vdCBjYXJyeSBvdmVyICh0aGUgYmFja2VuZCBsZWF2ZXMgdGhlbSBrZXllZCB1bmRlciB0aGUgb2xkIHBhcmVudFxyXG4gICAgLy8gdXVpZCkuIFRlYXIgdGhlbSBkb3duIGhlcmUgYW5kIHJlcG9ydCB0aGVtIENMT1NFRC5cclxuICAgIGNvbnN0IGNoaWxkVXBkYXRlcyA9IHRoaXMuY2xlYW51cEVtYmVkZGVkQ2hpbGRyZW4ob2xkVmlldy51dWlkKTtcclxuXHJcbiAgICByZWYuY29tcG9uZW50UmVmLmluc3RhbmNlLnV1aWQgPSBuZXdWaWV3LnV1aWQ7IC8vIHNldHRlciBydW5zIHVuZm9sbG93KG9sZCkvZm9sbG93KG5ldylcclxuICAgIHJlZi51dWlkID0gbmV3Vmlldy51dWlkO1xyXG5cclxuICAgIGNvbnN0IG9sZElkeCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLmluZGV4T2Yob2xkVmlldy51dWlkKTtcclxuICAgIGlmIChvbGRJZHggPj0gMCkge1xyXG4gICAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcy5zcGxpY2Uob2xkSWR4LCAxKTtcclxuICAgICAgdGhpcy5vcGVuZWRWaWV3RGF0YS5zcGxpY2Uob2xkSWR4LCAxKTtcclxuICAgIH1cclxuICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnB1c2gobmV3Vmlldy51dWlkKTtcclxuICAgIHRoaXMub3BlbmVkVmlld0RhdGEucHVzaChuZXdWaWV3KTtcclxuXHJcbiAgICByZWYuY29tcG9uZW50UmVmLmluc3RhbmNlLnJ1bigpO1xyXG5cclxuICAgIG9sZFZpZXcuc3RhdGUgPSBWaWV3U3RhdGUuQ0xPU0VEO1xyXG4gICAgbmV3Vmlldy5zdGF0ZSA9IFZpZXdTdGF0ZS5PUEVORUQ7XHJcblxyXG4gICAgLy8gTWlycm9yIHRoZSBub3JtYWwgb3BlblZpZXcgdGFpbCBzbyBnZXRVdWlkT2ZQYWdlIGNvbnN1bWVycyAoZS5nLiB0cmVlcykgcmVzb2x2ZSB0aGUgbmV3IHV1aWQuXHJcbiAgICBjb25zdCB2aWV3SGFuZGxlciA9IHJlc29sdmVWaWV3SGFuZGxlcih0aGlzLnZpZXdIYW5kbGVycywgdGhpcy5kZWZhdWx0Q29tcG9uZW50cywgbmV3Vmlldyk7XHJcbiAgICB0aGlzLnNldFV1aWRPZlBhZ2UobmV3Vmlldy52aWV3TmFtZSwgbmV3Vmlldy51dWlkLCB2aWV3SGFuZGxlcj8uY29tcG9uZW50TmFtZSk7XHJcbiAgICB0aGlzLnV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZC5uZXh0KG5ld1ZpZXcudmlld05hbWUpO1xyXG5cclxuICAgIHJldHVybiBbXHJcbiAgICAgIC4uLmNoaWxkVXBkYXRlcyxcclxuICAgICAgeyBzdGF0ZTogVmlld1N0YXRlLkNMT1NFRCwgdXVpZDogb2xkVmlldy51dWlkIH0sXHJcbiAgICAgIHsgc3RhdGU6IFZpZXdTdGF0ZS5PUEVORUQsIHV1aWQ6IG5ld1ZpZXcudXVpZCB9LFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzeW5jVmlldygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHVwZGF0ZXM6IChWaWV3U3RhdGVVcGRhdGUgfCB1bmRlZmluZWQpW10gPSBbXTtcclxuICAgIGNvbnN0IG9wcyA9IGJ1aWxkVmlld09wcyh0aGlzLnZpZXdDb250ZXh0Py52aWV3cyA/PyBbXSwgdGhpcy5yZXVzZUVuYWJsZWQoKSk7XHJcbiAgICBmb3IgKGNvbnN0IG9wIG9mIG9wcykge1xyXG4gICAgICBpZiAob3Aua2luZCA9PT0gJ29wZW4nKSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKHRoaXMub3BlblZpZXcob3AudmlldykpO1xyXG4gICAgICB9IGVsc2UgaWYgKG9wLmtpbmQgPT09ICdjbG9zZScpIHtcclxuICAgICAgICB1cGRhdGVzLnB1c2goLi4udGhpcy5jbG9zZVZpZXcob3AudmlldykpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVwZGF0ZXMucHVzaCguLi50aGlzLmV4ZWN1dGVSZXVzZShvcC5vbGRWaWV3LCBvcC5uZXdWaWV3KSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2aWV3RGF0YVRvQ2xvc2UgPSB0aGlzLm9wZW5lZFZpZXdEYXRhLmZpbHRlcihcclxuICAgICAgKHZpZXdEYXRhOiBWaWV3RGF0YSkgPT5cclxuICAgICAgICAhdGhpcy52aWV3Q29udGV4dD8udmlld3NcclxuICAgICAgICAgIC5mbGF0TWFwKCh2aWV3RGF0YTogVmlld0RhdGEpID0+IHZpZXdEYXRhLnV1aWQpXHJcbiAgICAgICAgICAuaW5jbHVkZXModmlld0RhdGEudXVpZClcclxuICAgICk7XHJcbiAgICBpZiAodmlld0RhdGFUb0Nsb3NlPy5sZW5ndGgpIHtcclxuICAgICAgdmlld0RhdGFUb0Nsb3NlLm1hcCgodmlld0RhdGE6IFZpZXdEYXRhKSA9PiB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKC4uLnRoaXMuY2xvc2VWaWV3KHZpZXdEYXRhKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlld0NvbnRleHQ/LmxpbmtzPy5tYXAoKGRhdGE6IExpbmspID0+IHtcclxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgbGV0IHRhcmdldCA9ICdfYmxhbmsnOyAvLyBkZWZhdWx0XHJcbiAgICAgIHN3aXRjaCAoZGF0YS50YXJnZXQgPz8gTGlua1RhcmdldEVudW0uQkxBTkspIHtcclxuICAgICAgICBjYXNlICdTRUxGJzpcclxuICAgICAgICAgIHRhcmdldCA9ICdfc2VsZic7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdCTEFOSyc6XHJcbiAgICAgICAgICB0YXJnZXQgPSAnX2JsYW5rJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1BBUkVOVCc6XHJcbiAgICAgICAgICB0YXJnZXQgPSAnX3BhcmVudCc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdUT1AnOlxyXG4gICAgICAgICAgdGFyZ2V0ID0gJ190b3AnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsIHRhcmdldCk7XHJcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgZGF0YS51cmwpO1xyXG4gICAgICBpZiAoZGF0YS5kb3dubG9hZCkge1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGRhdGEuZmlsZW5hbWUgPz8gJycpO1xyXG4gICAgICB9XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgICAgbGluay5yZW1vdmUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RhcnREb3dubG9hZHNGaWxlcyh0aGlzLnZpZXdDb250ZXh0Py5kb3dubG9hZHMgfHwgW10pO1xyXG5cclxuICAgIGNvbnN0IGNsaXBib2FyZFRleHQgPSB0aGlzLnZpZXdDb250ZXh0Py5jbGlwYm9hcmREYXRhXHJcbiAgICAgID8ubWFwKChjZDogQ2xpcGJvYXJkRGF0YSkgPT4gY2QudGV4dCB8fCAnJylcclxuICAgICAgLmpvaW4oJycpO1xyXG4gICAgaWYgKGNsaXBib2FyZFRleHQpIHtcclxuICAgICAgY29uc3QgY2xpcGJvYXJkID0gbmF2aWdhdG9yLmNsaXBib2FyZDtcclxuICAgICAgLy8gYXZhaWxhYmxlIG9ubHkgaW4gc2VjdXJlIGNvbnRleHRzLlxyXG4gICAgICBpZiAoY2xpcGJvYXJkKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNsaXBib2FyZFxyXG4gICAgICAgICAgICAud3JpdGVUZXh0KGNsaXBib2FyZFRleHQpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNvcHkgdGV4dCB0byBjbGlwYm9hcmQnLCBlKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWNjZXNzaW5nIGNsaXBib2FyZCcsIGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5zZW5kVmlld0NvbnRleHRVcGRhdGVzKHVwZGF0ZXMpO1xyXG4gICAgdGhpcy52aWV3Q29udGV4dEhhc0JlZW5TeW5jZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3RhcnREb3dubG9hZHNGaWxlcyhkb3dubG9hZHM6IERvd25sb2FkZWRGaWxlW10pIHtcclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBkb3dubG9hZHMpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgYmxvYiA9IGF3YWl0IHRoaXMuZG93bmxvYWRSZXNvdXJjZShmaWxlLnV1aWQhLCBmaWxlLmlkZW50aWZpZXIhKTtcclxuICAgICAgICBsZXQgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlLmZpbGVuYW1lISk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgbGluay5yZW1vdmUoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIGZpbGUnLCBlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWaWV3Q29udGV4dFV1aWQodXVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMudmlld0NvbnRleHRVdWlkTmFtZSwgdXVpZCk7XHJcbiAgICB0aGlzLnNlc3Npb24uYWRkSGVhZGVyUGFyYW0oe1xyXG4gICAgICBoZWFkZXJOYW1lOiB0aGlzLnZpZXdDb250ZXh0VXVpZEhlYWRlck5hbWUsXHJcbiAgICAgIHZhbHVlOiB1dWlkLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Vmlld0NvbnRleHRVdWlkKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdmlld0NvbnRleHRVdWlkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnZpZXdDb250ZXh0VXVpZE5hbWUpO1xyXG4gICAgaWYgKCF2aWV3Q29udGV4dFV1aWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWV3IGNvbnRleHQgaXMgbm90IGluaXRpYWxpemVkIScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZpZXdDb250ZXh0VXVpZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNWaWV3Q29udGV4dFV1aWQoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdmlld0NvbnRleHRVdWlkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnZpZXdDb250ZXh0VXVpZE5hbWUpO1xyXG4gICAgcmV0dXJuIHZpZXdDb250ZXh0VXVpZCAhPT0gbnVsbCAmJiB2aWV3Q29udGV4dFV1aWQgIT09IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVdWlkT2ZQYWdlKHBhZ2VOYW1lOiBzdHJpbmcsIHV1aWQ6IHN0cmluZywgY29tcG9uZW50TmFtZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnBhZ2VOYW1lUHJlZml4ICsgcGFnZU5hbWUsIHV1aWQpO1xyXG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNvbXBvbmVudE5hbWVQcmVmaXggKyBjb21wb25lbnROYW1lLCBwYWdlTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJVdWlkT2ZQYWdlKHBhZ2VOYW1lOiBzdHJpbmcsIGNvbXBvbmVudE5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5wYWdlTmFtZVByZWZpeCArIHBhZ2VOYW1lKTtcclxuICAgIGlmIChjb21wb25lbnROYW1lKSB7XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5jb21wb25lbnROYW1lUHJlZml4ICsgY29tcG9uZW50TmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VXVpZE9mUGFnZShwYWdlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCB1dWlkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnBhZ2VOYW1lUHJlZml4ICsgcGFnZU5hbWUpO1xyXG4gICAgaWYgKCF1dWlkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHV1aWQgb2YgJHtwYWdlTmFtZX0gaXMgbm90IGF2YWlsYWJsZS5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1dWlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBhZ2VOYW1lT2ZDb21wb25lbnQoY29tcG9uZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBwYWdlTmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5jb21wb25lbnROYW1lUHJlZml4ICsgY29tcG9uZW50TmFtZSk7XHJcbiAgICBpZiAoIXBhZ2VOYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHBhZ2VOYW1lIG9mICR7Y29tcG9uZW50TmFtZX0gaXMgbm90IGF2YWlsYWJsZS5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwYWdlTmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBtZXNzYWdlKG1lc3NhZ2VEYXRhOiBNZXNzYWdlRGF0YSwgbWVzc2FnZVJlc3VsdDogTWVzc2FnZVJlc3VsdCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdcclxuICAgICAgICAubWVzc2FnZShtZXNzYWdlRGF0YS52aWV3VXVpZCA/PyAnJywgbWVzc2FnZURhdGEudXVpZCwgbWVzc2FnZVJlc3VsdClcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgICAvLyBpbiBmdXR1cmUgdXNlIHRoaXMuYXBpUXVldWVTZXJ2aWNlLmFkZFRvUXVldWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTbWFydFZpZXdDb250ZXh0QXBpRXJyb3JCeUNvZGUoY29kZTogc3RyaW5nKTogUHJvbWlzZTxTbWFydFZpZXdDb250ZXh0QXBpRXJyb3I+IHtcclxuICAgIGxldCBidXR0b25MYWJlbDtcclxuICAgIGxldCBkaWFsb2dUaXRsZTtcclxuICAgIGxldCBtZXNzYWdlO1xyXG4gICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZSkge1xyXG4gICAgICBidXR0b25MYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZVxyXG4gICAgICAgIC5nZXQoU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nQnV0dG9uTGFiZWwpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgICBkaWFsb2dUaXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nVGl0bGUpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dNZXNzYWdlKS50b1Byb21pc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJ1dHRvbkxhYmVsID0gJ09rJztcclxuICAgICAgZGlhbG9nVGl0bGUgPSAnSGliYSc7XHJcbiAgICAgIG1lc3NhZ2UgPSAnQW4gZXJyb3IgaGFzIG9jY3VyZWQuJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuc21hcnRWaWV3Q29udGV4dEFwaUVycm9ycykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNvZGUsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBidXR0b25MYWJlbCxcclxuICAgICAgICBkaWFsb2dUaXRsZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCBhcGlFcnJvcnNXaXRoQ29kZSA9IHRoaXMuc21hcnRWaWV3Q29udGV4dEFwaUVycm9ycy52aWV3Q29udGV4dEFwaUVycm9ycy5maWx0ZXIoXHJcbiAgICAgIChhcGlFcnJvcjogU21hcnRWaWV3Q29udGV4dEFwaUVycm9yKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGFwaUVycm9yLmNvZGUgPT09IGNvZGU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICBpZiAoIWFwaUVycm9yc1dpdGhDb2RlIHx8IChhcGlFcnJvcnNXaXRoQ29kZSAmJiAhYXBpRXJyb3JzV2l0aENvZGUubGVuZ3RoKSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBTbWFydFZpZXdDb250ZXh0QXBpRXJyb3Igd2l0aCBjb2RlICR7Y29kZX0gY291bGQgbm90IGJlIGZvdW5kLmApO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb2RlLFxyXG4gICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgYnV0dG9uTGFiZWwsXHJcbiAgICAgICAgZGlhbG9nVGl0bGUsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXBpRXJyb3JzV2l0aENvZGVbMF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Vmlld0NvbnN0cmFpbnQodXVpZDogc3RyaW5nKTogUHJvbWlzZTxWaWV3Q29uc3RyYWludD4ge1xyXG4gICAgbGV0IHZpZXdDb25zdHJhaW50UmVzcG9uc2UgPSBhd2FpdCB0aGlzLnZpZXcuZ2V0Vmlld0NvbnN0cmFpbnQodXVpZCkudG9Qcm9taXNlKCk7XHJcbiAgICBpZiAoIXZpZXdDb25zdHJhaW50UmVzcG9uc2UpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGdldCBWaWV3Q29uc3RyYWludCB3aXRoIHRoZSBnaXZlbiB1dWlkLicpO1xyXG4gICAgcmV0dXJuIHZpZXdDb25zdHJhaW50UmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2hvd1B1Ymxpc2hlZFZpZXcoY2hhbm5lbDogc3RyaW5nLCB1dWlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNPcGVuaW5nU21hcnRMaW5rID0gdHJ1ZTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnNlc3Npb24uaW5pdGlhbGl6ZSgpO1xyXG4gICAgLy8gVE9ETyBpbml0IHZpZXcgY29udGV4dCBhdXRvbWF0aWNhbGx5XHJcbiAgICAvLyBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTtcclxuICAgIGF3YWl0IHRoaXMuaW5pdFZpZXdDb250ZXh0KCk7XHJcblxyXG4gICAgdGhpcy5vcGVuU21hcnRMaW5rLm5leHQoY2hhbm5lbCk7XHJcbiAgICBhd2FpdCB0aGlzLm9wZW5TbWFydExpbmsudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy52aWV3LnNob3dQdWJsaXNoZWRWaWV3KGNoYW5uZWwsIHV1aWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgYXdhaXQgdGhpcy5nZXRBbmRTeW5jVmlld0NvbnRleHQoKTtcclxuICAgIHRoaXMuaXNPcGVuaW5nU21hcnRMaW5rID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZG93bmxvYWRSZXNvdXJjZSh1dWlkOiBzdHJpbmcsIGl0ZW06IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy52aWV3LmRvd25sb2FkSXRlbSh1dWlkLCBpdGVtKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwZXJmb3JtQWN0aW9uKHV1aWQ6IHN0cmluZywgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9wZXJmb3JtQWN0aW9uKHtcclxuICAgICAgdXVpZCxcclxuICAgICAgdWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgfSk7XHJcbiAgICAvLyBjb25zdCBpc0NvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICAvLyB0aGlzLmFwaVF1ZXVlU2VydmljZS5hZGRUb1F1ZXVlKHtcclxuICAgIC8vICAgY2FsbGJhY2s6IHRoaXMuX3BlcmZvcm1BY3Rpb24uYmluZCh0aGlzKSxcclxuICAgIC8vICAgY29uZmlnOiB7XHJcbiAgICAvLyAgICAgdXVpZCxcclxuICAgIC8vICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIGlzQ29tcGxldGVkLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyByZXR1cm4gYXdhaXQgaXNDb21wbGV0ZWQudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVdpZGdldEFjdGlvbihcclxuICAgIHV1aWQ6IHN0cmluZyxcclxuICAgIHdpZGdldElkOiBzdHJpbmcsXHJcbiAgICBub2RlSWQ6IHN0cmluZyxcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fcGVyZm9ybVdpZGdldEFjdGlvbih7IHV1aWQsIHdpZGdldElkLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdCB9KTtcclxuICAgIC8vIGNvbnN0IGlzQ29tcGxldGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIC8vIHRoaXMuYXBpUXVldWVTZXJ2aWNlLmFkZFRvUXVldWUoe1xyXG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybVdpZGdldEFjdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgLy8gICBjb25maWc6IHtcclxuICAgIC8vICAgICB1dWlkLFxyXG4gICAgLy8gICAgIHdpZGdldElkLFxyXG4gICAgLy8gICAgIG5vZGVJZCxcclxuICAgIC8vICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIGlzQ29tcGxldGVkLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyByZXR1cm4gYXdhaXQgaXNDb21wbGV0ZWQudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVdpZGdldE1haW5BY3Rpb24oXHJcbiAgICB1dWlkOiBzdHJpbmcsXHJcbiAgICB3aWRnZXRJZDogc3RyaW5nLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3RcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9wZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbih7IHV1aWQsIHdpZGdldElkLCB1aUFjdGlvblJlcXVlc3QgfSk7XHJcbiAgICAvLyBjb25zdCBpc0NvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICAvLyB0aGlzLmFwaVF1ZXVlU2VydmljZS5hZGRUb1F1ZXVlKHtcclxuICAgIC8vICAgY2FsbGJhY2s6IHRoaXMuX3BlcmZvcm1XaWRnZXRNYWluQWN0aW9uLmJpbmQodGhpcyksXHJcbiAgICAvLyAgIGNvbmZpZzoge1xyXG4gICAgLy8gICAgIHV1aWQsXHJcbiAgICAvLyAgICAgd2lkZ2V0SWQsXHJcbiAgICAvLyAgICAgdWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBpc0NvbXBsZXRlZCxcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gcmV0dXJuIGF3YWl0IGlzQ29tcGxldGVkLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBlcmZvcm1VcGxvYWRBY3Rpb24oXHJcbiAgICB1dWlkOiBzdHJpbmcsXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCxcclxuICAgIHBhcmFtOiAnaW5wdXQnIHwgJ2lucHV0XCInLFxyXG4gICAgY29udGVudDogYW55XHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9wZXJmb3JtVXBsb2FkQWN0aW9uKHtcclxuICAgICAgdXVpZCxcclxuICAgICAgdWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgICBwYXJhbSxcclxuICAgICAgY29udGVudCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBlcmZvcm1VcGxvYWRNdWx0aXBsZUFjdGlvbihcclxuICAgIHV1aWQ6IHN0cmluZyxcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgcGFyYW06ICdpbnB1dCcgfCAnaW5wdXQyJyxcclxuICAgIGNvbnRlbnQ6IGFueVtdXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9wZXJmb3JtVXBsb2FkTXVsdGlwbGVBY3Rpb24oe1xyXG4gICAgICB1dWlkLFxyXG4gICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAgIHBhcmFtLFxyXG4gICAgICBjb250ZW50LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGF0YUNoYW5nZWQodXVpZDogc3RyaW5nLCBkYXRhQ2hhbmdlOiBEYXRhQ2hhbmdlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGF0YUNoYW5nZWQoeyB1dWlkLCBkYXRhQ2hhbmdlIH0pO1xyXG4gICAgLy8gY29uc3QgaXNDb21wbGV0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgLy8gdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZShcclxuICAgIC8vICAge1xyXG4gICAgLy8gICAgIGNhbGxiYWNrOiB0aGlzLl9kYXRhQ2hhbmdlZC5iaW5kKHRoaXMpLFxyXG4gICAgLy8gICAgIGNvbmZpZzoge1xyXG4gICAgLy8gICAgICAgdXVpZCxcclxuICAgIC8vICAgICAgIGRhdGFDaGFuZ2UsXHJcbiAgICAvLyAgICAgfSxcclxuICAgIC8vICAgICBpc0NvbXBsZXRlZCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgdHJ1ZVxyXG4gICAgLy8gKTtcclxuICAgIC8vIHJldHVybiBhd2FpdCBpc0NvbXBsZXRlZC50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3BlcmZvcm1BY3Rpb24oY29uZmlnOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy52aWV3LnBlcmZvcm1BY3Rpb24oY29uZmlnLnV1aWQsIGNvbmZpZy51aUFjdGlvblJlcXVlc3QpLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVdpZGdldEFjdGlvbihjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdcclxuICAgICAgICAucGVyZm9ybVdpZGdldEFjdGlvbihjb25maWcudXVpZCwgY29uZmlnLndpZGdldElkLCBjb25maWcubm9kZUlkLCBjb25maWcudWlBY3Rpb25SZXF1ZXN0KVxyXG4gICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3BlcmZvcm1XaWRnZXRNYWluQWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAgIC5wZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbihjb25maWcudXVpZCwgY29uZmlnLndpZGdldElkLCBjb25maWcudWlBY3Rpb25SZXF1ZXN0KVxyXG4gICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3BlcmZvcm1VcGxvYWRBY3Rpb24oY29uZmlnOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy52aWV3XHJcbiAgICAgICAgLnVwbG9hZEFjdGlvbihcclxuICAgICAgICAgIGNvbmZpZy51dWlkLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29uZmlnLnVpQWN0aW9uUmVxdWVzdCksXHJcbiAgICAgICAgICBjb25maWcucGFyYW0sXHJcbiAgICAgICAgICBjb25maWcuY29udGVudFxyXG4gICAgICAgIClcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX3BlcmZvcm1VcGxvYWRNdWx0aXBsZUFjdGlvbihjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdcclxuICAgICAgICAudXBsb2FkTXVsdGlwbGVBY3Rpb24oXHJcbiAgICAgICAgICBjb25maWcudXVpZCxcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbmZpZy51aUFjdGlvblJlcXVlc3QpLFxyXG4gICAgICAgICAgY29uZmlnLnBhcmFtLFxyXG4gICAgICAgICAgY29uZmlnLmNvbnRlbnRcclxuICAgICAgICApXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZGF0YUNoYW5nZWQoY29uZmlnOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnZpZXcuZGF0YUNoYW5nZWQoY29uZmlnLnV1aWQsIGNvbmZpZy5kYXRhQ2hhbmdlKS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICB2aWV3Q29udGV4dENoYW5nZTogVmlld0NvbnRleHRDaGFuZ2UgfCB1bmRlZmluZWRcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IHZpZXdDb250ZXh0Q2hhbmdlPy52aWV3Q29udGV4dDtcclxuICAgIGF3YWl0IHRoaXMuc3luY1ZpZXcoKTtcclxuXHJcbiAgICBpZiAodmlld0NvbnRleHRDaGFuZ2U/LmNoYW5nZXMpIHtcclxuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzKHZpZXdDb250ZXh0Q2hhbmdlLmNoYW5nZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZpZXdDb250ZXh0Q2hhbmdlPy5yZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNoYW5nZXMoY2hhbmdlczogQXJyYXk8Q29tcG9uZW50TW9kZWxDaGFuZ2U+KTogdm9pZCB7XHJcbiAgICBjaGFuZ2VzLmZvckVhY2goKGNvbXBvbmVudE1vZGVsQ2hhbmdlOiBDb21wb25lbnRNb2RlbENoYW5nZSkgPT4ge1xyXG4gICAgICBsZXQgZGV0ZWN0Q2hhbmdlOiBTbWFydFN1YmplY3Q8Q29tcG9uZW50TW9kZWxDaGFuZ2U+IHwgdW5kZWZpbmVkID0gdGhpcy5zbWFydEFwaUNsaWVudHMuZ2V0KFxyXG4gICAgICAgIGNvbXBvbmVudE1vZGVsQ2hhbmdlLnV1aWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKGRldGVjdENoYW5nZSkge1xyXG4gICAgICAgIGRldGVjdENoYW5nZS5uZXh0KGNvbXBvbmVudE1vZGVsQ2hhbmdlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPENvbXBvbmVudE1vZGVsIHwgdW5kZWZpbmVkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy52aWV3LmdldENvbXBvbmVudE1vZGVsKHV1aWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWQyKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Vmlld0NvbnRleHRDaGFuZ2UgfCB1bmRlZmluZWQ+IHtcclxuICAgIGxldCBjaGFuZ2UgPSBhd2FpdCB0aGlzLnZpZXcuZ2V0Q29tcG9uZW50TW9kZWwyKHV1aWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoY2hhbmdlKTtcclxuICAgIHJldHVybiBjaGFuZ2U7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Vmlld0NvbnRleHQoKTogVmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IElTX0FTWU5DX1BBUkFNX05BTUUgPSAnaXNBc3luYyc7XHJcblxyXG4vKiogQSByZWdpc3RlcmVkIGVtYmVkZGVkIHNsb3Q6IGl0cyBWaWV3Q29udGFpbmVyUmVmIHBsdXMgdGhlIGxpZmVjeWNsZSBjbGFzcyBpdHNcclxuICogIHJlZ2lzdHJhbnQgZGVjbGFyZWQsIHNvIHRoZSBsYXlvdXQgZGV0YWNoL2NsZWFudXAgZGFuY2UgY2FuIHNraXAgJ3N0YWJsZScgc2xvdHMuICovXHJcbmludGVyZmFjZSBFbWJlZGRlZFNsb3RFbnRyeSB7XHJcbiAgdmNSZWY6IFZpZXdDb250YWluZXJSZWY7XHJcbiAga2luZDogU2xvdEtpbmQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBpUXVldWVDYWxsIHtcclxuICBjYWxsYmFjazogKGNvbmZpZzogYW55KSA9PiBQcm9taXNlPGFueT47XHJcbiAgY29uZmlnOiBhbnk7XHJcbiAgaXNDb21wbGV0ZWQ6IFN1YmplY3Q8dm9pZD47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcGlRdWV1ZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBxdWV1ZTogQXBpUXVldWVDYWxsW10gPSBbXTtcclxuICBwcml2YXRlIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcXVldWVTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5xdWV1ZVN1YmplY3QucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wcm9jZXNzUXVldWUoKSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGFkZFRvUXVldWUoY2FsbDogQXBpUXVldWVDYWxsLCBwcmlvcml0eTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAocHJpb3JpdHkpIHtcclxuICAgICAgdGhpcy5xdWV1ZS51bnNoaWZ0KGNhbGwpOyAvLyBBZGQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcXVldWUgaWYgaXQgaGFzIGhpZ2hlciBwcmlvcml0eVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGNhbGwpOyAvLyBBZGQgYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUgaWYgaXQgaGFzIGxvd2VyIHByaW9yaXR5XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaXNQcm9jZXNzaW5nKSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzUXVldWUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFwaVF1ZXVlQ2FsbCA9IHRoaXMucXVldWUuc2hpZnQoKTtcclxuICAgIGlmIChhcGlRdWV1ZUNhbGwpIHtcclxuICAgICAgYXdhaXQgYXBpUXVldWVDYWxsLmNhbGxiYWNrKGFwaVF1ZXVlQ2FsbC5jb25maWcpO1xyXG4gICAgICBhcGlRdWV1ZUNhbGwuaXNDb21wbGV0ZWQuY29tcGxldGUoKTtcclxuICAgICAgdGhpcy5xdWV1ZVN1YmplY3QubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
1076
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUlkLFFBQVEsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxQyxPQUFPLEVBT0wsY0FBYyxFQVdkLFNBQVMsRUFFVCxRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQVNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBb0IsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRixPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUNMLDZCQUE2QixHQUU5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQUV4RSxNQUFNLENBQUMsTUFBTSxzQ0FBc0MsR0FBRyx3Q0FBd0MsQ0FBQztBQUMvRixNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FB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LENBQUMsQ0FBQyx1REFBdUQ7UUFDaEYsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVk7UUFDaEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELFlBQVksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQzsrR0F0Q1UsZUFBZTttSEFBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEluamVjdCxcclxuICBJbmplY3RhYmxlLFxyXG4gIEluamVjdGlvblRva2VuLFxyXG4gIEluamVjdG9yLFxyXG4gIG1vZGVsLFxyXG4gIE9uRGVzdHJveSxcclxuICBPcHRpb25hbCxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU21hcnRGb3JtSW52YWxpZEZpZWxkcyB9IGZyb20gJy4uL3NtYXJ0LWZvcm0vc21hcnRmb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3Nlc3Npb24vc21hcnQtc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBDbGlwYm9hcmREYXRhLFxyXG4gIENvbXBvbmVudE1vZGVsLFxyXG4gIENvbXBvbmVudE1vZGVsQ2hhbmdlLFxyXG4gIERhdGFDaGFuZ2UsXHJcbiAgRG93bmxvYWRlZEZpbGUsXHJcbiAgTGluayxcclxuICBMaW5rVGFyZ2V0RW51bSxcclxuICBNZXNzYWdlRGF0YSxcclxuICBNZXNzYWdlUmVzdWx0LFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvcixcclxuICBVaUFjdGlvblJlcXVlc3QsXHJcbiAgVmlld0NvbnN0cmFpbnQsXHJcbiAgVmlld0NvbnRleHRDaGFuZ2UsXHJcbiAgVmlld0NvbnRleHREYXRhLFxyXG4gIFZpZXdDb250ZXh0VXBkYXRlLFxyXG4gIFZpZXdEYXRhLFxyXG4gIFZpZXdTZXJ2aWNlLFxyXG4gIFZpZXdTdGF0ZSxcclxuICBWaWV3U3RhdGVVcGRhdGUsXHJcbiAgVmlld1R5cGUsXHJcbn0gZnJvbSAnLi9hcGknO1xyXG5pbXBvcnQgeyBNZXNzYWdlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9tZXNzYWdlLWRpYWxvZy9tZXNzYWdlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0RW1iZWRkZWRWaWV3UmVmLFxyXG4gIFNtYXJ0VHJhbnNsYXRlU2VydmljZSxcclxuICBTbWFydFZpZXdDb250ZXh0QXBpRXJyb3IsXHJcbiAgU21hcnRWaWV3Q29udGV4dEFwaUVycm9ycyxcclxuICBTbWFydFZpZXdEaWFsb2dSZWYsXHJcbiAgU21hcnRWaWV3SGFuZGxlck1vZGVsLFxyXG59IGZyb20gJy4vc21hcnQtdmlldy1jb250ZXh0Lm1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRTdWJqZWN0IH0gZnJvbSAnLi4vc21hcnQtc3ViamVjdC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0Vmlld0NvbnRleHREaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC12aWV3LWNvbnRleHQtZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgcmVzb2x2ZVNsb3QsIFNsb3RLaW5kIH0gZnJvbSAnLi92aWV3LXNsb3QtcmVzb2x1dGlvbic7XHJcbmltcG9ydCB7XHJcbiAgU01BUlRfREVGQVVMVF9WSUVXX0NPTVBPTkVOVFMsXHJcbiAgRGVmYXVsdFZpZXdDb21wb25lbnRFbnRyeSxcclxufSBmcm9tICcuL2RlZmF1bHQtdmlldy1jb21wb25lbnRzLnRva2VuJztcclxuaW1wb3J0IHsgcmVzb2x2ZVZpZXdIYW5kbGVyIH0gZnJvbSAnLi92aWV3LWhhbmRsZXItcmVzb2x1dGlvbic7XHJcbmltcG9ydCB7IGJ1aWxkVmlld09wcyB9IGZyb20gJy4vdmlldy1vcCc7XHJcbmltcG9ydCB7IFJFVVNFX1JPVVRFUl9TTE9UX0NPTVBPTkVOVCB9IGZyb20gJy4vcmV1c2Utcm91dGVyLXNsb3QudG9rZW4nO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ0J1dHRvbkxhYmVsID0gJ1NtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ0J1dHRvbkxhYmVsJztcclxuZXhwb3J0IGNvbnN0IFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ1RpdGxlID0gJ1NtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ1RpdGxlJztcclxuZXhwb3J0IGNvbnN0IFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ01lc3NhZ2UgPSAnU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nTWVzc2FnZSc7XHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0VWlBY3Rpb25Db2RlX0NMT1NFID0gJ0RFRkFVTFRfQ0xPU0UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IERJQUxPR19ESVNBQkxFX0NMT1NFID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdkaWFsb2dEaXNhYmxlQ2xvc2UnKTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydFZpZXdDb250ZXh0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGV4dFV1aWROYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcclxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250ZXh0VXVpZEhlYWRlck5hbWU6IHN0cmluZyA9ICd2aWV3Q29udGV4dFV1aWQnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFnZU5hbWVQcmVmaXg6IHN0cmluZyA9ICdwYWdlLic7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnROYW1lUHJlZml4OiBzdHJpbmcgPSAnY29tcG9uZW50Lic7XHJcbiAgcHVibGljIG1lc3NhZ2VEaWFsb2duYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSB1cmw/OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB2aWV3Q29udGV4dD86IFZpZXdDb250ZXh0RGF0YTtcclxuICBwcml2YXRlIHZpZXdIYW5kbGVyczogQXJyYXk8U21hcnRWaWV3SGFuZGxlck1vZGVsPiA9IG5ldyBBcnJheSgpO1xyXG4gIHByaXZhdGUgZGVmYXVsdENvbXBvbmVudHM6IE1hcDxzdHJpbmcsIENvbXBvbmVudFR5cGU8YW55Pj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBvcGVuZWRWaWV3VXVpZHM6IEFycmF5PHN0cmluZz4gPSBuZXcgQXJyYXkoKTtcclxuICBwcml2YXRlIG9wZW5lZFZpZXdEYXRhOiBBcnJheTxWaWV3RGF0YT4gPSBuZXcgQXJyYXkoKTtcclxuICAvLyBNb25vdG9uaWMgY291bnRlciBidW1wZWQgb24gZXZlcnkgc3VjY2Vzc2Z1bCBzdGFydFZpZXdDb250ZXh0KCkuIENhbGxlcnNcclxuICAvLyB0aGF0IGhvbGQgYSByZWZlcmVuY2UgdG8gYSB2aWV3LXV1aWQgZnJvbSBhIHByZXZpb3VzIHZpZXdjb250ZXh0IGNhblxyXG4gIC8vIGRldGVjdCBhIHJlYnVpbGQgYnkgY29tcGFyaW5nIHNuYXBzaG90cyBvZiB0aGlzIHZhbHVlLlxyXG4gIHByaXZhdGUgZ2VuZXJhdGlvbjogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHB1YmxpYyB1dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG4gIHB1YmxpYyB2aWV3Q29udGV4dEhhc0JlZW5TeW5jZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICBwcml2YXRlIGluaXRpYWxpemVSdW5uaW5nOiBTdWJqZWN0PFZpZXdDb250ZXh0RGF0YT4gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBpbml0aU5ld0NvbnRleHRSdW5uaW5nOiBTdWJqZWN0PHZvaWQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwdWJsaWMgc21hcnRWaWV3Q29udGV4dEFwaUVycm9ycz86IFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnM7XHJcblxyXG4gIHB1YmxpYyBvcGVuU21hcnRMaW5rOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICBwdWJsaWMgaXNPcGVuaW5nU21hcnRMaW5rOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgZGlhbG9nUmVmczogU21hcnRWaWV3RGlhbG9nUmVmW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBlbWJlZGRlZENvbnRhaW5lcnM6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIEVtYmVkZGVkU2xvdEVudHJ5Pj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBlbWJlZGRlZFZpZXdSZWZzOiBTbWFydEVtYmVkZGVkVmlld1JlZltdID0gW107XHJcbiAgcHJpdmF0ZSBwZW5kaW5nRW1iZWRkZWRWaWV3czogVmlld0RhdGFbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGFjdGlvbkRlc2NyaXB0b3JzPzogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPjtcclxuXHJcbiAgcHJpdmF0ZSBtb2R1bGVVcmxzQnlNb2R1bGU/OiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICBwdWJsaWMgY29tbW9uRmVlZGJhY2tUZXh0Pzogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgc21hcnRBcGlDbGllbnRzOiBNYXA8c3RyaW5nLCBTbWFydFN1YmplY3Q8YW55Pj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHB1YmxpYyBzZXQgdHJhbnNsYXRlU2VydmljZSh0cmFuc2xhdGVTZXJ2aWNlOiBTbWFydFRyYW5zbGF0ZVNlcnZpY2UgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlQ2hhbmdlZC5uZXh0KCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRyYW5zbGF0ZVNlcnZpY2UoKTogU21hcnRUcmFuc2xhdGVTZXJ2aWNlIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U/OiBTbWFydFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIHB1YmxpYyBjb21wb25lbnRMaWJyYXJ5OiBDb21wb25lbnRMaWJyYXJ5IHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdmlldzogVmlld1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlc3Npb246IFNtYXJ0U2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogU21hcnRWaWV3Q29udGV4dERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaVF1ZXVlU2VydmljZTogQXBpUXVldWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmplY3Q6IEluamVjdG9yLFxyXG4gICAgQEluamVjdChDT01QT05FTlRfTElCUkFSWSkgQE9wdGlvbmFsKCkgY29tcExpYj86IENvbXBvbmVudExpYnJhcnksXHJcbiAgICBASW5qZWN0KFNNQVJUX0RFRkFVTFRfVklFV19DT01QT05FTlRTKVxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIGRlZmF1bHRWaWV3Q29tcG9uZW50cz86IERlZmF1bHRWaWV3Q29tcG9uZW50RW50cnlbXVxyXG4gICkge1xyXG4gICAgdGhpcy5jb21wb25lbnRMaWJyYXJ5ID0gY29tcExpYjtcclxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZGVmYXVsdFZpZXdDb21wb25lbnRzID8/IFtdKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbXBvbmVudHMuc2V0KGVudHJ5LmNvbXBvbmVudE5hbWUsIGVudHJ5LmNvbXBvbmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9sbG93KHV1aWQ6IHN0cmluZywgZGV0ZWN0Q2hhbmdlOiBTbWFydFN1YmplY3Q8YW55Pik6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydEFwaUNsaWVudHMuc2V0KHV1aWQsIGRldGVjdENoYW5nZSk7XHJcbiAgfVxyXG4gIHB1YmxpYyB1bmZvbGxvdyh1dWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc21hcnRBcGlDbGllbnRzLmRlbGV0ZSh1dWlkKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyRW1iZWRkZWRTbG90KFxyXG4gICAgY29udGFpbmVyVXVpZDogc3RyaW5nLFxyXG4gICAgY29udGFpbmVySWQ6IHN0cmluZyxcclxuICAgIHZjUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAga2luZDogU2xvdEtpbmRcclxuICApOiB2b2lkIHtcclxuICAgIGxldCBpbm5lck1hcCA9IHRoaXMuZW1iZWRkZWRDb250YWluZXJzLmdldChjb250YWluZXJVdWlkKTtcclxuICAgIGlmICghaW5uZXJNYXApIHtcclxuICAgICAgaW5uZXJNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgIHRoaXMuZW1iZWRkZWRDb250YWluZXJzLnNldChjb250YWluZXJVdWlkLCBpbm5lck1hcCk7XHJcbiAgICB9XHJcbiAgICBpbm5lck1hcC5zZXQoY29udGFpbmVySWQsIHsgdmNSZWYsIGtpbmQgfSk7XHJcblxyXG4gICAgLy8gUmVhdHRhY2ggZW1iZWRkZWQgdmlld3MgdGhhdCB3ZXJlIGRldGFjaGVkIGJlZm9yZSBsYXlvdXQgcmUtcmVuZGVyXHJcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoXHJcbiAgICAgIChyZWYpID0+IHJlZi5jb250YWluZXJVdWlkID09PSBjb250YWluZXJVdWlkICYmIHJlZi5jb250YWluZXJJZCA9PT0gY29udGFpbmVySWRcclxuICAgICk7XHJcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiBleGlzdGluZykge1xyXG4gICAgICBpZiAoIXJlZi5jb21wb25lbnRSZWYuaG9zdFZpZXcuZGVzdHJveWVkKSB7XHJcbiAgICAgICAgdmNSZWYuaW5zZXJ0KHJlZi5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRHJhaW4gcGVuZGluZyBxdWV1ZSAobWF0Y2ggb24gdGhlIHJlc29sdmVkIHNsb3QsIHNvIHJvdXRlci1zbG90IE5PUk1BTCB2aWV3cyBtYXRjaCB0b28pXHJcbiAgICBjb25zdCBtYXRjaGVzID0gKHY6IFZpZXdEYXRhKSA9PiB7XHJcbiAgICAgIGNvbnN0IHMgPSByZXNvbHZlU2xvdCh2KTtcclxuICAgICAgcmV0dXJuIHMuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCAmJiBzLmNvbnRhaW5lcklkID09PSBjb250YWluZXJJZDtcclxuICAgIH07XHJcbiAgICBjb25zdCBtYXRjaGluZyA9IHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MuZmlsdGVyKG1hdGNoZXMpO1xyXG4gICAgdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cyA9IHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MuZmlsdGVyKCh2KSA9PiAhbWF0Y2hlcyh2KSk7XHJcblxyXG4gICAgaWYgKG1hdGNoaW5nLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgdXBkYXRlczogKFZpZXdTdGF0ZVVwZGF0ZSB8IHVuZGVmaW5lZClbXSA9IG1hdGNoaW5nLm1hcCgodikgPT4gdGhpcy5vcGVuVmlldyh2KSk7XHJcbiAgICAgIHRoaXMuc2VuZFZpZXdDb250ZXh0VXBkYXRlcyh1cGRhdGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRldGFjaEFsbEVtYmVkZGVkVmlld3MoY29udGFpbmVyVXVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoKHJlZikgPT4gcmVmLmNvbnRhaW5lclV1aWQgPT09IGNvbnRhaW5lclV1aWQpO1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICBpZiAoY2hpbGQuY29tcG9uZW50UmVmLmhvc3RWaWV3LmRlc3Ryb3llZCkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIE9ubHkgZGV0YWNoIHZpZXdzIGxpdmluZyBpbiBhIHJlLXJlbmRlcmluZyBMQVlPVVQgc2xvdC4gQSBTVEFCTEUgZGlyZWN0aXZlXHJcbiAgICAgIC8vIHNsb3QgKHJvdXRlci1vdXRsZXQpIGxpdmVzIG91dHNpZGUgdGhlIGxheW91dCAqbmdGb3IgYW5kIHN1cnZpdmVzIHRoZSBwYXJlbnRcclxuICAgICAgLy8gcmUtcmVuZGVyLCBzbyBpdHMgY2hpbGQgbmVlZHMgbm8gZGV0YWNoIHByb3RlY3Rpb24g4oCUIGRldGFjaGluZyBpdCBoZXJlIGlzXHJcbiAgICAgIC8vIHdoYXQgcHJvZHVjZWQgdGhlIGZhbHNlLW9ycGhhbiBkZXN0cm95IGluIG11bHRpLWxldmVsIE5PUk1BTCBuZXN0aW5nXHJcbiAgICAgIC8vIChIb21lIC0+IE1haW4gLT4gcGFnZSk6IE1haW4gZ290IHN3ZXB0IHVwIGJ5IEhvbWUncyBsYXlvdXQgZGFuY2UuICgjMjg4NzApXHJcbiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbWJlZGRlZENvbnRhaW5lcnMuZ2V0KGNvbnRhaW5lclV1aWQpPy5nZXQoY2hpbGQuY29udGFpbmVySWQpO1xyXG4gICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LmtpbmQgPT09ICdzdGFibGUnKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaWR4ID0gZW50cnkudmNSZWYuaW5kZXhPZihjaGlsZC5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG4gICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICBlbnRyeS52Y1JlZi5kZXRhY2goaWR4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYW51cE9ycGhhbmVkRW1iZWRkZWRWaWV3cyhjb250YWluZXJVdWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlZnMgPSB0aGlzLmVtYmVkZGVkVmlld1JlZnMuZmlsdGVyKChyZWYpID0+IHJlZi5jb250YWluZXJVdWlkID09PSBjb250YWluZXJVdWlkKTtcclxuICAgIGNvbnN0IG9ycGhhbmVkOiBTbWFydEVtYmVkZGVkVmlld1JlZltdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiByZWZzKSB7XHJcbiAgICAgIGlmIChyZWYuY29tcG9uZW50UmVmLmhvc3RWaWV3LmRlc3Ryb3llZCkge1xyXG4gICAgICAgIG9ycGhhbmVkLnB1c2gocmVmKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB2Y1JlZiA9IHRoaXMuZ2V0RW1iZWRkZWRTbG90KGNvbnRhaW5lclV1aWQsIHJlZi5jb250YWluZXJJZCk7XHJcbiAgICAgIGlmICghdmNSZWYpIHtcclxuICAgICAgICAvLyBUaGUgc2xvdCBpcyB0cnVseSBnb25lIChpdHMgbGF5b3V0IGhvc3Qgd2FzIHRvcm4gZG93biBhbmQgbm90IHJlY3JlYXRlZCk6XHJcbiAgICAgICAgLy8gYSByZWFsIG9ycGhhbiB0byBkZXN0cm95LlxyXG4gICAgICAgIG9ycGhhbmVkLnB1c2gocmVmKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICAvLyBTbG90IHN0aWxsIHJlZ2lzdGVyZWQgYnV0IGl0cyB2aWV3IHdhcyBkZXRhY2hlZCBieSBkZXRhY2hBbGxFbWJlZGRlZFZpZXdzIGFuZFxyXG4gICAgICAvLyBuZXZlciByZWF0dGFjaGVkLCBiZWNhdXNlIHRoZSAqbmdGb3IgcmV1c2VkIHRoZSBzbG90IGhvc3QgKG9ubHkgYSBzaWJsaW5nXHJcbiAgICAgIC8vIHdpZGdldCBjaGFuZ2VkKSBzbyBubyByZS1yZWdpc3RlciBmaXJlZC4gUmVhdHRhY2ggc28gZXZlcnkgZGV0YWNoIGlzIHBhaXJlZC5cclxuICAgICAgaWYgKHZjUmVmLmluZGV4T2YocmVmLmNvbXBvbmVudFJlZi5ob3N0VmlldykgPCAwKSB7XHJcbiAgICAgICAgdmNSZWYuaW5zZXJ0KHJlZi5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiBvcnBoYW5lZCkge1xyXG4gICAgICBpZiAoIXJlZi5jb21wb25lbnRSZWYuaG9zdFZpZXcuZGVzdHJveWVkKSB7XHJcbiAgICAgICAgcmVmLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaWR4ID0gdGhpcy5vcGVuZWRWaWV3VXVpZHMuaW5kZXhPZihyZWYudXVpZCk7XHJcbiAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZW1iZWRkZWRWaWV3UmVmcyA9IHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5maWx0ZXIoKHJlZikgPT4gIW9ycGhhbmVkLmluY2x1ZGVzKHJlZikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9zaXRlTW9kZWwoY29udGFpbmVyVXVpZDogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XHJcbiAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcigocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCk7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgIHJlc3VsdFtjaGlsZC51dWlkXSA9IGNoaWxkLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5nZXRNb2RlbCgpO1xyXG4gICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgdGhpcy5nZXRDb21wb3NpdGVNb2RlbChjaGlsZC51dWlkKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgc3VibWl0RW1iZWRkZWRGb3Jtcyhjb250YWluZXJVdWlkOiBzdHJpbmcsIHZhbGlkYXRlOiBib29sZWFuKTogU21hcnRGb3JtSW52YWxpZEZpZWxkcyB7XHJcbiAgICBjb25zdCBhbGxJbnZhbGlkS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgIGNvbnN0IGFsbEludmFsaWROYW1lczogc3RyaW5nW10gPSBbXTtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbHRlcigocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCA9PT0gY29udGFpbmVyVXVpZCk7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gY2hpbGQuY29tcG9uZW50UmVmLmluc3RhbmNlO1xyXG4gICAgICBpbnN0YW5jZS5zdWJtaXRGb3JtKHZhbGlkYXRlKTtcclxuICAgICAgaWYgKHZhbGlkYXRlKSB7XHJcbiAgICAgICAgY29uc3QgaW52YWxpZDogU21hcnRGb3JtSW52YWxpZEZpZWxkcyA9IGluc3RhbmNlLmdldEludmFsaWRGaWVsZHMoKTtcclxuICAgICAgICBhbGxJbnZhbGlkS2V5cy5wdXNoKC4uLmludmFsaWQuaW52YWxpZEZpZWxkS2V5cyk7XHJcbiAgICAgICAgYWxsSW52YWxpZE5hbWVzLnB1c2goLi4uaW52YWxpZC5pbnZhbGlkRmllbGROYW1lcyk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmVzdGVkID0gdGhpcy5zdWJtaXRFbWJlZGRlZEZvcm1zKGNoaWxkLnV1aWQsIHZhbGlkYXRlKTtcclxuICAgICAgYWxsSW52YWxpZEtleXMucHVzaCguLi5uZXN0ZWQuaW52YWxpZEZpZWxkS2V5cyk7XHJcbiAgICAgIGFsbEludmFsaWROYW1lcy5wdXNoKC4uLm5lc3RlZC5pbnZhbGlkRmllbGROYW1lcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBpbnZhbGlkRmllbGRLZXlzOiBhbGxJbnZhbGlkS2V5cywgaW52YWxpZEZpZWxkTmFtZXM6IGFsbEludmFsaWROYW1lcyB9O1xyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlckVtYmVkZGVkU2xvdChjb250YWluZXJVdWlkOiBzdHJpbmcsIGNvbnRhaW5lcklkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlubmVyTWFwID0gdGhpcy5lbWJlZGRlZENvbnRhaW5lcnMuZ2V0KGNvbnRhaW5lclV1aWQpO1xyXG4gICAgaWYgKGlubmVyTWFwKSB7XHJcbiAgICAgIGlubmVyTWFwLmRlbGV0ZShjb250YWluZXJJZCk7XHJcbiAgICAgIGlmIChpbm5lck1hcC5zaXplID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5lbWJlZGRlZENvbnRhaW5lcnMuZGVsZXRlKGNvbnRhaW5lclV1aWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEVtYmVkZGVkU2xvdChcclxuICAgIGNvbnRhaW5lclV1aWQ6IHN0cmluZyxcclxuICAgIGNvbnRhaW5lcklkOiBzdHJpbmdcclxuICApOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmVtYmVkZGVkQ29udGFpbmVycy5nZXQoY29udGFpbmVyVXVpZCk/LmdldChjb250YWluZXJJZCk/LnZjUmVmO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRoZSB2aWV3J3MgY29tcG9uZW50IGludG8gaXRzIHJlc29sdmVkIHNsb3QuIFJldHVybnMgZmFsc2UgYW5kIHF1ZXVlc1xyXG4gICAqIHRoZSB2aWV3IGlmIHRoZSBzbG90IGlzIG5vdCByZWdpc3RlcmVkIHlldCAoZHJhaW5lZCBvbiByZWdpc3RyYXRpb24pLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgaW5zZXJ0Vmlld0ludG9TbG90KHZpZXc6IFZpZXdEYXRhLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8YW55Pik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgeyBjb250YWluZXJVdWlkLCBjb250YWluZXJJZCB9ID0gcmVzb2x2ZVNsb3Qodmlldyk7XHJcbiAgICBjb25zdCB2Y1JlZiA9IHRoaXMuZ2V0RW1iZWRkZWRTbG90KGNvbnRhaW5lclV1aWQsIGNvbnRhaW5lcklkKTtcclxuICAgIGlmICghdmNSZWYpIHtcclxuICAgICAgLy8gU2xvdCBub3QgcmVnaXN0ZXJlZCB5ZXQ6IHF1ZXVlIHRoZSB2aWV3IGFuZCBkcmFpbiBpdCB3aGVuIGl0cyBzbG90IHJlZ2lzdGVyc1xyXG4gICAgICAvLyAocmVnaXN0ZXJFbWJlZGRlZFNsb3QpLiBUaGUgc3luY2hyb25vdXMgZGV0ZWN0Q2hhbmdlcyBiZWxvdyByZW5kZXJzIGEgZnJlc2hseVxyXG4gICAgICAvLyBtb3VudGVkIHBhcmVudCdzIHRlbXBsYXRlIGluIHRoZSBzYW1lIHN5bmNWaWV3IHBhc3MsIHNvIGEgcGFyZW50IC0+IGNoaWxkIC0+XHJcbiAgICAgIC8vIGdyYW5kY2hpbGQgY2hhaW4gKEhvbWUgLT4gTWFpbiAtPiBwYWdlKSByZWdpc3RlcnMgZXZlcnkgc2xvdCBpbW1lZGlhdGVseSBhbmRcclxuICAgICAgLy8gdGhlIHF1ZXVlIGRyYWlucyB3aXRoaW4gdGhlIHBhc3Mg4oCUIGV2ZW4gd2hlbiByZXN0b3JlVmlld3Mgb3BlbnMgYSBjaGlsZCBiZWZvcmVcclxuICAgICAgLy8gaXRzIHBhcmVudC4gKCMyODg3MClcclxuICAgICAgdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cy5wdXNoKHZpZXcpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB2Y1JlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50KTtcclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS51dWlkID0gdmlldy51dWlkO1xyXG4gICAgdGhpcy5lbWJlZGRlZFZpZXdSZWZzLnB1c2goeyB1dWlkOiB2aWV3LnV1aWQsIGNvbnRhaW5lclV1aWQsIGNvbnRhaW5lcklkLCBjb21wb25lbnRSZWYgfSk7XHJcbiAgICAvLyBSZW5kZXIgdGhlIGZyZXNobHkgY3JlYXRlZCBjb21wb25lbnQgc3luY2hyb25vdXNseSBzbyBpdHMgb3duIGVtYmVkZGVkLXNsb3RcclxuICAgIC8vIGRpcmVjdGl2ZXMgKHRoZSByb3V0ZXItb3V0bGV0IHNsb3Qgb2YgYSBuZXN0ZWQgTk9STUFMIHZpZXcpIHJlZ2lzdGVyIHRoZWlyXHJcbiAgICAvLyBjb250YWluZXJzIGltbWVkaWF0ZWx5LiBUaGlzIGxldHMgYSBwYXJlbnQgLT4gY2hpbGQgLT4gZ3JhbmRjaGlsZCBjaGFpblxyXG4gICAgLy8gKGUuZy4gSG9tZSAtPiBNYWluIC0+IHBhZ2UpIG1vdW50IGluIGEgc2luZ2xlIHN5bmNocm9ub3VzIHN5bmNWaWV3IHBhc3NcclxuICAgIC8vIGluc3RlYWQgb2YgZGVwZW5kaW5nIG9uIGEgY2hhbmdlLWRldGVjdGlvbiB0aWNrIGZpcmluZyBiZXR3ZWVuIGVhY2ggbGV2ZWwuXHJcbiAgICAvLyBXaXRob3V0IGl0IHRoZSBjaGlsZCBjYW5ub3QgcmVzb2x2ZSBpdHMgc2xvdCwgcXVldWVzIGludG9cclxuICAgIC8vIHBlbmRpbmdFbWJlZGRlZFZpZXdzLCBhbmQgdGhlIGRyYWluIHJhY2VzIHRoZSBhc3luYyB1cGRhdGVWaWV3Q29udGV4dFxyXG4gICAgLy8gcm91bmQtdHJpcHMg4oCUIGludGVybWl0dGVudGx5IGxlYXZpbmcgYSBwYXJlbnQgT1BFTkVEIGluIGJhY2tlbmQgYm9va2tlZXBpbmdcclxuICAgIC8vIGJ1dCBuZXZlciBtb3VudGVkIG9uIHRoZSBjbGllbnQsIHNvIGl0cyBzbG90IGNoaWxkIHN0YXlzIGJsYW5rLiAoIzI4ODcwKVxyXG4gICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ydW4oKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEFjdGlvbkRlc2NyaXB0b3JzKGFjdGlvbkRlc2NyaXB0b3JzOiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+KTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzID0gYWN0aW9uRGVzY3JpcHRvcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWN0aW9uRGVzY3JpcHRvcnMoKTogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPiB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aW9uRGVzY3JpcHRvcnMpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gYWN0aW9uIGRlc2NyaXB0b3JzIGhhcyBiZWVuIHNldCB0byBWaWV3Q29udGV4dC4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpZXdIYW5kbGVycyh2aWV3SGFuZGxlcnM6IEFycmF5PFNtYXJ0Vmlld0hhbmRsZXJNb2RlbD4pOiB2b2lkIHtcclxuICAgIHRoaXMudmlld0hhbmRsZXJzID0gdmlld0hhbmRsZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpZXdBcGlFcnJvcnModmlld0FwaUVycm9yczogU21hcnRWaWV3Q29udGV4dEFwaUVycm9ycyk6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzID0gdmlld0FwaUVycm9ycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNZXNzYWdlRGlhbG9nTmFtZShtZXNzYWdlRGlhbG9nTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lc3NhZ2VEaWFsb2duYW1lID0gbWVzc2FnZURpYWxvZ05hbWU7XHJcbiAgICB0aGlzLnZpZXdIYW5kbGVycy5wdXNoKHtcclxuICAgICAgbmFtZTogbWVzc2FnZURpYWxvZ05hbWUsXHJcbiAgICAgIGNvbXBvbmVudDogTWVzc2FnZURpYWxvZ0NvbXBvbmVudCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcFVybEZvclZpZXdTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3LmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggPSB0aGlzLnVybDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRNb2R1bGVVUkwobW9kdWxlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLm1vZHVsZVVybHNCeU1vZHVsZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZHVsZXNNYXAgZG9lcyBub3QgZXhpc3QuJyk7XHJcbiAgICB9XHJcbiAgICBsZXQgbW9kdWxlVXJsID0gdGhpcy5tb2R1bGVVcmxzQnlNb2R1bGU/LmdldChtb2R1bGUpO1xyXG5cclxuICAgIGlmICghbW9kdWxlVXJsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kdWxlVXJsIGRvZXMgbm90IGV4aXN0IHdpdGggdGhlIGdpdmVuIG1vZHVsZS4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb2R1bGVVcmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0TW9kdWxlVVJMKG1vZHVsZXM6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcclxuICAgIHRoaXMubW9kdWxlVXJsc0J5TW9kdWxlID0gbW9kdWxlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudXJsID0gdXJsICsgJy92aWV3JztcclxuICAgIHRoaXMuc2V0VXBVcmxGb3JWaWV3U2VydmljZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFuZFN5bmNWaWV3Q29udGV4dCh1dWlkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXV1aWQpIHtcclxuICAgICAgdXVpZCA9IHRoaXMuZ2V0Vmlld0NvbnRleHRVdWlkKCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICBhd2FpdCB0aGlzLnN5bmNWaWV3KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRWaWV3Q29udGV4dCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdDb250ZXh0RGF0YT4ge1xyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IGF3YWl0IHRoaXMudmlldy5nZXRWaWV3Q29udGV4dCh1dWlkKS50b1Byb21pc2UoKTtcclxuICAgIGlmICghdGhpcy52aWV3Q29udGV4dCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpZXdDb250ZXh0IGRvZXMgbm90IGV4aXN0IHdpdGggdGhlIGdpdmVuIHV1aWQuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRWaWV3Q29udGV4dERhdGFCeVBhZ2VOYW1lKHBhZ2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdEYXRhPiB7XHJcbiAgICBpZiAoIXRoaXMudmlld0NvbnRleHQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRWaWV3Q29udGV4dCh0aGlzLmdldFZpZXdDb250ZXh0VXVpZCgpKTtcclxuICAgIH1cclxuICAgIGxldCBwYWdlVXVpZCA9IHRoaXMuZ2V0VXVpZE9mUGFnZShwYWdlTmFtZSk7XHJcblxyXG4gICAgbGV0IHZpZXdDb250ZXh0QnlQYWdlTmFtZSA9IHRoaXMudmlld0NvbnRleHQ/LnZpZXdzLmZpbmQoKHZpZXcpID0+IHZpZXcudXVpZCA9PT0gcGFnZVV1aWQpO1xyXG4gICAgaWYgKCF2aWV3Q29udGV4dEJ5UGFnZU5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgVmlld0RhdGEgb2YgJHtwYWdlTmFtZX0gaXMgbm90IGZvdW5kIWApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZpZXdDb250ZXh0QnlQYWdlTmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVWaWV3Q29udGV4dChcclxuICAgIHZpZXdDb250ZXh0VXBkYXRlOiBWaWV3Q29udGV4dFVwZGF0ZVxyXG4gICk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkPiB7XHJcbiAgICB2aWV3Q29udGV4dFVwZGF0ZS5kZXZpY2VJbmZvID8/PSB7XHJcbiAgICAgIGRldmljZUlkOiAnaWQnLFxyXG4gICAgICB1c2VyQWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXHJcbiAgICAgIHBhcmFtZXRlcnM6IG5ldyBNYXAoKSxcclxuICAgIH07XHJcbiAgICB2aWV3Q29udGV4dFVwZGF0ZS5kZXZpY2VJbmZvLmNvbXBvbmVudExpYnJhcnkgPSB0aGlzLmNvbXBvbmVudExpYnJhcnk7XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IGF3YWl0IHRoaXMudmlldy51cGRhdGVWaWV3Q29udGV4dCh2aWV3Q29udGV4dFVwZGF0ZSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyU2Vzc2lvblN0b3JhZ2UoKTogdm9pZCB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xyXG4gICAgdGhpcy5jbGVhckVtYmVkZGVkVmlld3MoKTtcclxuICAgIHRoaXMub3BlbmVkVmlld0RhdGEgPSBbXTtcclxuICAgIHRoaXMub3BlbmVkVmlld1V1aWRzID0gW107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUZWFyIGRvd24gYWxsIHNsb3QtaG9zdGVkIHZpZXcgY29tcG9uZW50cyBvbiBhIHZpZXdDb250ZXh0IHJlc2V0IChlLmcuIGxvZ291dCAvXHJcbiAgICogdmlld2NvbnRleHQtbG9zdCkuIFdpdGhvdXQgdGhpcyB0aGUgcHJldmlvdXMgdmlldyB0cmVlIHN0YXlzIG1vdW50ZWQgaW4gdGhlIHJvb3RcclxuICAgKiBzbG90IGFuZCB0aGUgbmV3IHRyZWUgaXMgYXBwZW5kZWQgYWxvbmdzaWRlIGl0LiBEZXN0cm95aW5nIGEgcGFyZW50IGNhc2NhZGVzIHRvXHJcbiAgICogaXRzIG5lc3RlZCBzbG90IGRpcmVjdGl2ZXMgKHdoaWNoIHVucmVnaXN0ZXIgdGhlaXIgY29udGFpbmVycyB2aWEgbmdPbkRlc3Ryb3kpLFxyXG4gICAqIGxlYXZpbmcgb25seSB0aGUgaG9zdC1vd25lZCByb290IHNsb3QgcmVnaXN0ZXJlZC5cclxuICAgKi9cclxuICBwcml2YXRlIGNsZWFyRW1iZWRkZWRWaWV3cygpOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXMuZW1iZWRkZWRWaWV3UmVmcykge1xyXG4gICAgICBpZiAoIXJlZi5jb21wb25lbnRSZWYuaG9zdFZpZXcuZGVzdHJveWVkKSB7XHJcbiAgICAgICAgcmVmLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZW1iZWRkZWRWaWV3UmVmcyA9IFtdO1xyXG4gICAgdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN0YXJ0Vmlld0NvbnRleHQoKTogUHJvbWlzZTxWaWV3Q29udGV4dERhdGE+IHtcclxuICAgIHRoaXMuY2xlYXJTZXNzaW9uU3RvcmFnZSgpO1xyXG4gICAgdGhpcy5zZXNzaW9uLmFkZEhlYWRlclBhcmFtKHtcclxuICAgICAgaGVhZGVyTmFtZTogdGhpcy52aWV3Q29udGV4dFV1aWRIZWFkZXJOYW1lLFxyXG4gICAgICB2YWx1ZTogJycsXHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgbmV3Vmlld0NvbnRleHQ6IFZpZXdDb250ZXh0RGF0YSB8IHVuZGVmaW5lZCA9IGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAuY3JlYXRlVmlld0NvbnRleHQoKVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICBpZiAoIW5ld1ZpZXdDb250ZXh0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gVmlld0NvbnRleHQgd2FzIGNyZWF0ZWQnKTtcclxuICAgIH1cclxuICAgIHRoaXMudmlld0NvbnRleHQgPSBuZXdWaWV3Q29udGV4dDtcclxuICAgIHRoaXMuc2V0Vmlld0NvbnRleHRVdWlkKG5ld1ZpZXdDb250ZXh0LnV1aWQhKTtcclxuICAgIHRoaXMuZ2VuZXJhdGlvbisrO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEdlbmVyYXRpb24oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZSh1dWlkPzogc3RyaW5nKTogUHJvbWlzZTxWaWV3Q29udGV4dERhdGEgfCB1bmRlZmluZWQ+IHtcclxuICAgIGlmICh0aGlzLmluaXRpYWxpemVSdW5uaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVSdW5uaW5nLnRvUHJvbWlzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplUnVubmluZyA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXdIYW5kbGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgXCJUaGVyZSBhcmVuJ3QgYW55IHZpZXdIYW5kbGVycyBpbiBTbWFydFZpZXdDb250ZXh0U2VydmljZSEgUHJvdmlkZSBzb21lIHRvIHVzZSBpdHMgZnVuY3Rpb25zLlwiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZURpYWxvZ25hbWUpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG1lc3NhZ2VEaWFsb2dOYW1lIHByb3ZpZGVkIGJ5IHRoZSBiYWNrZW5kIGhhcyBub3QgYmVlbiBzZXQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1dWlkKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFZpZXdDb250ZXh0VXVpZCh1dWlkKTtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodXVpZCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFZpZXdDb250ZXh0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRWaWV3Q29udGV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQhO1xyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcubmV4dCh0aGlzLnZpZXdDb250ZXh0ISk7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUnVubmluZy5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0Vmlld0NvbnRleHQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdXVpZDtcclxuICAgIHRyeSB7XHJcbiAgICAgIHV1aWQgPSB0aGlzLmdldFZpZXdDb250ZXh0VXVpZCgpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICAgIHV1aWQgPSB0aGlzLmdldFZpZXdDb250ZXh0VXVpZCgpO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplKHV1aWQpO1xyXG4gICAgYXdhaXQgdGhpcy5yZXN0b3JlVmlld3ModXVpZCk7XHJcbiAgICBhd2FpdCB0aGlzLmdldEFuZFN5bmNWaWV3Q29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSHlkcmF0ZXMgdGhlIHZpZXctY29udGV4dCBzdGF0ZSBmcm9tIGFuIGFscmVhZHktZXhpc3RpbmcgVVVJRCBwcm92aWRlZFxyXG4gICAqIGV4dGVybmFsbHkgKGUuZy4gYnkgYSBuYXRpdmUgbW9iaWxlIHNoZWxsIHZpYSBVUkwgZnJhZ21lbnQpLiBVbmxpa2VcclxuICAgKiBgaW5pdGlhbGl6ZSh1dWlkKWAsIHRoaXMgbWV0aG9kIGRvZXMgTk9UIGZhbGwgYmFjayB0byBjcmVhdGluZyBhIGZyZXNoXHJcbiAgICogdmlld0NvbnRleHQgaWYgdGhlIGJhY2tlbmQgcmVqZWN0cyB0aGUgVVVJRCDigJQgdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0b1xyXG4gICAqIHN1cmZhY2UgdGhlIGZhaWx1cmUgKHR5cGljYWxseSB2aWEgdGhlIGJvb3RzdHJhcCdzIGBvblN0YXJ0RXJyb3JgIGhvb2spLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBpbml0RnJvbUV4aXN0aW5nVmlld0NvbnRleHQodXVpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNldFZpZXdDb250ZXh0VXVpZCh1dWlkKTtcclxuICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodXVpZCk7XHJcbiAgICBhd2FpdCB0aGlzLnJlc3RvcmVWaWV3cyh1dWlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0TmV3Vmlld0NvbnRleHQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pbml0aU5ld0NvbnRleHRSdW5uaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcgPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRWaWV3Q29udGV4dCgpO1xyXG4gICAgICBsZXQgdXVpZCA9IHRoaXMuZ2V0Vmlld0NvbnRleHRVdWlkKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSh1dWlkKTtcclxuICAgICAgYXdhaXQgdGhpcy5yZXN0b3JlVmlld3ModXVpZCk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcubmV4dCgpO1xyXG4gICAgICB0aGlzLmluaXRpTmV3Q29udGV4dFJ1bm5pbmcuY29tcGxldGUoKTtcclxuICAgICAgdGhpcy5pbml0aU5ld0NvbnRleHRSdW5uaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5WaWV3KHZpZXc6IFZpZXdEYXRhKTogVmlld1N0YXRlVXBkYXRlIHwgdW5kZWZpbmVkIHtcclxuICAgIGxldCBhbHJlYWR5T3BlbmVkID0gdGhpcy5vcGVuZWRWaWV3VXVpZHMuc29tZSgodXVpZCkgPT4gdXVpZCA9PT0gdmlldy51dWlkKTtcclxuICAgIGlmIChhbHJlYWR5T3BlbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IHZpZXdIYW5kbGVyID0gcmVzb2x2ZVZpZXdIYW5kbGVyKHRoaXMudmlld0hhbmRsZXJzLCB0aGlzLmRlZmF1bHRDb21wb25lbnRzLCB2aWV3KTtcclxuXHJcbiAgICBpZiAoIXZpZXdIYW5kbGVyKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgU21hcnRWaWV3SGFuZGxlck1vZGVsIHdhcyBub3QgZm91bmQgYnkgdmlldyBuYW1lOiAke3ZpZXcudmlld05hbWV9IChjb21wb25lbnROYW1lOiAke3ZpZXcuY29tcG9uZW50TmFtZX0pYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHZpZXcudHlwZSA9PT0gVmlld1R5cGUuRElBTE9HKSB7XHJcbiAgICAgIGlmICghdmlld0hhbmRsZXIuY29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYENvbXBvbmVudCBpcyB1bmRlZmluZWQgaW4gU21hcnRWaWV3SGFuZGxlck1vZGVsIHdpdGggbmFtZTogJHt2aWV3LnZpZXdOYW1lfWBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCByZWZJc0FscmFkeUFkZGVkID0gdGhpcy5kaWFsb2dSZWZzLnNvbWUoXHJcbiAgICAgICAgKHJlZjogU21hcnRWaWV3RGlhbG9nUmVmKSA9PiByZWYudXVpZCA9PT0gdmlldy51dWlkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghcmVmSXNBbHJhZHlBZGRlZCkge1xyXG4gICAgICAgIGxldCBkaWFsb2dSZWY7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnB1c2godmlldy51dWlkKTtcclxuICAgICAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEucHVzaCh2aWV3KTtcclxuICAgICAgICAgIHRoaXMuc2V0VXVpZE9mUGFnZSh2aWV3LnZpZXdOYW1lLCB2aWV3LnV1aWQsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xyXG4gICAgICAgICAgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbkNvbXBvbmVudEFzRGlhbG9nKFxyXG4gICAgICAgICAgICB2aWV3SGFuZGxlci5jb21wb25lbnQsXHJcbiAgICAgICAgICAgIHZpZXdIYW5kbGVyLm5hbWUsXHJcbiAgICAgICAgICAgIHZpZXcudXVpZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wZW5lZFZpZXdVdWlkcy5pbmRleE9mKHZpZXcudXVpZCk7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5lZFZpZXdEYXRhLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJVdWlkT2ZQYWdlKHZpZXcudmlld05hbWUsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuc2V0VXVpZE9mUGFnZSh2aWV3LnZpZXdOYW1lLCB2aWV3LnV1aWQsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZGlhbG9nRGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgICAgICBsZXQgaXNNZXNzYWdlRGlhbG9nID0gdmlldy52aWV3TmFtZSA9PT0gdGhpcy5tZXNzYWdlRGlhbG9nbmFtZTtcclxuICAgICAgICBpZiAoIWlzTWVzc2FnZURpYWxvZykge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGlhbG9nRGlzYWJsZUNsb3NlID0gdGhpcy5pbmplY3QuZ2V0KERJQUxPR19ESVNBQkxFX0NMT1NFKTtcclxuICAgICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgcmVhZGluZyBESUFMT0dfRElTQUJMRV9DTE9TRScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGlhbG9nUmVmIGluc3RhbmNlb2YgTWF0RGlhbG9nUmVmKSB7XHJcbiAgICAgICAgICBkaWFsb2dSZWYuZGlzYWJsZUNsb3NlID0gZGlhbG9nRGlzYWJsZUNsb3NlO1xyXG4gICAgICAgICAgLy8gaWYgKGlzTWVzc2FnZURpYWxvZykge1xyXG4gICAgICAgICAgLy8gICBpZiAodmlldy5tZXNzYWdlPy5vcHRpb25zICYmIHZpZXcubWVzc2FnZS5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICBpZiAoIWRpYWxvZ0Rpc2FibGVDbG9zZSkge1xyXG4gICAgICAgICAgICBkaWFsb2dSZWZcclxuICAgICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1BY3Rpb24odmlldy51dWlkLCB7IGNvZGU6IERlZmF1bHRVaUFjdGlvbkNvZGVfQ0xPU0UsIHBhcmFtczoge30gfSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaWFsb2dSZWYgaW5zdGFuY2VvZiBEeW5hbWljRGlhbG9nUmVmKSB7XHJcbiAgICAgICAgICBpZiAoIWRpYWxvZ0Rpc2FibGVDbG9zZSkge1xyXG4gICAgICAgICAgICBkaWFsb2dSZWYub25EZXN0cm95LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1BY3Rpb24odmlldy51dWlkLCB7IGNvZGU6IERlZmF1bHRVaUFjdGlvbkNvZGVfQ0xPU0UsIHBhcmFtczoge30gfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWZzLnB1c2goe1xyXG4gICAgICAgICAgdXVpZDogdmlldy51dWlkLFxyXG4gICAgICAgICAgZGlhbG9nUmVmLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHZpZXcudHlwZSA9PT0gVmlld1R5cGUuTk9STUFMKSB7XHJcbiAgICAgIGlmICghdmlld0hhbmRsZXIuY29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgaXMgdW5kZWZpbmVkIGluIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3aXRoIG5hbWU6ICR7dmlldy52aWV3TmFtZX1gKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBDT01QQVRJQklMSVRZIFNISU0gKCMyODg3MCwgaW50ZW50aW9uYWwpOiBzb21lIGNoaWxkIHNlcnZpY2VzIChTbWFydHRyZWVHZW5lcmljU2VydmljZSxcclxuICAgICAgLy8gU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlKSBhbmQgZ2VuZXJpYyBjb21wb25lbnRzIChTZWFyY2hQYWdlQ29tcG9uZW50LCBHZW5lcmljUGFnZUNvbXBvbmVudClcclxuICAgICAgLy8gc3RpbGwgcmVzb2x2ZSB0aGVpciB2aWV3IHV1aWQgdmlhIHRoZSBwYWdlTmFtZSAtPiBnZXRVdWlkT2ZQYWdlKHNlc3Npb25TdG9yYWdlKSBpbmRpcmVjdGlvblxyXG4gICAgICAvLyBpbiB0aGVpciBDT05TVFJVQ1RPUiwgd2hpY2ggcnVucyBpbnNpZGUgY3JlYXRlQ29tcG9uZW50KCkgYmVsb3cg4oCUIGJlZm9yZSBvcGVuVmlldydzIG5vcm1hbFxyXG4gICAgICAvLyBib29ra2VlcGluZy4gU28gdGhlIG1hcHBpbmcgbXVzdCBiZSB3cml0dGVuIGhlcmUsIGFoZWFkIG9mIGNvbXBvbmVudCBjcmVhdGlvbi4gVGhlIHByb3BlclxyXG4gICAgICAvLyBmaXggKGZlZWQgdGhvc2UgY29uc3VtZXJzIHRoZSBpbmplY3RlZCB1dWlkICsgZGVmZXIgdGhlaXIgaW5pdCkgaXMgZGVmZXJyZWQgY29uc3VtZXIgcGx1bWJpbmc7XHJcbiAgICAgIC8vIHVudGlsIHRoZW4gdGhpcyB3cml0ZSBrZWVwcyB0aGUgaW5kaXJlY3Rpb24gY29ycmVjdCBpbiB0aGUgc2xvdCB3b3JsZC5cclxuICAgICAgdGhpcy5zZXRVdWlkT2ZQYWdlKHZpZXcudmlld05hbWUsIHZpZXcudXVpZCwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XHJcbiAgICAgIC8vIEEgTk9STUFMIHZpZXcgd2l0aCBubyBjb250YWluZXJVdWlkIGxhbmRzIGluIHRoZSBob3N0IHJvb3Qgc2xvdCAocmVzb2x2ZVNsb3QgbWFwc1xyXG4gICAgICAvLyBpdCB0byBST09UX0NPTlRBSU5FUl9VVUlEKTsgaWYgbm8gc2xvdCBpcyByZWdpc3RlcmVkIHlldCBpdCBxdWV1ZXMgYW5kIGRyYWlucyBsYXRlci5cclxuICAgICAgY29uc3QgaW5zZXJ0ZWQgPSB0aGlzLmluc2VydFZpZXdJbnRvU2xvdCh2aWV3LCB2aWV3SGFuZGxlci5jb21wb25lbnQpO1xyXG4gICAgICBpZiAoIWluc2VydGVkKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLkVNQkVEREVEKSB7XHJcbiAgICAgIGlmICghdmlld0hhbmRsZXIuY29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYENvbXBvbmVudCBpcyB1bmRlZmluZWQgaW4gU21hcnRWaWV3SGFuZGxlck1vZGVsIHdpdGggbmFtZTogJHt2aWV3LnZpZXdOYW1lfWBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFdyaXRlIHRoZSBwYWdlLXV1aWQgbWFwcGluZyBhaGVhZCBvZiBjb21wb25lbnQgY3JlYXRpb24gc28gY29uc3RydWN0b3ItdGltZVxyXG4gICAgICAvLyBhbmQgbmVzdGVkIGdldFV1aWRPZlBhZ2Uodmlld05hbWUpIGNvbnN1bWVycyAoZmlsdGVyLCB0cmVlKSByZXNvbHZlLiBUaGVcclxuICAgICAgLy8gcGFnZS48dmlld05hbWU+IGtleSBpcyBkaXN0aW5jdCBwZXIgdmlldywgc28gaXQgbmV2ZXIgY29sbGlkZXMuIFRoZVxyXG4gICAgICAvLyBjb21wb25lbnQuPGNvbXBvbmVudE5hbWU+IHJldmVyc2Uga2V5IENBTiBiZSBvdmVyd3JpdHRlbiBieSBhbm90aGVyXHJcbiAgICAgIC8vIGNvbmN1cnJlbnQgZHluYW1pYyB2aWV3IG9mIHRoZSBzYW1lIGRlZmF1bHQgY29tcG9uZW50LCBidXQgaXQgaXMgcmVhZCBvbmx5XHJcbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgaW4gdGhlIGNvbnN0cnVjdG9yIChyaWdodCBhZnRlciB0aGlzIHdyaXRlKSBhbmQgc2xvdCB2aWV3c1xyXG4gICAgICAvLyBsb2FkIHZpYSB0aGUgaW5qZWN0ZWQgX3V1aWQgYWZ0ZXJ3YXJkcywgc28gdGhlIG92ZXJ3cml0ZSBuZXZlciBtaXMtcmVzb2x2ZXNcclxuICAgICAgLy8gYXQgcnVudGltZS4gKCMyODg3MClcclxuICAgICAgdGhpcy5zZXRVdWlkT2ZQYWdlKHZpZXcudmlld05hbWUsIHZpZXcudXVpZCwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XHJcbiAgICAgIGNvbnN0IGluc2VydGVkID0gdGhpcy5pbnNlcnRWaWV3SW50b1Nsb3Qodmlldywgdmlld0hhbmRsZXIuY29tcG9uZW50KTtcclxuICAgICAgaWYgKCFpbnNlcnRlZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHR5cGUgb2YgdGhlIHZpZXcgYW5kIGl0cyB2aWV3SGFuZGxlciBpcyBub3QgdGhlIHNhbWUhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlldy5zdGF0ZSA9IFZpZXdTdGF0ZS5PUEVORUQ7XHJcblxyXG4gICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMucHVzaCh2aWV3LnV1aWQpO1xyXG4gICAgdGhpcy5vcGVuZWRWaWV3RGF0YS5wdXNoKHZpZXcpO1xyXG5cclxuICAgIGlmICh2aWV3LnR5cGUgIT09IFZpZXdUeXBlLkVNQkVEREVEKSB7XHJcbiAgICAgIHRoaXMuc2V0VXVpZE9mUGFnZSh2aWV3LnZpZXdOYW1lLCB2aWV3LnV1aWQsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xyXG4gICAgICB0aGlzLnV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZC5uZXh0KHZpZXcudmlld05hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN0YXRlOiBWaWV3U3RhdGUuT1BFTkVELFxyXG4gICAgICB1dWlkOiB2aWV3LnV1aWQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlVmlldyh2aWV3OiBWaWV3RGF0YSk6IFZpZXdTdGF0ZVVwZGF0ZVtdIHtcclxuICAgIGNvbnN0IHZpZXdIYW5kbGVyID0gcmVzb2x2ZVZpZXdIYW5kbGVyKHRoaXMudmlld0hhbmRsZXJzLCB0aGlzLmRlZmF1bHRDb21wb25lbnRzLCB2aWV3KTtcclxuXHJcbiAgICBpZiAoIXZpZXdIYW5kbGVyKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgU21hcnRWaWV3SGFuZGxlck1vZGVsIHdhcyBub3QgZm91bmQgYnkgdmlldyBuYW1lOiAke3ZpZXcudmlld05hbWV9IChjb21wb25lbnROYW1lOiAke3ZpZXcuY29tcG9uZW50TmFtZX0pYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVwZGF0ZXM6IFZpZXdTdGF0ZVVwZGF0ZVtdID0gW107XHJcblxyXG4gICAgaWYgKHZpZXcudHlwZSA9PT0gVmlld1R5cGUuRElBTE9HKSB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1JlZnMuZmluZChcclxuICAgICAgICAoZGlhbG9nUmVmOiBTbWFydFZpZXdEaWFsb2dSZWYpID0+IGRpYWxvZ1JlZi51dWlkID09PSB2aWV3LnV1aWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKGRpYWxvZ1JlZikge1xyXG4gICAgICAgIGRpYWxvZ1JlZi5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmRpYWxvZ1JlZnMuaW5kZXhPZihkaWFsb2dSZWYpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdEaWFsb2dSZWYgaXMgbm90IGZvdW5kIGJ5IHV1aWQuJyk7XHJcbiAgICAgIH1cclxuICAgICAgdXBkYXRlcy5wdXNoKC4uLnRoaXMuY2xlYW51cEVtYmVkZGVkQ2hpbGRyZW4odmlldy51dWlkKSk7XHJcbiAgICB9IGVsc2UgaWYgKHZpZXcudHlwZSA9PT0gVmlld1R5cGUuTk9STUFMKSB7XHJcbiAgICAgIC8vIERlc3Ryb3kgbmVzdGVkIGNoaWxkcmVuIGZpcnN0LCB0aGVuIHRoZSB2aWV3J3Mgb3duIHNsb3QgY29tcG9uZW50LlxyXG4gICAgICAvLyBkZXN0cm95Vmlld1JlZiBpcyBhIG5vLW9wIGZvciB0aGUgbGVnYWN5IHJvdXRlLXJlbmRlcmVkIChyb290bGVzcykgY2FzZS5cclxuICAgICAgdXBkYXRlcy5wdXNoKC4uLnRoaXMuY2xlYW51cEVtYmVkZGVkQ2hpbGRyZW4odmlldy51dWlkKSk7XHJcbiAgICAgIHRoaXMuZGVzdHJveVZpZXdSZWYodmlldy51dWlkKTtcclxuICAgIH0gZWxzZSBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5FTUJFRERFRCkge1xyXG4gICAgICB0aGlzLmRlc3Ryb3lWaWV3UmVmKHZpZXcudXVpZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0eXBlIG9mIHRoZSB2aWV3IGFuZCBpdHMgdmlld0hhbmRsZXIgaXMgbm90IHRoZSBzYW1lIScpO1xyXG4gICAgfVxyXG5cclxuICAgIHZpZXcuc3RhdGUgPSBWaWV3U3RhdGUuQ0xPU0VEO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcGVuZWRWaWV3VXVpZHMuaW5kZXhPZih2aWV3LnV1aWQpO1xyXG4gICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5vcGVuZWRWaWV3RGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAvLyBDbGVhciBmb3IgZXZlcnkgdHlwZTogb3BlblZpZXcgbm93IHdyaXRlcyB0aGUgcGFnZS11dWlkIG1hcHBpbmcgZm9yXHJcbiAgICAgIC8vIEVNQkVEREVEIHZpZXdzIHRvbyAoIzI4ODcwKSwgc28gdGhlIGNsZWFyIG11c3QgYmUgc3ltbWV0cmljIHRvIGF2b2lkIGFcclxuICAgICAgLy8gc3RhbGUgc2Vzc2lvblN0b3JhZ2UgZW50cnkuIGNsZWFyVXVpZE9mUGFnZSBpcyBhIG5vLW9wIGZvciBrZXlzIG5ldmVyXHJcbiAgICAgIC8vIHdyaXR0ZW4sIHNvIHRoaXMgc3RheXMgc2FmZSBmb3IgdGhlIGxlZ2FjeSByb290bGVzcyBjYXNlLlxyXG4gICAgICB0aGlzLmNsZWFyVXVpZE9mUGFnZSh2aWV3LnZpZXdOYW1lLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVzLnB1c2goe1xyXG4gICAgICBzdGF0ZTogVmlld1N0YXRlLkNMT1NFRCxcclxuICAgICAgdXVpZDogdmlldy51dWlkLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHVwZGF0ZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFudXBFbWJlZGRlZENoaWxkcmVuKGNvbnRhaW5lclV1aWQ6IHN0cmluZyk6IFZpZXdTdGF0ZVVwZGF0ZVtdIHtcclxuICAgIGNvbnN0IHVwZGF0ZXM6IFZpZXdTdGF0ZVVwZGF0ZVtdID0gW107XHJcblxyXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmVtYmVkZGVkVmlld1JlZnMuZmlsdGVyKChyZWYpID0+IHJlZi5jb250YWluZXJVdWlkID09PSBjb250YWluZXJVdWlkKTtcclxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcclxuICAgICAgY2hpbGQuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcclxuICAgICAgdXBkYXRlcy5wdXNoKHsgc3RhdGU6IFZpZXdTdGF0ZS5DTE9TRUQsIHV1aWQ6IGNoaWxkLnV1aWQgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVtYmVkZGVkVmlld1JlZnMgPSB0aGlzLmVtYmVkZGVkVmlld1JlZnMuZmlsdGVyKFxyXG4gICAgICAocmVmKSA9PiByZWYuY29udGFpbmVyVXVpZCAhPT0gY29udGFpbmVyVXVpZFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnBlbmRpbmdFbWJlZGRlZFZpZXdzID0gdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cy5maWx0ZXIoXHJcbiAgICAgICh2KSA9PiB2LmNvbnRhaW5lclV1aWQgIT09IGNvbnRhaW5lclV1aWRcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5lbWJlZGRlZENvbnRhaW5lcnMuZGVsZXRlKGNvbnRhaW5lclV1aWQpO1xyXG5cclxuICAgIHJldHVybiB1cGRhdGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqIERlc3Ryb3kgdGhlIGNvbXBvbmVudCBmb3IgYSB2aWV3IGxpdmluZyBpbiBhIHNsb3QsIGlmIHByZXNlbnQgKG5vLW9wIGZvciByb3V0ZS1yZW5kZXJlZCB2aWV3cykuICovXHJcbiAgcHJpdmF0ZSBkZXN0cm95Vmlld1JlZih1dWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlZkluZGV4ID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbmRJbmRleCgocmVmKSA9PiByZWYudXVpZCA9PT0gdXVpZCk7XHJcbiAgICBpZiAocmVmSW5kZXggPj0gMCkge1xyXG4gICAgICB0aGlzLmVtYmVkZGVkVmlld1JlZnNbcmVmSW5kZXhdLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuZW1iZWRkZWRWaWV3UmVmcy5zcGxpY2UocmVmSW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wZW5kaW5nRW1iZWRkZWRWaWV3cyA9IHRoaXMucGVuZGluZ0VtYmVkZGVkVmlld3MuZmlsdGVyKCh2KSA9PiB2LnV1aWQgIT09IHV1aWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZW5kVmlld0NvbnRleHRVcGRhdGVzKHVwZGF0ZXNUb1NlbmQ6IChWaWV3U3RhdGVVcGRhdGUgfCB1bmRlZmluZWQpW10pIHtcclxuICAgIGNvbnN0IHVwZGF0ZXM6IFZpZXdTdGF0ZVVwZGF0ZVtdID0gW107XHJcbiAgICB1cGRhdGVzVG9TZW5kLmZvckVhY2goKHVwZGF0ZSkgPT4ge1xyXG4gICAgICBpZiAodXBkYXRlICE9PSB1bmRlZmluZWQgJiYgdXBkYXRlICE9PSBudWxsKSB1cGRhdGVzLnB1c2godXBkYXRlKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHVwZGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXdDb250ZXh0KHtcclxuICAgICAgICB1cGRhdGVzLFxyXG4gICAgICAgIHV1aWQ6IHRoaXMudmlld0NvbnRleHQ/LnV1aWQsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgYXN5bmMgcmVzdG9yZVZpZXdzKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdXBkYXRlczogVmlld1N0YXRlVXBkYXRlW10gPSBbXTtcclxuICAgIGlmICghdGhpcy52aWV3Q29udGV4dCkge1xyXG4gICAgICBhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlld0NvbnRleHQhLnZpZXdzLmZpbHRlcihcclxuICAgICAgKHZpZXcpID0+IHZpZXcuc3RhdGUgPT09IFZpZXdTdGF0ZS5PUEVORUQgfHwgdmlldy5zdGF0ZSA9PT0gVmlld1N0YXRlLlRPX09QRU5cclxuICAgICkubWFwKCh2aWV3OiBWaWV3RGF0YSkgPT4ge1xyXG4gICAgICBjb25zdCB1cGRhdGUgPSB0aGlzLm9wZW5WaWV3KHZpZXcpO1xyXG4gICAgICBpZiAodXBkYXRlKSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKHVwZGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgYXdhaXQgdGhpcy5zZW5kVmlld0NvbnRleHRVcGRhdGVzKHVwZGF0ZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXVzZUVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5qZWN0LmdldChSRVVTRV9ST1VURVJfU0xPVF9DT01QT05FTlQpO1xyXG4gICAgICByZXR1cm4gdmFsdWUgIT09IGZhbHNlOyAvLyBkZWZhdWx0IE9OIHdoZW4gdW5zZXQvbnVsbFxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleGVjdXRlUmV1c2Uob2xkVmlldzogVmlld0RhdGEsIG5ld1ZpZXc6IFZpZXdEYXRhKTogVmlld1N0YXRlVXBkYXRlW10ge1xyXG4gICAgY29uc3QgcmVmID0gdGhpcy5lbWJlZGRlZFZpZXdSZWZzLmZpbmQoKHIpID0+IHIudXVpZCA9PT0gb2xkVmlldy51dWlkKTtcclxuICAgIGlmICghcmVmKSB7XHJcbiAgICAgIC8vIE5vIGxpdmUgY29tcG9uZW50IHRvIHJldXNlIChlLmcuIHdhcyByb3V0ZS1yZW5kZXJlZCkg4oCUIGZhbGwgYmFjayB0byBjbG9zZSArIG9wZW4uXHJcbiAgICAgIGNvbnN0IHVwZGF0ZXMgPSBbLi4udGhpcy5jbG9zZVZpZXcob2xkVmlldyldO1xyXG4gICAgICBjb25zdCBvcGVuZWQgPSB0aGlzLm9wZW5WaWV3KG5ld1ZpZXcpO1xyXG4gICAgICBpZiAob3BlbmVkKSB1cGRhdGVzLnB1c2gob3BlbmVkKTtcclxuICAgICAgcmV0dXJuIHVwZGF0ZXM7XHJcbiAgICB9XHJcbiAgICAvLyBUaGUgcmV1c2VkIHBhcmVudCBpcyBsb2dpY2FsbHkgYSBmcmVzaCBwYWdlIChuZXcgdXVpZCk7IGl0cyBwcmV2aW91cyBlbWJlZGRlZFxyXG4gICAgLy8gY2hpbGRyZW4gZG8gbm90IGNhcnJ5IG92ZXIgKHRoZSBiYWNrZW5kIGxlYXZlcyB0aGVtIGtleWVkIHVuZGVyIHRoZSBvbGQgcGFyZW50XHJcbiAgICAvLyB1dWlkKS4gVGVhciB0aGVtIGRvd24gaGVyZSBhbmQgcmVwb3J0IHRoZW0gQ0xPU0VELlxyXG4gICAgY29uc3QgY2hpbGRVcGRhdGVzID0gdGhpcy5jbGVhbnVwRW1iZWRkZWRDaGlsZHJlbihvbGRWaWV3LnV1aWQpO1xyXG5cclxuICAgIHJlZi5jb21wb25lbnRSZWYuaW5zdGFuY2UudXVpZCA9IG5ld1ZpZXcudXVpZDsgLy8gc2V0dGVyIHJ1bnMgdW5mb2xsb3cob2xkKS9mb2xsb3cobmV3KVxyXG4gICAgcmVmLnV1aWQgPSBuZXdWaWV3LnV1aWQ7XHJcblxyXG4gICAgY29uc3Qgb2xkSWR4ID0gdGhpcy5vcGVuZWRWaWV3VXVpZHMuaW5kZXhPZihvbGRWaWV3LnV1aWQpO1xyXG4gICAgaWYgKG9sZElkeCA+PSAwKSB7XHJcbiAgICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnNwbGljZShvbGRJZHgsIDEpO1xyXG4gICAgICB0aGlzLm9wZW5lZFZpZXdEYXRhLnNwbGljZShvbGRJZHgsIDEpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMucHVzaChuZXdWaWV3LnV1aWQpO1xyXG4gICAgdGhpcy5vcGVuZWRWaWV3RGF0YS5wdXNoKG5ld1ZpZXcpO1xyXG5cclxuICAgIHJlZi5jb21wb25lbnRSZWYuaW5zdGFuY2UucnVuKCk7XHJcblxyXG4gICAgb2xkVmlldy5zdGF0ZSA9IFZpZXdTdGF0ZS5DTE9TRUQ7XHJcbiAgICBuZXdWaWV3LnN0YXRlID0gVmlld1N0YXRlLk9QRU5FRDtcclxuXHJcbiAgICAvLyBNaXJyb3IgdGhlIG5vcm1hbCBvcGVuVmlldyB0YWlsIHNvIGdldFV1aWRPZlBhZ2UgY29uc3VtZXJzIChlLmcuIHRyZWVzKSByZXNvbHZlIHRoZSBuZXcgdXVpZC5cclxuICAgIGNvbnN0IHZpZXdIYW5kbGVyID0gcmVzb2x2ZVZpZXdIYW5kbGVyKHRoaXMudmlld0hhbmRsZXJzLCB0aGlzLmRlZmF1bHRDb21wb25lbnRzLCBuZXdWaWV3KTtcclxuICAgIHRoaXMuc2V0VXVpZE9mUGFnZShuZXdWaWV3LnZpZXdOYW1lLCBuZXdWaWV3LnV1aWQsIHZpZXdIYW5kbGVyPy5jb21wb25lbnROYW1lKTtcclxuICAgIHRoaXMudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkLm5leHQobmV3Vmlldy52aWV3TmFtZSk7XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgLi4uY2hpbGRVcGRhdGVzLFxyXG4gICAgICB7IHN0YXRlOiBWaWV3U3RhdGUuQ0xPU0VELCB1dWlkOiBvbGRWaWV3LnV1aWQgfSxcclxuICAgICAgeyBzdGF0ZTogVmlld1N0YXRlLk9QRU5FRCwgdXVpZDogbmV3Vmlldy51dWlkIH0sXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN5bmNWaWV3KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdXBkYXRlczogKFZpZXdTdGF0ZVVwZGF0ZSB8IHVuZGVmaW5lZClbXSA9IFtdO1xyXG4gICAgY29uc3Qgb3BzID0gYnVpbGRWaWV3T3BzKHRoaXMudmlld0NvbnRleHQ/LnZpZXdzID8/IFtdLCB0aGlzLnJldXNlRW5hYmxlZCgpKTtcclxuICAgIGZvciAoY29uc3Qgb3Agb2Ygb3BzKSB7XHJcbiAgICAgIGlmIChvcC5raW5kID09PSAnb3BlbicpIHtcclxuICAgICAgICB1cGRhdGVzLnB1c2godGhpcy5vcGVuVmlldyhvcC52aWV3KSk7XHJcbiAgICAgIH0gZWxzZSBpZiAob3Aua2luZCA9PT0gJ2Nsb3NlJykge1xyXG4gICAgICAgIHVwZGF0ZXMucHVzaCguLi50aGlzLmNsb3NlVmlldyhvcC52aWV3KSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKC4uLnRoaXMuZXhlY3V0ZVJldXNlKG9wLm9sZFZpZXcsIG9wLm5ld1ZpZXcpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZpZXdEYXRhVG9DbG9zZSA9IHRoaXMub3BlbmVkVmlld0RhdGEuZmlsdGVyKFxyXG4gICAgICAodmlld0RhdGE6IFZpZXdEYXRhKSA9PlxyXG4gICAgICAgICF0aGlzLnZpZXdDb250ZXh0Py52aWV3c1xyXG4gICAgICAgICAgLmZsYXRNYXAoKHZpZXdEYXRhOiBWaWV3RGF0YSkgPT4gdmlld0RhdGEudXVpZClcclxuICAgICAgICAgIC5pbmNsdWRlcyh2aWV3RGF0YS51dWlkKVxyXG4gICAgKTtcclxuICAgIGlmICh2aWV3RGF0YVRvQ2xvc2U/Lmxlbmd0aCkge1xyXG4gICAgICB2aWV3RGF0YVRvQ2xvc2UubWFwKCh2aWV3RGF0YTogVmlld0RhdGEpID0+IHtcclxuICAgICAgICB1cGRhdGVzLnB1c2goLi4udGhpcy5jbG9zZVZpZXcodmlld0RhdGEpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dD8ubGlua3M/Lm1hcCgoZGF0YTogTGluaykgPT4ge1xyXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICBsZXQgdGFyZ2V0ID0gJ19ibGFuayc7IC8vIGRlZmF1bHRcclxuICAgICAgc3dpdGNoIChkYXRhLnRhcmdldCA/PyBMaW5rVGFyZ2V0RW51bS5CTEFOSykge1xyXG4gICAgICAgIGNhc2UgJ1NFTEYnOlxyXG4gICAgICAgICAgdGFyZ2V0ID0gJ19zZWxmJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ0JMQU5LJzpcclxuICAgICAgICAgIHRhcmdldCA9ICdfYmxhbmsnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUEFSRU5UJzpcclxuICAgICAgICAgIHRhcmdldCA9ICdfcGFyZW50JztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1RPUCc6XHJcbiAgICAgICAgICB0YXJnZXQgPSAnX3RvcCc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgdGFyZ2V0KTtcclxuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBkYXRhLnVybCk7XHJcbiAgICAgIGlmIChkYXRhLmRvd25sb2FkKSB7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZGF0YS5maWxlbmFtZSA/PyAnJyk7XHJcbiAgICAgIH1cclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICBsaW5rLnJlbW92ZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdGFydERvd25sb2Fkc0ZpbGVzKHRoaXMudmlld0NvbnRleHQ/LmRvd25sb2FkcyB8fCBbXSk7XHJcblxyXG4gICAgY29uc3QgY2xpcGJvYXJkVGV4dCA9IHRoaXMudmlld0NvbnRleHQ/LmNsaXBib2FyZERhdGFcclxuICAgICAgPy5tYXAoKGNkOiBDbGlwYm9hcmREYXRhKSA9PiBjZC50ZXh0IHx8ICcnKVxyXG4gICAgICAuam9pbignJyk7XHJcbiAgICBpZiAoY2xpcGJvYXJkVGV4dCkge1xyXG4gICAgICBjb25zdCBjbGlwYm9hcmQgPSBuYXZpZ2F0b3IuY2xpcGJvYXJkO1xyXG4gICAgICAvLyBhdmFpbGFibGUgb25seSBpbiBzZWN1cmUgY29udGV4dHMuXHJcbiAgICAgIGlmIChjbGlwYm9hcmQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2xpcGJvYXJkXHJcbiAgICAgICAgICAgIC53cml0ZVRleHQoY2xpcGJvYXJkVGV4dClcclxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY29weSB0ZXh0IHRvIGNsaXBib2FyZCcsIGUpKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhY2Nlc3NpbmcgY2xpcGJvYXJkJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNlbmRWaWV3Q29udGV4dFVwZGF0ZXModXBkYXRlcyk7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0SGFzQmVlblN5bmNlZC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzdGFydERvd25sb2Fkc0ZpbGVzKGRvd25sb2FkczogRG93bmxvYWRlZEZpbGVbXSkge1xyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGRvd25sb2Fkcykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCBibG9iID0gYXdhaXQgdGhpcy5kb3dubG9hZFJlc291cmNlKGZpbGUudXVpZCEsIGZpbGUuaWRlbnRpZmllciEpO1xyXG4gICAgICAgIGxldCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cclxuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGUuZmlsZW5hbWUhKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgICAgICBsaW5rLnJlbW92ZSgpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZG93bmxvYWRpbmcgZmlsZScsIGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZpZXdDb250ZXh0VXVpZCh1dWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy52aWV3Q29udGV4dFV1aWROYW1lLCB1dWlkKTtcclxuICAgIHRoaXMuc2Vzc2lvbi5hZGRIZWFkZXJQYXJhbSh7XHJcbiAgICAgIGhlYWRlck5hbWU6IHRoaXMudmlld0NvbnRleHRVdWlkSGVhZGVyTmFtZSxcclxuICAgICAgdmFsdWU6IHV1aWQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRWaWV3Q29udGV4dFV1aWQoKTogc3RyaW5nIHtcclxuICAgIGxldCB2aWV3Q29udGV4dFV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMudmlld0NvbnRleHRVdWlkTmFtZSk7XHJcbiAgICBpZiAoIXZpZXdDb250ZXh0VXVpZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpZXcgY29udGV4dCBpcyBub3QgaW5pdGlhbGl6ZWQhJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlld0NvbnRleHRVdWlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc1ZpZXdDb250ZXh0VXVpZCgpOiBib29sZWFuIHtcclxuICAgIGxldCB2aWV3Q29udGV4dFV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMudmlld0NvbnRleHRVdWlkTmFtZSk7XHJcbiAgICByZXR1cm4gdmlld0NvbnRleHRVdWlkICE9PSBudWxsICYmIHZpZXdDb250ZXh0VXVpZCAhPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFV1aWRPZlBhZ2UocGFnZU5hbWU6IHN0cmluZywgdXVpZDogc3RyaW5nLCBjb21wb25lbnROYW1lPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMucGFnZU5hbWVQcmVmaXggKyBwYWdlTmFtZSwgdXVpZCk7XHJcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuY29tcG9uZW50TmFtZVByZWZpeCArIGNvbXBvbmVudE5hbWUsIHBhZ2VOYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhclV1aWRPZlBhZ2UocGFnZU5hbWU6IHN0cmluZywgY29tcG9uZW50TmFtZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnBhZ2VOYW1lUHJlZml4ICsgcGFnZU5hbWUpO1xyXG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmNvbXBvbmVudE5hbWVQcmVmaXggKyBjb21wb25lbnROYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRVdWlkT2ZQYWdlKHBhZ2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMucGFnZU5hbWVQcmVmaXggKyBwYWdlTmFtZSk7XHJcbiAgICBpZiAoIXV1aWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdXVpZCBvZiAke3BhZ2VOYW1lfSBpcyBub3QgYXZhaWxhYmxlLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHV1aWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFnZU5hbWVPZkNvbXBvbmVudChjb21wb25lbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHBhZ2VOYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmNvbXBvbmVudE5hbWVQcmVmaXggKyBjb21wb25lbnROYW1lKTtcclxuICAgIGlmICghcGFnZU5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFnZU5hbWUgb2YgJHtjb21wb25lbnROYW1lfSBpcyBub3QgYXZhaWxhYmxlLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhZ2VOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG1lc3NhZ2UobWVzc2FnZURhdGE6IE1lc3NhZ2VEYXRhLCBtZXNzYWdlUmVzdWx0OiBNZXNzYWdlUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAgIC5tZXNzYWdlKG1lc3NhZ2VEYXRhLnZpZXdVdWlkID8/ICcnLCBtZXNzYWdlRGF0YS51dWlkLCBtZXNzYWdlUmVzdWx0KVxyXG4gICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICAgIC8vIGluIGZ1dHVyZSB1c2UgdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvckJ5Q29kZShjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcj4ge1xyXG4gICAgbGV0IGJ1dHRvbkxhYmVsO1xyXG4gICAgbGV0IGRpYWxvZ1RpdGxlO1xyXG4gICAgbGV0IG1lc3NhZ2U7XHJcbiAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgIGJ1dHRvbkxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXHJcbiAgICAgICAgLmdldChTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dCdXR0b25MYWJlbClcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgIGRpYWxvZ1RpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dUaXRsZSkudG9Qcm9taXNlKCk7XHJcbiAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ01lc3NhZ2UpLnRvUHJvbWlzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYnV0dG9uTGFiZWwgPSAnT2snO1xyXG4gICAgICBkaWFsb2dUaXRsZSA9ICdIaWJhJztcclxuICAgICAgbWVzc2FnZSA9ICdBbiBlcnJvciBoYXMgb2NjdXJlZC4nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY29kZSxcclxuICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgIGJ1dHRvbkxhYmVsLFxyXG4gICAgICAgIGRpYWxvZ1RpdGxlLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IGFwaUVycm9yc1dpdGhDb2RlID0gdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzLnZpZXdDb250ZXh0QXBpRXJyb3JzLmZpbHRlcihcclxuICAgICAgKGFwaUVycm9yOiBTbWFydFZpZXdDb250ZXh0QXBpRXJyb3IpID0+IHtcclxuICAgICAgICByZXR1cm4gYXBpRXJyb3IuY29kZSA9PT0gY29kZTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGlmICghYXBpRXJyb3JzV2l0aENvZGUgfHwgKGFwaUVycm9yc1dpdGhDb2RlICYmICFhcGlFcnJvcnNXaXRoQ29kZS5sZW5ndGgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvciB3aXRoIGNvZGUgJHtjb2RlfSBjb3VsZCBub3QgYmUgZm91bmQuYCk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNvZGUsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBidXR0b25MYWJlbCxcclxuICAgICAgICBkaWFsb2dUaXRsZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcGlFcnJvcnNXaXRoQ29kZVswXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRWaWV3Q29uc3RyYWludCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdDb25zdHJhaW50PiB7XHJcbiAgICBsZXQgdmlld0NvbnN0cmFpbnRSZXNwb25zZSA9IGF3YWl0IHRoaXMudmlldy5nZXRWaWV3Q29uc3RyYWludCh1dWlkKS50b1Byb21pc2UoKTtcclxuICAgIGlmICghdmlld0NvbnN0cmFpbnRSZXNwb25zZSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IFZpZXdDb25zdHJhaW50IHdpdGggdGhlIGdpdmVuIHV1aWQuJyk7XHJcbiAgICByZXR1cm4gdmlld0NvbnN0cmFpbnRSZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzaG93UHVibGlzaGVkVmlldyhjaGFubmVsOiBzdHJpbmcsIHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc09wZW5pbmdTbWFydExpbmsgPSB0cnVlO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuc2Vzc2lvbi5pbml0aWFsaXplKCk7XHJcbiAgICAvLyBUT0RPIGluaXQgdmlldyBjb250ZXh0IGF1dG9tYXRpY2FsbHlcclxuICAgIC8vIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpO1xyXG4gICAgYXdhaXQgdGhpcy5pbml0Vmlld0NvbnRleHQoKTtcclxuXHJcbiAgICB0aGlzLm9wZW5TbWFydExpbmsubmV4dChjaGFubmVsKTtcclxuICAgIGF3YWl0IHRoaXMub3BlblNtYXJ0TGluay50b1Byb21pc2UoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnZpZXcuc2hvd1B1Ymxpc2hlZFZpZXcoY2hhbm5lbCwgdXVpZCkudG9Qcm9taXNlKCk7XHJcbiAgICBhd2FpdCB0aGlzLmdldEFuZFN5bmNWaWV3Q29udGV4dCgpO1xyXG4gICAgdGhpcy5pc09wZW5pbmdTbWFydExpbmsgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkb3dubG9hZFJlc291cmNlKHV1aWQ6IHN0cmluZywgaXRlbTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnZpZXcuZG93bmxvYWRJdGVtKHV1aWQsIGl0ZW0pLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBlcmZvcm1BY3Rpb24odXVpZDogc3RyaW5nLCB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BlcmZvcm1BY3Rpb24oe1xyXG4gICAgICB1dWlkLFxyXG4gICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICB9KTtcclxuICAgIC8vIGNvbnN0IGlzQ29tcGxldGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIC8vIHRoaXMuYXBpUXVldWVTZXJ2aWNlLmFkZFRvUXVldWUoe1xyXG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybUFjdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgLy8gICBjb25maWc6IHtcclxuICAgIC8vICAgICB1dWlkLFxyXG4gICAgLy8gICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgaXNDb21wbGV0ZWQsXHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHJldHVybiBhd2FpdCBpc0NvbXBsZXRlZC50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwZXJmb3JtV2lkZ2V0QWN0aW9uKFxyXG4gICAgdXVpZDogc3RyaW5nLFxyXG4gICAgd2lkZ2V0SWQ6IHN0cmluZyxcclxuICAgIG5vZGVJZDogc3RyaW5nLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3RcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9wZXJmb3JtV2lkZ2V0QWN0aW9uKHsgdXVpZCwgd2lkZ2V0SWQsIG5vZGVJZCwgdWlBY3Rpb25SZXF1ZXN0IH0pO1xyXG4gICAgLy8gY29uc3QgaXNDb21wbGV0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgLy8gdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZSh7XHJcbiAgICAvLyAgIGNhbGxiYWNrOiB0aGlzLl9wZXJmb3JtV2lkZ2V0QWN0aW9uLmJpbmQodGhpcyksXHJcbiAgICAvLyAgIGNvbmZpZzoge1xyXG4gICAgLy8gICAgIHV1aWQsXHJcbiAgICAvLyAgICAgd2lkZ2V0SWQsXHJcbiAgICAvLyAgICAgbm9kZUlkLFxyXG4gICAgLy8gICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgaXNDb21wbGV0ZWQsXHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHJldHVybiBhd2FpdCBpc0NvbXBsZXRlZC50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbihcclxuICAgIHV1aWQ6IHN0cmluZyxcclxuICAgIHdpZGdldElkOiBzdHJpbmcsXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BlcmZvcm1XaWRnZXRNYWluQWN0aW9uKHsgdXVpZCwgd2lkZ2V0SWQsIHVpQWN0aW9uUmVxdWVzdCB9KTtcclxuICAgIC8vIGNvbnN0IGlzQ29tcGxldGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIC8vIHRoaXMuYXBpUXVldWVTZXJ2aWNlLmFkZFRvUXVldWUoe1xyXG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybVdpZGdldE1haW5BY3Rpb24uYmluZCh0aGlzKSxcclxuICAgIC8vICAgY29uZmlnOiB7XHJcbiAgICAvLyAgICAgdXVpZCxcclxuICAgIC8vICAgICB3aWRnZXRJZCxcclxuICAgIC8vICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIGlzQ29tcGxldGVkLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyByZXR1cm4gYXdhaXQgaXNDb21wbGV0ZWQudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVVwbG9hZEFjdGlvbihcclxuICAgIHV1aWQ6IHN0cmluZyxcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgcGFyYW06ICdpbnB1dCcgfCAnaW5wdXRcIicsXHJcbiAgICBjb250ZW50OiBhbnlcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3BlcmZvcm1VcGxvYWRBY3Rpb24oe1xyXG4gICAgICB1dWlkLFxyXG4gICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAgIHBhcmFtLFxyXG4gICAgICBjb250ZW50LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVVwbG9hZE11bHRpcGxlQWN0aW9uKFxyXG4gICAgdXVpZDogc3RyaW5nLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QsXHJcbiAgICBwYXJhbTogJ2lucHV0JyB8ICdpbnB1dDInLFxyXG4gICAgY29udGVudDogYW55W11cclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3BlcmZvcm1VcGxvYWRNdWx0aXBsZUFjdGlvbih7XHJcbiAgICAgIHV1aWQsXHJcbiAgICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgICAgcGFyYW0sXHJcbiAgICAgIGNvbnRlbnQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkYXRhQ2hhbmdlZCh1dWlkOiBzdHJpbmcsIGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9kYXRhQ2hhbmdlZCh7IHV1aWQsIGRhdGFDaGFuZ2UgfSk7XHJcbiAgICAvLyBjb25zdCBpc0NvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICAvLyB0aGlzLmFwaVF1ZXVlU2VydmljZS5hZGRUb1F1ZXVlKFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgY2FsbGJhY2s6IHRoaXMuX2RhdGFDaGFuZ2VkLmJpbmQodGhpcyksXHJcbiAgICAvLyAgICAgY29uZmlnOiB7XHJcbiAgICAvLyAgICAgICB1dWlkLFxyXG4gICAgLy8gICAgICAgZGF0YUNoYW5nZSxcclxuICAgIC8vICAgICB9LFxyXG4gICAgLy8gICAgIGlzQ29tcGxldGVkLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB0cnVlXHJcbiAgICAvLyApO1xyXG4gICAgLy8gcmV0dXJuIGF3YWl0IGlzQ29tcGxldGVkLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybUFjdGlvbihjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnZpZXcucGVyZm9ybUFjdGlvbihjb25maWcudXVpZCwgY29uZmlnLnVpQWN0aW9uUmVxdWVzdCkudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9wZXJmb3JtV2lkZ2V0QWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAgIC5wZXJmb3JtV2lkZ2V0QWN0aW9uKGNvbmZpZy51dWlkLCBjb25maWcud2lkZ2V0SWQsIGNvbmZpZy5ub2RlSWQsIGNvbmZpZy51aUFjdGlvblJlcXVlc3QpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVdpZGdldE1haW5BY3Rpb24oY29uZmlnOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy52aWV3XHJcbiAgICAgICAgLnBlcmZvcm1XaWRnZXRNYWluQWN0aW9uKGNvbmZpZy51dWlkLCBjb25maWcud2lkZ2V0SWQsIGNvbmZpZy51aUFjdGlvblJlcXVlc3QpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVVwbG9hZEFjdGlvbihjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdcclxuICAgICAgICAudXBsb2FkQWN0aW9uKFxyXG4gICAgICAgICAgY29uZmlnLnV1aWQsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShjb25maWcudWlBY3Rpb25SZXF1ZXN0KSxcclxuICAgICAgICAgIGNvbmZpZy5wYXJhbSxcclxuICAgICAgICAgIGNvbmZpZy5jb250ZW50XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVVwbG9hZE11bHRpcGxlQWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAgIC51cGxvYWRNdWx0aXBsZUFjdGlvbihcclxuICAgICAgICAgIGNvbmZpZy51dWlkLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29uZmlnLnVpQWN0aW9uUmVxdWVzdCksXHJcbiAgICAgICAgICBjb25maWcucGFyYW0sXHJcbiAgICAgICAgICBjb25maWcuY29udGVudFxyXG4gICAgICAgIClcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9kYXRhQ2hhbmdlZChjb25maWc6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlldy5kYXRhQ2hhbmdlZChjb25maWcudXVpZCwgY29uZmlnLmRhdGFDaGFuZ2UpLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgIHZpZXdDb250ZXh0Q2hhbmdlOiBWaWV3Q29udGV4dENoYW5nZSB8IHVuZGVmaW5lZFxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gdmlld0NvbnRleHRDaGFuZ2U/LnZpZXdDb250ZXh0O1xyXG4gICAgYXdhaXQgdGhpcy5zeW5jVmlldygpO1xyXG5cclxuICAgIGlmICh2aWV3Q29udGV4dENoYW5nZT8uY2hhbmdlcykge1xyXG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlld0NvbnRleHRDaGFuZ2U/LnJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ2hhbmdlcyhjaGFuZ2VzOiBBcnJheTxDb21wb25lbnRNb2RlbENoYW5nZT4pOiB2b2lkIHtcclxuICAgIGNoYW5nZXMuZm9yRWFjaCgoY29tcG9uZW50TW9kZWxDaGFuZ2U6IENvbXBvbmVudE1vZGVsQ2hhbmdlKSA9PiB7XHJcbiAgICAgIGxldCBkZXRlY3RDaGFuZ2U6IFNtYXJ0U3ViamVjdDxDb21wb25lbnRNb2RlbENoYW5nZT4gfCB1bmRlZmluZWQgPSB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5nZXQoXHJcbiAgICAgICAgY29tcG9uZW50TW9kZWxDaGFuZ2UudXVpZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoZGV0ZWN0Q2hhbmdlKSB7XHJcbiAgICAgICAgZGV0ZWN0Q2hhbmdlLm5leHQoY29tcG9uZW50TW9kZWxDaGFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Q29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnZpZXcuZ2V0Q29tcG9uZW50TW9kZWwodXVpZCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZDIodXVpZDogc3RyaW5nKTogUHJvbWlzZTxWaWV3Q29udGV4dENoYW5nZSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgbGV0IGNoYW5nZSA9IGF3YWl0IHRoaXMudmlldy5nZXRDb21wb25lbnRNb2RlbDIodXVpZCkudG9Qcm9taXNlKCk7XHJcbiAgICB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShjaGFuZ2UpO1xyXG4gICAgcmV0dXJuIGNoYW5nZTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRWaWV3Q29udGV4dCgpOiBWaWV3Q29udGV4dERhdGEgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQ7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgSVNfQVNZTkNfUEFSQU1fTkFNRSA9ICdpc0FzeW5jJztcclxuXHJcbi8qKiBBIHJlZ2lzdGVyZWQgZW1iZWRkZWQgc2xvdDogaXRzIFZpZXdDb250YWluZXJSZWYgcGx1cyB0aGUgbGlmZWN5Y2xlIGNsYXNzIGl0c1xyXG4gKiAgcmVnaXN0cmFudCBkZWNsYXJlZCwgc28gdGhlIGxheW91dCBkZXRhY2gvY2xlYW51cCBkYW5jZSBjYW4gc2tpcCAnc3RhYmxlJyBzbG90cy4gKi9cclxuaW50ZXJmYWNlIEVtYmVkZGVkU2xvdEVudHJ5IHtcclxuICB2Y1JlZjogVmlld0NvbnRhaW5lclJlZjtcclxuICBraW5kOiBTbG90S2luZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcGlRdWV1ZUNhbGwge1xyXG4gIGNhbGxiYWNrOiAoY29uZmlnOiBhbnkpID0+IFByb21pc2U8YW55PjtcclxuICBjb25maWc6IGFueTtcclxuICBpc0NvbXBsZXRlZDogU3ViamVjdDx2b2lkPjtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwaVF1ZXVlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIHF1ZXVlOiBBcGlRdWV1ZUNhbGxbXSA9IFtdO1xyXG4gIHByaXZhdGUgaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBxdWV1ZVN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnF1ZXVlU3ViamVjdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnByb2Nlc3NRdWV1ZSgpKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9RdWV1ZShjYWxsOiBBcGlRdWV1ZUNhbGwsIHByaW9yaXR5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmIChwcmlvcml0eSkge1xyXG4gICAgICB0aGlzLnF1ZXVlLnVuc2hpZnQoY2FsbCk7IC8vIEFkZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBxdWV1ZSBpZiBpdCBoYXMgaGlnaGVyIHByaW9yaXR5XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnF1ZXVlLnB1c2goY2FsbCk7IC8vIEFkZCBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1ZSBpZiBpdCBoYXMgbG93ZXIgcHJpb3JpdHlcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5pc1Byb2Nlc3NpbmcpIHtcclxuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3NRdWV1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXBpUXVldWVDYWxsID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xyXG4gICAgaWYgKGFwaVF1ZXVlQ2FsbCkge1xyXG4gICAgICBhd2FpdCBhcGlRdWV1ZUNhbGwuY2FsbGJhY2soYXBpUXVldWVDYWxsLmNvbmZpZyk7XHJcbiAgICAgIGFwaVF1ZXVlQ2FsbC5pc0NvbXBsZXRlZC5jb21wbGV0ZSgpO1xyXG4gICAgICB0aGlzLnF1ZXVlU3ViamVjdC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -3636,14 +3636,16 @@ class SmartViewContextService {
|
|
|
3636
3636
|
const vcRef = this.getEmbeddedSlot(containerUuid, ref.containerId);
|
|
3637
3637
|
if (!vcRef) {
|
|
3638
3638
|
// The slot is truly gone (its layout host was torn down and not recreated):
|
|
3639
|
-
// a real orphan to destroy.
|
|
3640
|
-
// reattaches its child (registerEmbeddedSlot); a STABLE slot is never detached
|
|
3641
|
-
// in the first place. So a still-registered slot here always holds its view —
|
|
3642
|
-
// no reattach branch is needed (that branch only ever patched the stable
|
|
3643
|
-
// false-orphan, which detachAllEmbeddedViews no longer creates). (#28870)
|
|
3639
|
+
// a real orphan to destroy.
|
|
3644
3640
|
orphaned.push(ref);
|
|
3645
3641
|
continue;
|
|
3646
3642
|
}
|
|
3643
|
+
// Slot still registered but its view was detached by detachAllEmbeddedViews and
|
|
3644
|
+
// never reattached, because the *ngFor reused the slot host (only a sibling
|
|
3645
|
+
// widget changed) so no re-register fired. Reattach so every detach is paired.
|
|
3646
|
+
if (vcRef.indexOf(ref.componentRef.hostView) < 0) {
|
|
3647
|
+
vcRef.insert(ref.componentRef.hostView);
|
|
3648
|
+
}
|
|
3647
3649
|
}
|
|
3648
3650
|
for (const ref of orphaned) {
|
|
3649
3651
|
if (!ref.componentRef.hostView.destroyed) {
|
|
@@ -21569,7 +21571,7 @@ class SmartComponentLayoutComponent {
|
|
|
21569
21571
|
const form = this.formRef();
|
|
21570
21572
|
if (this.smartForm && form && this.parentSmartComponent) {
|
|
21571
21573
|
this.parentSmartComponent.handleDataChangeSubscriptions(form);
|
|
21572
|
-
this.parentSmartComponent.
|
|
21574
|
+
this.parentSmartComponent.handleUploadCallback(form);
|
|
21573
21575
|
form.markAllWidgetsForChangeDetection();
|
|
21574
21576
|
}
|
|
21575
21577
|
});
|