@trudb/tru-common-lib 0.1.647 → 0.1.648

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.
@@ -312,7 +312,7 @@ export class TruDesktop {
312
312
  if (this.options.canCloseFn(wdw)) {
313
313
  this.windows.splice(this.windows.indexOf(wdw), 1);
314
314
  this.activateForemostWindow();
315
- wdw.onClosed$.next();
315
+ wdw.onClose$.next();
316
316
  wdw.closed();
317
317
  return true;
318
318
  }
@@ -749,4 +749,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
749
749
  type: ViewChild,
750
750
  args: [TruDesktopViewport]
751
751
  }] } });
752
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZGVza3RvcC90cnUtZGVza3RvcC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wL3RydS1kZXNrdG9wLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBZ0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUd6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7OztBQVVyRSxNQUFNLE9BQU8sVUFBVTtJQUtYO0lBQ0E7SUFDQTtJQUNBO0lBUEQsT0FBTyxDQUFNO0lBQ2lCLGlCQUFpQixDQUFzQjtJQUU5RSxZQUNVLGNBQWlDLEVBQ2pDLFdBQTJCLEVBQzNCLHNCQUE4QyxFQUM5QyxJQUFhO1FBSGIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLFNBQUksR0FBSixJQUFJLENBQVM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFRCxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLE9BQU8sQ0FBTTtJQUNiLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztJQUM5Qix3QkFBd0IsR0FBRyxHQUFHLENBQUM7SUFDL0IseUJBQXlCLEdBQUcsRUFBRSxH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QUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsQ0FBQzt1R0E5dUJVLFVBQVU7MkZBQVYsVUFBVSxzRUFGVixDQUFDLGlCQUFpQixDQUFDLDZFQUluQixrQkFBa0IsZ0RDbkIvQixzZ0JBWUE7OzJGREthLFVBQVU7a0JBTnRCLFNBQVM7K0JBQ0UsYUFBYSxhQUdaLENBQUMsaUJBQWlCLENBQUM7OEtBR3JCLE9BQU87c0JBQWYsS0FBSztnQkFDaUMsaUJBQWlCO3NCQUF2RCxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJ1V2luZG93RXZlbnRBcmdzIH0gZnJvbSAnLi9zZXJ2aWNlcy90cnUtd2luZG93LWV2ZW50LWFyZ3MnO1xyXG5pbXBvcnQgeyBUcnVEZXNrdG9wRXZlbnRIYW5kbGVyIH0gZnJvbSAnLi9zZXJ2aWNlcy90cnUtZGVza3RvcC1ldmVudC1oYW5kbGVyJztcbmltcG9ydCB7IFRydURlc2t0b3BTZXJ2aWNlLCBXaW5kb3dDb25maWcgfSBmcm9tICcuL3NlcnZpY2VzL3RydS1kZXNrdG9wLXNlcnZpY2UnO1xuaW1wb3J0IHsgVHJ1RGVza3RvcFZpZXdDb25maWcgfSBmcm9tICcuL2NsYXNzZXMvdHJ1LWRlc2t0b3Atdmlldy1jb25maWcnO1xyXG5pbXBvcnQgeyBUcnVUZXh0TWFuYWdlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS10ZXh0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBUcnVEZXNrdG9wV2luZG93IH0gZnJvbSAnLi93aW5kb3cvdHJ1LWRlc2t0b3Atd2luZG93JztcclxuaW1wb3J0IHsgVHJ1RGVza3RvcFZpZXdwb3J0IH0gZnJvbSAnLi92aWV3cG9ydC90cnUtZGVza3RvcC12aWV3cG9ydCc7XHJcbmltcG9ydCB7IFRydVV0aWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtdXRpbCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0cnUtZGVza3RvcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90cnUtZGVza3RvcC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdHJ1LWRlc2t0b3AuY3NzJ10sXG4gIHByb3ZpZGVyczogW1RydURlc2t0b3BTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBUcnVEZXNrdG9wIGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgb3B0aW9uczogYW55O1xuICBAVmlld0NoaWxkKFRydURlc2t0b3BWaWV3cG9ydCkgcHJpdmF0ZSB2aWV3cG9ydENvbXBvbmVudCE6IFRydURlc2t0b3BWaWV3cG9ydDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRlc2t0b3BTZXJ2aWNlOiBUcnVEZXNrdG9wU2VydmljZSxcbiAgICBwcml2YXRlIHRleHRNYW5hZ2VyOiBUcnVUZXh0TWFuYWdlcixcbiAgICBwcml2YXRlIHRydURlc2t0b3BFdmVudEhhbmRsZXI6IFRydURlc2t0b3BFdmVudEhhbmRsZXIsXG4gICAgcHJpdmF0ZSB1dGlsOiBUcnVVdGlsKSB7XG4gICAgdGhpcy5kZXNrdG9wID0gdGhpcy5kZXNrdG9wU2VydmljZS5jcmVhdGVEZXNrdG9wKCk7XG4gIH1cclxuXG4gIG1pbmltaXplQWxsID0gZmFsc2U7XG4gIGRlc2t0b3A6IGFueTtcbiAgbWluV2luZG93Q2FzY2FkZVBvc2l0aW9uID0gNDA7XG4gIG1heFdpbmRvd0Nhc2NhZGVQb3NpdGlvbiA9IDEwMDtcbiAgbGFzdFdpbmRvd0Nhc2NhZGVQb3NpdGlvbiA9IHsgdG9wOiB0aGlzLm1pbldpbmRvd0Nhc2NhZGVQb3NpdGlvbiwgbGVmdDogdGhpcy5taW5XaW5kb3dDYXNjYWRlUG9zaXRpb24gfTtcbiAgc2hpZnRQcmVzc2VkID0gZmFsc2U7XG4gIGFsdFByZXNzZWQgPSBmYWxzZTtcbiAgeFByZXNzZWQgPSBmYWxzZTtcbiAgbG9nb1VybCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuZ2V0RGVza3RvcFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IG9mIGRlc2t0b3AuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IGRlc2t0b3AuXG4gICAqL1xuICBnZXREZXNrdG9wID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRlc2t0b3A7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuZ2V0T3B0aW9uc1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IG9mIGRlc2t0b3Agb3B0aW9ucy5cbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH0gb3B0aW9ucy5cbiAgICovXG4gIGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucztcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5nZXRXaW5kb3dzXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiB3aW5kb3dzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7YXJyYXl9IHdpbmRvd3MuXG4gICAqL1xuICBnZXRXaW5kb3dzID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLndpbmRvd3M7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuZ2V0TmV4dE1heFpJbmRleFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIGFsbCB3aW5kb3cgb2JqZWN0cyBpbiB0aGUgd2luZG93cyBhcnJheSB0byBmaW5kIHRoZSBtYXggei1pbmRleFxuICAgKiBhbmQgaW5jcmVhc2VzIHRoZSB2YWx1ZSBmb3VuZCBieSAxLlxuICAgKlxuICAgKiBAcmV0dXJucyB7aW50fVxuICAgKi9cbiAgZ2V0TmV4dE1heFpJbmRleCA9ICgpID0+IHtcbiAgICB2YXIgbWF4ID0gMDtcbiAgICB2YXIgdG1wO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLndpbmRvd3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRtcCA9IHRoaXMud2luZG93c1tpXS56SW5kZXg7XG4gICAgICBpZiAodG1wID4gbWF4KSBtYXggPSB0bXA7XG4gICAgfVxuICAgIHJldHVybiArK21heDtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5jbGVhckFjdGl2ZVxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIGFsbCB3aW5kb3cgb2JqZWN0cyBpbiB0aGUgd2luZG93c1xuICAgKiBhbmQgc2V0cyB0aGUgYWN0aXZlIHByb3BlcnR5IHRvIGZhbHNlLlxuICAgKlxuICAgKi9cbiAgY2xlYXJBY3RpdmUgPSAoKSA9PiB7XG4gICAgdGhpcy53aW5kb3dzLmZvckVhY2goKHdpbmRvdzogYW55KSA9PiB7XG4gICAgICB3aW5kb3cuYWN0aXZlID0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuZ2V0QWN0aXZlV2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgdGhlIGFjdGl2ZSB3aW5kb3cuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IHZpZXcgb2JqZWN0LlxuICAgKi9cbiAgZ2V0QWN0aXZlV2luZG93ID0gKCk6IGFueSA9PiB7XG4gICAgdmFyIGFjdGl2ZVdpbmRvdyA9IG51bGw7XG4gICAgdGhpcy53aW5kb3dzLmZvckVhY2goKHdkdzogYW55KSA9PiB7XG4gICAgICBpZiAod2R3LmFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBhY3RpdmVXaW5kb3cgPSB3ZHc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZVdpbmRvdztcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5nZXRBY3RpdmVWaWV3XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgdGhlIGFjdGl2ZSB2aWV3LlxuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSB2aWV3IG9iamVjdC5cbiAgICovXG4gIGdldEFjdGl2ZVZpZXcgPSAod2R3OiBhbnkpID0+IHtcbiAgICB2YXIgYWN0aXZlVmlldyA9IG51bGw7XG4gICAgd2R3LnZpZXdzLmZvckVhY2goKHZpZXc6IGFueSkgPT4ge1xuICAgICAgaWYgKHZpZXcuYWN0aXZlID09PSB0cnVlKSB7XG4gICAgICAgIGFjdGl2ZVZpZXcgPSB2aWV3O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhY3RpdmVWaWV3O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LmFsbFdpbmRvd3NBcmVNaW5pbWl6ZWRcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSXRlcmF0ZXMgdGhyb3VnaCB3aW5kb3dzIHRvIGRldGVybWluZSBpZiBhbGwgYXJlIG1pbmltaXplZC5cbiAgICpcbiAgICovXG4gIGFsbFdpbmRvd3NBcmVNaW5pbWl6ZWQgPSAoKSA9PiB7XG4gICAgdmFyIGFsbE1pbmltaXplZCA9IHRydWU7XG4gICAgdGhpcy53aW5kb3dzLmZvckVhY2goKHdpbmRvdzogYW55KSA9PiB7XG4gICAgICBpZiAoIXdpbmRvdy5taW5pbWl6ZWQpIHtcbiAgICAgICAgYWxsTWluaW1pemVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFsbE1pbmltaXplZDtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5oaWRlU2hvd0FsbFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBIaWRlcy9zaG93cyBhbGwgd2luZG93c1xuICAgKlxuICAgKi9cbiAgaGlkZVNob3dBbGwgPSAoKSA9PiB7XG4gICAgdGhpcy5taW5pbWl6ZUFsbCA9IHRoaXMuYWxsV2luZG93c0FyZU1pbmltaXplZCgpID8gZmFsc2UgOiAhdGhpcy5taW5pbWl6ZUFsbDtcbiAgICB0aGlzLndpbmRvd3MuZm9yRWFjaCgod2R3OiBhbnkpID0+IHtcbiAgICAgIGlmICh3ZHcub3V0T2ZCb3VuZHMpIHRoaXMucmVjb3Zlcih3ZHcpO1xuICAgICAgd2R3LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgd2R3Lm1pbmltaXplZCA9IHRoaXMubWluaW1pemVBbGw7XG4gICAgfSk7XG4gICAgdGhpcy5hY3RpdmF0ZUZvcmVtb3N0V2luZG93KCk7XG4gICAgcmV0dXJuIHRoaXMubWluaW1pemVBbGw7XG4gIH07XG5cbiAgLyoqXHJcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cclxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LmZpbmRXaW5kb3dWaWV3RGlyZWN0aXZlXHJcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogTG9va3MgZm9yIHByZXZpb3VzbHkgb3BlbiB3aW5kb3cgd2l0aCBhIHZpZXcgZGlyZWN0aXZlXHJcbiAgICpcclxuICAgKi9cclxuICBmaW5kV2luZG93Vmlld0RpcmVjdGl2ZSA9ICh3aW5kb3dWaWV3RGlyZWN0aXZlOiBhbnkpID0+IHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy53aW5kb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy53aW5kb3dzW2ldLnZpZXdzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2luZG93c1tpXS52aWV3c1swXS52aWV3RGlyZWN0aXZlID09PSB3aW5kb3dWaWV3RGlyZWN0aXZlKVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2luZG93c1tpXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5vcGVuV2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc3BsYXlzIGEgbmV3IHdpbmRvdy4gQWxsIHdpbmRvdyBwcm9wZXJ0aWVzIGRlZmluZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGRldmVsb3BlciB3aWxsIGJlXG4gICAqIG92ZXJsYWlkIGhlcmUgYmVmb3JlIGRpc3BsYXlpbmcgdGhlIHdpbmRvd1xuICAgKlxuICAgKi9cbiAgb3BlbldpbmRvdyA9ICh3aW5kb3dDb25maWdPdmVybGF5czogYW55LCBzaW5nbGVJbnN0YW5jZTogYW55KTogV2luZG93Q29uZmlnID0+IHtcbiAgICBsZXQgYWN0aXZlV2luZG93ID0gdGhpcy5nZXRBY3RpdmVXaW5kb3coKTtcclxuICAgIGlmIChhY3RpdmVXaW5kb3cgJiYgYWN0aXZlV2luZG93LmlzTW9kYWwpIHtcclxuICAgICAgYWN0aXZlV2luZG93LmludmFsaWRPcGVyYXRpb24gPSB0cnVlO1xyXG4gICAgICByZXR1cm4gYWN0aXZlV2luZG93O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzaW5nbGVJbnN0YW5jZSkge1xyXG4gICAgICBsZXQgd2luZG93ID0gdGhpcy5maW5kV2luZG93Vmlld0RpcmVjdGl2ZSh3aW5kb3dDb25maWdPdmVybGF5cy52aWV3c1swXS52aWV3RGlyZWN0aXZlKTtcclxuICAgICAgaWYgKHdpbmRvdykge1xyXG4gICAgICAgIHRoaXMudXBkYXRlV2luZG93U3RhdGUod2luZG93KTtcclxuICAgICAgICByZXR1cm4gd2luZG93O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvd0NvbmZpZ092ZXJsYXlzLmlzTW9kYWwpIHtcclxuICAgICAgbGV0IGhlaWdodE9mZnNldCA9IChwYXJzZUludCh3aW5kb3dDb25maWdPdmVybGF5cy5oZWlnaHQsIDEwKSAvIDIpICsgMzA7XHJcbiAgICAgIGxldCB3aWR0aE9mZnNldCA9IChwYXJzZUludCh3aW5kb3dDb25maWdPdmVybGF5cy53aWR0aCwgMTApIC8gMik7XHJcbiAgICAgIHdpbmRvd0NvbmZpZ092ZXJsYXlzLnRvcCA9ICdjYWxjKDUwJSAtICcgKyBoZWlnaHRPZmZzZXQgKyAncHggKSc7XHJcbiAgICAgIHdpbmRvd0NvbmZpZ092ZXJsYXlzLmxlZnQgPSAnY2FsYyg1MCUgLSAnICsgd2lkdGhPZmZzZXQgKyAncHggKSc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xyXG4gICAgbGV0IGNvbmZpZ3VyZWRXaW5kb3cgPSB0aGlzLmNvbmZpZ3VyZVdpbmRvdyh3aW5kb3dDb25maWdPdmVybGF5cyk7XHJcbiAgICBjb25maWd1cmVkV2luZG93LnZpZXdzID0gdGhpcy5jb25maWd1cmVWaWV3cyh3aW5kb3dDb25maWdPdmVybGF5cywgY29uZmlndXJlZFdpbmRvdyk7XHJcbiAgICBpZiAoIWNvbmZpZ3VyZWRXaW5kb3cuaXNNb2RhbCkge1xyXG4gICAgICBjb25maWd1cmVkV2luZG93LmNhc2NhZGVXaW5kb3cgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zYXZlUG9zaXRpb24oY29uZmlndXJlZFdpbmRvdyk7XHJcbiAgICAgIHRoaXMubWF4aW1pemUoY29uZmlndXJlZFdpbmRvdyk7XHJcbiAgICAgIHRoaXMud2luZG93cy5wdXNoKGNvbmZpZ3VyZWRXaW5kb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53aW5kb3dzLnB1c2goY29uZmlndXJlZFdpbmRvdyk7XHJcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ3VyZWRXaW5kb3c7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuY29uZmlndXJlV2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENyZWF0ZXMgYSBuZXcgd2luZG93IGluc3RhbmNlLlxuICAgKlxuICAgKi9cbiAgY29uZmlndXJlV2luZG93ID0gKHdpbmRvd0NvbmZpZ092ZXJsYXlzOiBhbnkpID0+IHtcbiAgICB2YXIgd2luZG93Q29uZmlnSW5zdGFuY2UgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlc2t0b3Aud2luZG93Q29uZmlnKTtcbiAgICB3aW5kb3dDb25maWdJbnN0YW5jZS5zYXZlZFBvc2l0aW9uID0gT2JqZWN0LmNyZWF0ZSh7IHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCwgaGVpZ2h0OiAwLCB3aWR0aDogMCB9KTtcbiAgICB3aW5kb3dDb25maWdJbnN0YW5jZS56SW5kZXggPSB0aGlzLmdldE5leHRNYXhaSW5kZXgoKTtcbiAgICAvL3dpbmRvd0NvbmZpZ0luc3RhbmNlLmdsb2JhbHMgPSBPYmplY3QuYXNzaWduKHt9LCAkcm9vdFNjb3BlLiRldmFsKHRoaXMub3B0aW9ucy5nbG9iYWxzKSk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2luZG93Q29uZmlnSW5zdGFuY2UsIHdpbmRvd0NvbmZpZ092ZXJsYXlzKTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5jb25maWd1cmVWaWV3c1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDcmVhdGVzIG9uZSBvciBtb3JlIHZpZXcgaW5zdGFuY2VzXG4gICAqXG4gICAqL1xuICBjb25maWd1cmVWaWV3cyA9ICh3aW5kb3dDb25maWdPdmVybGF5czogYW55LCBjb25maWd1cmVkV2luZG93OiBhbnkpOiBBcnJheTxhbnk+ID0+IHtcbiAgICBsZXQgY29uZmlndXJlZFZpZXdzOiBBcnJheTxhbnk+ID0gW107XG4gICAgd2luZG93Q29uZmlnT3ZlcmxheXMudmlld3MuZm9yRWFjaCgodmlldzogYW55KSA9PiB7XG4gICAgICBsZXQgY29uZmlndXJlZFZpZXcgPSBuZXcgVHJ1RGVza3RvcFZpZXdDb25maWcoKTtcclxuICAgICAgY29uZmlndXJlZFZpZXcuY29tcG9uZW50TmFtZSA9IHZpZXcuY29tcG9uZW50TmFtZTtcclxuICAgICAgY29uZmlndXJlZFZpZXcuZW50aXRpZXMgPSB2aWV3LmVudGl0aWVzO1xyXG4gICAgICBjb25maWd1cmVkVmlldy5lbnRpdHlJbmRleCA9IHZpZXcuZW50aXR5SW5kZXg7XHJcbiAgICAgIGNvbmZpZ3VyZWRWaWV3LmlzRGlydHkgPSB2aWV3LmlzRGlydHk7XHJcbiAgICAgIGNvbmZpZ3VyZWRWaWV3LmlzRWRpdGluZyA9IHZpZXcuaXNFZGl0aW5nO1xyXG4gICAgICBjb25maWd1cmVkVmlldy5pc0ludmFsaWQgPSB2aWV3LmlzVmFsaWQ7XHJcbiAgICAgIGNvbmZpZ3VyZWRWaWV3Lm9wZW5Bc0RldGFpVmlldyA9IHZpZXcub3BlbkFzRGV0YWlsVmlldztcbiAgICAgIC8vdmlld0NvbmZpZ0luc3RhbmNlLmdsb2JhbHMgPSB0aGlzLm9wdGlvbnMuZ2xvYmFscztcbiAgICAgIC8vbGV0IGNvbmZpZ3VyZWRWaWV3ID0gT2JqZWN0LmFzc2lnbih2aWV3Q29uZmlnSW5zdGFuY2UsIHZpZXcpO1xuICAgICAgY29uZmlndXJlZFZpZXcud2luZG93ID0gY29uZmlndXJlZFdpbmRvdztcbiAgICAgIGNvbmZpZ3VyZWRWaWV3cy5wdXNoKGNvbmZpZ3VyZWRWaWV3KTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29uZmlndXJlZFZpZXdzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LmNsb3NlV2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJlbW92ZSBhIHdpbmRvdyB7b2JqZWN0fSBmcm9tIHRoZSB3aW5kb3dzIGFycmF5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHdpbmRvdyB3YXMgY2xvc2VkLCBmYWxzZSBpZiBub3QgY2xvc2VkLlxuICAgKi9cbiAgY2xvc2VXaW5kb3cgPSAod2R3OiBhbnkpID0+IHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd0RpcnR5Q2xvc2UgJiYgd2R3LmlzRGlydHkpIHtcbiAgICAgIGFsZXJ0KFwiVW5zYXZlZCBDaGFuZ2VzLiBTYXZlIGNoYW5nZXMgYmVmb3JlIGNsb3Npbmcgd2luZG93LlwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd0ludmFsaWRDbG9zZSAmJiB3ZHcuaXNJbnZhbGlkKSB7XG4gICAgICBhbGVydChcIkRhdGEgaXMgaW52YWxpZC4gQ29ycmVjdCBJbnZhbGlkIGRhdGEgYmVmb3JlIGNsb3Npbmcgd2luZG93LlwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNhbkNsb3NlRm4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jYW5DbG9zZUZuKHdkdykpIHtcbiAgICAgICAgdGhpcy53aW5kb3dzLnNwbGljZSh0aGlzLndpbmRvd3MuaW5kZXhPZih3ZHcpLCAxKTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZUZvcmVtb3N0V2luZG93KCk7XG4gICAgICAgIHdkdy5vbkNsb3NlZCQubmV4dCgpO1xuICAgICAgICB3ZHcuY2xvc2VkKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aW5kb3dzLnNwbGljZSh0aGlzLndpbmRvd3MuaW5kZXhPZih3ZHcpLCAxKTtcbiAgICAgIHRoaXMuYWN0aXZhdGVGb3JlbW9zdFdpbmRvdygpO1xuICAgICAgd2R3Lm9uQ2xvc2UkLm5leHQoKTtcbiAgICAgIHdkdy5jbG9zZWQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuYWN0aXZhdGVGb3JlbW9zdFdpbmRvd1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXQgdGhlIGZvcmVtb3N0IHdpbmRvdyB0byBhbiBhY3RpdmUgc3RhdGVcbiAgICpcbiAgICovXG4gIGFjdGl2YXRlRm9yZW1vc3RXaW5kb3cgPSAoKSA9PiB7XG4gICAgdmFyIGZvcmVtb3N0ID0gdW5kZWZpbmVkO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy53aW5kb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoKGZvcmVtb3N0ID09PSB1bmRlZmluZWQgfHwgdGhpcy53aW5kb3dzW2ldLnpJbmRleCA+IGZvcmVtb3N0LnpJbmRleCkgJiYgIXRoaXMud2luZG93c1tpXS5taW5pbWl6ZWQgJiYgIXRoaXMud2luZG93c1tpXS5vdXRPZkJvdW5kcylcbiAgICAgICAgZm9yZW1vc3QgPSB0aGlzLndpbmRvd3NbaV07XG4gICAgfVxuICAgIGlmIChmb3JlbW9zdClcbiAgICAgIGZvcmVtb3N0LmFjdGl2ZSA9IHRydWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuYWN0aXZhdGVOZXh0V2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldCB0aGUgbmV4dCB3aW5kb3cgdG8gYW4gYWN0aXZlIHN0YXRlXG4gICAqXG4gICAqL1xuICBhY3RpdmF0ZU5leHRXaW5kb3cgPSAoYWN0aXZlV2luZG93TG9jYXRpb246IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLndpbmRvd3MubGVuZ3RoIDw9IDEpIHJldHVybjtcbiAgICB2YXIgYmFja2VuZCA9IHRoaXMud2luZG93cy5zbGljZShhY3RpdmVXaW5kb3dMb2NhdGlvbik7XG4gICAgdmFyIGZyb250ZW5kID0gdGhpcy53aW5kb3dzLnNsaWNlKDAsIGFjdGl2ZVdpbmRvd0xvY2F0aW9uIC0gMSk7XG4gICAgdmFyIHNvcnRlZCA9IGJhY2tlbmQuY29uY2F0KGZyb250ZW5kKTtcbiAgICB2YXIgbmV4dFdpbmRvdyA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvcnRlZC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFzb3J0ZWRbaV0ubWluaW1pemVkICYmICFzb3J0ZWRbaV0ub3V0T2ZCb3VuZHMgJiYgIW5leHRXaW5kb3cpXG4gICAgICAgIG5leHRXaW5kb3cgPSBzb3J0ZWRbaV07XG4gICAgfVxuXG4gICAgaWYgKG5leHRXaW5kb3cpIHtcbiAgICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcbiAgICAgIG5leHRXaW5kb3cuekluZGV4ID0gdGhpcy5nZXROZXh0TWF4WkluZGV4KCk7XG4gICAgICBuZXh0V2luZG93LmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LmFjdGl2YXRlUHJldmlvdXNXaW5kb3dcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0IHRoZSBwcmV2aW91cyB3aW5kb3cgdG8gYW4gYWN0aXZlIHN0YXRlXG4gICAqXG4gICAqL1xuICBhY3RpdmF0ZVByZXZpb3VzV2luZG93ID0gKGFjdGl2ZVdpbmRvd0xvY2F0aW9uOiBhbnkpID0+IHtcbiAgICBpZiAodGhpcy53aW5kb3dzLmxlbmd0aCA8PSAxKSByZXR1cm47XG4gICAgdmFyIGJhY2tlbmQgPSB0aGlzLndpbmRvd3Muc2xpY2UoYWN0aXZlV2luZG93TG9jYXRpb24pO1xuICAgIHZhciBmcm9udGVuZCA9IHRoaXMud2luZG93cy5zbGljZSgwLCBhY3RpdmVXaW5kb3dMb2NhdGlvbiAtIDEpO1xuICAgIHZhciBzb3J0ZWQgPSBiYWNrZW5kLmNvbmNhdChmcm9udGVuZCk7XG4gICAgdmFyIG5leHRXaW5kb3cgPSB1bmRlZmluZWQ7XG4gICAgZm9yICh2YXIgaSA9IHNvcnRlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKCFzb3J0ZWRbaV0ubWluaW1pemVkICYmICFzb3J0ZWRbaV0ub3V0T2ZCb3VuZHMgJiYgIW5leHRXaW5kb3cpXG4gICAgICAgIG5leHRXaW5kb3cgPSBzb3J0ZWRbaV07XG4gICAgfVxuXG4gICAgaWYgKG5leHRXaW5kb3cpIHtcbiAgICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcbiAgICAgIG5leHRXaW5kb3cuekluZGV4ID0gdGhpcy5nZXROZXh0TWF4WkluZGV4KCk7XG4gICAgICBuZXh0V2luZG93LmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50Lm1pbmltaXplXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFZpc3VhbGx5IHJlbW92ZXMgd2luZG93IGZyb20gdGhlIHZpZXdwb3J0LlxuICAgKlxuICAgKi9cbiAgbWluaW1pemUgPSAod2luZG93OiBhbnkpID0+IHtcbiAgICB0aGlzLnNhdmVQb3NpdGlvbih3aW5kb3cpO1xuXG4gICAgd2luZG93LmFjdGl2ZSA9IGZhbHNlO1xuICAgIHdpbmRvdy5taW5pbWl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZhdGVGb3JlbW9zdFdpbmRvdygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50Lm1heGltaXplXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFBvc2l0aW9ucyB3aW5kb3cgc3VjaCB0aGF0IGl0IGZpbGxzIHRoZSB3aG9sZSB2aWV3cG9ydC5cbiAgICpcbiAgICovXG4gIG1heGltaXplID0gKHdpbmRvdzogYW55KSA9PiB7XG4gICAgd2luZG93LnRvcCA9IDA7XG4gICAgd2luZG93LmxlZnQgPSAwO1xuICAgIHdpbmRvdy5yaWdodCA9IDA7XG4gICAgd2luZG93LmJvdHRvbSA9IDA7XG4gICAgd2luZG93LmhlaWdodCA9ICdhdXRvJztcbiAgICB3aW5kb3cud2lkdGggPSAnMTAwJSc7XG4gICAgd2luZG93Lm1heGltaXplZCA9ICdmaWxsJztcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5tYXhpbWl6ZUxlZnRcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUG9zaXRpb25zIHdpbmRvdyBzdWNoIHRoYXQgaXQgZmlsbHMgdGhlIGxlZnQgcG9ydGlvbiB2aWV3cG9ydC5cbiAgICpcbiAgICovXG4gIG1heGltaXplTGVmdCA9ICh3aW5kb3c6IGFueSkgPT4ge1xuICAgIHdpbmRvdy5zcGxpdCA9IHRydWU7XG4gICAgd2luZG93LnRvcCA9IDA7XG4gICAgd2luZG93LmxlZnQgPSAwO1xuICAgIHdpbmRvdy5ib3R0b20gPSAwO1xuICAgIHdpbmRvdy53aWR0aCA9ICc1MCUnO1xuICAgIHdpbmRvdy5oZWlnaHQgPSAnYXV0byc7XG4gICAgd2luZG93Lm1heGltaXplZCA9ICdsZWZ0JztcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5tYXhpbWl6ZVJpZ2h0XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFBvc2l0aW9ucyB3aW5kb3cgc3VjaCB0aGF0IGl0IGZpbGxzIHRoZSByaWdodCBwb3J0aW9uIHZpZXdwb3J0LlxuICAgKlxuICAgKi9cbiAgbWF4aW1pemVSaWdodCA9ICh3aW5kb3c6IGFueSkgPT4ge1xuICAgIHdpbmRvdy50b3AgPSAwO1xuICAgIHdpbmRvdy5sZWZ0ID0gJzUwJSc7XG4gICAgd2luZG93LnJpZ2h0ID0gMDtcbiAgICB3aW5kb3cuYm90dG9tID0gMDtcbiAgICB3aW5kb3cud2lkdGggPSAnNTAlJztcbiAgICB3aW5kb3cuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgIHdpbmRvdy5tYXhpbWl6ZWQgPSAncmlnaHQnO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LnJlY292ZXJcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQnJpbmdzIHdpbmRvdyBiYWNrIGludG8gdmlldyB3aGVuIGl0IGhhcyBlc2NhcGVkIHRoZSB2aWV3cG9ydC5cbiAgICpcbiAgICovXG4gIHJlY292ZXIgPSAod2luZG93OiBhbnkpID0+IHtcbiAgICB3aW5kb3cuYWN0aXZlID0gdHJ1ZTtcbiAgICB3aW5kb3cub3V0T2ZCb3VuZHMgPSBmYWxzZTtcbiAgICB3aW5kb3cubWluaW1pemVkID0gZmFsc2U7XG4gICAgd2luZG93LnpJbmRleCA9IHRoaXMuZ2V0TmV4dE1heFpJbmRleCgpO1xuICAgIHRoaXMuY2FzY2FkZVdpbmRvdyh3aW5kb3cpO1xuICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcbiAgICB0aGlzLmFjdGl2YXRlRm9yZW1vc3RXaW5kb3coKTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5yZXN0b3JlXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqL1xuICByZXN0b3JlID0gKHdkdzogYW55KSA9PiB7XG4gICAgaWYgKHdkdy5tYXhpbWl6ZWQgPT09ICdmaWxsJykge1xuICAgICAgdGhpcy5tYXhpbWl6ZSh3ZHcpO1xuICAgIH0gZWxzZSBpZiAod2R3Lm1heGltaXplZCA9PT0gJ2xlZnQnKSB7XG4gICAgICB0aGlzLm1heGltaXplTGVmdCh3ZHcpO1xuICAgIH0gZWxzZSBpZiAod2R3Lm1heGltaXplZCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgdGhpcy5tYXhpbWl6ZVJpZ2h0KHdkdyk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlV2luZG93U3RhdGUod2R3KTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5icmluZ1RvRnJvbnRcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICovXG4gIHVwZGF0ZVdpbmRvd1N0YXRlID0gKHdkdzogYW55KSA9PiB7XHJcbiAgICBpZiAod2R3Lm91dE9mQm91bmRzKSB7XHJcbiAgICAgIHRoaXMucmVjb3Zlcih3ZHcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdkdy5tYXhpbWl6ZWQgPT09ICdmaWxsJykge1xyXG4gICAgICB0aGlzLm1heGltaXplKHdkdyk7XHJcbiAgICB9IGVsc2UgaWYgKHdkdy5tYXhpbWl6ZWQgPT09ICdsZWZ0Jykge1xyXG4gICAgICB0aGlzLm1heGltaXplTGVmdCh3ZHcpO1xyXG4gICAgfSBlbHNlIGlmICh3ZHcubWF4aW1pemVkID09PSAncmlnaHQnKSB7XHJcbiAgICAgIHRoaXMubWF4aW1pemVSaWdodCh3ZHcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xyXG4gICAgd2R3LmFjdGl2ZSA9IHRydWU7XHJcbiAgICB3ZHcubWluaW1pemVkID0gZmFsc2U7XHJcbiAgICB3ZHcuekluZGV4ID0gdGhpcy5nZXROZXh0TWF4WkluZGV4KCk7XHJcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5yZXN0b3JlU2F2ZWRQb3NpdGlvblxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXQgdGhlIHdpbmRvd3MgbGFzdCBrbm93IHBvc2l0aW9uIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuICAgKlxuICAgKi9cbiAgcmVzdG9yZVNhdmVkUG9zaXRpb24gPSAod2R3OiBhbnkpID0+IHtcbiAgICB0aGlzLmNsZWFyQWN0aXZlKCk7XG4gICAgd2R3LnRvcCA9IHdkdy5zYXZlZFBvc2l0aW9uLnRvcDtcbiAgICB3ZHcubGVmdCA9IHdkdy5zYXZlZFBvc2l0aW9uLmxlZnQ7XG4gICAgd2R3LnJpZ2h0ID0gd2R3LnNhdmVkUG9zaXRpb24ucmlnaHQ7XG4gICAgd2R3LmJvdHRvbSA9IHdkdy5zYXZlZFBvc2l0aW9uLmJvdHRvbTtcbiAgICB3ZHcuaGVpZ2h0ID0gd2R3LnNhdmVkUG9zaXRpb24uaGVpZ2h0O1xuICAgIHdkdy53aWR0aCA9IHdkdy5zYXZlZFBvc2l0aW9uLndpZHRoO1xuICAgIHdkdy5tYXhpbWl6ZWQgPSB1bmRlZmluZWQ7XG4gICAgd2R3Lm1pbmltaXplZCA9IHVuZGVmaW5lZDtcbiAgICB3ZHcuYWN0aXZlID0gdHJ1ZTtcbiAgICB3ZHcubWluaW1pemVkID0gZmFsc2U7XG4gICAgd2R3LnpJbmRleCA9IHRoaXMuZ2V0TmV4dE1heFpJbmRleCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LnNhdmVQb3NpdGlvblxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTYXZlIHRoZSB3aW5kb3dzIGxhc3Qga25vdyBwb3NpdGlvbi5cbiAgICpcbiAgICovXG4gIHNhdmVQb3NpdGlvbiA9ICh3ZHc6IGFueSkgPT4ge1xuICAgIHdkdy5zYXZlZFBvc2l0aW9uLnRvcCA9IHdkdy50b3A7XG4gICAgd2R3LnNhdmVkUG9zaXRpb24ubGVmdCA9IHdkdy5sZWZ0O1xuICAgIHdkdy5zYXZlZFBvc2l0aW9uLnJpZ2h0ID0gd2R3LnJpZ2h0O1xuICAgIHdkdy5zYXZlZFBvc2l0aW9uLmJvdHRvbSA9IHdkdy5ib3R0b207XG4gICAgd2R3LnNhdmVkUG9zaXRpb24uaGVpZ2h0ID0gd2R3LmhlaWdodDtcbiAgICB3ZHcuc2F2ZWRQb3NpdGlvbi53aWR0aCA9IHdkdy53aWR0aDtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5jbG9zZVdpbmRvd1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBNb3ZlcyBhIHdpbmRvdyB0byB0aGUgbmV4dCBjYXNjYWRlIHBvc2l0aW9uLlxuICAgKlxuICAgKi9cbiAgY2FzY2FkZVdpbmRvdyA9ICh3aW5kb3c6IGFueSkgPT4ge1xuICAgIGlmICghdGhpcy5vcHRpb25zLmVuYWJsZVdpbmRvd0Nhc2NhZGluZyB8fCB3aW5kb3cuaXNNb2RhbCkgcmV0dXJuO1xuICAgIHRoaXMubGFzdFdpbmRvd0Nhc2NhZGVQb3NpdGlvbi50b3AgKz0gMTA7XG4gICAgdGhpcy5sYXN0V2luZG93Q2FzY2FkZVBvc2l0aW9uLmxlZnQgKz0gMTA7XG4gICAgaWYgKHRoaXMubGFzdFdpbmRvd0Nhc2NhZGVQb3NpdGlvbi50b3AgPiB0aGlzLm1heFdpbmRvd0Nhc2NhZGVQb3NpdGlvbilcbiAgICAgIHRoaXMubGFzdFdpbmRvd0Nhc2NhZGVQb3NpdGlvbi50b3AgPSB0aGlzLm1pbldpbmRvd0Nhc2NhZGVQb3NpdGlvbjtcbiAgICBpZiAodGhpcy5sYXN0V2luZG93Q2FzY2FkZVBvc2l0aW9uLmxlZnQgPiB0aGlzLm1heFdpbmRvd0Nhc2NhZGVQb3NpdGlvbilcbiAgICAgIHRoaXMubGFzdFdpbmRvd0Nhc2NhZGVQb3NpdGlvbi5sZWZ0ID0gdGhpcy5taW5XaW5kb3dDYXNjYWRlUG9zaXRpb247XG5cbiAgICB3aW5kb3cudG9wID0gdGhpcy5sYXN0V2luZG93Q2FzY2FkZVBvc2l0aW9uLnRvcCArICdweCc7XG4gICAgd2luZG93LmxlZnQgPSB0aGlzLmxhc3RXaW5kb3dDYXNjYWRlUG9zaXRpb24ubGVmdCArICdweCc7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGV2ZW50XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqL1xuICBvbktleURvd24gPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGlmIChldmVudC5hbHRLZXkpXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciBrZXlTZXF1ZW5jZSA9IHRoaXMudXRpbC5nZXRLZXlTZXF1ZW5jZShldmVudCk7XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnYWx0K20nKSB7IC8vTWF4aW1pemVcbiAgICAgIHZhciBhY3RpdmVXaW5kb3cgPSB0aGlzLmdldEFjdGl2ZVdpbmRvdygpO1xuICAgICAgaWYgKGFjdGl2ZVdpbmRvdyA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgaWYgKCFhY3RpdmVXaW5kb3cubWF4aW1pemVkKSB7XG4gICAgICAgIHRoaXMuc2F2ZVBvc2l0aW9uKGFjdGl2ZVdpbmRvdyk7XG4gICAgICAgIHRoaXMubWF4aW1pemUoYWN0aXZlV2luZG93KTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlV2luZG93Lm1heGltaXplZCA9PT0gJ3JpZ2h0JyB8fCBhY3RpdmVXaW5kb3cubWF4aW1pemVkID09PSAnbGVmdCcpXG4gICAgICAgIHRoaXMubWF4aW1pemUoYWN0aXZlV2luZG93KTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5yZXN0b3JlU2F2ZWRQb3NpdGlvbihhY3RpdmVXaW5kb3cpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnYWx0K24nKSB7IC8vTWluaW1pemVcbiAgICAgIHZhciBhY3RpdmVXaW5kb3cgPSB0aGlzLmdldEFjdGl2ZVdpbmRvdygpO1xuICAgICAgaWYgKGFjdGl2ZVdpbmRvdyA9PT0gbnVsbCB8fCBhY3RpdmVXaW5kb3cubWluaW1pemVkKSByZXR1cm47XG4gICAgICB0aGlzLm1pbmltaXplKGFjdGl2ZVdpbmRvdyk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrdycpIHsgLy9DeWNsZXMgRm9yd2FyZFxuICAgICAgdmFyIGluZGV4ID0gdGhpcy53aW5kb3dzLmluZGV4T2YodGhpcy5nZXRBY3RpdmVXaW5kb3coKSk7XG4gICAgICB0aGlzLmFjdGl2YXRlTmV4dFdpbmRvdyhpbmRleCArIDEpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnc2hpZnQrYWx0K3cnKSB7IC8vQ3ljbGVzIEJhY2t3YXJkXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLndpbmRvd3MuaW5kZXhPZih0aGlzLmdldEFjdGl2ZVdpbmRvdygpKTtcbiAgICAgIHRoaXMuYWN0aXZhdGVQcmV2aW91c1dpbmRvdyhpbmRleCArIDEpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnc2hpZnQrYWx0K3gnICYmICEodGhpcy5zaGlmdFByZXNzZWQgJiYgdGhpcy5hbHRQcmVzc2VkICYmIHRoaXMueFByZXNzZWQpKSB7IC8vQ2xvc2VcbiAgICAgIHZhciBhY3RpdmVXaW5kb3cgPSB0aGlzLmdldEFjdGl2ZVdpbmRvdygpO1xuICAgICAgaWYgKCFhY3RpdmVXaW5kb3cpIHJldHVybjtcbiAgICAgIHRoaXMuY2xvc2VXaW5kb3coYWN0aXZlV2luZG93KTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2FsdCtsJykgeyAvL01heGltaXplIGxlZnRcbiAgICAgIHZhciBhY3RpdmVXaW5kb3cgPSB0aGlzLmdldEFjdGl2ZVdpbmRvdygpO1xuICAgICAgaWYgKCFhY3RpdmVXaW5kb3cubWF4aW1pemVkKSB7XG4gICAgICAgIHRoaXMuc2F2ZVBvc2l0aW9uKGFjdGl2ZVdpbmRvdyk7XG4gICAgICAgIHRoaXMubWF4aW1pemVMZWZ0KGFjdGl2ZVdpbmRvdyk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZVdpbmRvdy5tYXhpbWl6ZWQgPT09ICdyaWdodCcgfHwgYWN0aXZlV2luZG93Lm1heGltaXplZCA9PT0gJ2ZpbGwnKVxuICAgICAgICB0aGlzLm1heGltaXplTGVmdChhY3RpdmVXaW5kb3cpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnJlc3RvcmVTYXZlZFBvc2l0aW9uKGFjdGl2ZVdpbmRvdyk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrcicpIHsgLy9NYXhpbWl6ZSByaWdodFxuICAgICAgdmFyIGFjdGl2ZVdpbmRvdyA9IHRoaXMuZ2V0QWN0aXZlV2luZG93KCk7XG4gICAgICBpZiAoIWFjdGl2ZVdpbmRvdy5tYXhpbWl6ZWQpIHtcbiAgICAgICAgdGhpcy5zYXZlUG9zaXRpb24oYWN0aXZlV2luZG93KTtcbiAgICAgICAgdGhpcy5tYXhpbWl6ZVJpZ2h0KGFjdGl2ZVdpbmRvdyk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZVdpbmRvdy5tYXhpbWl6ZWQgPT09ICdsZWZ0JyB8fCBhY3RpdmVXaW5kb3cubWF4aW1pemVkID09PSAnZmlsbCcpXG4gICAgICAgIHRoaXMubWF4aW1pemVSaWdodChhY3RpdmVXaW5kb3cpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnJlc3RvcmVTYXZlZFBvc2l0aW9uKGFjdGl2ZVdpbmRvdyk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrZCcpIHsgLy9Ub2dnbGUgRGVza3RvcFxuICAgICAgLy90aGlzLmRlc2t0b3BTaG93biA9IHRoaXMuaGlkZVNob3dBbGwoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KVxuICAgICAgdGhpcy5zaGlmdFByZXNzZWQgPSB0cnVlO1xuICAgIGlmIChldmVudC5hbHRLZXkpXG4gICAgICB0aGlzLmFsdFByZXNzZWQgPSB0cnVlO1xuICAgIGlmIChldmVudC5rZXlDb2RlID09PSA4OClcbiAgICAgIHRoaXMueFByZXNzZWQgPSB0cnVlO1xuICB9XG5cbiAgb25LZXlVcCA9IChldmVudDogYW55KSA9PiB7XG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KVxuICAgICAgdGhpcy5zaGlmdFByZXNzZWQgPSBmYWxzZTtcbiAgICBpZiAoZXZlbnQuYWx0S2V5KVxuICAgICAgdGhpcy5hbHRQcmVzc2VkID0gZmFsc2U7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDg4KVxuICAgICAgdGhpcy54UHJlc3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuaGFuZGxlU2VsZWN0QXR0ZW1wdFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBQcmV2ZW50cyB0aGUgdXNlciBmcm9tIGhpZ2hsaWdodCBkZXNrdG9wIGVsZW1lbnRzLlxuICAgKlxuICAgKi9cbiAgaGFuZGxlU2VsZWN0QXR0ZW1wdCA9IChlOiBhbnkpID0+IHtcbiAgICB2YXIgbm9kZU5hbWUgPSBlLnRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGxldCByaWNoVGV4dEVsZW1lbnQgPSB0aGlzLnV0aWwuZmluZENsb3Nlc3RBbmNlc3RvckJ5Q2xhc3MoZS50YXJnZXQsICcucmljaC10ZXh0Jyk7XG4gICAgaWYgKFxuICAgICAgbm9kZU5hbWUgPT09ICdpbnB1dCcgfHxcbiAgICAgIG5vZGVOYW1lID09PSAndGV4dGFyZWEnIHx8XG4gICAgICBub2RlTmFtZSA9PT0gJ3NlbGVjdCcgfHxcbiAgICAgIG5vZGVOYW1lID09PSAnI3RleHQnIHx8XG4gICAgICByaWNoVGV4dEVsZW1lbnQpIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKHdpbmRvdy5ldmVudCkgeyBlLnByZXZlbnREZWZhdWx0KCk7IH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHdpbmRvd3M6IEFycmF5PGFueT4gPSBbXTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9nb1VybCA9IHRoaXMub3B0aW9ucy5sb2dvVXJsO1xyXG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih0aGlzLmRlc2t0b3Aub3B0aW9ucywgdGhpcy5vcHRpb25zKTtcclxuICAgIHRoaXMub3B0aW9ucy52aWV3cG9ydFRvcCA9IHRoaXMub3B0aW9ucy5tZW51YmFyQ29uZmlnICE9PSB1bmRlZmluZWQgPyB0aGlzLm9wdGlvbnMubWVudWJhckhlaWdodCArIDEgOiAwO1xyXG4gICAgdGhpcy50cnVEZXNrdG9wRXZlbnRIYW5kbGVyLm9uT3BlbigpLnN1YnNjcmliZSgod2luZGlvd0V2ZW50OiBUcnVXaW5kb3dFdmVudEFyZ3MpID0+IHtcclxuICAgICAgdGhpcy5vcGVuV2luZG93KHdpbmRpb3dFdmVudCwgZmFsc2UpO1xyXG4gICAgfSk7XHJcbiAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gdGhpcy5oYW5kbGVTZWxlY3RBdHRlbXB0O1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93bik7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXApO1xyXG4gICAgd2luZG93Lm9uYmVmb3JldW5sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgaGFzQ2hhbmdlcyA9IHRoaXMudmlld3BvcnRDb21wb25lbnQud2luZG93Q29tcG9uZW50cy5maWx0ZXIoKHc6IFRydURlc2t0b3BXaW5kb3cpID0+IHsgcmV0dXJuIHcuaGFzQ2hhbmdlcygpID8gdHJ1ZSA6IGZhbHNlOyB9KVxyXG4gICAgICBpZiAoaGFzQ2hhbmdlcy5sZW5ndGgpIHtcclxuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcbiAgICAgICAgdmFyIG1zZyA9IHRoaXMudGV4dE1hbmFnZXIubXNnQ29uZmlybUV4aXRXaXRoQ2hhbmdlc1BlbmRpbmc7XHJcblxyXG4gICAgICAgIC8vIEZvciBJRSBhbmQgRmlyZWZveFxyXG4gICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICBlLnJldHVyblZhbHVlID0gbXNnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRm9yIFNhZmFyaSAvIGNocm9tZVxyXG4gICAgICAgIHJldHVybiBtc2c7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGVza3RvcC13cmFwcGVyXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkZXNrdG9wLW1lbnViYXItY29udGFpbmVyXCIgW25nU3R5bGVdPVwieydoZWlnaHQnOiBvcHRpb25zLm1lbnViYXJIZWlnaHQgKyAncHgnfVwiPlxyXG4gICAgPHRydS1kZXNrdG9wLW1lbnViYXIgW2Rlc2t0b3BDdHJsXT1cInRoaXNcIj48L3RydS1kZXNrdG9wLW1lbnViYXI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDx0cnUtZGVza3RvcC12aWV3cG9ydCBbd2luZG93c109XCJ3aW5kb3dzXCIgW2Rlc2t0b3BDdHJsXT1cInRoaXNcIj48L3RydS1kZXNrdG9wLXZpZXdwb3J0PlxyXG5cclxuICA8dHJ1LWRlc2t0b3AtdGFza2JhciBbd2luZG93c109XCJ3aW5kb3dzXCIgW2Rlc2t0b3BDdHJsXT1cInRoaXNcIj48L3RydS1kZXNrdG9wLXRhc2tiYXI+XHJcblxyXG4gIDxpbWcgY2xhc3M9XCJkZXNrdG9wLXZpZXdwb3J0LWxvZ29cIiBkYXRhLW5nLXNob3c9XCJsb2dvVXJsXCIgYWx0PVwiXCI+XHJcbjwvZGl2PlxyXG4iXX0=
752
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZGVza3RvcC90cnUtZGVza3RvcC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wL3RydS1kZXNrdG9wLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBZ0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUd6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7OztBQVVyRSxNQUFNLE9BQU8sVUFBVTtJQUtYO0lBQ0E7SUFDQTtJQUNBO0lBUEQsT0FBTyxDQUFNO0lBQ2lCLGlCQUFpQixDQUFzQjtJQUU5RSxZQUNVLGNBQWlDLEVBQ2pDLFdBQTJCLEVBQzNCLHNCQUE4QyxFQUM5QyxJQUFhO1FBSGIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLFNBQUksR0FBSixJQUFJLENBQVM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFRCxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLE9BQU8sQ0FBTTtJQUNiLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztJQUM5Qix3QkFBd0IsR0FBRyxHQUFHLENBQUM7SUFDL0IseUJBQXlCLEdBQUcsRUFBRSxH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QUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsQ0FBQzt1R0E5dUJVLFVBQVU7MkZBQVYsVUFBVSxzRUFGVixDQUFDLGlCQUFpQixDQUFDLDZFQUluQixrQkFBa0IsZ0RDbkIvQixzZ0JBWUE7OzJGREthLFVBQVU7a0JBTnRCLFNBQVM7K0JBQ0UsYUFBYSxhQUdaLENBQUMsaUJBQWlCLENBQUM7OEtBR3JCLE9BQU87c0JBQWYsS0FBSztnQkFDaUMsaUJBQWlCO3NCQUF2RCxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJ1V2luZG93RXZlbnRBcmdzIH0gZnJvbSAnLi9zZXJ2aWNlcy90cnUtd2luZG93LWV2ZW50LWFyZ3MnO1xyXG5pbXBvcnQgeyBUcnVEZXNrdG9wRXZlbnRIYW5kbGVyIH0gZnJvbSAnLi9zZXJ2aWNlcy90cnUtZGVza3RvcC1ldmVudC1oYW5kbGVyJztcbmltcG9ydCB7IFRydURlc2t0b3BTZXJ2aWNlLCBXaW5kb3dDb25maWcgfSBmcm9tICcuL3NlcnZpY2VzL3RydS1kZXNrdG9wLXNlcnZpY2UnO1xuaW1wb3J0IHsgVHJ1RGVza3RvcFZpZXdDb25maWcgfSBmcm9tICcuL2NsYXNzZXMvdHJ1LWRlc2t0b3Atdmlldy1jb25maWcnO1xyXG5pbXBvcnQgeyBUcnVUZXh0TWFuYWdlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS10ZXh0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBUcnVEZXNrdG9wV2luZG93IH0gZnJvbSAnLi93aW5kb3cvdHJ1LWRlc2t0b3Atd2luZG93JztcclxuaW1wb3J0IHsgVHJ1RGVza3RvcFZpZXdwb3J0IH0gZnJvbSAnLi92aWV3cG9ydC90cnUtZGVza3RvcC12aWV3cG9ydCc7XHJcbmltcG9ydCB7IFRydVV0aWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtdXRpbCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0cnUtZGVza3RvcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90cnUtZGVza3RvcC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdHJ1LWRlc2t0b3AuY3NzJ10sXG4gIHByb3ZpZGVyczogW1RydURlc2t0b3BTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBUcnVEZXNrdG9wIGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgb3B0aW9uczogYW55O1xuICBAVmlld0NoaWxkKFRydURlc2t0b3BWaWV3cG9ydCkgcHJpdmF0ZSB2aWV3cG9ydENvbXBvbmVudCE6IFRydURlc2t0b3BWaWV3cG9ydDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRlc2t0b3BTZXJ2aWNlOiBUcnVEZXNrdG9wU2VydmljZSxcbiAgICBwcml2YXRlIHRleHRNYW5hZ2VyOiBUcnVUZXh0TWFuYWdlcixcbiAgICBwcml2YXRlIHRydURlc2t0b3BFdmVudEhhbmRsZXI6IFRydURlc2t0b3BFdmVudEhhbmRsZXIsXG4gICAgcHJpdmF0ZSB1dGlsOiBUcnVVdGlsKSB7XG4gICAgdGhpcy5kZXNrdG9wID0gdGhpcy5kZXNrdG9wU2VydmljZS5jcmVhdGVEZXNrdG9wKCk7XG4gIH1cclxuXG4gIG1pbmltaXplQWxsID0gZmFsc2U7XG4gIGRlc2t0b3A6IGFueTtcbiAgbWluV2luZG93Q2FzY2FkZVBvc2l0aW9uID0gNDA7XG4gIG1heFdpbmRvd0Nhc2NhZGVQb3NpdGlvbiA9IDEwMDtcbiAgbGFzdFdpbmRvd0Nhc2NhZGVQb3NpdGlvbiA9IHsgdG9wOiB0aGlzLm1pbldpbmRvd0Nhc2NhZGVQb3NpdGlvbiwgbGVmdDogdGhpcy5taW5XaW5kb3dDYXNjYWRlUG9zaXRpb24gfTtcbiAgc2hpZnRQcmVzc2VkID0gZmFsc2U7XG4gIGFsdFByZXNzZWQgPSBmYWxzZTtcbiAgeFByZXNzZWQgPSBmYWxzZTtcbiAgbG9nb1VybCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuZ2V0RGVza3RvcFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IG9mIGRlc2t0b3AuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IGRlc2t0b3AuXG4gICAqL1xuICBnZXREZXNrdG9wID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRlc2t0b3A7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuZ2V0T3B0aW9uc1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IG9mIGRlc2t0b3Agb3B0aW9ucy5cbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH0gb3B0aW9ucy5cbiAgICovXG4gIGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucztcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5nZXRXaW5kb3dzXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiB3aW5kb3dzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7YXJyYXl9IHdpbmRvd3MuXG4gICAqL1xuICBnZXRXaW5kb3dzID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLndpbmRvd3M7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuZ2V0TmV4dE1heFpJbmRleFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIGFsbCB3aW5kb3cgb2JqZWN0cyBpbiB0aGUgd2luZG93cyBhcnJheSB0byBmaW5kIHRoZSBtYXggei1pbmRleFxuICAgKiBhbmQgaW5jcmVhc2VzIHRoZSB2YWx1ZSBmb3VuZCBieSAxLlxuICAgKlxuICAgKiBAcmV0dXJucyB7aW50fVxuICAgKi9cbiAgZ2V0TmV4dE1heFpJbmRleCA9ICgpID0+IHtcbiAgICB2YXIgbWF4ID0gMDtcbiAgICB2YXIgdG1wO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLndpbmRvd3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRtcCA9IHRoaXMud2luZG93c1tpXS56SW5kZXg7XG4gICAgICBpZiAodG1wID4gbWF4KSBtYXggPSB0bXA7XG4gICAgfVxuICAgIHJldHVybiArK21heDtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5jbGVhckFjdGl2ZVxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIGFsbCB3aW5kb3cgb2JqZWN0cyBpbiB0aGUgd2luZG93c1xuICAgKiBhbmQgc2V0cyB0aGUgYWN0aXZlIHByb3BlcnR5IHRvIGZhbHNlLlxuICAgKlxuICAgKi9cbiAgY2xlYXJBY3RpdmUgPSAoKSA9PiB7XG4gICAgdGhpcy53aW5kb3dzLmZvckVhY2goKHdpbmRvdzogYW55KSA9PiB7XG4gICAgICB3aW5kb3cuYWN0aXZlID0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuZ2V0QWN0aXZlV2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgdGhlIGFjdGl2ZSB3aW5kb3cuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IHZpZXcgb2JqZWN0LlxuICAgKi9cbiAgZ2V0QWN0aXZlV2luZG93ID0gKCk6IGFueSA9PiB7XG4gICAgdmFyIGFjdGl2ZVdpbmRvdyA9IG51bGw7XG4gICAgdGhpcy53aW5kb3dzLmZvckVhY2goKHdkdzogYW55KSA9PiB7XG4gICAgICBpZiAod2R3LmFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBhY3RpdmVXaW5kb3cgPSB3ZHc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZVdpbmRvdztcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5nZXRBY3RpdmVWaWV3XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgdGhlIGFjdGl2ZSB2aWV3LlxuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSB2aWV3IG9iamVjdC5cbiAgICovXG4gIGdldEFjdGl2ZVZpZXcgPSAod2R3OiBhbnkpID0+IHtcbiAgICB2YXIgYWN0aXZlVmlldyA9IG51bGw7XG4gICAgd2R3LnZpZXdzLmZvckVhY2goKHZpZXc6IGFueSkgPT4ge1xuICAgICAgaWYgKHZpZXcuYWN0aXZlID09PSB0cnVlKSB7XG4gICAgICAgIGFjdGl2ZVZpZXcgPSB2aWV3O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhY3RpdmVWaWV3O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LmFsbFdpbmRvd3NBcmVNaW5pbWl6ZWRcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSXRlcmF0ZXMgdGhyb3VnaCB3aW5kb3dzIHRvIGRldGVybWluZSBpZiBhbGwgYXJlIG1pbmltaXplZC5cbiAgICpcbiAgICovXG4gIGFsbFdpbmRvd3NBcmVNaW5pbWl6ZWQgPSAoKSA9PiB7XG4gICAgdmFyIGFsbE1pbmltaXplZCA9IHRydWU7XG4gICAgdGhpcy53aW5kb3dzLmZvckVhY2goKHdpbmRvdzogYW55KSA9PiB7XG4gICAgICBpZiAoIXdpbmRvdy5taW5pbWl6ZWQpIHtcbiAgICAgICAgYWxsTWluaW1pemVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFsbE1pbmltaXplZDtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5oaWRlU2hvd0FsbFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBIaWRlcy9zaG93cyBhbGwgd2luZG93c1xuICAgKlxuICAgKi9cbiAgaGlkZVNob3dBbGwgPSAoKSA9PiB7XG4gICAgdGhpcy5taW5pbWl6ZUFsbCA9IHRoaXMuYWxsV2luZG93c0FyZU1pbmltaXplZCgpID8gZmFsc2UgOiAhdGhpcy5taW5pbWl6ZUFsbDtcbiAgICB0aGlzLndpbmRvd3MuZm9yRWFjaCgod2R3OiBhbnkpID0+IHtcbiAgICAgIGlmICh3ZHcub3V0T2ZCb3VuZHMpIHRoaXMucmVjb3Zlcih3ZHcpO1xuICAgICAgd2R3LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgd2R3Lm1pbmltaXplZCA9IHRoaXMubWluaW1pemVBbGw7XG4gICAgfSk7XG4gICAgdGhpcy5hY3RpdmF0ZUZvcmVtb3N0V2luZG93KCk7XG4gICAgcmV0dXJuIHRoaXMubWluaW1pemVBbGw7XG4gIH07XG5cbiAgLyoqXHJcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cclxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LmZpbmRXaW5kb3dWaWV3RGlyZWN0aXZlXHJcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogTG9va3MgZm9yIHByZXZpb3VzbHkgb3BlbiB3aW5kb3cgd2l0aCBhIHZpZXcgZGlyZWN0aXZlXHJcbiAgICpcclxuICAgKi9cclxuICBmaW5kV2luZG93Vmlld0RpcmVjdGl2ZSA9ICh3aW5kb3dWaWV3RGlyZWN0aXZlOiBhbnkpID0+IHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy53aW5kb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy53aW5kb3dzW2ldLnZpZXdzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2luZG93c1tpXS52aWV3c1swXS52aWV3RGlyZWN0aXZlID09PSB3aW5kb3dWaWV3RGlyZWN0aXZlKVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2luZG93c1tpXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5vcGVuV2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc3BsYXlzIGEgbmV3IHdpbmRvdy4gQWxsIHdpbmRvdyBwcm9wZXJ0aWVzIGRlZmluZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGRldmVsb3BlciB3aWxsIGJlXG4gICAqIG92ZXJsYWlkIGhlcmUgYmVmb3JlIGRpc3BsYXlpbmcgdGhlIHdpbmRvd1xuICAgKlxuICAgKi9cbiAgb3BlbldpbmRvdyA9ICh3aW5kb3dDb25maWdPdmVybGF5czogYW55LCBzaW5nbGVJbnN0YW5jZTogYW55KTogV2luZG93Q29uZmlnID0+IHtcbiAgICBsZXQgYWN0aXZlV2luZG93ID0gdGhpcy5nZXRBY3RpdmVXaW5kb3coKTtcclxuICAgIGlmIChhY3RpdmVXaW5kb3cgJiYgYWN0aXZlV2luZG93LmlzTW9kYWwpIHtcclxuICAgICAgYWN0aXZlV2luZG93LmludmFsaWRPcGVyYXRpb24gPSB0cnVlO1xyXG4gICAgICByZXR1cm4gYWN0aXZlV2luZG93O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzaW5nbGVJbnN0YW5jZSkge1xyXG4gICAgICBsZXQgd2luZG93ID0gdGhpcy5maW5kV2luZG93Vmlld0RpcmVjdGl2ZSh3aW5kb3dDb25maWdPdmVybGF5cy52aWV3c1swXS52aWV3RGlyZWN0aXZlKTtcclxuICAgICAgaWYgKHdpbmRvdykge1xyXG4gICAgICAgIHRoaXMudXBkYXRlV2luZG93U3RhdGUod2luZG93KTtcclxuICAgICAgICByZXR1cm4gd2luZG93O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvd0NvbmZpZ092ZXJsYXlzLmlzTW9kYWwpIHtcclxuICAgICAgbGV0IGhlaWdodE9mZnNldCA9IChwYXJzZUludCh3aW5kb3dDb25maWdPdmVybGF5cy5oZWlnaHQsIDEwKSAvIDIpICsgMzA7XHJcbiAgICAgIGxldCB3aWR0aE9mZnNldCA9IChwYXJzZUludCh3aW5kb3dDb25maWdPdmVybGF5cy53aWR0aCwgMTApIC8gMik7XHJcbiAgICAgIHdpbmRvd0NvbmZpZ092ZXJsYXlzLnRvcCA9ICdjYWxjKDUwJSAtICcgKyBoZWlnaHRPZmZzZXQgKyAncHggKSc7XHJcbiAgICAgIHdpbmRvd0NvbmZpZ092ZXJsYXlzLmxlZnQgPSAnY2FsYyg1MCUgLSAnICsgd2lkdGhPZmZzZXQgKyAncHggKSc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xyXG4gICAgbGV0IGNvbmZpZ3VyZWRXaW5kb3cgPSB0aGlzLmNvbmZpZ3VyZVdpbmRvdyh3aW5kb3dDb25maWdPdmVybGF5cyk7XHJcbiAgICBjb25maWd1cmVkV2luZG93LnZpZXdzID0gdGhpcy5jb25maWd1cmVWaWV3cyh3aW5kb3dDb25maWdPdmVybGF5cywgY29uZmlndXJlZFdpbmRvdyk7XHJcbiAgICBpZiAoIWNvbmZpZ3VyZWRXaW5kb3cuaXNNb2RhbCkge1xyXG4gICAgICBjb25maWd1cmVkV2luZG93LmNhc2NhZGVXaW5kb3cgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zYXZlUG9zaXRpb24oY29uZmlndXJlZFdpbmRvdyk7XHJcbiAgICAgIHRoaXMubWF4aW1pemUoY29uZmlndXJlZFdpbmRvdyk7XHJcbiAgICAgIHRoaXMud2luZG93cy5wdXNoKGNvbmZpZ3VyZWRXaW5kb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53aW5kb3dzLnB1c2goY29uZmlndXJlZFdpbmRvdyk7XHJcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ3VyZWRXaW5kb3c7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuY29uZmlndXJlV2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENyZWF0ZXMgYSBuZXcgd2luZG93IGluc3RhbmNlLlxuICAgKlxuICAgKi9cbiAgY29uZmlndXJlV2luZG93ID0gKHdpbmRvd0NvbmZpZ092ZXJsYXlzOiBhbnkpID0+IHtcbiAgICB2YXIgd2luZG93Q29uZmlnSW5zdGFuY2UgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlc2t0b3Aud2luZG93Q29uZmlnKTtcbiAgICB3aW5kb3dDb25maWdJbnN0YW5jZS5zYXZlZFBvc2l0aW9uID0gT2JqZWN0LmNyZWF0ZSh7IHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCwgaGVpZ2h0OiAwLCB3aWR0aDogMCB9KTtcbiAgICB3aW5kb3dDb25maWdJbnN0YW5jZS56SW5kZXggPSB0aGlzLmdldE5leHRNYXhaSW5kZXgoKTtcbiAgICAvL3dpbmRvd0NvbmZpZ0luc3RhbmNlLmdsb2JhbHMgPSBPYmplY3QuYXNzaWduKHt9LCAkcm9vdFNjb3BlLiRldmFsKHRoaXMub3B0aW9ucy5nbG9iYWxzKSk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2luZG93Q29uZmlnSW5zdGFuY2UsIHdpbmRvd0NvbmZpZ092ZXJsYXlzKTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5jb25maWd1cmVWaWV3c1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDcmVhdGVzIG9uZSBvciBtb3JlIHZpZXcgaW5zdGFuY2VzXG4gICAqXG4gICAqL1xuICBjb25maWd1cmVWaWV3cyA9ICh3aW5kb3dDb25maWdPdmVybGF5czogYW55LCBjb25maWd1cmVkV2luZG93OiBhbnkpOiBBcnJheTxhbnk+ID0+IHtcbiAgICBsZXQgY29uZmlndXJlZFZpZXdzOiBBcnJheTxhbnk+ID0gW107XG4gICAgd2luZG93Q29uZmlnT3ZlcmxheXMudmlld3MuZm9yRWFjaCgodmlldzogYW55KSA9PiB7XG4gICAgICBsZXQgY29uZmlndXJlZFZpZXcgPSBuZXcgVHJ1RGVza3RvcFZpZXdDb25maWcoKTtcclxuICAgICAgY29uZmlndXJlZFZpZXcuY29tcG9uZW50TmFtZSA9IHZpZXcuY29tcG9uZW50TmFtZTtcclxuICAgICAgY29uZmlndXJlZFZpZXcuZW50aXRpZXMgPSB2aWV3LmVudGl0aWVzO1xyXG4gICAgICBjb25maWd1cmVkVmlldy5lbnRpdHlJbmRleCA9IHZpZXcuZW50aXR5SW5kZXg7XHJcbiAgICAgIGNvbmZpZ3VyZWRWaWV3LmlzRGlydHkgPSB2aWV3LmlzRGlydHk7XHJcbiAgICAgIGNvbmZpZ3VyZWRWaWV3LmlzRWRpdGluZyA9IHZpZXcuaXNFZGl0aW5nO1xyXG4gICAgICBjb25maWd1cmVkVmlldy5pc0ludmFsaWQgPSB2aWV3LmlzVmFsaWQ7XHJcbiAgICAgIGNvbmZpZ3VyZWRWaWV3Lm9wZW5Bc0RldGFpVmlldyA9IHZpZXcub3BlbkFzRGV0YWlsVmlldztcbiAgICAgIC8vdmlld0NvbmZpZ0luc3RhbmNlLmdsb2JhbHMgPSB0aGlzLm9wdGlvbnMuZ2xvYmFscztcbiAgICAgIC8vbGV0IGNvbmZpZ3VyZWRWaWV3ID0gT2JqZWN0LmFzc2lnbih2aWV3Q29uZmlnSW5zdGFuY2UsIHZpZXcpO1xuICAgICAgY29uZmlndXJlZFZpZXcud2luZG93ID0gY29uZmlndXJlZFdpbmRvdztcbiAgICAgIGNvbmZpZ3VyZWRWaWV3cy5wdXNoKGNvbmZpZ3VyZWRWaWV3KTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29uZmlndXJlZFZpZXdzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LmNsb3NlV2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJlbW92ZSBhIHdpbmRvdyB7b2JqZWN0fSBmcm9tIHRoZSB3aW5kb3dzIGFycmF5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHdpbmRvdyB3YXMgY2xvc2VkLCBmYWxzZSBpZiBub3QgY2xvc2VkLlxuICAgKi9cbiAgY2xvc2VXaW5kb3cgPSAod2R3OiBhbnkpID0+IHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd0RpcnR5Q2xvc2UgJiYgd2R3LmlzRGlydHkpIHtcbiAgICAgIGFsZXJ0KFwiVW5zYXZlZCBDaGFuZ2VzLiBTYXZlIGNoYW5nZXMgYmVmb3JlIGNsb3Npbmcgd2luZG93LlwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd0ludmFsaWRDbG9zZSAmJiB3ZHcuaXNJbnZhbGlkKSB7XG4gICAgICBhbGVydChcIkRhdGEgaXMgaW52YWxpZC4gQ29ycmVjdCBJbnZhbGlkIGRhdGEgYmVmb3JlIGNsb3Npbmcgd2luZG93LlwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNhbkNsb3NlRm4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jYW5DbG9zZUZuKHdkdykpIHtcbiAgICAgICAgdGhpcy53aW5kb3dzLnNwbGljZSh0aGlzLndpbmRvd3MuaW5kZXhPZih3ZHcpLCAxKTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZUZvcmVtb3N0V2luZG93KCk7XG4gICAgICAgIHdkdy5vbkNsb3NlJC5uZXh0KCk7XG4gICAgICAgIHdkdy5jbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpbmRvd3Muc3BsaWNlKHRoaXMud2luZG93cy5pbmRleE9mKHdkdyksIDEpO1xuICAgICAgdGhpcy5hY3RpdmF0ZUZvcmVtb3N0V2luZG93KCk7XG4gICAgICB3ZHcub25DbG9zZSQubmV4dCgpO1xuICAgICAgd2R3LmNsb3NlZCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5hY3RpdmF0ZUZvcmVtb3N0V2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldCB0aGUgZm9yZW1vc3Qgd2luZG93IHRvIGFuIGFjdGl2ZSBzdGF0ZVxuICAgKlxuICAgKi9cbiAgYWN0aXZhdGVGb3JlbW9zdFdpbmRvdyA9ICgpID0+IHtcbiAgICB2YXIgZm9yZW1vc3QgPSB1bmRlZmluZWQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndpbmRvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICgoZm9yZW1vc3QgPT09IHVuZGVmaW5lZCB8fCB0aGlzLndpbmRvd3NbaV0uekluZGV4ID4gZm9yZW1vc3QuekluZGV4KSAmJiAhdGhpcy53aW5kb3dzW2ldLm1pbmltaXplZCAmJiAhdGhpcy53aW5kb3dzW2ldLm91dE9mQm91bmRzKVxuICAgICAgICBmb3JlbW9zdCA9IHRoaXMud2luZG93c1tpXTtcbiAgICB9XG4gICAgaWYgKGZvcmVtb3N0KVxuICAgICAgZm9yZW1vc3QuYWN0aXZlID0gdHJ1ZTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5hY3RpdmF0ZU5leHRXaW5kb3dcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0IHRoZSBuZXh0IHdpbmRvdyB0byBhbiBhY3RpdmUgc3RhdGVcbiAgICpcbiAgICovXG4gIGFjdGl2YXRlTmV4dFdpbmRvdyA9IChhY3RpdmVXaW5kb3dMb2NhdGlvbjogYW55KSA9PiB7XG4gICAgaWYgKHRoaXMud2luZG93cy5sZW5ndGggPD0gMSkgcmV0dXJuO1xuICAgIHZhciBiYWNrZW5kID0gdGhpcy53aW5kb3dzLnNsaWNlKGFjdGl2ZVdpbmRvd0xvY2F0aW9uKTtcbiAgICB2YXIgZnJvbnRlbmQgPSB0aGlzLndpbmRvd3Muc2xpY2UoMCwgYWN0aXZlV2luZG93TG9jYXRpb24gLSAxKTtcbiAgICB2YXIgc29ydGVkID0gYmFja2VuZC5jb25jYXQoZnJvbnRlbmQpO1xuICAgIHZhciBuZXh0V2luZG93ID0gdW5kZWZpbmVkO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc29ydGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXNvcnRlZFtpXS5taW5pbWl6ZWQgJiYgIXNvcnRlZFtpXS5vdXRPZkJvdW5kcyAmJiAhbmV4dFdpbmRvdylcbiAgICAgICAgbmV4dFdpbmRvdyA9IHNvcnRlZFtpXTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFdpbmRvdykge1xuICAgICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xuICAgICAgbmV4dFdpbmRvdy56SW5kZXggPSB0aGlzLmdldE5leHRNYXhaSW5kZXgoKTtcbiAgICAgIG5leHRXaW5kb3cuYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuYWN0aXZhdGVQcmV2aW91c1dpbmRvd1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXQgdGhlIHByZXZpb3VzIHdpbmRvdyB0byBhbiBhY3RpdmUgc3RhdGVcbiAgICpcbiAgICovXG4gIGFjdGl2YXRlUHJldmlvdXNXaW5kb3cgPSAoYWN0aXZlV2luZG93TG9jYXRpb246IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLndpbmRvd3MubGVuZ3RoIDw9IDEpIHJldHVybjtcbiAgICB2YXIgYmFja2VuZCA9IHRoaXMud2luZG93cy5zbGljZShhY3RpdmVXaW5kb3dMb2NhdGlvbik7XG4gICAgdmFyIGZyb250ZW5kID0gdGhpcy53aW5kb3dzLnNsaWNlKDAsIGFjdGl2ZVdpbmRvd0xvY2F0aW9uIC0gMSk7XG4gICAgdmFyIHNvcnRlZCA9IGJhY2tlbmQuY29uY2F0KGZyb250ZW5kKTtcbiAgICB2YXIgbmV4dFdpbmRvdyA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKHZhciBpID0gc29ydGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoIXNvcnRlZFtpXS5taW5pbWl6ZWQgJiYgIXNvcnRlZFtpXS5vdXRPZkJvdW5kcyAmJiAhbmV4dFdpbmRvdylcbiAgICAgICAgbmV4dFdpbmRvdyA9IHNvcnRlZFtpXTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFdpbmRvdykge1xuICAgICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xuICAgICAgbmV4dFdpbmRvdy56SW5kZXggPSB0aGlzLmdldE5leHRNYXhaSW5kZXgoKTtcbiAgICAgIG5leHRXaW5kb3cuYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQubWluaW1pemVcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVmlzdWFsbHkgcmVtb3ZlcyB3aW5kb3cgZnJvbSB0aGUgdmlld3BvcnQuXG4gICAqXG4gICAqL1xuICBtaW5pbWl6ZSA9ICh3aW5kb3c6IGFueSkgPT4ge1xuICAgIHRoaXMuc2F2ZVBvc2l0aW9uKHdpbmRvdyk7XG5cbiAgICB3aW5kb3cuYWN0aXZlID0gZmFsc2U7XG4gICAgd2luZG93Lm1pbmltaXplZCA9IHRydWU7XG4gICAgdGhpcy5hY3RpdmF0ZUZvcmVtb3N0V2luZG93KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQubWF4aW1pemVcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUG9zaXRpb25zIHdpbmRvdyBzdWNoIHRoYXQgaXQgZmlsbHMgdGhlIHdob2xlIHZpZXdwb3J0LlxuICAgKlxuICAgKi9cbiAgbWF4aW1pemUgPSAod2luZG93OiBhbnkpID0+IHtcbiAgICB3aW5kb3cudG9wID0gMDtcbiAgICB3aW5kb3cubGVmdCA9IDA7XG4gICAgd2luZG93LnJpZ2h0ID0gMDtcbiAgICB3aW5kb3cuYm90dG9tID0gMDtcbiAgICB3aW5kb3cuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgIHdpbmRvdy53aWR0aCA9ICcxMDAlJztcbiAgICB3aW5kb3cubWF4aW1pemVkID0gJ2ZpbGwnO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50Lm1heGltaXplTGVmdFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBQb3NpdGlvbnMgd2luZG93IHN1Y2ggdGhhdCBpdCBmaWxscyB0aGUgbGVmdCBwb3J0aW9uIHZpZXdwb3J0LlxuICAgKlxuICAgKi9cbiAgbWF4aW1pemVMZWZ0ID0gKHdpbmRvdzogYW55KSA9PiB7XG4gICAgd2luZG93LnNwbGl0ID0gdHJ1ZTtcbiAgICB3aW5kb3cudG9wID0gMDtcbiAgICB3aW5kb3cubGVmdCA9IDA7XG4gICAgd2luZG93LmJvdHRvbSA9IDA7XG4gICAgd2luZG93LndpZHRoID0gJzUwJSc7XG4gICAgd2luZG93LmhlaWdodCA9ICdhdXRvJztcbiAgICB3aW5kb3cubWF4aW1pemVkID0gJ2xlZnQnO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50Lm1heGltaXplUmlnaHRcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUG9zaXRpb25zIHdpbmRvdyBzdWNoIHRoYXQgaXQgZmlsbHMgdGhlIHJpZ2h0IHBvcnRpb24gdmlld3BvcnQuXG4gICAqXG4gICAqL1xuICBtYXhpbWl6ZVJpZ2h0ID0gKHdpbmRvdzogYW55KSA9PiB7XG4gICAgd2luZG93LnRvcCA9IDA7XG4gICAgd2luZG93LmxlZnQgPSAnNTAlJztcbiAgICB3aW5kb3cucmlnaHQgPSAwO1xuICAgIHdpbmRvdy5ib3R0b20gPSAwO1xuICAgIHdpbmRvdy53aWR0aCA9ICc1MCUnO1xuICAgIHdpbmRvdy5oZWlnaHQgPSAnYXV0byc7XG4gICAgd2luZG93Lm1heGltaXplZCA9ICdyaWdodCc7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQucmVjb3ZlclxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBCcmluZ3Mgd2luZG93IGJhY2sgaW50byB2aWV3IHdoZW4gaXQgaGFzIGVzY2FwZWQgdGhlIHZpZXdwb3J0LlxuICAgKlxuICAgKi9cbiAgcmVjb3ZlciA9ICh3aW5kb3c6IGFueSkgPT4ge1xuICAgIHdpbmRvdy5hY3RpdmUgPSB0cnVlO1xuICAgIHdpbmRvdy5vdXRPZkJvdW5kcyA9IGZhbHNlO1xuICAgIHdpbmRvdy5taW5pbWl6ZWQgPSBmYWxzZTtcbiAgICB3aW5kb3cuekluZGV4ID0gdGhpcy5nZXROZXh0TWF4WkluZGV4KCk7XG4gICAgdGhpcy5jYXNjYWRlV2luZG93KHdpbmRvdyk7XG4gICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xuICAgIHRoaXMuYWN0aXZhdGVGb3JlbW9zdFdpbmRvdygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LnJlc3RvcmVcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICovXG4gIHJlc3RvcmUgPSAod2R3OiBhbnkpID0+IHtcbiAgICBpZiAod2R3Lm1heGltaXplZCA9PT0gJ2ZpbGwnKSB7XG4gICAgICB0aGlzLm1heGltaXplKHdkdyk7XG4gICAgfSBlbHNlIGlmICh3ZHcubWF4aW1pemVkID09PSAnbGVmdCcpIHtcbiAgICAgIHRoaXMubWF4aW1pemVMZWZ0KHdkdyk7XG4gICAgfSBlbHNlIGlmICh3ZHcubWF4aW1pemVkID09PSAncmlnaHQnKSB7XG4gICAgICB0aGlzLm1heGltaXplUmlnaHQod2R3KTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVXaW5kb3dTdGF0ZSh3ZHcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LmJyaW5nVG9Gcm9udFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKi9cbiAgdXBkYXRlV2luZG93U3RhdGUgPSAod2R3OiBhbnkpID0+IHtcclxuICAgIGlmICh3ZHcub3V0T2ZCb3VuZHMpIHtcclxuICAgICAgdGhpcy5yZWNvdmVyKHdkdyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2R3Lm1heGltaXplZCA9PT0gJ2ZpbGwnKSB7XHJcbiAgICAgIHRoaXMubWF4aW1pemUod2R3KTtcclxuICAgIH0gZWxzZSBpZiAod2R3Lm1heGltaXplZCA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgIHRoaXMubWF4aW1pemVMZWZ0KHdkdyk7XHJcbiAgICB9IGVsc2UgaWYgKHdkdy5tYXhpbWl6ZWQgPT09ICdyaWdodCcpIHtcclxuICAgICAgdGhpcy5tYXhpbWl6ZVJpZ2h0KHdkdyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsZWFyQWN0aXZlKCk7XHJcbiAgICB3ZHcuYWN0aXZlID0gdHJ1ZTtcclxuICAgIHdkdy5taW5pbWl6ZWQgPSBmYWxzZTtcclxuICAgIHdkdy56SW5kZXggPSB0aGlzLmdldE5leHRNYXhaSW5kZXgoKTtcclxuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LnJlc3RvcmVTYXZlZFBvc2l0aW9uXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldCB0aGUgd2luZG93cyBsYXN0IGtub3cgcG9zaXRpb24gdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAqXG4gICAqL1xuICByZXN0b3JlU2F2ZWRQb3NpdGlvbiA9ICh3ZHc6IGFueSkgPT4ge1xuICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcbiAgICB3ZHcudG9wID0gd2R3LnNhdmVkUG9zaXRpb24udG9wO1xuICAgIHdkdy5sZWZ0ID0gd2R3LnNhdmVkUG9zaXRpb24ubGVmdDtcbiAgICB3ZHcucmlnaHQgPSB3ZHcuc2F2ZWRQb3NpdGlvbi5yaWdodDtcbiAgICB3ZHcuYm90dG9tID0gd2R3LnNhdmVkUG9zaXRpb24uYm90dG9tO1xuICAgIHdkdy5oZWlnaHQgPSB3ZHcuc2F2ZWRQb3NpdGlvbi5oZWlnaHQ7XG4gICAgd2R3LndpZHRoID0gd2R3LnNhdmVkUG9zaXRpb24ud2lkdGg7XG4gICAgd2R3Lm1heGltaXplZCA9IHVuZGVmaW5lZDtcbiAgICB3ZHcubWluaW1pemVkID0gdW5kZWZpbmVkO1xuICAgIHdkdy5hY3RpdmUgPSB0cnVlO1xuICAgIHdkdy5taW5pbWl6ZWQgPSBmYWxzZTtcbiAgICB3ZHcuekluZGV4ID0gdGhpcy5nZXROZXh0TWF4WkluZGV4KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BDb21wb25lbnQuc2F2ZVBvc2l0aW9uXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNhdmUgdGhlIHdpbmRvd3MgbGFzdCBrbm93IHBvc2l0aW9uLlxuICAgKlxuICAgKi9cbiAgc2F2ZVBvc2l0aW9uID0gKHdkdzogYW55KSA9PiB7XG4gICAgd2R3LnNhdmVkUG9zaXRpb24udG9wID0gd2R3LnRvcDtcbiAgICB3ZHcuc2F2ZWRQb3NpdGlvbi5sZWZ0ID0gd2R3LmxlZnQ7XG4gICAgd2R3LnNhdmVkUG9zaXRpb24ucmlnaHQgPSB3ZHcucmlnaHQ7XG4gICAgd2R3LnNhdmVkUG9zaXRpb24uYm90dG9tID0gd2R3LmJvdHRvbTtcbiAgICB3ZHcuc2F2ZWRQb3NpdGlvbi5oZWlnaHQgPSB3ZHcuaGVpZ2h0O1xuICAgIHdkdy5zYXZlZFBvc2l0aW9uLndpZHRoID0gd2R3LndpZHRoO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wQ29tcG9uZW50LmNsb3NlV2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE1vdmVzIGEgd2luZG93IHRvIHRoZSBuZXh0IGNhc2NhZGUgcG9zaXRpb24uXG4gICAqXG4gICAqL1xuICBjYXNjYWRlV2luZG93ID0gKHdpbmRvdzogYW55KSA9PiB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlV2luZG93Q2FzY2FkaW5nIHx8IHdpbmRvdy5pc01vZGFsKSByZXR1cm47XG4gICAgdGhpcy5sYXN0V2luZG93Q2FzY2FkZVBvc2l0aW9uLnRvcCArPSAxMDtcbiAgICB0aGlzLmxhc3RXaW5kb3dDYXNjYWRlUG9zaXRpb24ubGVmdCArPSAxMDtcbiAgICBpZiAodGhpcy5sYXN0V2luZG93Q2FzY2FkZVBvc2l0aW9uLnRvcCA+IHRoaXMubWF4V2luZG93Q2FzY2FkZVBvc2l0aW9uKVxuICAgICAgdGhpcy5sYXN0V2luZG93Q2FzY2FkZVBvc2l0aW9uLnRvcCA9IHRoaXMubWluV2luZG93Q2FzY2FkZVBvc2l0aW9uO1xuICAgIGlmICh0aGlzLmxhc3RXaW5kb3dDYXNjYWRlUG9zaXRpb24ubGVmdCA+IHRoaXMubWF4V2luZG93Q2FzY2FkZVBvc2l0aW9uKVxuICAgICAgdGhpcy5sYXN0V2luZG93Q2FzY2FkZVBvc2l0aW9uLmxlZnQgPSB0aGlzLm1pbldpbmRvd0Nhc2NhZGVQb3NpdGlvbjtcblxuICAgIHdpbmRvdy50b3AgPSB0aGlzLmxhc3RXaW5kb3dDYXNjYWRlUG9zaXRpb24udG9wICsgJ3B4JztcbiAgICB3aW5kb3cubGVmdCA9IHRoaXMubGFzdFdpbmRvd0Nhc2NhZGVQb3NpdGlvbi5sZWZ0ICsgJ3B4JztcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZXZlbnRcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICovXG4gIG9uS2V5RG93biA9IChldmVudDogYW55KSA9PiB7XG4gICAgaWYgKGV2ZW50LmFsdEtleSlcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdmFyIGtleVNlcXVlbmNlID0gdGhpcy51dGlsLmdldEtleVNlcXVlbmNlKGV2ZW50KTtcbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrbScpIHsgLy9NYXhpbWl6ZVxuICAgICAgdmFyIGFjdGl2ZVdpbmRvdyA9IHRoaXMuZ2V0QWN0aXZlV2luZG93KCk7XG4gICAgICBpZiAoYWN0aXZlV2luZG93ID09PSBudWxsKSByZXR1cm47XG4gICAgICBpZiAoIWFjdGl2ZVdpbmRvdy5tYXhpbWl6ZWQpIHtcbiAgICAgICAgdGhpcy5zYXZlUG9zaXRpb24oYWN0aXZlV2luZG93KTtcbiAgICAgICAgdGhpcy5tYXhpbWl6ZShhY3RpdmVXaW5kb3cpO1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVXaW5kb3cubWF4aW1pemVkID09PSAncmlnaHQnIHx8IGFjdGl2ZVdpbmRvdy5tYXhpbWl6ZWQgPT09ICdsZWZ0JylcbiAgICAgICAgdGhpcy5tYXhpbWl6ZShhY3RpdmVXaW5kb3cpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnJlc3RvcmVTYXZlZFBvc2l0aW9uKGFjdGl2ZVdpbmRvdyk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrbicpIHsgLy9NaW5pbWl6ZVxuICAgICAgdmFyIGFjdGl2ZVdpbmRvdyA9IHRoaXMuZ2V0QWN0aXZlV2luZG93KCk7XG4gICAgICBpZiAoYWN0aXZlV2luZG93ID09PSBudWxsIHx8IGFjdGl2ZVdpbmRvdy5taW5pbWl6ZWQpIHJldHVybjtcbiAgICAgIHRoaXMubWluaW1pemUoYWN0aXZlV2luZG93KTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2FsdCt3JykgeyAvL0N5Y2xlcyBGb3J3YXJkXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLndpbmRvd3MuaW5kZXhPZih0aGlzLmdldEFjdGl2ZVdpbmRvdygpKTtcbiAgICAgIHRoaXMuYWN0aXZhdGVOZXh0V2luZG93KGluZGV4ICsgMSk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdzaGlmdCthbHQrdycpIHsgLy9DeWNsZXMgQmFja3dhcmRcbiAgICAgIHZhciBpbmRleCA9IHRoaXMud2luZG93cy5pbmRleE9mKHRoaXMuZ2V0QWN0aXZlV2luZG93KCkpO1xuICAgICAgdGhpcy5hY3RpdmF0ZVByZXZpb3VzV2luZG93KGluZGV4ICsgMSk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdzaGlmdCthbHQreCcgJiYgISh0aGlzLnNoaWZ0UHJlc3NlZCAmJiB0aGlzLmFsdFByZXNzZWQgJiYgdGhpcy54UHJlc3NlZCkpIHsgLy9DbG9zZVxuICAgICAgdmFyIGFjdGl2ZVdpbmRvdyA9IHRoaXMuZ2V0QWN0aXZlV2luZG93KCk7XG4gICAgICBpZiAoIWFjdGl2ZVdpbmRvdykgcmV0dXJuO1xuICAgICAgdGhpcy5jbG9zZVdpbmRvdyhhY3RpdmVXaW5kb3cpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnYWx0K2wnKSB7IC8vTWF4aW1pemUgbGVmdFxuICAgICAgdmFyIGFjdGl2ZVdpbmRvdyA9IHRoaXMuZ2V0QWN0aXZlV2luZG93KCk7XG4gICAgICBpZiAoIWFjdGl2ZVdpbmRvdy5tYXhpbWl6ZWQpIHtcbiAgICAgICAgdGhpcy5zYXZlUG9zaXRpb24oYWN0aXZlV2luZG93KTtcbiAgICAgICAgdGhpcy5tYXhpbWl6ZUxlZnQoYWN0aXZlV2luZG93KTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlV2luZG93Lm1heGltaXplZCA9PT0gJ3JpZ2h0JyB8fCBhY3RpdmVXaW5kb3cubWF4aW1pemVkID09PSAnZmlsbCcpXG4gICAgICAgIHRoaXMubWF4aW1pemVMZWZ0KGFjdGl2ZVdpbmRvdyk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucmVzdG9yZVNhdmVkUG9zaXRpb24oYWN0aXZlV2luZG93KTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2FsdCtyJykgeyAvL01heGltaXplIHJpZ2h0XG4gICAgICB2YXIgYWN0aXZlV2luZG93ID0gdGhpcy5nZXRBY3RpdmVXaW5kb3coKTtcbiAgICAgIGlmICghYWN0aXZlV2luZG93Lm1heGltaXplZCkge1xuICAgICAgICB0aGlzLnNhdmVQb3NpdGlvbihhY3RpdmVXaW5kb3cpO1xuICAgICAgICB0aGlzLm1heGltaXplUmlnaHQoYWN0aXZlV2luZG93KTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlV2luZG93Lm1heGltaXplZCA9PT0gJ2xlZnQnIHx8IGFjdGl2ZVdpbmRvdy5tYXhpbWl6ZWQgPT09ICdmaWxsJylcbiAgICAgICAgdGhpcy5tYXhpbWl6ZVJpZ2h0KGFjdGl2ZVdpbmRvdyk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucmVzdG9yZVNhdmVkUG9zaXRpb24oYWN0aXZlV2luZG93KTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2FsdCtkJykgeyAvL1RvZ2dsZSBEZXNrdG9wXG4gICAgICAvL3RoaXMuZGVza3RvcFNob3duID0gdGhpcy5oaWRlU2hvd0FsbCgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuc2hpZnRLZXkpXG4gICAgICB0aGlzLnNoaWZ0UHJlc3NlZCA9IHRydWU7XG4gICAgaWYgKGV2ZW50LmFsdEtleSlcbiAgICAgIHRoaXMuYWx0UHJlc3NlZCA9IHRydWU7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDg4KVxuICAgICAgdGhpcy54UHJlc3NlZCA9IHRydWU7XG4gIH1cblxuICBvbktleVVwID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBpZiAoZXZlbnQuc2hpZnRLZXkpXG4gICAgICB0aGlzLnNoaWZ0UHJlc3NlZCA9IGZhbHNlO1xuICAgIGlmIChldmVudC5hbHRLZXkpXG4gICAgICB0aGlzLmFsdFByZXNzZWQgPSBmYWxzZTtcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gODgpXG4gICAgICB0aGlzLnhQcmVzc2VkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcENvbXBvbmVudC5oYW5kbGVTZWxlY3RBdHRlbXB0XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3BcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFByZXZlbnRzIHRoZSB1c2VyIGZyb20gaGlnaGxpZ2h0IGRlc2t0b3AgZWxlbWVudHMuXG4gICAqXG4gICAqL1xuICBoYW5kbGVTZWxlY3RBdHRlbXB0ID0gKGU6IGFueSkgPT4ge1xuICAgIHZhciBub2RlTmFtZSA9IGUudGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgbGV0IHJpY2hUZXh0RWxlbWVudCA9IHRoaXMudXRpbC5maW5kQ2xvc2VzdEFuY2VzdG9yQnlDbGFzcyhlLnRhcmdldCwgJy5yaWNoLXRleHQnKTtcbiAgICBpZiAoXG4gICAgICBub2RlTmFtZSA9PT0gJ2lucHV0JyB8fFxuICAgICAgbm9kZU5hbWUgPT09ICd0ZXh0YXJlYScgfHxcbiAgICAgIG5vZGVOYW1lID09PSAnc2VsZWN0JyB8fFxuICAgICAgbm9kZU5hbWUgPT09ICcjdGV4dCcgfHxcbiAgICAgIHJpY2hUZXh0RWxlbWVudCkgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAod2luZG93LmV2ZW50KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgd2luZG93czogQXJyYXk8YW55PiA9IFtdO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2dvVXJsID0gdGhpcy5vcHRpb25zLmxvZ29Vcmw7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZGVza3RvcC5vcHRpb25zLCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgdGhpcy5vcHRpb25zLnZpZXdwb3J0VG9wID0gdGhpcy5vcHRpb25zLm1lbnViYXJDb25maWcgIT09IHVuZGVmaW5lZCA/IHRoaXMub3B0aW9ucy5tZW51YmFySGVpZ2h0ICsgMSA6IDA7XHJcbiAgICB0aGlzLnRydURlc2t0b3BFdmVudEhhbmRsZXIub25PcGVuKCkuc3Vic2NyaWJlKCh3aW5kaW93RXZlbnQ6IFRydVdpbmRvd0V2ZW50QXJncykgPT4ge1xyXG4gICAgICB0aGlzLm9wZW5XaW5kb3cod2luZGlvd0V2ZW50LCBmYWxzZSk7XHJcbiAgICB9KTtcclxuICAgIGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSB0aGlzLmhhbmRsZVNlbGVjdEF0dGVtcHQ7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25LZXlVcCk7XHJcbiAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgIGxldCBoYXNDaGFuZ2VzID0gdGhpcy52aWV3cG9ydENvbXBvbmVudC53aW5kb3dDb21wb25lbnRzLmZpbHRlcigodzogVHJ1RGVza3RvcFdpbmRvdykgPT4geyByZXR1cm4gdy5oYXNDaGFuZ2VzKCkgPyB0cnVlIDogZmFsc2U7IH0pXHJcbiAgICAgIGlmIChoYXNDaGFuZ2VzLmxlbmd0aCkge1xyXG4gICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcclxuICAgICAgICB2YXIgbXNnID0gdGhpcy50ZXh0TWFuYWdlci5tc2dDb25maXJtRXhpdFdpdGhDaGFuZ2VzUGVuZGluZztcclxuXHJcbiAgICAgICAgLy8gRm9yIElFIGFuZCBGaXJlZm94XHJcbiAgICAgICAgaWYgKGUpIHtcclxuICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBtc2c7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGb3IgU2FmYXJpIC8gY2hyb21lXHJcbiAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd24pO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25LZXlVcCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkZXNrdG9wLXdyYXBwZXJcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImRlc2t0b3AtbWVudWJhci1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7J2hlaWdodCc6IG9wdGlvbnMubWVudWJhckhlaWdodCArICdweCd9XCI+XHJcbiAgICA8dHJ1LWRlc2t0b3AtbWVudWJhciBbZGVza3RvcEN0cmxdPVwidGhpc1wiPjwvdHJ1LWRlc2t0b3AtbWVudWJhcj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHRydS1kZXNrdG9wLXZpZXdwb3J0IFt3aW5kb3dzXT1cIndpbmRvd3NcIiBbZGVza3RvcEN0cmxdPVwidGhpc1wiPjwvdHJ1LWRlc2t0b3Atdmlld3BvcnQ+XHJcblxyXG4gIDx0cnUtZGVza3RvcC10YXNrYmFyIFt3aW5kb3dzXT1cIndpbmRvd3NcIiBbZGVza3RvcEN0cmxdPVwidGhpc1wiPjwvdHJ1LWRlc2t0b3AtdGFza2Jhcj5cclxuXHJcbiAgPGltZyBjbGFzcz1cImRlc2t0b3Atdmlld3BvcnQtbG9nb1wiIGRhdGEtbmctc2hvdz1cImxvZ29VcmxcIiBhbHQ9XCJcIj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -9111,7 +9111,7 @@ class TruDesktop {
9111
9111
  if (this.options.canCloseFn(wdw)) {
9112
9112
  this.windows.splice(this.windows.indexOf(wdw), 1);
9113
9113
  this.activateForemostWindow();
9114
- wdw.onClosed$.next();
9114
+ wdw.onClose$.next();
9115
9115
  wdw.closed();
9116
9116
  return true;
9117
9117
  }