@scion/workbench 18.0.0-beta.2 → 18.0.0-beta.3

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.
Files changed (109) hide show
  1. package/esm2022/lib/common/objects.util.mjs +7 -1
  2. package/esm2022/lib/common/uid.util.mjs +22 -0
  3. package/esm2022/lib/content-projection/content-projection.directive.mjs +16 -17
  4. package/esm2022/lib/dialog//311/265workbench-dialog.mjs +3 -3
  5. package/esm2022/lib/filter-field/filter-field.component.mjs +5 -5
  6. package/esm2022/lib/layout/grid-element/grid-element.component.mjs +6 -16
  7. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v5.model.mjs +11 -0
  8. package/esm2022/lib/layout/migration/workbench-layout-migration-v3.service.mjs +2 -2
  9. package/esm2022/lib/layout/migration/workbench-layout-migration-v5.service.mjs +67 -0
  10. package/esm2022/lib/layout/stringifier.mjs +70 -0
  11. package/esm2022/lib/layout/workbench-layout.model.mjs +1 -1
  12. package/esm2022/lib/layout/workench-layout-serializer.service.mjs +16 -25
  13. package/esm2022/lib/layout//311/265workbench-layout.mjs +14 -18
  14. package/esm2022/lib/microfrontend-platform/common/microfrontend.util.mjs +18 -1
  15. package/esm2022/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.mjs +28 -21
  16. package/esm2022/lib/microfrontend-platform/initialization/workbench-host-manifest-interceptor.service.mjs +11 -1
  17. package/esm2022/lib/microfrontend-platform/manifest-object-cache.service.mjs +63 -0
  18. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.mjs +5 -4
  19. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.mjs +2 -2
  20. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.mjs +3 -3
  21. package/esm2022/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.mjs +3 -2
  22. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.mjs +3 -2
  23. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.mjs +2 -2
  24. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.mjs +39 -0
  25. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.mjs +120 -0
  26. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.mjs +55 -0
  27. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.mjs +19 -0
  28. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-validator.interceptor.mjs +4 -3
  29. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.mjs +2 -13
  30. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.mjs +1 -16
  31. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs +42 -17
  32. package/esm2022/lib/microfrontend-platform/public_api.mjs +2 -1
  33. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.mjs +5 -4
  34. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.mjs +7 -4
  35. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-routes.mjs +26 -4
  36. package/esm2022/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.mjs +32 -0
  37. package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +23 -5
  38. package/esm2022/lib/page-not-found/format-url.pipe.mjs +2 -2
  39. package/esm2022/lib/page-not-found/page-not-found.component.mjs +3 -3
  40. package/esm2022/lib/part/part.component.mjs +3 -5
  41. package/esm2022/lib/perspective/workbench-grid-merger.service.mjs +3 -3
  42. package/esm2022/lib/perspective/workbench-perspective.model.mjs +1 -1
  43. package/esm2022/lib/perspective/workbench-perspective.service.mjs +61 -51
  44. package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +11 -2
  45. package/esm2022/lib/popup/popup.config.mjs +3 -3
  46. package/esm2022/lib/portal/wb-component-portal.mjs +3 -1
  47. package/esm2022/lib/routing/public_api.mjs +1 -2
  48. package/esm2022/lib/routing/routing.model.mjs +1 -1
  49. package/esm2022/lib/routing/workbench-auxiliary-route-installer.service.mjs +94 -0
  50. package/esm2022/lib/routing/workbench-layout-differ.mjs +3 -10
  51. package/esm2022/lib/routing/workbench-url-observer.service.mjs +31 -27
  52. package/esm2022/lib/routing/workbench-view-outlet-differ.mjs +58 -0
  53. package/esm2022/lib/routing//311/265workbench-router.service.mjs +2 -2
  54. package/esm2022/lib/view/view-move-handler.service.mjs +5 -5
  55. package/esm2022/lib/view/view.component.mjs +38 -25
  56. package/esm2022/lib/view/workbench-view-route-guards.mjs +2 -2
  57. package/esm2022/lib/view//311/265workbench-view.model.mjs +25 -19
  58. package/esm2022/lib/view-dnd/grid-drop-targets.util.mjs +2 -2
  59. package/esm2022/lib/workbench-config.mjs +1 -1
  60. package/esm2022/lib/workbench-id.mjs +3 -3
  61. package/esm2022/lib/workbench.component.mjs +2 -2
  62. package/esm2022/lib/workbench.constants.mjs +1 -5
  63. package/esm2022/lib/workbench.provider.mjs +3 -9
  64. package/fesm2022/scion-workbench.mjs +855 -326
  65. package/fesm2022/scion-workbench.mjs.map +1 -1
  66. package/lib/common/objects.util.d.ts +4 -0
  67. package/lib/common/uid.util.d.ts +9 -0
  68. package/lib/dialog//311/265workbench-dialog.d.ts +1 -1
  69. package/lib/filter-field/filter-field.component.d.ts +1 -1
  70. package/lib/layout/grid-element/grid-element.component.d.ts +1 -8
  71. package/lib/layout/migration/model/workbench-layout-migration-v5.model.d.ts +32 -0
  72. package/lib/layout/migration/workbench-layout-migration-v5.service.d.ts +12 -0
  73. package/lib/layout/stringifier.d.ts +26 -0
  74. package/lib/layout/workbench-layout.model.d.ts +3 -3
  75. package/lib/layout/workench-layout-serializer.service.d.ts +13 -15
  76. package/lib/layout//311/265workbench-layout.d.ts +3 -3
  77. package/lib/microfrontend-platform/common/microfrontend.util.d.ts +5 -1
  78. package/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.d.ts +7 -3
  79. package/lib/microfrontend-platform/manifest-object-cache.service.d.ts +33 -0
  80. package/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.d.ts +1 -1
  81. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.d.ts +10 -0
  82. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.d.ts +24 -0
  83. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.d.ts +20 -0
  84. package/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.d.ts +9 -0
  85. package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.d.ts +0 -4
  86. package/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.d.ts +0 -4
  87. package/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.d.ts +7 -2
  88. package/lib/microfrontend-platform/public_api.d.ts +1 -0
  89. package/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.d.ts +1 -1
  90. package/lib/microfrontend-platform/routing/microfrontend-view-routes.d.ts +9 -2
  91. package/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.d.ts +11 -0
  92. package/lib/perspective/workbench-perspective.model.d.ts +16 -17
  93. package/lib/perspective/workbench-perspective.service.d.ts +15 -7
  94. package/lib/perspective//311/265workbench-perspective.model.d.ts +4 -0
  95. package/lib/routing/public_api.d.ts +0 -1
  96. package/lib/routing/{workbench-auxiliary-routes-registrator.service.d.ts → workbench-auxiliary-route-installer.service.d.ts} +3 -3
  97. package/lib/routing/workbench-layout-differ.d.ts +1 -2
  98. package/lib/routing/workbench-url-observer.service.d.ts +5 -3
  99. package/lib/routing/workbench-view-outlet-differ.d.ts +32 -0
  100. package/lib/view/view.component.d.ts +8 -7
  101. package/lib/view//311/265workbench-view.model.d.ts +11 -7
  102. package/lib/workbench-config.d.ts +2 -2
  103. package/lib/workbench.constants.d.ts +0 -5
  104. package/package.json +3 -3
  105. package/esm2022/lib/common/uuid.util.mjs +0 -17
  106. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.mjs +0 -41
  107. package/esm2022/lib/routing/workbench-auxiliary-routes-registrator.service.mjs +0 -94
  108. package/lib/common/uuid.util.d.ts +0 -8
  109. package/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.d.ts +0 -10
@@ -9,10 +9,7 @@
9
9
  */
10
10
  import { Injectable } from '@angular/core';
11
11
  import { MessageHeaders } from '@scion/microfrontend-platform';
12
- import { map, switchMap } from 'rxjs/operators';
13
12
  import { ɵWorkbenchCommands } from '@scion/workbench-client';
14
- import { merge } from 'rxjs';
15
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
16
13
  import { MicrofrontendWorkbenchView } from './microfrontend-workbench-view.model';
17
14
  import * as i0 from "@angular/core";
18
15
  import * as i1 from "@scion/microfrontend-platform";
@@ -29,24 +26,12 @@ export class MicrofrontendViewCommandHandler {
29
26
  this._viewRegistry = _viewRegistry;
30
27
  this._logger = _logger;
31
28
  this._subscriptions = new Set();
32
- this.installViewActiveStatePublisher();
33
29
  this._subscriptions.add(this.installViewTitleCommandHandler());
34
30
  this._subscriptions.add(this.installViewHeadingCommandHandler());
35
31
  this._subscriptions.add(this.installViewDirtyCommandHandler());
36
32
  this._subscriptions.add(this.installViewClosableCommandHandler());
37
33
  this._subscriptions.add(this.installViewCloseCommandHandler());
38
34
  }
39
- /**
40
- * Notifies microfrontends about the active state of the embedding view.
41
- */
42
- installViewActiveStatePublisher() {
43
- this._viewRegistry.views$
44
- .pipe(switchMap(views => merge(...views.map(view => view.active$.pipe(map(() => view))))), takeUntilDestroyed())
45
- .subscribe((view) => {
46
- const commandTopic = ɵWorkbenchCommands.viewActiveTopic(view.id);
47
- this._messageClient.publish(commandTopic, view.active, { retain: true }).then();
48
- });
49
- }
50
35
  /**
51
36
  * Handles commands to update the title of a view.
52
37
  */
@@ -125,4 +110,4 @@ export class MicrofrontendViewCommandHandler {
125
110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCommandHandler, decorators: [{
126
111
  type: Injectable
127
112
  }], ctorParameters: () => [{ type: i1.MessageClient }, { type: i2.WorkbenchViewRegistry }, { type: i3.Logger }] });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LWNvbW1hbmQtaGFuZGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvbWljcm9mcm9udGVuZC1wbGF0Zm9ybS9taWNyb2Zyb250ZW5kLXZpZXcvbWljcm9mcm9udGVuZC12aWV3LWNvbW1hbmQtaGFuZGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQXlCLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBSXJGLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFDLEtBQUssRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7QUFFaEY7Ozs7R0FJRztBQUVILE1BQU0sT0FBTywrQkFBK0I7SUFJMUMsWUFBb0IsY0FBNkIsRUFDN0IsYUFBb0MsRUFDcEMsT0FBZTtRQUZmLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUF1QjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBSjNCLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUM7UUFLL0MsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFFdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQztRQUMvRCxJ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RSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsRUFBRSxVQUFVLENBQUMsUUFBUyxDQUFDLGVBQWUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM1RixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakIsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7OEdBNUdVLCtCQUErQjtrSEFBL0IsK0JBQStCOzsyRkFBL0IsK0JBQStCO2tCQUQzQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIyIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01lc3NhZ2UsIE1lc3NhZ2VDbGllbnQsIE1lc3NhZ2VIZWFkZXJzfSBmcm9tICdAc2Npb24vbWljcm9mcm9udGVuZC1wbGF0Zm9ybSc7XG5pbXBvcnQge0xvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2luZyc7XG5pbXBvcnQge1ZpZXdJZCwgV29ya2JlbmNoVmlld30gZnJvbSAnLi4vLi4vdmlldy93b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge1dvcmtiZW5jaFZpZXdSZWdpc3RyeX0gZnJvbSAnLi4vLi4vdmlldy93b3JrYmVuY2gtdmlldy5yZWdpc3RyeSc7XG5pbXBvcnQge21hcCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge8m1V29ya2JlbmNoQ29tbWFuZHN9IGZyb20gJ0BzY2lvbi93b3JrYmVuY2gtY2xpZW50JztcbmltcG9ydCB7bWVyZ2UsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlld30gZnJvbSAnLi9taWNyb2Zyb250ZW5kLXdvcmtiZW5jaC12aWV3Lm1vZGVsJztcblxuLyoqXG4gKiBIYW5kbGVzIGNvbW1hbmRzIG9mIG1pY3JvZnJvbnRlbmRzIGxvYWRlZCBpbnRvIHdvcmtiZW5jaCB2aWV3cywgc3VjaCBhcyBzZXR0aW5nIHZpZXcgdGFiIHByb3BlcnRpZXMgb3IgY2xvc2luZyB0aGUgdmlldy5cbiAqXG4gKiBUaGlzIGNsYXNzIGlzIGNvbnN0cnVjdGVkIGFmdGVyIGNvbm5lY3RlZCB0byB0aGUgU0NJT04gTWljcm9mcm9udGVuZCBQbGF0Zm9ybSB2aWEge0BsaW5rIE1JQ1JPRlJPTlRFTkRfUExBVEZPUk1fUE9TVF9TVEFSVFVQfSBESSB0b2tlbi5cbiAqL1xuQEluamVjdGFibGUoLyogRE8gTk9UIFBST1ZJREUgdmlhICdwcm92aWRlZEluJyBtZXRhZGF0YSBhcyByZWdpc3RlcmVkIHZpYSB3b3JrYmVuY2ggc3RhcnR1cCBob29rLiAqLylcbmV4cG9ydCBjbGFzcyBNaWNyb2Zyb250ZW5kVmlld0NvbW1hbmRIYW5kbGVyIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFNldDxTdWJzY3JpcHRpb24+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbWVzc2FnZUNsaWVudDogTWVzc2FnZUNsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdmlld1JlZ2lzdHJ5OiBXb3JrYmVuY2hWaWV3UmVnaXN0cnksXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvZ2dlcjogTG9nZ2VyKSB7XG4gICAgdGhpcy5pbnN0YWxsVmlld0FjdGl2ZVN0YXRlUHVibGlzaGVyKCk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmluc3RhbGxWaWV3VGl0bGVDb21tYW5kSGFuZGxlcigpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmluc3RhbGxWaWV3SGVhZGluZ0NvbW1hbmRIYW5kbGVyKCkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuaW5zdGFsbFZpZXdEaXJ0eUNvbW1hbmRIYW5kbGVyKCkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuaW5zdGFsbFZpZXdDbG9zYWJsZUNvbW1hbmRIYW5kbGVyKCkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuaW5zdGFsbFZpZXdDbG9zZUNvbW1hbmRIYW5kbGVyKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIG1pY3JvZnJvbnRlbmRzIGFib3V0IHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGVtYmVkZGluZyB2aWV3LlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsVmlld0FjdGl2ZVN0YXRlUHVibGlzaGVyKCk6IHZvaWQge1xuICAgIHRoaXMuX3ZpZXdSZWdpc3RyeS52aWV3cyRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodmlld3MgPT4gbWVyZ2UoLi4udmlld3MubWFwKHZpZXcgPT4gdmlldy5hY3RpdmUkLnBpcGUobWFwKCgpID0+IHZpZXcpKSkpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2aWV3OiBXb3JrYmVuY2hWaWV3KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRUb3BpYyA9IMm1V29ya2JlbmNoQ29tbWFuZHMudmlld0FjdGl2ZVRvcGljKHZpZXcuaWQpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goY29tbWFuZFRvcGljLCB2aWV3LmFjdGl2ZSwge3JldGFpbjogdHJ1ZX0pLnRoZW4oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY29tbWFuZHMgdG8gdXBkYXRlIHRoZSB0aXRsZSBvZiBhIHZpZXcuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxWaWV3VGl0bGVDb21tYW5kSGFuZGxlcigpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlQ2xpZW50Lm9uTWVzc2FnZSjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdUaXRsZVRvcGljKCc6dmlld0lkJyksIG1lc3NhZ2UgPT4ge1xuICAgICAgY29uc3Qgdmlld0lkID0gbWVzc2FnZS5wYXJhbXMhLmdldCgndmlld0lkJykgYXMgVmlld0lkO1xuICAgICAgdGhpcy5ydW5JZlByaXZpbGVnZWQodmlld0lkLCBtZXNzYWdlLCB2aWV3ID0+IHtcbiAgICAgICAgdmlldy50aXRsZSA9IG1lc3NhZ2UuYm9keTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY29tbWFuZHMgdG8gdXBkYXRlIHRoZSBoZWFkaW5nIG9mIGEgdmlldy5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbFZpZXdIZWFkaW5nQ29tbWFuZEhhbmRsZXIoKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUNsaWVudC5vbk1lc3NhZ2UoybVXb3JrYmVuY2hDb21tYW5kcy52aWV3SGVhZGluZ1RvcGljKCc6dmlld0lkJyksIG1lc3NhZ2UgPT4ge1xuICAgICAgY29uc3Qgdmlld0lkID0gbWVzc2FnZS5wYXJhbXMhLmdldCgndmlld0lkJykgYXMgVmlld0lkO1xuICAgICAgdGhpcy5ydW5JZlByaXZpbGVnZWQodmlld0lkLCBtZXNzYWdlLCB2aWV3ID0+IHtcbiAgICAgICAgdmlldy5oZWFkaW5nID0gbWVzc2FnZS5ib2R5O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjb21tYW5kcyB0byB1cGRhdGUgdGhlIGRpcnR5IHN0YXRlIG9mIGEgdmlldy5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbFZpZXdEaXJ0eUNvbW1hbmRIYW5kbGVyKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VDbGllbnQub25NZXNzYWdlKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld0RpcnR5VG9waWMoJzp2aWV3SWQnKSwgbWVzc2FnZSA9PiB7XG4gICAgICBjb25zdCB2aWV3SWQgPSBtZXNzYWdlLnBhcmFtcyEuZ2V0KCd2aWV3SWQnKSBhcyBWaWV3SWQ7XG4gICAgICB0aGlzLnJ1bklmUHJpdmlsZWdlZCh2aWV3SWQsIG1lc3NhZ2UsIHZpZXcgPT4ge1xuICAgICAgICB2aWV3LmRpcnR5ID0gbWVzc2FnZS5ib2R5O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjb21tYW5kcyB0byB1cGRhdGUgdGhlIGNsb3NhYmxlIHByb3BlcnR5IG9mIGEgdmlldy5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbFZpZXdDbG9zYWJsZUNvbW1hbmRIYW5kbGVyKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VDbGllbnQub25NZXNzYWdlKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld0Nsb3NhYmxlVG9waWMoJzp2aWV3SWQnKSwgbWVzc2FnZSA9PiB7XG4gICAgICBjb25zdCB2aWV3SWQgPSBtZXNzYWdlLnBhcmFtcyEuZ2V0KCd2aWV3SWQnKSBhcyBWaWV3SWQ7XG4gICAgICB0aGlzLnJ1bklmUHJpdmlsZWdlZCh2aWV3SWQsIG1lc3NhZ2UsIHZpZXcgPT4ge1xuICAgICAgICB2aWV3LmNsb3NhYmxlID0gbWVzc2FnZS5ib2R5O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjb21tYW5kcyB0byBjbG9zZSBhIHZpZXcuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxWaWV3Q2xvc2VDb21tYW5kSGFuZGxlcigpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlQ2xpZW50Lm9uTWVzc2FnZSjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdDbG9zZVRvcGljKCc6dmlld0lkJyksIG1lc3NhZ2UgPT4ge1xuICAgICAgY29uc3Qgdmlld0lkID0gbWVzc2FnZS5wYXJhbXMhLmdldCgndmlld0lkJykgYXMgVmlld0lkO1xuICAgICAgdGhpcy5ydW5JZlByaXZpbGVnZWQodmlld0lkLCBtZXNzYWdlLCB2aWV3ID0+IHtcbiAgICAgICAgdmlldy5jbG9zZSgpLnRoZW4oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIGdpdmVuIHJ1bm5hYmxlIG9ubHkgaWYgdGhlIG1pY3JvZnJvbnRlbmQgZGlzcGxheWVkIGluIHRoZSB2aWV3IGlzIGFjdHVhbGx5IHByb3ZpZGVkIGJ5IHRoZSBzZW5kZXIsXG4gICAqIHRodXMgcHJldmVudGluZyBvdGhlciBhcHBzIGZyb20gdXBkYXRpbmcgb3RoZXIgYXBwcycgdmlld3MuXG4gICAqL1xuICBwcml2YXRlIHJ1bklmUHJpdmlsZWdlZCh2aWV3SWQ6IFZpZXdJZCwgbWVzc2FnZTogTWVzc2FnZSwgcnVubmFibGU6ICh2aWV3OiBXb3JrYmVuY2hWaWV3KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgdmlldyA9IHRoaXMuX3ZpZXdSZWdpc3RyeS5nZXQodmlld0lkKTtcbiAgICBjb25zdCBzZW5kZXIgPSBtZXNzYWdlLmhlYWRlcnMuZ2V0KE1lc3NhZ2VIZWFkZXJzLkFwcFN5bWJvbGljTmFtZSk7XG4gICAgaWYgKHZpZXcuYWRhcHQoTWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXcpPy5jYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWUgPT09IHNlbmRlcikge1xuICAgICAgcnVubmFibGUodmlldyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1tOb3RQcml2aWxlZ2VkRXJyb3JdIE1pY3JvZnJvbnRlbmQgbm90IGFsbG93ZWQgdG8gdXBkYXRlIHZpZXdzIG9mIG90aGVyIGFwcHMuJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICB9XG59XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LWNvbW1hbmQtaGFuZGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvbWljcm9mcm9udGVuZC1wbGF0Zm9ybS9taWNyb2Zyb250ZW5kLXZpZXcvbWljcm9mcm9udGVuZC12aWV3LWNvbW1hbmQtaGFuZGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQXlCLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBSXJGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTNELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDOzs7OztBQUVoRjs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLCtCQUErQjtJQUkxQyxZQUFvQixjQUE2QixFQUM3QixhQUFvQyxFQUNwQyxPQUFlO1FBRmYsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQ3BDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFKM0IsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztRQUsvQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENB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QUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLE1BQWMsRUFBRSxPQUFnQixFQUFFLFFBQXVDO1FBQy9GLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsRUFBRSxVQUFVLENBQUMsUUFBUyxDQUFDLGVBQWUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM1RixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakIsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7OEdBM0ZVLCtCQUErQjtrSEFBL0IsK0JBQStCOzsyRkFBL0IsK0JBQStCO2tCQUQzQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIyIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01lc3NhZ2UsIE1lc3NhZ2VDbGllbnQsIE1lc3NhZ2VIZWFkZXJzfSBmcm9tICdAc2Npb24vbWljcm9mcm9udGVuZC1wbGF0Zm9ybSc7XG5pbXBvcnQge0xvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2luZyc7XG5pbXBvcnQge1ZpZXdJZCwgV29ya2JlbmNoVmlld30gZnJvbSAnLi4vLi4vdmlldy93b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge1dvcmtiZW5jaFZpZXdSZWdpc3RyeX0gZnJvbSAnLi4vLi4vdmlldy93b3JrYmVuY2gtdmlldy5yZWdpc3RyeSc7XG5pbXBvcnQge8m1V29ya2JlbmNoQ29tbWFuZHN9IGZyb20gJ0BzY2lvbi93b3JrYmVuY2gtY2xpZW50JztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXd9IGZyb20gJy4vbWljcm9mcm9udGVuZC13b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5cbi8qKlxuICogSGFuZGxlcyBjb21tYW5kcyBvZiBtaWNyb2Zyb250ZW5kcyBsb2FkZWQgaW50byB3b3JrYmVuY2ggdmlld3MsIHN1Y2ggYXMgc2V0dGluZyB2aWV3IHRhYiBwcm9wZXJ0aWVzIG9yIGNsb3NpbmcgdGhlIHZpZXcuXG4gKlxuICogVGhpcyBjbGFzcyBpcyBjb25zdHJ1Y3RlZCBhZnRlciBjb25uZWN0ZWQgdG8gdGhlIFNDSU9OIE1pY3JvZnJvbnRlbmQgUGxhdGZvcm0gdmlhIHtAbGluayBNSUNST0ZST05URU5EX1BMQVRGT1JNX1BPU1RfU1RBUlRVUH0gREkgdG9rZW4uXG4gKi9cbkBJbmplY3RhYmxlKC8qIERPIE5PVCBQUk9WSURFIHZpYSAncHJvdmlkZWRJbicgbWV0YWRhdGEgYXMgcmVnaXN0ZXJlZCB2aWEgd29ya2JlbmNoIHN0YXJ0dXAgaG9vay4gKi8pXG5leHBvcnQgY2xhc3MgTWljcm9mcm9udGVuZFZpZXdDb21tYW5kSGFuZGxlciBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTZXQ8U3Vic2NyaXB0aW9uPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21lc3NhZ2VDbGllbnQ6IE1lc3NhZ2VDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3ZpZXdSZWdpc3RyeTogV29ya2JlbmNoVmlld1JlZ2lzdHJ5LFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2dnZXI6IExvZ2dlcikge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuaW5zdGFsbFZpZXdUaXRsZUNvbW1hbmRIYW5kbGVyKCkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuaW5zdGFsbFZpZXdIZWFkaW5nQ29tbWFuZEhhbmRsZXIoKSk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5pbnN0YWxsVmlld0RpcnR5Q29tbWFuZEhhbmRsZXIoKSk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5pbnN0YWxsVmlld0Nsb3NhYmxlQ29tbWFuZEhhbmRsZXIoKSk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5pbnN0YWxsVmlld0Nsb3NlQ29tbWFuZEhhbmRsZXIoKSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjb21tYW5kcyB0byB1cGRhdGUgdGhlIHRpdGxlIG9mIGEgdmlldy5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbFZpZXdUaXRsZUNvbW1hbmRIYW5kbGVyKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VDbGllbnQub25NZXNzYWdlKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1RpdGxlVG9waWMoJzp2aWV3SWQnKSwgbWVzc2FnZSA9PiB7XG4gICAgICBjb25zdCB2aWV3SWQgPSBtZXNzYWdlLnBhcmFtcyEuZ2V0KCd2aWV3SWQnKSBhcyBWaWV3SWQ7XG4gICAgICB0aGlzLnJ1bklmUHJpdmlsZWdlZCh2aWV3SWQsIG1lc3NhZ2UsIHZpZXcgPT4ge1xuICAgICAgICB2aWV3LnRpdGxlID0gbWVzc2FnZS5ib2R5O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjb21tYW5kcyB0byB1cGRhdGUgdGhlIGhlYWRpbmcgb2YgYSB2aWV3LlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsVmlld0hlYWRpbmdDb21tYW5kSGFuZGxlcigpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlQ2xpZW50Lm9uTWVzc2FnZSjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdIZWFkaW5nVG9waWMoJzp2aWV3SWQnKSwgbWVzc2FnZSA9PiB7XG4gICAgICBjb25zdCB2aWV3SWQgPSBtZXNzYWdlLnBhcmFtcyEuZ2V0KCd2aWV3SWQnKSBhcyBWaWV3SWQ7XG4gICAgICB0aGlzLnJ1bklmUHJpdmlsZWdlZCh2aWV3SWQsIG1lc3NhZ2UsIHZpZXcgPT4ge1xuICAgICAgICB2aWV3LmhlYWRpbmcgPSBtZXNzYWdlLmJvZHk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNvbW1hbmRzIHRvIHVwZGF0ZSB0aGUgZGlydHkgc3RhdGUgb2YgYSB2aWV3LlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsVmlld0RpcnR5Q29tbWFuZEhhbmRsZXIoKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUNsaWVudC5vbk1lc3NhZ2UoybVXb3JrYmVuY2hDb21tYW5kcy52aWV3RGlydHlUb3BpYygnOnZpZXdJZCcpLCBtZXNzYWdlID0+IHtcbiAgICAgIGNvbnN0IHZpZXdJZCA9IG1lc3NhZ2UucGFyYW1zIS5nZXQoJ3ZpZXdJZCcpIGFzIFZpZXdJZDtcbiAgICAgIHRoaXMucnVuSWZQcml2aWxlZ2VkKHZpZXdJZCwgbWVzc2FnZSwgdmlldyA9PiB7XG4gICAgICAgIHZpZXcuZGlydHkgPSBtZXNzYWdlLmJvZHk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNvbW1hbmRzIHRvIHVwZGF0ZSB0aGUgY2xvc2FibGUgcHJvcGVydHkgb2YgYSB2aWV3LlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsVmlld0Nsb3NhYmxlQ29tbWFuZEhhbmRsZXIoKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUNsaWVudC5vbk1lc3NhZ2UoybVXb3JrYmVuY2hDb21tYW5kcy52aWV3Q2xvc2FibGVUb3BpYygnOnZpZXdJZCcpLCBtZXNzYWdlID0+IHtcbiAgICAgIGNvbnN0IHZpZXdJZCA9IG1lc3NhZ2UucGFyYW1zIS5nZXQoJ3ZpZXdJZCcpIGFzIFZpZXdJZDtcbiAgICAgIHRoaXMucnVuSWZQcml2aWxlZ2VkKHZpZXdJZCwgbWVzc2FnZSwgdmlldyA9PiB7XG4gICAgICAgIHZpZXcuY2xvc2FibGUgPSBtZXNzYWdlLmJvZHk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNvbW1hbmRzIHRvIGNsb3NlIGEgdmlldy5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbFZpZXdDbG9zZUNvbW1hbmRIYW5kbGVyKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VDbGllbnQub25NZXNzYWdlKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld0Nsb3NlVG9waWMoJzp2aWV3SWQnKSwgbWVzc2FnZSA9PiB7XG4gICAgICBjb25zdCB2aWV3SWQgPSBtZXNzYWdlLnBhcmFtcyEuZ2V0KCd2aWV3SWQnKSBhcyBWaWV3SWQ7XG4gICAgICB0aGlzLnJ1bklmUHJpdmlsZWdlZCh2aWV3SWQsIG1lc3NhZ2UsIHZpZXcgPT4ge1xuICAgICAgICB2aWV3LmNsb3NlKCkudGhlbigpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgZ2l2ZW4gcnVubmFibGUgb25seSBpZiB0aGUgbWljcm9mcm9udGVuZCBkaXNwbGF5ZWQgaW4gdGhlIHZpZXcgaXMgYWN0dWFsbHkgcHJvdmlkZWQgYnkgdGhlIHNlbmRlcixcbiAgICogdGh1cyBwcmV2ZW50aW5nIG90aGVyIGFwcHMgZnJvbSB1cGRhdGluZyBvdGhlciBhcHBzJyB2aWV3cy5cbiAgICovXG4gIHByaXZhdGUgcnVuSWZQcml2aWxlZ2VkKHZpZXdJZDogVmlld0lkLCBtZXNzYWdlOiBNZXNzYWdlLCBydW5uYWJsZTogKHZpZXc6IFdvcmtiZW5jaFZpZXcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB2aWV3ID0gdGhpcy5fdmlld1JlZ2lzdHJ5LmdldCh2aWV3SWQpO1xuICAgIGNvbnN0IHNlbmRlciA9IG1lc3NhZ2UuaGVhZGVycy5nZXQoTWVzc2FnZUhlYWRlcnMuQXBwU3ltYm9saWNOYW1lKTtcbiAgICBpZiAodmlldy5hZGFwdChNaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldyk/LmNhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZSA9PT0gc2VuZGVyKSB7XG4gICAgICBydW5uYWJsZSh2aWV3KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignW05vdFByaXZpbGVnZWRFcnJvcl0gTWljcm9mcm9udGVuZCBub3QgYWxsb3dlZCB0byB1cGRhdGUgdmlld3Mgb2Ygb3RoZXIgYXBwcy4nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gIH1cbn1cbiJdfQ==
@@ -32,21 +32,23 @@ import { WorkbenchView } from '../../view/workbench-view.model';
32
32
  import * as i0 from "@angular/core";
33
33
  import * as i1 from "@angular/router";
34
34
  import * as i2 from "@scion/microfrontend-platform";
35
- import * as i3 from "../../logging";
36
- import * as i4 from "../../part/view-context-menu/view-menu.service";
37
- import * as i5 from "../../layout/workbench-layout.service";
38
- import * as i6 from "../../routing/workbench-router.service";
39
- import * as i7 from "../../view/\u0275workbench-view.model";
40
- import * as i8 from "../../content-projection/view-container.reference";
35
+ import * as i3 from "../manifest-object-cache.service";
36
+ import * as i4 from "../../logging";
37
+ import * as i5 from "../../part/view-context-menu/view-menu.service";
38
+ import * as i6 from "../../layout/workbench-layout.service";
39
+ import * as i7 from "../../routing/workbench-router.service";
40
+ import * as i8 from "../../view/\u0275workbench-view.model";
41
+ import * as i9 from "../../content-projection/view-container.reference";
41
42
  /**
42
43
  * Embeds the microfrontend of a view capability.
43
44
  */
44
45
  export class MicrofrontendViewComponent {
45
- constructor(_host, _route, _outletRouter, _manifestService, _messageClient, _destroyRef, _logger, _viewContextMenuService, _workbenchLayoutService, _workbenchRouter, _injector, _cd, view, iframeHostRef) {
46
+ constructor(_host, _route, _outletRouter, _manifestService, _manifestObjectCache, _messageClient, _destroyRef, _logger, _viewContextMenuService, _workbenchLayoutService, _workbenchRouter, _injector, _cd, view, iframeHostRef) {
46
47
  this._host = _host;
47
48
  this._route = _route;
48
49
  this._outletRouter = _outletRouter;
49
50
  this._manifestService = _manifestService;
51
+ this._manifestObjectCache = _manifestObjectCache;
50
52
  this._messageClient = _messageClient;
51
53
  this._destroyRef = _destroyRef;
52
54
  this._logger = _logger;
@@ -61,6 +63,7 @@ export class MicrofrontendViewComponent {
61
63
  this._universalKeystrokes = [
62
64
  'keydown.escape', // allows closing notifications
63
65
  ];
66
+ this.capability = null;
64
67
  /**
65
68
  * Indicates whether a workbench drag operation is in progress, such as when dragging a view or moving a sash.
66
69
  */
@@ -69,6 +72,8 @@ export class MicrofrontendViewComponent {
69
72
  this.keystrokesToBubble$ = combineLatest([this.viewContextMenuKeystrokes$(), of(this._universalKeystrokes)])
70
73
  .pipe(map(keystrokes => new Array().concat(...keystrokes)));
71
74
  this.installWorkbenchDragDetector();
75
+ this.installViewActivePublisher();
76
+ this.installPartIdPublisher();
72
77
  this.splash = inject(MicrofrontendPlatformConfig).splash ?? MicrofrontendSplashComponent;
73
78
  }
74
79
  ngOnInit() {
@@ -85,7 +90,7 @@ export class MicrofrontendViewComponent {
85
90
  async onNavigate(prevCapability, capability, params) {
86
91
  if (!capability) {
87
92
  this._logger.warn(() => `[NullCapabilityError] No application found to provide a view capability of id '${params[ɵMicrofrontendRouteParams.ɵVIEW_CAPABILITY_ID]}'. Maybe, the requested view is not public API or the providing application not available.`, LoggerNames.MICROFRONTEND_ROUTING);
88
- await this.view.close();
93
+ this.unload();
89
94
  return;
90
95
  }
91
96
  this.capability = capability;
@@ -109,7 +114,7 @@ export class MicrofrontendViewComponent {
109
114
  await this.waitForCapabilityParam(capability.metadata.id);
110
115
  }
111
116
  // Navigate to the microfrontend.
112
- const application = this._manifestService.applications.find(app => app.symbolicName === capability.metadata.appSymbolicName);
117
+ const application = this._manifestService.getApplication(capability.metadata.appSymbolicName);
113
118
  this._logger.debug(() => `Loading microfrontend into workbench view [viewId=${this.view.id}, app=${capability.metadata.appSymbolicName}, baseUrl=${application.baseUrl}, path=${(capability.properties.path)}].`, LoggerNames.MICROFRONTEND_ROUTING, params, capability);
114
119
  await this._outletRouter.navigate(capability.properties.path, {
115
120
  outlet: this.view.id,
@@ -119,14 +124,14 @@ export class MicrofrontendViewComponent {
119
124
  showSplash: capability.properties.showSplash,
120
125
  ɵcapabilityId: capability.metadata.id,
121
126
  });
122
- // Inactive views are detached from the Angular change detection tree.
123
- // Therefore, manually detect this component for changes for updating attributes on the `sci-router-outlet`.
127
+ // Inactive views are not checked for changes since detached from the Angular component tree.
128
+ // So, we manually trigger change detection to update attributes on the `sci-router-outlet`.
124
129
  if (!this.view.active) {
125
130
  this._cd.detectChanges();
126
131
  }
127
132
  }
128
133
  fetchCapability$(capabilityId) {
129
- return this._manifestService.lookupCapabilities$({ id: capabilityId }).pipe(map(capabilities => capabilities.at(0)));
134
+ return this._manifestObjectCache.observeCapability$(capabilityId);
130
135
  }
131
136
  installMenuItemAccelerators$() {
132
137
  // Since the iframe is added at a top-level location in the DOM, that is, not as a child element of this component,
@@ -181,6 +186,22 @@ export class MicrofrontendViewComponent {
181
186
  this.view.closable = viewCapability.properties.closable ?? true;
182
187
  this.view.dirty = false;
183
188
  }
189
+ installViewActivePublisher() {
190
+ this.view.active$
191
+ .pipe(takeUntilDestroyed())
192
+ .subscribe(active => {
193
+ const commandTopic = ɵWorkbenchCommands.viewActiveTopic(this.view.id);
194
+ this._messageClient.publish(commandTopic, active, { retain: true }).then();
195
+ });
196
+ }
197
+ installPartIdPublisher() {
198
+ this.view.partId$
199
+ .pipe(takeUntilDestroyed())
200
+ .subscribe(partId => {
201
+ const commandTopic = ɵWorkbenchCommands.viewPartIdTopic(this.view.id);
202
+ this._messageClient.publish(commandTopic, partId, { retain: true }).then();
203
+ });
204
+ }
184
205
  /**
185
206
  * Promise that resolves once params contain the given capability id.
186
207
  */
@@ -241,14 +262,18 @@ export class MicrofrontendViewComponent {
241
262
  propagateWorkbenchTheme() {
242
263
  runInInjectionContext(this._injector, () => Microfrontends.propagateTheme(this.routerOutletElement.nativeElement));
243
264
  }
244
- ngOnDestroy() {
245
- // Instruct the message broker to delete retained messages to free resources.
265
+ unload() {
266
+ // Delete retained messages to free resources.
246
267
  this._messageClient.publish(ɵWorkbenchCommands.viewActiveTopic(this.view.id), undefined, { retain: true }).then();
247
268
  this._messageClient.publish(ɵWorkbenchCommands.viewParamsTopic(this.view.id), undefined, { retain: true }).then();
269
+ this._messageClient.publish(ɵWorkbenchCommands.viewPartIdTopic(this.view.id), undefined, { retain: true }).then();
248
270
  this._outletRouter.navigate(null, { outlet: this.view.id }).then();
249
271
  this.view.unregisterAdapter(MicrofrontendWorkbenchView);
250
272
  }
251
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewComponent, deps: [{ token: i0.ElementRef }, { token: i1.ActivatedRoute }, { token: i2.OutletRouter }, { token: i2.ManifestService }, { token: i2.MessageClient }, { token: i0.DestroyRef }, { token: i3.Logger }, { token: i4.ViewMenuService }, { token: i5.WorkbenchLayoutService }, { token: i6.WorkbenchRouter }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i7.ɵWorkbenchView }, { token: IFRAME_HOST }], target: i0.ɵɵFactoryTarget.Component }); }
273
+ ngOnDestroy() {
274
+ this.unload();
275
+ }
276
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewComponent, deps: [{ token: i0.ElementRef }, { token: i1.ActivatedRoute }, { token: i2.OutletRouter }, { token: i2.ManifestService }, { token: i3.ManifestObjectCache }, { token: i2.MessageClient }, { token: i0.DestroyRef }, { token: i4.Logger }, { token: i5.ViewMenuService }, { token: i6.WorkbenchLayoutService }, { token: i7.WorkbenchRouter }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i8.ɵWorkbenchView }, { token: IFRAME_HOST }], target: i0.ɵɵFactoryTarget.Component }); }
252
277
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: MicrofrontendViewComponent, isStandalone: true, selector: "wb-microfrontend-view", viewQueries: [{ propertyName: "routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, static: true }], ngImport: i0, template: "<wb-content-as-overlay [overlayHost]=\"iframeHostRef.ref$ | async\">\n <div class=\"microfrontend-view\"\n [class.workbench-drag]=\"isWorkbenchDrag\"\n [attr.data-viewid]=\"view.id\"\n wbGlassPane>\n <sci-router-outlet #router_outlet\n [name]=\"view.id\"\n [attr.data-capabilityid]=\"capability?.metadata!.id\"\n [attr.data-app]=\"capability?.metadata!.appSymbolicName\"\n [ngClass]=\"view.classList.value\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble$ | async\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n </sci-router-outlet>\n </div>\n</wb-content-as-overlay>\n", styles: [":host{display:grid}div.microfrontend-view{display:grid}div.microfrontend-view.workbench-drag{pointer-events:none}div.microfrontend-view>sci-router-outlet::part(splash){display:grid}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ContentAsOverlayComponent, selector: "wb-content-as-overlay", inputs: ["overlayHost"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
253
278
  configureMicrofrontendGlassPane(),
254
279
  ] }); }
@@ -264,7 +289,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
264
289
  ], viewProviders: [
265
290
  configureMicrofrontendGlassPane(),
266
291
  ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<wb-content-as-overlay [overlayHost]=\"iframeHostRef.ref$ | async\">\n <div class=\"microfrontend-view\"\n [class.workbench-drag]=\"isWorkbenchDrag\"\n [attr.data-viewid]=\"view.id\"\n wbGlassPane>\n <sci-router-outlet #router_outlet\n [name]=\"view.id\"\n [attr.data-capabilityid]=\"capability?.metadata!.id\"\n [attr.data-app]=\"capability?.metadata!.appSymbolicName\"\n [ngClass]=\"view.classList.value\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble$ | async\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n </sci-router-outlet>\n </div>\n</wb-content-as-overlay>\n", styles: [":host{display:grid}div.microfrontend-view{display:grid}div.microfrontend-view.workbench-drag{pointer-events:none}div.microfrontend-view>sci-router-outlet::part(splash){display:grid}\n"] }]
267
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.ActivatedRoute }, { type: i2.OutletRouter }, { type: i2.ManifestService }, { type: i2.MessageClient }, { type: i0.DestroyRef }, { type: i3.Logger }, { type: i4.ViewMenuService }, { type: i5.WorkbenchLayoutService }, { type: i6.WorkbenchRouter }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i7.ɵWorkbenchView }, { type: i8.ViewContainerReference, decorators: [{
292
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.ActivatedRoute }, { type: i2.OutletRouter }, { type: i2.ManifestService }, { type: i3.ManifestObjectCache }, { type: i2.MessageClient }, { type: i0.DestroyRef }, { type: i4.Logger }, { type: i5.ViewMenuService }, { type: i6.WorkbenchLayoutService }, { type: i7.WorkbenchRouter }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i8.ɵWorkbenchView }, { type: i9.ViewContainerReference, decorators: [{
268
293
  type: Inject,
269
294
  args: [IFRAME_HOST]
270
295
  }] }], propDecorators: { routerOutletElement: [{
@@ -286,4 +311,4 @@ function configureMicrofrontendGlassPane() {
286
311
  },
287
312
  ];
288
313
  }
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vbWljcm9mcm9udGVuZC12aWV3L21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtL21pY3JvZnJvbnRlbmQtdmlldy9taWNyb2Zyb250ZW5kLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQW9CLFNBQVMsRUFBRSxzQkFBc0IsRUFBMEIsTUFBTSxFQUFFLE1BQU0sRUFBeUMscUJBQXFCLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXBNLE9BQU8sRUFBQyxhQUFhLEVBQUUsY0FBYyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBa0IsU0FBUyxFQUFpQixjQUFjLEVBQUUsMkJBQTJCLEVBQWdCLG1CQUFtQixFQUF1QyxNQUFNLCtCQUErQixDQUFDO0FBQzlNLE9BQU8sRUFBMEIseUJBQXlCLEVBQUUsb0JBQW9CLEVBQTRCLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDL0osT0FBTyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQVMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBQyxXQUFXLEVBQXlCLE1B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LENBQUM7UUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzFELENBQUM7OEdBcFFVLDBCQUEwQiw2WUF3Q2pCLFdBQVc7a0dBeENwQiwwQkFBMEIscU5DM0R2QyxneEJBZ0JBLGlQRGdDSSxPQUFPLCtFQUNQLFNBQVMsOENBQ1QseUJBQXlCLDJGQUN6QixpQkFBaUIsb1BBQ2pCLGtCQUFrQiwrQ0FFTDtZQUNiLCtCQUErQixFQUFFO1NBQ2xDOzsyRkFHVSwwQkFBMEI7a0JBakJ0QyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxTQUFTO3dCQUNULHlCQUF5Qjt3QkFDekIsaUJBQWlCO3dCQUNqQixrQkFBa0I7cUJBQ25CLGlCQUNjO3dCQUNiLCtCQUErQixFQUFFO3FCQUNsQyxXQUNRLENBQUMsc0JBQXNCLENBQUM7OzBCQTBDcEIsTUFBTTsyQkFBQyxXQUFXO3lDQXpCeEIsbUJBQW1CO3NCQUR6QixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7O0FBeVA1Qzs7R0FFRztBQUNILFNBQVMsK0JBQStCO0lBQ3RDLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSxvQkFBb0I7WUFDN0IsV0FBVyxFQUFFLGNBQWM7U0FDNUI7UUFDRDtZQUNFLE9BQU8sRUFBRSxrQkFBa0I7WUFDM0IsVUFBVSxFQUFFLEdBQXFCLEVBQUUsQ0FBQyxDQUFDLEVBQUMsVUFBVSxFQUFFLEVBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBQyxDQUFDO1NBQzlGO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjIgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUHJvdmlkZXIsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaXJzdCwgbWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TWFuaWZlc3RTZXJ2aWNlLCBtYXBUb0JvZHksIE1lc3NhZ2VDbGllbnQsIE1lc3NhZ2VIZWFkZXJzLCBNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWcsIE91dGxldFJvdXRlciwgUmVzcG9uc2VTdGF0dXNDb2RlcywgU2NpUm91dGVyT3V0bGV0RWxlbWVudCwgVG9waWNNZXNzYWdlfSBmcm9tICdAc2Npb24vbWljcm9mcm9udGVuZC1wbGF0Zm9ybSc7XG5pbXBvcnQge1dvcmtiZW5jaFZpZXdDYXBhYmlsaXR5LCDJtU1pY3JvZnJvbnRlbmRSb3V0ZVBhcmFtcywgybVWSUVXX0lEX0NPTlRFWFRfS0VZLCDJtVZpZXdQYXJhbXNVcGRhdGVDb21tYW5kLCDJtVdvcmtiZW5jaENvbW1hbmRzfSBmcm9tICdAc2Npb24vd29ya2JlbmNoLWNsaWVudCc7XG5pbXBvcnQge0RpY3Rpb25hcmllcywgTWFwc30gZnJvbSAnQHNjaW9uL3Rvb2xraXQvdXRpbCc7XG5pbXBvcnQge0xvZ2dlciwgTG9nZ2VyTmFtZXN9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHtDYW5DbG9zZX0gZnJvbSAnLi4vLi4vd29ya2JlbmNoLm1vZGVsJztcbmltcG9ydCB7SUZSQU1FX0hPU1QsIFZpZXdDb250YWluZXJSZWZlcmVuY2V9IGZyb20gJy4uLy4uL2NvbnRlbnQtcHJvamVjdGlvbi92aWV3LWNvbnRhaW5lci5yZWZlcmVuY2UnO1xuaW1wb3J0IHtzZXJpYWxpemVFeGVjdXRpb259IGZyb20gJy4uLy4uL2NvbW1vbi9vcGVyYXRvcnMnO1xuaW1wb3J0IHvJtVdvcmtiZW5jaFZpZXd9IGZyb20gJy4uLy4uL3ZpZXcvybV3b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge2ZpbHRlckFycmF5LCBtYXBBcnJheX0gZnJvbSAnQHNjaW9uL3Rvb2xraXQvb3BlcmF0b3JzJztcbmltcG9ydCB7Vmlld01lbnVTZXJ2aWNlfSBmcm9tICcuLi8uLi9wYXJ0L3ZpZXctY29udGV4dC1tZW51L3ZpZXctbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7V29ya2JlbmNoUm91dGVyfSBmcm9tICcuLi8uLi9yb3V0aW5nL3dvcmtiZW5jaC1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQge3N0cmluZ2lmeUVycm9yfSBmcm9tICcuLi8uLi9jb21tb24vc3RyaW5naWZ5LWVycm9yLnV0aWwnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kVmlld1JvdXRlc30gZnJvbSAnLi4vcm91dGluZy9taWNyb2Zyb250ZW5kLXZpZXctcm91dGVzJztcbmltcG9ydCB7QXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ0NvbXBvbmVudE91dGxldH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q29udGVudEFzT3ZlcmxheUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vY29udGVudC1wcm9qZWN0aW9uL2NvbnRlbnQtYXMtb3ZlcmxheS5jb21wb25lbnQnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7V29ya2JlbmNoTGF5b3V0U2VydmljZX0gZnJvbSAnLi4vLi4vbGF5b3V0L3dvcmtiZW5jaC1sYXlvdXQuc2VydmljZSc7XG5pbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kU3BsYXNoQ29tcG9uZW50fSBmcm9tICcuLi9taWNyb2Zyb250ZW5kLXNwbGFzaC9taWNyb2Zyb250ZW5kLXNwbGFzaC5jb21wb25lbnQnO1xuaW1wb3J0IHtHTEFTU19QQU5FX0JMT0NLQUJMRSwgR0xBU1NfUEFORV9PUFRJT05TLCBHbGFzc1BhbmVEaXJlY3RpdmUsIEdsYXNzUGFuZU9wdGlvbnN9IGZyb20gJy4uLy4uL2dsYXNzLXBhbmUvZ2xhc3MtcGFuZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlld30gZnJvbSAnLi9taWNyb2Zyb250ZW5kLXdvcmtiZW5jaC12aWV3Lm1vZGVsJztcbmltcG9ydCB7TWljcm9mcm9udGVuZHN9IGZyb20gJy4uL2NvbW1vbi9taWNyb2Zyb250ZW5kLnV0aWwnO1xuaW1wb3J0IHtPYmplY3RzfSBmcm9tICcuLi8uLi9jb21tb24vb2JqZWN0cy51dGlsJztcbmltcG9ydCB7V29ya2JlbmNoVmlld30gZnJvbSAnLi4vLi4vdmlldy93b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5cbi8qKlxuICogRW1iZWRzIHRoZSBtaWNyb2Zyb250ZW5kIG9mIGEgdmlldyBjYXBhYmlsaXR5LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3Yi1taWNyb2Zyb250ZW5kLXZpZXcnLFxuICBzdHlsZVVybHM6IFsnLi9taWNyb2Zyb250ZW5kLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIEFzeW5jUGlwZSxcbiAgICBDb250ZW50QXNPdmVybGF5Q29tcG9uZW50LFxuICAgIE5nQ29tcG9uZW50T3V0bGV0LFxuICAgIEdsYXNzUGFuZURpcmVjdGl2ZSxcbiAgXSxcbiAgdmlld1Byb3ZpZGVyczogW1xuICAgIGNvbmZpZ3VyZU1pY3JvZnJvbnRlbmRHbGFzc1BhbmUoKSxcbiAgXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLCAvLyByZXF1aXJlZCBiZWNhdXNlIDxzY2ktcm91dGVyLW91dGxldD4gaXMgYSBjdXN0b20gZWxlbWVudFxufSlcbmV4cG9ydCBjbGFzcyBNaWNyb2Zyb250ZW5kVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDYW5DbG9zZSB7XG5cbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVQYXJhbXNVcGRhdGVyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX3VuaXZlcnNhbEtleXN0cm9rZXMgPSBbXG4gICAgJ2tleWRvd24uZXNjYXBlJywgLy8gYWxsb3dzIGNsb3Npbmcgbm90aWZpY2F0aW9uc1xuICBdO1xuXG4gIHByb3RlY3RlZCBjYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BsYXNoIHRvIGRpc3BsYXkgdW50aWwgdGhlIG1pY3JvZnJvbnRlbmQgc2lnbmFscyByZWFkaW5lc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3BsYXNoOiBDb21wb25lbnRUeXBlPHVua25vd24+O1xuXG4gIEBWaWV3Q2hpbGQoJ3JvdXRlcl9vdXRsZXQnLCB7c3RhdGljOiB0cnVlfSlcbiAgcHVibGljIHJvdXRlck91dGxldEVsZW1lbnQhOiBFbGVtZW50UmVmPFNjaVJvdXRlck91dGxldEVsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBLZXlzdHJva2VzIHdoaWNoIHRvIGJ1YmJsZSBhY3Jvc3MgaWZyYW1lIGJvdW5kYXJpZXMgb2YgZW1iZWRkZWQgY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBrZXlzdHJva2VzVG9CdWJibGUkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYSB3b3JrYmVuY2ggZHJhZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MsIHN1Y2ggYXMgd2hlbiBkcmFnZ2luZyBhIHZpZXcgb3IgbW92aW5nIGEgc2FzaC5cbiAgICovXG4gIHB1YmxpYyBpc1dvcmtiZW5jaERyYWcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9ob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9vdXRsZXRSb3V0ZXI6IE91dGxldFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbWFuaWZlc3RTZXJ2aWNlOiBNYW5pZmVzdFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21lc3NhZ2VDbGllbnQ6IE1lc3NhZ2VDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Rlc3Ryb3lSZWY6IERlc3Ryb3lSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvZ2dlcjogTG9nZ2VyLFxuICAgICAgICAgICAgICBwcml2YXRlIF92aWV3Q29udGV4dE1lbnVTZXJ2aWNlOiBWaWV3TWVudVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3dvcmtiZW5jaExheW91dFNlcnZpY2U6IFdvcmtiZW5jaExheW91dFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3dvcmtiZW5jaFJvdXRlcjogV29ya2JlbmNoUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHVibGljIHZpZXc6IMm1V29ya2JlbmNoVmlldyxcbiAgICAgICAgICAgICAgQEluamVjdChJRlJBTUVfSE9TVCkgcHJvdGVjdGVkIGlmcmFtZUhvc3RSZWY6IFZpZXdDb250YWluZXJSZWZlcmVuY2UpIHtcbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gYENvbnN0cnVjdGluZyBNaWNyb2Zyb250ZW5kVmlld0NvbXBvbmVudC4gW3ZpZXdJZD0ke3RoaXMudmlldy5pZH1dYCwgTG9nZ2VyTmFtZXMuTUlDUk9GUk9OVEVORF9ST1VUSU5HKTtcbiAgICB0aGlzLmtleXN0cm9rZXNUb0J1YmJsZSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnZpZXdDb250ZXh0TWVudUtleXN0cm9rZXMkKCksIG9mKHRoaXMuX3VuaXZlcnNhbEtleXN0cm9rZXMpXSlcbiAgICAgIC5waXBlKG1hcChrZXlzdHJva2VzID0+IG5ldyBBcnJheTxzdHJpbmc+KCkuY29uY2F0KC4uLmtleXN0cm9rZXMpKSk7XG4gICAgdGhpcy5pbnN0YWxsV29ya2JlbmNoRHJhZ0RldGVjdG9yKCk7XG4gICAgdGhpcy5zcGxhc2ggPSBpbmplY3QoTWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnKS5zcGxhc2ggPz8gTWljcm9mcm9udGVuZFNwbGFzaENvbXBvbmVudDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlck91dGxldEVsZW1lbnQubmF0aXZlRWxlbWVudC5zZXRDb250ZXh0VmFsdWUoybVWSUVXX0lEX0NPTlRFWFRfS0VZLCB0aGlzLnZpZXcuaWQpO1xuICAgIHRoaXMucHJvcGFnYXRlV29ya2JlbmNoVGhlbWUoKTtcbiAgICB0aGlzLmluc3RhbGxNZW51SXRlbUFjY2VsZXJhdG9ycyQoKTtcbiAgICB0aGlzLmluc3RhbGxOYXZpZ2F0b3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zdGFsbE5hdmlnYXRvcigpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3V0ZS5wYXJhbXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAocGFyYW1zID0+IHRoaXMuZmV0Y2hDYXBhYmlsaXR5JChwYXJhbXNbybVNaWNyb2Zyb250ZW5kUm91dGVQYXJhbXMuybVWSUVXX0NBUEFCSUxJVFlfSURdKS5waXBlKG1hcChjYXBhYmlsaXR5ID0+ICh7Y2FwYWJpbGl0eSwgcGFyYW1zfSkpKSksXG4gICAgICAgIHNlcmlhbGl6ZUV4ZWN1dGlvbigoe2NhcGFiaWxpdHksIHBhcmFtc30pID0+IHRoaXMub25OYXZpZ2F0ZSh0aGlzLmNhcGFiaWxpdHksIGNhcGFiaWxpdHksIHBhcmFtcykpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uTmF2aWdhdGUocHJldkNhcGFiaWxpdHk6IFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5IHwgdW5kZWZpbmVkLCBjYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSB8IHVuZGVmaW5lZCwgcGFyYW1zOiBQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWNhcGFiaWxpdHkpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCgpID0+IGBbTnVsbENhcGFiaWxpdHlFcnJvcl0gTm8gYXBwbGljYXRpb24gZm91bmQgdG8gcHJvdmlkZSBhIHZpZXcgY2FwYWJpbGl0eSBvZiBpZCAnJHtwYXJhbXNbybVNaWNyb2Zyb250ZW5kUm91dGVQYXJhbXMuybVWSUVXX0NBUEFCSUxJVFlfSURdfScuIE1heWJlLCB0aGUgcmVxdWVzdGVkIHZpZXcgaXMgbm90IHB1YmxpYyBBUEkgb3IgdGhlIHByb3ZpZGluZyBhcHBsaWNhdGlvbiBub3QgYXZhaWxhYmxlLmAsIExvZ2dlck5hbWVzLk1JQ1JPRlJPTlRFTkRfUk9VVElORyk7XG4gICAgICBhd2FpdCB0aGlzLnZpZXcuY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhcGFiaWxpdHkgPSBjYXBhYmlsaXR5O1xuICAgIHRoaXMudmlldy5yZWdpc3RlckFkYXB0ZXIoTWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXcsIG5ldyBNaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldyhjYXBhYmlsaXR5LCBwYXJhbXMpKTtcblxuICAgIC8vIENoZWNrIGlmIG5hdmlnYXRpbmcgdG8gYSBuZXcgbWljcm9mcm9udGVuZC5cbiAgICBpZiAoIXByZXZDYXBhYmlsaXR5IHx8IHByZXZDYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCAhPT0gY2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQpIHtcbiAgICAgIHRoaXMuc2V0Vmlld1Byb3BlcnRpZXMoY2FwYWJpbGl0eSwgcGFyYW1zKTtcbiAgICAgIHRoaXMuaW5zdGFsbFBhcmFtc1VwZGF0ZXIoY2FwYWJpbGl0eSk7XG4gICAgfVxuXG4gICAgLy8gU2lnbmFsIHRoZSBjdXJyZW50bHkgbG9hZGVkIGFwcGxpY2F0aW9uIHRvIHVubG9hZC5cbiAgICBpZiAocHJldkNhcGFiaWxpdHkgJiYgcHJldkNhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZSAhPT0gY2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lKSB7XG4gICAgICBhd2FpdCB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goybVXb3JrYmVuY2hDb21tYW5kcy52aWV3VW5sb2FkaW5nVG9waWModGhpcy52aWV3LmlkKSk7XG4gICAgfVxuXG4gICAgLy8gUGFzcyBwYXJhbWV0ZXJzIHRvIHRoZSBtaWNyb2Zyb250ZW5kLlxuICAgIGF3YWl0IHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdQYXJhbXNUb3BpYyh0aGlzLnZpZXcuaWQpLCBNYXBzLmNvZXJjZShwYXJhbXMpLCB7cmV0YWluOiB0cnVlfSk7XG5cbiAgICAvLyBXaGVuIG5hdmlnYXRpbmcgdG8gYW5vdGhlciB2aWV3IGNhcGFiaWxpdHkgb2YgdGhlIHNhbWUgYXBwLCB3YWl0IHVudGlsIHRyYW5zcG9ydGVkIHRoZSBwYXJhbXMgdG8gdGhlIG1pY3JvZnJvbnRlbmQgYmVmb3JlIGxvYWRpbmcgdGhlXG4gICAgLy8gbmV3IG1pY3JvZnJvbnRlbmQgaW50byB0aGUgaWZyYW1lLCBhbGxvd2luZyB0aGUgY3VycmVudGx5IGxvYWRlZCBtaWNyb2Zyb250ZW5kIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMuXG4gICAgaWYgKHByZXZDYXBhYmlsaXR5XG4gICAgICAmJiBwcmV2Q2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lID09PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWVcbiAgICAgICYmIHByZXZDYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCAhPT0gY2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQpIHtcbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvckNhcGFiaWxpdHlQYXJhbShjYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCk7XG4gICAgfVxuXG4gICAgLy8gTmF2aWdhdGUgdG8gdGhlIG1pY3JvZnJvbnRlbmQuXG4gICAgY29uc3QgYXBwbGljYXRpb24gPSB0aGlzLl9tYW5pZmVzdFNlcnZpY2UuYXBwbGljYXRpb25zLmZpbmQoYXBwID0+IGFwcC5zeW1ib2xpY05hbWUgPT09IGNhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZSkhO1xuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgTG9hZGluZyBtaWNyb2Zyb250ZW5kIGludG8gd29ya2JlbmNoIHZpZXcgW3ZpZXdJZD0ke3RoaXMudmlldy5pZH0sIGFwcD0ke2NhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZX0sIGJhc2VVcmw9JHthcHBsaWNhdGlvbi5iYXNlVXJsfSwgcGF0aD0keyhjYXBhYmlsaXR5LnByb3BlcnRpZXMucGF0aCl9XS5gLCBMb2dnZXJOYW1lcy5NSUNST0ZST05URU5EX1JPVVRJTkcsIHBhcmFtcywgY2FwYWJpbGl0eSk7XG4gICAgYXdhaXQgdGhpcy5fb3V0bGV0Um91dGVyLm5hdmlnYXRlKGNhcGFiaWxpdHkucHJvcGVydGllcy5wYXRoLCB7XG4gICAgICBvdXRsZXQ6IHRoaXMudmlldy5pZCxcbiAgICAgIHJlbGF0aXZlVG86IGFwcGxpY2F0aW9uLmJhc2VVcmwsXG4gICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIHB1c2hTdGF0ZVRvU2Vzc2lvbkhpc3RvcnlTdGFjazogZmFsc2UsXG4gICAgICBzaG93U3BsYXNoOiBjYXBhYmlsaXR5LnByb3BlcnRpZXMuc2hvd1NwbGFzaCxcbiAgICAgIMm1Y2FwYWJpbGl0eUlkOiBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCxcbiAgICB9KTtcblxuICAgIC8vIEluYWN0aXZlIHZpZXdzIGFyZSBkZXRhY2hlZCBmcm9tIHRoZSBBbmd1bGFyIGNoYW5nZSBkZXRlY3Rpb24gdHJlZS5cbiAgICAvLyBUaGVyZWZvcmUsIG1hbnVhbGx5IGRldGVjdCB0aGlzIGNvbXBvbmVudCBmb3IgY2hhbmdlcyBmb3IgdXBkYXRpbmcgYXR0cmlidXRlcyBvbiB0aGUgYHNjaS1yb3V0ZXItb3V0bGV0YC5cbiAgICBpZiAoIXRoaXMudmlldy5hY3RpdmUpIHtcbiAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoQ2FwYWJpbGl0eSQoY2FwYWJpbGl0eUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX21hbmlmZXN0U2VydmljZS5sb29rdXBDYXBhYmlsaXRpZXMkPFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5Pih7aWQ6IGNhcGFiaWxpdHlJZH0pLnBpcGUobWFwKGNhcGFiaWxpdGllcyA9PiBjYXBhYmlsaXRpZXMuYXQoMCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zdGFsbE1lbnVJdGVtQWNjZWxlcmF0b3JzJCgpOiB2b2lkIHtcbiAgICAvLyBTaW5jZSB0aGUgaWZyYW1lIGlzIGFkZGVkIGF0IGEgdG9wLWxldmVsIGxvY2F0aW9uIGluIHRoZSBET00sIHRoYXQgaXMsIG5vdCBhcyBhIGNoaWxkIGVsZW1lbnQgb2YgdGhpcyBjb21wb25lbnQsXG4gICAgLy8gdGhlIHdvcmtiZW5jaCB2aWV3IG1pc3NlcyBrZXlib2FyZCBldmVudHMgZnJvbSBlbWJlZGRlZCBjb250ZW50LiBBcyBhIHJlc3VsdCwgbWVudSBpdGVtIGFjY2VsZXJhdG9ycyBvZiB0aGUgY29udGV4dFxuICAgIC8vIG1lbnUgb2YgdGhpcyB2aWV3IGRvIG5vdCB3b3JrLCBzbyB3ZSBpbnN0YWxsIHRoZSBhY2NlbGVyYXRvcnMgb24gdGhlIHJvdXRlciBvdXRsZXQgYXMgd2VsbC5cbiAgICB0aGlzLl92aWV3Q29udGV4dE1lbnVTZXJ2aWNlLmluc3RhbGxNZW51SXRlbUFjY2VsZXJhdG9ycyQodGhpcy5yb3V0ZXJPdXRsZXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRoaXMudmlldylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIHJlcXVlc3RzIGZyb20gdGhlIGN1cnJlbnRseSBsb2FkZWQgbWljcm9mcm9udGVuZCB0byB1cGRhdGUgaXRzIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxQYXJhbXNVcGRhdGVyKHZpZXdDYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSk6IHZvaWQge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlUGFyYW1zVXBkYXRlciQubmV4dCgpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX21lc3NhZ2VDbGllbnQub2JzZXJ2ZSQ8ybVWaWV3UGFyYW1zVXBkYXRlQ29tbWFuZD4oybVXb3JrYmVuY2hDb21tYW5kcy52aWV3UGFyYW1zVXBkYXRlVG9waWModGhpcy52aWV3LmlkLCB2aWV3Q2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQpKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlUGFyYW1zVXBkYXRlciQpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChyZXF1ZXN0OiBUb3BpY01lc3NhZ2U8ybVWaWV3UGFyYW1zVXBkYXRlQ29tbWFuZD4pID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByeGpzL25vLWFzeW5jLXN1YnNjcmliZVxuICAgICAgICAvLyBXZSBETyBOT1QgbmF2aWdhdGUgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YXMgY2xvc2VkLCBlLmcuLCBiZWNhdXNlIGNsb3NlZCB0aGUgdmlldyBvciBuYXZpZ2F0ZWQgdG8gYW5vdGhlciBjYXBhYmlsaXR5LlxuICAgICAgICBjb25zdCByZXBseVRvID0gcmVxdWVzdC5oZWFkZXJzLmdldChNZXNzYWdlSGVhZGVycy5SZXBseVRvKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLl93b3JrYmVuY2hSb3V0ZXIubmF2aWdhdGUobGF5b3V0ID0+IHtcbiAgICAgICAgICAgIC8vIENhbmNlbCBwZW5kaW5nIG5hdmlnYXRpb24gaWYgdGhlIHN1YnNjcmlwdGlvbiB3YXMgY2xvc2VkLCBlLmcuLCBiZWNhdXNlIGNsb3NlZCB0aGUgdmlldyBvciBuYXZpZ2F0ZWQgdG8gYW5vdGhlciBjYXBhYmlsaXR5XG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyYW1zSGFuZGxpbmcgPSByZXF1ZXN0LmJvZHkhLnBhcmFtc0hhbmRsaW5nO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhcmFtcyA9IHRoaXMuX3JvdXRlLnNuYXBzaG90LnBhcmFtcztcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IERpY3Rpb25hcmllcy5jb2VyY2UocmVxdWVzdC5ib2R5IS5wYXJhbXMpOyAvLyBjb2VyY2UgcGFyYW1zIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICBjb25zdCBtZXJnZWRQYXJhbXMgPSBPYmplY3RzLndpdGhvdXRVbmRlZmluZWRFbnRyaWVzKHBhcmFtc0hhbmRsaW5nID09PSAnbWVyZ2UnID8gey4uLmN1cnJlbnRQYXJhbXMsIC4uLm5ld1BhcmFtc30gOiBuZXdQYXJhbXMpO1xuICAgICAgICAgICAgY29uc3Qge3VybFBhcmFtcywgdHJhbnNpZW50UGFyYW1zfSA9IE1pY3JvZnJvbnRlbmRWaWV3Um91dGVzLnNwbGl0UGFyYW1zKG1lcmdlZFBhcmFtcywgdmlld0NhcGFiaWxpdHkpO1xuXG4gICAgICAgICAgICByZXR1cm4gbGF5b3V0Lm5hdmlnYXRlVmlldyh0aGlzLnZpZXcuaWQsIFt1cmxQYXJhbXNdLCB7XG4gICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX3JvdXRlLFxuICAgICAgICAgICAgICBzdGF0ZTogT2JqZWN0cy53aXRob3V0VW5kZWZpbmVkRW50cmllcyh7XG4gICAgICAgICAgICAgICAgW01pY3JvZnJvbnRlbmRWaWV3Um91dGVzLlNUQVRFX1RSQU5TSUVOVF9QQVJBTVNdOiB0cmFuc2llbnRQYXJhbXMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhd2FpdCB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2gocmVwbHlUbywgc3VjY2Vzcywge2hlYWRlcnM6IG5ldyBNYXAoKS5zZXQoTWVzc2FnZUhlYWRlcnMuU3RhdHVzLCBSZXNwb25zZVN0YXR1c0NvZGVzLlRFUk1JTkFMKX0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaChyZXBseVRvLCBzdHJpbmdpZnlFcnJvcihlcnJvciksIHtoZWFkZXJzOiBuZXcgTWFwKCkuc2V0KE1lc3NhZ2VIZWFkZXJzLlN0YXR1cywgUmVzcG9uc2VTdGF0dXNDb2Rlcy5FUlJPUil9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcHJvcGVydGllcyBvZiB0aGlzIHZpZXcsIHN1Y2ggYXMgdGhlIHZpZXcgdGl0bGUsIGFzIGRlZmluZWQgYnkgdGhlIGNhcGFiaWxpdHkuXG4gICAqL1xuICBwcml2YXRlIHNldFZpZXdQcm9wZXJ0aWVzKHZpZXdDYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSwgcGFyYW1zOiBQYXJhbXMpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXcudGl0bGUgPSBNaWNyb2Zyb250ZW5kcy5zdWJzdGl0dXRlTmFtZWRQYXJhbWV0ZXJzKHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMudGl0bGUsIE1hcHMuY29lcmNlKHBhcmFtcykpID8/IG51bGw7XG4gICAgdGhpcy52aWV3LmhlYWRpbmcgPSBNaWNyb2Zyb250ZW5kcy5zdWJzdGl0dXRlTmFtZWRQYXJhbWV0ZXJzKHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMuaGVhZGluZywgTWFwcy5jb2VyY2UocGFyYW1zKSkgPz8gbnVsbDtcbiAgICB0aGlzLnZpZXcuY2xhc3NMaXN0LnNldCh2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzLmNzc0NsYXNzLCB7c2NvcGU6ICdhcHBsaWNhdGlvbid9KTtcbiAgICB0aGlzLnZpZXcuY2xvc2FibGUgPSB2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzLmNsb3NhYmxlID8/IHRydWU7XG4gICAgdGhpcy52aWV3LmRpcnR5ID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgcGFyYW1zIGNvbnRhaW4gdGhlIGdpdmVuIGNhcGFiaWxpdHkgaWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JDYXBhYmlsaXR5UGFyYW0odmlld0NhcGFiaWxpdHlJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgdmlld1BhcmFtcyQgPSB0aGlzLl9tZXNzYWdlQ2xpZW50Lm9ic2VydmUkPE1hcDxzdHJpbmcsIHN0cmluZz4+KMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcmFtc1RvcGljKHRoaXMudmlldy5pZCkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwVG9Cb2R5KCksXG4gICAgICAgIGZpcnN0KHBhcmFtcyA9PiBwYXJhbXMuZ2V0KMm1TWljcm9mcm9udGVuZFJvdXRlUGFyYW1zLsm1VklFV19DQVBBQklMSVRZX0lEKSA9PT0gdmlld0NhcGFiaWxpdHlJZCksXG4gICAgICApO1xuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHZpZXdQYXJhbXMkKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgYXN5bmMgY2FuQ2xvc2UoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY2FuQ2xvc2VUb3BpYyA9IMm1V29ya2JlbmNoQ29tbWFuZHMuY2FuQ2xvc2VUb3BpYyh0aGlzLnZpZXcuaWQpO1xuICAgIGNvbnN0IGxlZ2FjeUNhbkNsb3NlVG9waWMgPSDJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdDbG9zaW5nVG9waWModGhpcy52aWV3LmlkKTtcblxuICAgIC8vIEluaXRpYXRlIGEgcmVxdWVzdC1yZXNwb25zZSBjb21tdW5pY2F0aW9uIG9ubHkgaWYgdGhlIGVtYmVkZGVkIG1pY3JvZnJvbnRlbmQgaW1wbGVtZW50cyBgQ2FuQ2xvc2VgIGd1YXJkLlxuICAgIGNvbnN0IGhhc0NhbkNsb3NlR3VhcmQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9tZXNzYWdlQ2xpZW50LnN1YnNjcmliZXJDb3VudCQoY2FuQ2xvc2VUb3BpYykpID4gMDtcbiAgICBjb25zdCBoYXNMZWdhY3lDYW5DbG9zZUd1YXJkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fbWVzc2FnZUNsaWVudC5zdWJzY3JpYmVyQ291bnQkKGxlZ2FjeUNhbkNsb3NlVG9waWMpKSA+IDA7XG4gICAgaWYgKCFoYXNDYW5DbG9zZUd1YXJkICYmICFoYXNMZWdhY3lDYW5DbG9zZUd1YXJkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuX21lc3NhZ2VDbGllbnQucmVxdWVzdCQ8Ym9vbGVhbj4oaGFzQ2FuQ2xvc2VHdWFyZCA/IGNhbkNsb3NlVG9waWMgOiBsZWdhY3lDYW5DbG9zZVRvcGljKS5waXBlKG1hcFRvQm9keSgpKSwge2RlZmF1bHRWYWx1ZTogdHJ1ZX0pO1xuICB9XG5cbiAgcHVibGljIG9uRm9jdXNXaXRoaW4oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qge2RldGFpbDogZm9jdXNXaXRoaW59ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8Ym9vbGVhbj47XG4gICAgaWYgKGZvY3VzV2l0aGluKSB7XG4gICAgICB0aGlzLl9ob3N0Lm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3NjaS1taWNyb2Zyb250ZW5kLWZvY3VzaW4nLCB7YnViYmxlczogdHJ1ZX0pKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBvbiBzdWJzY3JpcHRpb24sIGVtaXRzIHRoZSBrZXlzdHJva2VzIHJlZ2lzdGVyZWQgd2l0aCBtZW51IGl0ZW1zIG9mIHRoaXMgdmlldydzIGNvbnRleHQgbWVudSxcbiAgICogYW5kIHRoZW4gY29udGludW91c2x5IHdoZW4gdGhleSBjaGFuZ2UuIFRoZSBvYnNlcnZhYmxlIG5ldmVyIGNvbXBsZXRlcy5cbiAgICovXG4gIHByaXZhdGUgdmlld0NvbnRleHRNZW51S2V5c3Ryb2tlcyQoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnZpZXcubWVudUl0ZW1zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlckFycmF5KG1lbnVJdGVtID0+ICEhbWVudUl0ZW0uYWNjZWxlcmF0b3IpLFxuICAgICAgICBtYXBBcnJheShtZW51SXRlbSA9PiBtZW51SXRlbS5hY2NlbGVyYXRvciEubWFwKGFjY2VsZXJhdG9yID0+IHtcbiAgICAgICAgICAvLyBOb3JtYWxpemUga2V5c3Ryb2tlcyBhY2NvcmRpbmcgdG8gYFNjaVJvdXRlck91dGxldEVsZW1lbnQja2V5c3Ryb2tlc2BcbiAgICAgICAgICBzd2l0Y2ggKGFjY2VsZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlICdjdHJsJzpcbiAgICAgICAgICAgICAgcmV0dXJuICdjb250cm9sJztcbiAgICAgICAgICAgIGNhc2UgJy4nOlxuICAgICAgICAgICAgICByZXR1cm4gJ2RvdCc7XG4gICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgcmV0dXJuICdzcGFjZSc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gYWNjZWxlcmF0b3I7XG4gICAgICAgICAgfVxuICAgICAgICB9KSksXG4gICAgICAgIG1hcEFycmF5KGFjY2VsZXJhdG9yID0+IFsna2V5ZG93biddLmNvbmNhdChhY2NlbGVyYXRvcikuam9pbignLicpKSxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUge0BsaW5rIGlzV29ya2JlbmNoRHJhZ30gcHJvcGVydHkgd2hlbiBhIHdvcmtiZW5jaCBkcmFnIG9wZXJhdGlvbiBpcyBkZXRlY3RlZCxcbiAgICogc3VjaCBhcyB3aGVuIGRyYWdnaW5nIGEgdmlldyBvciBtb3ZpbmcgYSBzYXNoLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsV29ya2JlbmNoRHJhZ0RldGVjdG9yKCk6IHZvaWQge1xuICAgIHRoaXMuX3dvcmtiZW5jaExheW91dFNlcnZpY2UuZHJhZ2dpbmckXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICB0aGlzLmlzV29ya2JlbmNoRHJhZyA9IChldmVudCA9PT0gJ3N0YXJ0Jyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvcGFnYXRlV29ya2JlbmNoVGhlbWUoKTogdm9pZCB7XG4gICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuX2luamVjdG9yLCAoKSA9PiBNaWNyb2Zyb250ZW5kcy5wcm9wYWdhdGVUaGVtZSh0aGlzLnJvdXRlck91dGxldEVsZW1lbnQubmF0aXZlRWxlbWVudCkpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIEluc3RydWN0IHRoZSBtZXNzYWdlIGJyb2tlciB0byBkZWxldGUgcmV0YWluZWQgbWVzc2FnZXMgdG8gZnJlZSByZXNvdXJjZXMuXG4gICAgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld0FjdGl2ZVRvcGljKHRoaXMudmlldy5pZCksIHVuZGVmaW5lZCwge3JldGFpbjogdHJ1ZX0pLnRoZW4oKTtcbiAgICB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goybVXb3JrYmVuY2hDb21tYW5kcy52aWV3UGFyYW1zVG9waWModGhpcy52aWV3LmlkKSwgdW5kZWZpbmVkLCB7cmV0YWluOiB0cnVlfSkudGhlbigpO1xuICAgIHRoaXMuX291dGxldFJvdXRlci5uYXZpZ2F0ZShudWxsLCB7b3V0bGV0OiB0aGlzLnZpZXcuaWR9KS50aGVuKCk7XG4gICAgdGhpcy52aWV3LnVucmVnaXN0ZXJBZGFwdGVyKE1pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3KTtcbiAgfVxufVxuXG4vKipcbiAqIEJsb2NrcyB0aGUgbWljcm9mcm9udGVuZCBvdXRsZXQgd2hlbiBkaWFsb2cocykgb3ZlcmxheSB0aGlzIHZpZXcuXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZU1pY3JvZnJvbnRlbmRHbGFzc1BhbmUoKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogR0xBU1NfUEFORV9CTE9DS0FCTEUsXG4gICAgICB1c2VFeGlzdGluZzogybVXb3JrYmVuY2hWaWV3LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogR0xBU1NfUEFORV9PUFRJT05TLFxuICAgICAgdXNlRmFjdG9yeTogKCk6IEdsYXNzUGFuZU9wdGlvbnMgPT4gKHthdHRyaWJ1dGVzOiB7J2RhdGEtdmlld2lkJzogaW5qZWN0KFdvcmtiZW5jaFZpZXcpLmlkfX0pLFxuICAgIH0sXG4gIF07XG59XG4iLCI8d2ItY29udGVudC1hcy1vdmVybGF5IFtvdmVybGF5SG9zdF09XCJpZnJhbWVIb3N0UmVmLnJlZiQgfCBhc3luY1wiPlxuICA8ZGl2IGNsYXNzPVwibWljcm9mcm9udGVuZC12aWV3XCJcbiAgICAgICBbY2xhc3Mud29ya2JlbmNoLWRyYWddPVwiaXNXb3JrYmVuY2hEcmFnXCJcbiAgICAgICBbYXR0ci5kYXRhLXZpZXdpZF09XCJ2aWV3LmlkXCJcbiAgICAgICB3YkdsYXNzUGFuZT5cbiAgICA8c2NpLXJvdXRlci1vdXRsZXQgI3JvdXRlcl9vdXRsZXRcbiAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwidmlldy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY2FwYWJpbGl0eWlkXT1cImNhcGFiaWxpdHk/Lm1ldGFkYXRhIS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXBwXT1cImNhcGFiaWxpdHk/Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ2aWV3LmNsYXNzTGlzdC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIChmb2N1c3dpdGhpbik9XCJvbkZvY3VzV2l0aGluKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICBba2V5c3Ryb2tlc109XCJrZXlzdHJva2VzVG9CdWJibGUkIHwgYXN5bmNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwic3BsYXNoXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zY2ktcm91dGVyLW91dGxldD5cbiAgPC9kaXY+XG48L3diLWNvbnRlbnQtYXMtb3ZlcmxheT5cbiJdfQ==
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vbWljcm9mcm9udGVuZC12aWV3L21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtL21pY3JvZnJvbnRlbmQtdmlldy9taWNyb2Zyb250ZW5kLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQW9CLFNBQVMsRUFBRSxzQkFBc0IsRUFBMEIsTUFBTSxFQUFFLE1BQU0sRUFBeUMscUJBQXFCLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXBNLE9BQU8sRUFBQyxhQUFhLEVBQUUsY0FBYyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBa0IsU0FBUyxFQUFpQixjQUFjLEVBQUUsMkJBQTJCLEVBQWdCLG1CQUFtQixFQUF1QyxNQUFNLCtCQUErQixDQUFDO0FBRTlNLE9BQU8sRUFBMEIseUJBQXlCLEVBQUUsb0JBQW9CLEVBQTRCLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDL0osT0FBTyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQVMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBQyxXQUFXLEVBQXlCLE1B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QXlDakIsV0FBVztrR0F6Q3BCLDBCQUEwQixxTkM1RHZDLGd4QkFnQkEsaVBEaUNJLE9BQU8sK0VBQ1AsU0FBUyw4Q0FDVCx5QkFBeUIsMkZBQ3pCLGlCQUFpQixvUEFDakIsa0JBQWtCLCtDQUVMO1lBQ2IsK0JBQStCLEVBQUU7U0FDbEM7OzJGQUdVLDBCQUEwQjtrQkFqQnRDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUksV0FDUDt3QkFDUCxPQUFPO3dCQUNQLFNBQVM7d0JBQ1QseUJBQXlCO3dCQUN6QixpQkFBaUI7d0JBQ2pCLGtCQUFrQjtxQkFDbkIsaUJBQ2M7d0JBQ2IsK0JBQStCLEVBQUU7cUJBQ2xDLFdBQ1EsQ0FBQyxzQkFBc0IsQ0FBQzs7MEJBMkNwQixNQUFNOzJCQUFDLFdBQVc7eUNBMUJ4QixtQkFBbUI7c0JBRHpCLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzs7QUFtUjVDOztHQUVHO0FBQ0gsU0FBUywrQkFBK0I7SUFDdEMsT0FBTztRQUNMO1lBQ0UsT0FBTyxFQUFFLG9CQUFvQjtZQUM3QixXQUFXLEVBQUUsY0FBYztTQUM1QjtRQUNEO1lBQ0UsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixVQUFVLEVBQUUsR0FBcUIsRUFBRSxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUUsRUFBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFDLENBQUM7U0FDOUY7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBpbmplY3QsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBQcm92aWRlciwgcnVuSW5JbmplY3Rpb25Db250ZXh0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpcnN0LCBtYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtNYW5pZmVzdFNlcnZpY2UsIG1hcFRvQm9keSwgTWVzc2FnZUNsaWVudCwgTWVzc2FnZUhlYWRlcnMsIE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZywgT3V0bGV0Um91dGVyLCBSZXNwb25zZVN0YXR1c0NvZGVzLCBTY2lSb3V0ZXJPdXRsZXRFbGVtZW50LCBUb3BpY01lc3NhZ2V9IGZyb20gJ0BzY2lvbi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtJztcbmltcG9ydCB7TWFuaWZlc3RPYmplY3RDYWNoZX0gZnJvbSAnLi4vbWFuaWZlc3Qtb2JqZWN0LWNhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHtXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSwgybVNaWNyb2Zyb250ZW5kUm91dGVQYXJhbXMsIMm1VklFV19JRF9DT05URVhUX0tFWSwgybVWaWV3UGFyYW1zVXBkYXRlQ29tbWFuZCwgybVXb3JrYmVuY2hDb21tYW5kc30gZnJvbSAnQHNjaW9uL3dvcmtiZW5jaC1jbGllbnQnO1xuaW1wb3J0IHtEaWN0aW9uYXJpZXMsIE1hcHN9IGZyb20gJ0BzY2lvbi90b29sa2l0L3V0aWwnO1xuaW1wb3J0IHtMb2dnZXIsIExvZ2dlck5hbWVzfSBmcm9tICcuLi8uLi9sb2dnaW5nJztcbmltcG9ydCB7Q2FuQ2xvc2V9IGZyb20gJy4uLy4uL3dvcmtiZW5jaC5tb2RlbCc7XG5pbXBvcnQge0lGUkFNRV9IT1NULCBWaWV3Q29udGFpbmVyUmVmZXJlbmNlfSBmcm9tICcuLi8uLi9jb250ZW50LXByb2plY3Rpb24vdmlldy1jb250YWluZXIucmVmZXJlbmNlJztcbmltcG9ydCB7c2VyaWFsaXplRXhlY3V0aW9ufSBmcm9tICcuLi8uLi9jb21tb24vb3BlcmF0b3JzJztcbmltcG9ydCB7ybVXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi8uLi92aWV3L8m1d29ya2JlbmNoLXZpZXcubW9kZWwnO1xuaW1wb3J0IHtmaWx0ZXJBcnJheSwgbWFwQXJyYXl9IGZyb20gJ0BzY2lvbi90b29sa2l0L29wZXJhdG9ycyc7XG5pbXBvcnQge1ZpZXdNZW51U2VydmljZX0gZnJvbSAnLi4vLi4vcGFydC92aWV3LWNvbnRleHQtbWVudS92aWV3LW1lbnUuc2VydmljZSc7XG5pbXBvcnQge1dvcmtiZW5jaFJvdXRlcn0gZnJvbSAnLi4vLi4vcm91dGluZy93b3JrYmVuY2gtcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtzdHJpbmdpZnlFcnJvcn0gZnJvbSAnLi4vLi4vY29tbW9uL3N0cmluZ2lmeS1lcnJvci51dGlsJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFZpZXdSb3V0ZXN9IGZyb20gJy4uL3JvdXRpbmcvbWljcm9mcm9udGVuZC12aWV3LXJvdXRlcyc7XG5pbXBvcnQge0FzeW5jUGlwZSwgTmdDbGFzcywgTmdDb21wb25lbnRPdXRsZXR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NvbnRlbnRBc092ZXJsYXlDb21wb25lbnR9IGZyb20gJy4uLy4uL2NvbnRlbnQtcHJvamVjdGlvbi9jb250ZW50LWFzLW92ZXJsYXkuY29tcG9uZW50JztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1dvcmtiZW5jaExheW91dFNlcnZpY2V9IGZyb20gJy4uLy4uL2xheW91dC93b3JrYmVuY2gtbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFNwbGFzaENvbXBvbmVudH0gZnJvbSAnLi4vbWljcm9mcm9udGVuZC1zcGxhc2gvbWljcm9mcm9udGVuZC1zcGxhc2guY29tcG9uZW50JztcbmltcG9ydCB7R0xBU1NfUEFORV9CTE9DS0FCTEUsIEdMQVNTX1BBTkVfT1BUSU9OUywgR2xhc3NQYW5lRGlyZWN0aXZlLCBHbGFzc1BhbmVPcHRpb25zfSBmcm9tICcuLi8uLi9nbGFzcy1wYW5lL2dsYXNzLXBhbmUuZGlyZWN0aXZlJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXd9IGZyb20gJy4vbWljcm9mcm9udGVuZC13b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRzfSBmcm9tICcuLi9jb21tb24vbWljcm9mcm9udGVuZC51dGlsJztcbmltcG9ydCB7T2JqZWN0c30gZnJvbSAnLi4vLi4vY29tbW9uL29iamVjdHMudXRpbCc7XG5pbXBvcnQge1dvcmtiZW5jaFZpZXd9IGZyb20gJy4uLy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcubW9kZWwnO1xuXG4vKipcbiAqIEVtYmVkcyB0aGUgbWljcm9mcm9udGVuZCBvZiBhIHZpZXcgY2FwYWJpbGl0eS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2ItbWljcm9mcm9udGVuZC12aWV3JyxcbiAgc3R5bGVVcmxzOiBbJy4vbWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9taWNyb2Zyb250ZW5kLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBBc3luY1BpcGUsXG4gICAgQ29udGVudEFzT3ZlcmxheUNvbXBvbmVudCxcbiAgICBOZ0NvbXBvbmVudE91dGxldCxcbiAgICBHbGFzc1BhbmVEaXJlY3RpdmUsXG4gIF0sXG4gIHZpZXdQcm92aWRlcnM6IFtcbiAgICBjb25maWd1cmVNaWNyb2Zyb250ZW5kR2xhc3NQYW5lKCksXG4gIF0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSwgLy8gcmVxdWlyZWQgYmVjYXVzZSA8c2NpLXJvdXRlci1vdXRsZXQ+IGlzIGEgY3VzdG9tIGVsZW1lbnRcbn0pXG5leHBvcnQgY2xhc3MgTWljcm9mcm9udGVuZFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ2FuQ2xvc2Uge1xuXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlUGFyYW1zVXBkYXRlciQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF91bml2ZXJzYWxLZXlzdHJva2VzID0gW1xuICAgICdrZXlkb3duLmVzY2FwZScsIC8vIGFsbG93cyBjbG9zaW5nIG5vdGlmaWNhdGlvbnNcbiAgXTtcblxuICBwcm90ZWN0ZWQgY2FwYWJpbGl0eTogV29ya2JlbmNoVmlld0NhcGFiaWxpdHkgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU3BsYXNoIHRvIGRpc3BsYXkgdW50aWwgdGhlIG1pY3JvZnJvbnRlbmQgc2lnbmFscyByZWFkaW5lc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3BsYXNoOiBDb21wb25lbnRUeXBlPHVua25vd24+O1xuXG4gIEBWaWV3Q2hpbGQoJ3JvdXRlcl9vdXRsZXQnLCB7c3RhdGljOiB0cnVlfSlcbiAgcHVibGljIHJvdXRlck91dGxldEVsZW1lbnQhOiBFbGVtZW50UmVmPFNjaVJvdXRlck91dGxldEVsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBLZXlzdHJva2VzIHdoaWNoIHRvIGJ1YmJsZSBhY3Jvc3MgaWZyYW1lIGJvdW5kYXJpZXMgb2YgZW1iZWRkZWQgY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBrZXlzdHJva2VzVG9CdWJibGUkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYSB3b3JrYmVuY2ggZHJhZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MsIHN1Y2ggYXMgd2hlbiBkcmFnZ2luZyBhIHZpZXcgb3IgbW92aW5nIGEgc2FzaC5cbiAgICovXG4gIHB1YmxpYyBpc1dvcmtiZW5jaERyYWcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9ob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9vdXRsZXRSb3V0ZXI6IE91dGxldFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbWFuaWZlc3RTZXJ2aWNlOiBNYW5pZmVzdFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21hbmlmZXN0T2JqZWN0Q2FjaGU6IE1hbmlmZXN0T2JqZWN0Q2FjaGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21lc3NhZ2VDbGllbnQ6IE1lc3NhZ2VDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Rlc3Ryb3lSZWY6IERlc3Ryb3lSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvZ2dlcjogTG9nZ2VyLFxuICAgICAgICAgICAgICBwcml2YXRlIF92aWV3Q29udGV4dE1lbnVTZXJ2aWNlOiBWaWV3TWVudVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3dvcmtiZW5jaExheW91dFNlcnZpY2U6IFdvcmtiZW5jaExheW91dFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3dvcmtiZW5jaFJvdXRlcjogV29ya2JlbmNoUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHVibGljIHZpZXc6IMm1V29ya2JlbmNoVmlldyxcbiAgICAgICAgICAgICAgQEluamVjdChJRlJBTUVfSE9TVCkgcHJvdGVjdGVkIGlmcmFtZUhvc3RSZWY6IFZpZXdDb250YWluZXJSZWZlcmVuY2UpIHtcbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gYENvbnN0cnVjdGluZyBNaWNyb2Zyb250ZW5kVmlld0NvbXBvbmVudC4gW3ZpZXdJZD0ke3RoaXMudmlldy5pZH1dYCwgTG9nZ2VyTmFtZXMuTUlDUk9GUk9OVEVORF9ST1VUSU5HKTtcbiAgICB0aGlzLmtleXN0cm9rZXNUb0J1YmJsZSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnZpZXdDb250ZXh0TWVudUtleXN0cm9rZXMkKCksIG9mKHRoaXMuX3VuaXZlcnNhbEtleXN0cm9rZXMpXSlcbiAgICAgIC5waXBlKG1hcChrZXlzdHJva2VzID0+IG5ldyBBcnJheTxzdHJpbmc+KCkuY29uY2F0KC4uLmtleXN0cm9rZXMpKSk7XG4gICAgdGhpcy5pbnN0YWxsV29ya2JlbmNoRHJhZ0RldGVjdG9yKCk7XG4gICAgdGhpcy5pbnN0YWxsVmlld0FjdGl2ZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5zdGFsbFBhcnRJZFB1Ymxpc2hlcigpO1xuICAgIHRoaXMuc3BsYXNoID0gaW5qZWN0KE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZykuc3BsYXNoID8/IE1pY3JvZnJvbnRlbmRTcGxhc2hDb21wb25lbnQ7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZXJPdXRsZXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2V0Q29udGV4dFZhbHVlKMm1VklFV19JRF9DT05URVhUX0tFWSwgdGhpcy52aWV3LmlkKTtcbiAgICB0aGlzLnByb3BhZ2F0ZVdvcmtiZW5jaFRoZW1lKCk7XG4gICAgdGhpcy5pbnN0YWxsTWVudUl0ZW1BY2NlbGVyYXRvcnMkKCk7XG4gICAgdGhpcy5pbnN0YWxsTmF2aWdhdG9yKCk7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbGxOYXZpZ2F0b3IoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGUucGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHBhcmFtcyA9PiB0aGlzLmZldGNoQ2FwYWJpbGl0eSQocGFyYW1zW8m1TWljcm9mcm9udGVuZFJvdXRlUGFyYW1zLsm1VklFV19DQVBBQklMSVRZX0lEXSkucGlwZShtYXAoY2FwYWJpbGl0eSA9PiAoe2NhcGFiaWxpdHksIHBhcmFtc30pKSkpLFxuICAgICAgICBzZXJpYWxpemVFeGVjdXRpb24oKHtjYXBhYmlsaXR5LCBwYXJhbXN9KSA9PiB0aGlzLm9uTmF2aWdhdGUodGhpcy5jYXBhYmlsaXR5LCBjYXBhYmlsaXR5LCBwYXJhbXMpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbk5hdmlnYXRlKHByZXZDYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSB8IG51bGwsIGNhcGFiaWxpdHk6IFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5IHwgbnVsbCwgcGFyYW1zOiBQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWNhcGFiaWxpdHkpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCgpID0+IGBbTnVsbENhcGFiaWxpdHlFcnJvcl0gTm8gYXBwbGljYXRpb24gZm91bmQgdG8gcHJvdmlkZSBhIHZpZXcgY2FwYWJpbGl0eSBvZiBpZCAnJHtwYXJhbXNbybVNaWNyb2Zyb250ZW5kUm91dGVQYXJhbXMuybVWSUVXX0NBUEFCSUxJVFlfSURdfScuIE1heWJlLCB0aGUgcmVxdWVzdGVkIHZpZXcgaXMgbm90IHB1YmxpYyBBUEkgb3IgdGhlIHByb3ZpZGluZyBhcHBsaWNhdGlvbiBub3QgYXZhaWxhYmxlLmAsIExvZ2dlck5hbWVzLk1JQ1JPRlJPTlRFTkRfUk9VVElORyk7XG4gICAgICB0aGlzLnVubG9hZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FwYWJpbGl0eSA9IGNhcGFiaWxpdHk7XG4gICAgdGhpcy52aWV3LnJlZ2lzdGVyQWRhcHRlcihNaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldywgbmV3IE1pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3KGNhcGFiaWxpdHksIHBhcmFtcykpO1xuXG4gICAgLy8gQ2hlY2sgaWYgbmF2aWdhdGluZyB0byBhIG5ldyBtaWNyb2Zyb250ZW5kLlxuICAgIGlmICghcHJldkNhcGFiaWxpdHkgfHwgcHJldkNhcGFiaWxpdHkubWV0YWRhdGEhLmlkICE9PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCkge1xuICAgICAgdGhpcy5zZXRWaWV3UHJvcGVydGllcyhjYXBhYmlsaXR5LCBwYXJhbXMpO1xuICAgICAgdGhpcy5pbnN0YWxsUGFyYW1zVXBkYXRlcihjYXBhYmlsaXR5KTtcbiAgICB9XG5cbiAgICAvLyBTaWduYWwgdGhlIGN1cnJlbnRseSBsb2FkZWQgYXBwbGljYXRpb24gdG8gdW5sb2FkLlxuICAgIGlmIChwcmV2Q2FwYWJpbGl0eSAmJiBwcmV2Q2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lICE9PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWUpIHtcbiAgICAgIGF3YWl0IHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdVbmxvYWRpbmdUb3BpYyh0aGlzLnZpZXcuaWQpKTtcbiAgICB9XG5cbiAgICAvLyBQYXNzIHBhcmFtZXRlcnMgdG8gdGhlIG1pY3JvZnJvbnRlbmQuXG4gICAgYXdhaXQgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcmFtc1RvcGljKHRoaXMudmlldy5pZCksIE1hcHMuY29lcmNlKHBhcmFtcyksIHtyZXRhaW46IHRydWV9KTtcblxuICAgIC8vIFdoZW4gbmF2aWdhdGluZyB0byBhbm90aGVyIHZpZXcgY2FwYWJpbGl0eSBvZiB0aGUgc2FtZSBhcHAsIHdhaXQgdW50aWwgdHJhbnNwb3J0ZWQgdGhlIHBhcmFtcyB0byB0aGUgbWljcm9mcm9udGVuZCBiZWZvcmUgbG9hZGluZyB0aGVcbiAgICAvLyBuZXcgbWljcm9mcm9udGVuZCBpbnRvIHRoZSBpZnJhbWUsIGFsbG93aW5nIHRoZSBjdXJyZW50bHkgbG9hZGVkIG1pY3JvZnJvbnRlbmQgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucy5cbiAgICBpZiAocHJldkNhcGFiaWxpdHlcbiAgICAgICYmIHByZXZDYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWUgPT09IGNhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZVxuICAgICAgJiYgcHJldkNhcGFiaWxpdHkubWV0YWRhdGEhLmlkICE9PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCkge1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQ2FwYWJpbGl0eVBhcmFtKGNhcGFiaWxpdHkubWV0YWRhdGEhLmlkKTtcbiAgICB9XG5cbiAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgbWljcm9mcm9udGVuZC5cbiAgICBjb25zdCBhcHBsaWNhdGlvbiA9IHRoaXMuX21hbmlmZXN0U2VydmljZS5nZXRBcHBsaWNhdGlvbihjYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWUpO1xuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgTG9hZGluZyBtaWNyb2Zyb250ZW5kIGludG8gd29ya2JlbmNoIHZpZXcgW3ZpZXdJZD0ke3RoaXMudmlldy5pZH0sIGFwcD0ke2NhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZX0sIGJhc2VVcmw9JHthcHBsaWNhdGlvbi5iYXNlVXJsfSwgcGF0aD0keyhjYXBhYmlsaXR5LnByb3BlcnRpZXMucGF0aCl9XS5gLCBMb2dnZXJOYW1lcy5NSUNST0ZST05URU5EX1JPVVRJTkcsIHBhcmFtcywgY2FwYWJpbGl0eSk7XG4gICAgYXdhaXQgdGhpcy5fb3V0bGV0Um91dGVyLm5hdmlnYXRlKGNhcGFiaWxpdHkucHJvcGVydGllcy5wYXRoLCB7XG4gICAgICBvdXRsZXQ6IHRoaXMudmlldy5pZCxcbiAgICAgIHJlbGF0aXZlVG86IGFwcGxpY2F0aW9uLmJhc2VVcmwsXG4gICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIHB1c2hTdGF0ZVRvU2Vzc2lvbkhpc3RvcnlTdGFjazogZmFsc2UsXG4gICAgICBzaG93U3BsYXNoOiBjYXBhYmlsaXR5LnByb3BlcnRpZXMuc2hvd1NwbGFzaCxcbiAgICAgIMm1Y2FwYWJpbGl0eUlkOiBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCxcbiAgICB9KTtcblxuICAgIC8vIEluYWN0aXZlIHZpZXdzIGFyZSBub3QgY2hlY2tlZCBmb3IgY2hhbmdlcyBzaW5jZSBkZXRhY2hlZCBmcm9tIHRoZSBBbmd1bGFyIGNvbXBvbmVudCB0cmVlLlxuICAgIC8vIFNvLCB3ZSBtYW51YWxseSB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIGF0dHJpYnV0ZXMgb24gdGhlIGBzY2ktcm91dGVyLW91dGxldGAuXG4gICAgaWYgKCF0aGlzLnZpZXcuYWN0aXZlKSB7XG4gICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaENhcGFiaWxpdHkkKGNhcGFiaWxpdHlJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFuaWZlc3RPYmplY3RDYWNoZS5vYnNlcnZlQ2FwYWJpbGl0eSQoY2FwYWJpbGl0eUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zdGFsbE1lbnVJdGVtQWNjZWxlcmF0b3JzJCgpOiB2b2lkIHtcbiAgICAvLyBTaW5jZSB0aGUgaWZyYW1lIGlzIGFkZGVkIGF0IGEgdG9wLWxldmVsIGxvY2F0aW9uIGluIHRoZSBET00sIHRoYXQgaXMsIG5vdCBhcyBhIGNoaWxkIGVsZW1lbnQgb2YgdGhpcyBjb21wb25lbnQsXG4gICAgLy8gdGhlIHdvcmtiZW5jaCB2aWV3IG1pc3NlcyBrZXlib2FyZCBldmVudHMgZnJvbSBlbWJlZGRlZCBjb250ZW50LiBBcyBhIHJlc3VsdCwgbWVudSBpdGVtIGFjY2VsZXJhdG9ycyBvZiB0aGUgY29udGV4dFxuICAgIC8vIG1lbnUgb2YgdGhpcyB2aWV3IGRvIG5vdCB3b3JrLCBzbyB3ZSBpbnN0YWxsIHRoZSBhY2NlbGVyYXRvcnMgb24gdGhlIHJvdXRlciBvdXRsZXQgYXMgd2VsbC5cbiAgICB0aGlzLl92aWV3Q29udGV4dE1lbnVTZXJ2aWNlLmluc3RhbGxNZW51SXRlbUFjY2VsZXJhdG9ycyQodGhpcy5yb3V0ZXJPdXRsZXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRoaXMudmlldylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIHJlcXVlc3RzIGZyb20gdGhlIGN1cnJlbnRseSBsb2FkZWQgbWljcm9mcm9udGVuZCB0byB1cGRhdGUgaXRzIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxQYXJhbXNVcGRhdGVyKHZpZXdDYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSk6IHZvaWQge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlUGFyYW1zVXBkYXRlciQubmV4dCgpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX21lc3NhZ2VDbGllbnQub2JzZXJ2ZSQ8ybVWaWV3UGFyYW1zVXBkYXRlQ29tbWFuZD4oybVXb3JrYmVuY2hDb21tYW5kcy52aWV3UGFyYW1zVXBkYXRlVG9waWModGhpcy52aWV3LmlkLCB2aWV3Q2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQpKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlUGFyYW1zVXBkYXRlciQpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChyZXF1ZXN0OiBUb3BpY01lc3NhZ2U8ybVWaWV3UGFyYW1zVXBkYXRlQ29tbWFuZD4pID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByeGpzL25vLWFzeW5jLXN1YnNjcmliZVxuICAgICAgICAvLyBXZSBETyBOT1QgbmF2aWdhdGUgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YXMgY2xvc2VkLCBlLmcuLCBiZWNhdXNlIGNsb3NlZCB0aGUgdmlldyBvciBuYXZpZ2F0ZWQgdG8gYW5vdGhlciBjYXBhYmlsaXR5LlxuICAgICAgICBjb25zdCByZXBseVRvID0gcmVxdWVzdC5oZWFkZXJzLmdldChNZXNzYWdlSGVhZGVycy5SZXBseVRvKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLl93b3JrYmVuY2hSb3V0ZXIubmF2aWdhdGUobGF5b3V0ID0+IHtcbiAgICAgICAgICAgIC8vIENhbmNlbCBwZW5kaW5nIG5hdmlnYXRpb24gaWYgdGhlIHN1YnNjcmlwdGlvbiB3YXMgY2xvc2VkLCBlLmcuLCBiZWNhdXNlIGNsb3NlZCB0aGUgdmlldyBvciBuYXZpZ2F0ZWQgdG8gYW5vdGhlciBjYXBhYmlsaXR5XG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyYW1zSGFuZGxpbmcgPSByZXF1ZXN0LmJvZHkhLnBhcmFtc0hhbmRsaW5nO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhcmFtcyA9IHRoaXMuX3JvdXRlLnNuYXBzaG90LnBhcmFtcztcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IERpY3Rpb25hcmllcy5jb2VyY2UocmVxdWVzdC5ib2R5IS5wYXJhbXMpOyAvLyBjb2VyY2UgcGFyYW1zIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICBjb25zdCBtZXJnZWRQYXJhbXMgPSBPYmplY3RzLndpdGhvdXRVbmRlZmluZWRFbnRyaWVzKHBhcmFtc0hhbmRsaW5nID09PSAnbWVyZ2UnID8gey4uLmN1cnJlbnRQYXJhbXMsIC4uLm5ld1BhcmFtc30gOiBuZXdQYXJhbXMpO1xuICAgICAgICAgICAgY29uc3Qge3VybFBhcmFtcywgdHJhbnNpZW50UGFyYW1zfSA9IE1pY3JvZnJvbnRlbmRWaWV3Um91dGVzLnNwbGl0UGFyYW1zKG1lcmdlZFBhcmFtcywgdmlld0NhcGFiaWxpdHkpO1xuXG4gICAgICAgICAgICByZXR1cm4gbGF5b3V0Lm5hdmlnYXRlVmlldyh0aGlzLnZpZXcuaWQsIFt1cmxQYXJhbXNdLCB7XG4gICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX3JvdXRlLFxuICAgICAgICAgICAgICBzdGF0ZTogT2JqZWN0cy53aXRob3V0VW5kZWZpbmVkRW50cmllcyh7XG4gICAgICAgICAgICAgICAgW01pY3JvZnJvbnRlbmRWaWV3Um91dGVzLlNUQVRFX1RSQU5TSUVOVF9QQVJBTVNdOiB0cmFuc2llbnRQYXJhbXMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhd2FpdCB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2gocmVwbHlUbywgc3VjY2Vzcywge2hlYWRlcnM6IG5ldyBNYXAoKS5zZXQoTWVzc2FnZUhlYWRlcnMuU3RhdHVzLCBSZXNwb25zZVN0YXR1c0NvZGVzLlRFUk1JTkFMKX0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaChyZXBseVRvLCBzdHJpbmdpZnlFcnJvcihlcnJvciksIHtoZWFkZXJzOiBuZXcgTWFwKCkuc2V0KE1lc3NhZ2VIZWFkZXJzLlN0YXR1cywgUmVzcG9uc2VTdGF0dXNDb2Rlcy5FUlJPUil9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcHJvcGVydGllcyBvZiB0aGlzIHZpZXcsIHN1Y2ggYXMgdGhlIHZpZXcgdGl0bGUsIGFzIGRlZmluZWQgYnkgdGhlIGNhcGFiaWxpdHkuXG4gICAqL1xuICBwcml2YXRlIHNldFZpZXdQcm9wZXJ0aWVzKHZpZXdDYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSwgcGFyYW1zOiBQYXJhbXMpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXcudGl0bGUgPSBNaWNyb2Zyb250ZW5kcy5zdWJzdGl0dXRlTmFtZWRQYXJhbWV0ZXJzKHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMudGl0bGUsIE1hcHMuY29lcmNlKHBhcmFtcykpID8/IG51bGw7XG4gICAgdGhpcy52aWV3LmhlYWRpbmcgPSBNaWNyb2Zyb250ZW5kcy5zdWJzdGl0dXRlTmFtZWRQYXJhbWV0ZXJzKHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMuaGVhZGluZywgTWFwcy5jb2VyY2UocGFyYW1zKSkgPz8gbnVsbDtcbiAgICB0aGlzLnZpZXcuY2xhc3NMaXN0LnNldCh2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzLmNzc0NsYXNzLCB7c2NvcGU6ICdhcHBsaWNhdGlvbid9KTtcbiAgICB0aGlzLnZpZXcuY2xvc2FibGUgPSB2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzLmNsb3NhYmxlID8/IHRydWU7XG4gICAgdGhpcy52aWV3LmRpcnR5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbGxWaWV3QWN0aXZlUHVibGlzaGVyKCk6IHZvaWQge1xuICAgIHRoaXMudmlldy5hY3RpdmUkXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoYWN0aXZlID0+IHtcbiAgICAgICAgY29uc3QgY29tbWFuZFRvcGljID0gybVXb3JrYmVuY2hDb21tYW5kcy52aWV3QWN0aXZlVG9waWModGhpcy52aWV3LmlkKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKGNvbW1hbmRUb3BpYywgYWN0aXZlLCB7cmV0YWluOiB0cnVlfSkudGhlbigpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbGxQYXJ0SWRQdWJsaXNoZXIoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3LnBhcnRJZCRcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZShwYXJ0SWQgPT4ge1xuICAgICAgICBjb25zdCBjb21tYW5kVG9waWMgPSDJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdQYXJ0SWRUb3BpYyh0aGlzLnZpZXcuaWQpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goY29tbWFuZFRvcGljLCBwYXJ0SWQsIHtyZXRhaW46IHRydWV9KS50aGVuKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSBwYXJhbXMgY29udGFpbiB0aGUgZ2l2ZW4gY2FwYWJpbGl0eSBpZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckNhcGFiaWxpdHlQYXJhbSh2aWV3Q2FwYWJpbGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2aWV3UGFyYW1zJCA9IHRoaXMuX21lc3NhZ2VDbGllbnQub2JzZXJ2ZSQ8TWFwPHN0cmluZywgc3RyaW5nPj4oybVXb3JrYmVuY2hDb21tYW5kcy52aWV3UGFyYW1zVG9waWModGhpcy52aWV3LmlkKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXBUb0JvZHkoKSxcbiAgICAgICAgZmlyc3QocGFyYW1zID0+IHBhcmFtcy5nZXQoybVNaWNyb2Zyb250ZW5kUm91dGVQYXJhbXMuybVWSUVXX0NBUEFCSUxJVFlfSUQpID09PSB2aWV3Q2FwYWJpbGl0eUlkKSxcbiAgICAgICk7XG4gICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odmlld1BhcmFtcyQpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBhc3luYyBjYW5DbG9zZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjYW5DbG9zZVRvcGljID0gybVXb3JrYmVuY2hDb21tYW5kcy5jYW5DbG9zZVRvcGljKHRoaXMudmlldy5pZCk7XG4gICAgY29uc3QgbGVnYWN5Q2FuQ2xvc2VUb3BpYyA9IMm1V29ya2JlbmNoQ29tbWFuZHMudmlld0Nsb3NpbmdUb3BpYyh0aGlzLnZpZXcuaWQpO1xuXG4gICAgLy8gSW5pdGlhdGUgYSByZXF1ZXN0LXJlc3BvbnNlIGNvbW11bmljYXRpb24gb25seSBpZiB0aGUgZW1iZWRkZWQgbWljcm9mcm9udGVuZCBpbXBsZW1lbnRzIGBDYW5DbG9zZWAgZ3VhcmQuXG4gICAgY29uc3QgaGFzQ2FuQ2xvc2VHdWFyZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX21lc3NhZ2VDbGllbnQuc3Vic2NyaWJlckNvdW50JChjYW5DbG9zZVRvcGljKSkgPiAwO1xuICAgIGNvbnN0IGhhc0xlZ2FjeUNhbkNsb3NlR3VhcmQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9tZXNzYWdlQ2xpZW50LnN1YnNjcmliZXJDb3VudCQobGVnYWN5Q2FuQ2xvc2VUb3BpYykpID4gMDtcbiAgICBpZiAoIWhhc0NhbkNsb3NlR3VhcmQgJiYgIWhhc0xlZ2FjeUNhbkNsb3NlR3VhcmQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5fbWVzc2FnZUNsaWVudC5yZXF1ZXN0JDxib29sZWFuPihoYXNDYW5DbG9zZUd1YXJkID8gY2FuQ2xvc2VUb3BpYyA6IGxlZ2FjeUNhbkNsb3NlVG9waWMpLnBpcGUobWFwVG9Cb2R5KCkpLCB7ZGVmYXVsdFZhbHVlOiB0cnVlfSk7XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1c1dpdGhpbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB7ZGV0YWlsOiBmb2N1c1dpdGhpbn0gPSBldmVudCBhcyBDdXN0b21FdmVudDxib29sZWFuPjtcbiAgICBpZiAoZm9jdXNXaXRoaW4pIHtcbiAgICAgIHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnc2NpLW1pY3JvZnJvbnRlbmQtZm9jdXNpbicsIHtidWJibGVzOiB0cnVlfSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcG9uIHN1YnNjcmlwdGlvbiwgZW1pdHMgdGhlIGtleXN0cm9rZXMgcmVnaXN0ZXJlZCB3aXRoIG1lbnUgaXRlbXMgb2YgdGhpcyB2aWV3J3MgY29udGV4dCBtZW51LFxuICAgKiBhbmQgdGhlbiBjb250aW51b3VzbHkgd2hlbiB0aGV5IGNoYW5nZS4gVGhlIG9ic2VydmFibGUgbmV2ZXIgY29tcGxldGVzLlxuICAgKi9cbiAgcHJpdmF0ZSB2aWV3Q29udGV4dE1lbnVLZXlzdHJva2VzJCgpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMudmlldy5tZW51SXRlbXMkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyQXJyYXkobWVudUl0ZW0gPT4gISFtZW51SXRlbS5hY2NlbGVyYXRvciksXG4gICAgICAgIG1hcEFycmF5KG1lbnVJdGVtID0+IG1lbnVJdGVtLmFjY2VsZXJhdG9yIS5tYXAoYWNjZWxlcmF0b3IgPT4ge1xuICAgICAgICAgIC8vIE5vcm1hbGl6ZSBrZXlzdHJva2VzIGFjY29yZGluZyB0byBgU2NpUm91dGVyT3V0bGV0RWxlbWVudCNrZXlzdHJva2VzYFxuICAgICAgICAgIHN3aXRjaCAoYWNjZWxlcmF0b3IpIHtcbiAgICAgICAgICAgIGNhc2UgJ2N0cmwnOlxuICAgICAgICAgICAgICByZXR1cm4gJ2NvbnRyb2wnO1xuICAgICAgICAgICAgY2FzZSAnLic6XG4gICAgICAgICAgICAgIHJldHVybiAnZG90JztcbiAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICByZXR1cm4gJ3NwYWNlJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBhY2NlbGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKSxcbiAgICAgICAgbWFwQXJyYXkoYWNjZWxlcmF0b3IgPT4gWydrZXlkb3duJ10uY29uY2F0KGFjY2VsZXJhdG9yKS5qb2luKCcuJykpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB7QGxpbmsgaXNXb3JrYmVuY2hEcmFnfSBwcm9wZXJ0eSB3aGVuIGEgd29ya2JlbmNoIGRyYWcgb3BlcmF0aW9uIGlzIGRldGVjdGVkLFxuICAgKiBzdWNoIGFzIHdoZW4gZHJhZ2dpbmcgYSB2aWV3IG9yIG1vdmluZyBhIHNhc2guXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxXb3JrYmVuY2hEcmFnRGV0ZWN0b3IoKTogdm9pZCB7XG4gICAgdGhpcy5fd29ya2JlbmNoTGF5b3V0U2VydmljZS5kcmFnZ2luZyRcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIHRoaXMuaXNXb3JrYmVuY2hEcmFnID0gKGV2ZW50ID09PSAnc3RhcnQnKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9wYWdhdGVXb3JrYmVuY2hUaGVtZSgpOiB2b2lkIHtcbiAgICBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5faW5qZWN0b3IsICgpID0+IE1pY3JvZnJvbnRlbmRzLnByb3BhZ2F0ZVRoZW1lKHRoaXMucm91dGVyT3V0bGV0RWxlbWVudC5uYXRpdmVFbGVtZW50KSk7XG4gIH1cblxuICBwcml2YXRlIHVubG9hZCgpOiB2b2lkIHtcbiAgICAvLyBEZWxldGUgcmV0YWluZWQgbWVzc2FnZXMgdG8gZnJlZSByZXNvdXJjZXMuXG4gICAgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld0FjdGl2ZVRvcGljKHRoaXMudmlldy5pZCksIHVuZGVmaW5lZCwge3JldGFpbjogdHJ1ZX0pLnRoZW4oKTtcbiAgICB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goybVXb3JrYmVuY2hDb21tYW5kcy52aWV3UGFyYW1zVG9waWModGhpcy52aWV3LmlkKSwgdW5kZWZpbmVkLCB7cmV0YWluOiB0cnVlfSkudGhlbigpO1xuICAgIHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdQYXJ0SWRUb3BpYyh0aGlzLnZpZXcuaWQpLCB1bmRlZmluZWQsIHtyZXRhaW46IHRydWV9KS50aGVuKCk7XG4gICAgdGhpcy5fb3V0bGV0Um91dGVyLm5hdmlnYXRlKG51bGwsIHtvdXRsZXQ6IHRoaXMudmlldy5pZH0pLnRoZW4oKTtcbiAgICB0aGlzLnZpZXcudW5yZWdpc3RlckFkYXB0ZXIoTWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXcpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5sb2FkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBCbG9ja3MgdGhlIG1pY3JvZnJvbnRlbmQgb3V0bGV0IHdoZW4gZGlhbG9nKHMpIG92ZXJsYXkgdGhpcyB2aWV3LlxuICovXG5mdW5jdGlvbiBjb25maWd1cmVNaWNyb2Zyb250ZW5kR2xhc3NQYW5lKCk6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEdMQVNTX1BBTkVfQkxPQ0tBQkxFLFxuICAgICAgdXNlRXhpc3Rpbmc6IMm1V29ya2JlbmNoVmlldyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEdMQVNTX1BBTkVfT1BUSU9OUyxcbiAgICAgIHVzZUZhY3Rvcnk6ICgpOiBHbGFzc1BhbmVPcHRpb25zID0+ICh7YXR0cmlidXRlczogeydkYXRhLXZpZXdpZCc6IGluamVjdChXb3JrYmVuY2hWaWV3KS5pZH19KSxcbiAgICB9LFxuICBdO1xufVxuIiwiPHdiLWNvbnRlbnQtYXMtb3ZlcmxheSBbb3ZlcmxheUhvc3RdPVwiaWZyYW1lSG9zdFJlZi5yZWYkIHwgYXN5bmNcIj5cbiAgPGRpdiBjbGFzcz1cIm1pY3JvZnJvbnRlbmQtdmlld1wiXG4gICAgICAgW2NsYXNzLndvcmtiZW5jaC1kcmFnXT1cImlzV29ya2JlbmNoRHJhZ1wiXG4gICAgICAgW2F0dHIuZGF0YS12aWV3aWRdPVwidmlldy5pZFwiXG4gICAgICAgd2JHbGFzc1BhbmU+XG4gICAgPHNjaS1yb3V0ZXItb3V0bGV0ICNyb3V0ZXJfb3V0bGV0XG4gICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInZpZXcuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcGFiaWxpdHlpZF09XCJjYXBhYmlsaXR5Py5tZXRhZGF0YSEuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWFwcF09XCJjYXBhYmlsaXR5Py5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwidmlldy5jbGFzc0xpc3QudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXN3aXRoaW4pPVwib25Gb2N1c1dpdGhpbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2tleXN0cm9rZXNdPVwia2V5c3Ryb2tlc1RvQnViYmxlJCB8IGFzeW5jXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cInNwbGFzaFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvc2NpLXJvdXRlci1vdXRsZXQ+XG4gIDwvZGl2PlxuPC93Yi1jb250ZW50LWFzLW92ZXJsYXk+XG4iXX0=
@@ -8,5 +8,6 @@
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  */
10
10
  export { MicrofrontendPlatformConfigLoader } from './microfrontend-platform-config-loader';
11
+ export { WorkbenchPerspectiveData } from './microfrontend-perspective/workbench-perspective-data';
11
12
  export * from './microfrontend-platform.config';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pGLGNBQWMsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjMgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmV4cG9ydCB7TWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnTG9hZGVyfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0tY29uZmlnLWxvYWRlcic7XG5leHBvcnQgKiBmcm9tICcuL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0uY29uZmlnJztcbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQ2hHLGNBQWMsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjMgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmV4cG9ydCB7TWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnTG9hZGVyfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0tY29uZmlnLWxvYWRlcic7XG5leHBvcnQge1dvcmtiZW5jaFBlcnNwZWN0aXZlRGF0YX0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLXBlcnNwZWN0aXZlL3dvcmtiZW5jaC1wZXJzcGVjdGl2ZS1kYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vbWljcm9mcm9udGVuZC1wbGF0Zm9ybS5jb25maWcnO1xuIl19
@@ -1,8 +1,9 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { WorkbenchCapabilities } from '@scion/workbench-client';
3
+ import { Objects } from '../../common/objects.util';
3
4
  import * as i0 from "@angular/core";
4
5
  /**
5
- * Asserts view capabilities to have required properties and assigns each view capability a stable identifer required for persistent navigation.
6
+ * Asserts view capabilities to have required properties.
6
7
  */
7
8
  export class MicrofrontendViewCapabilityValidator {
8
9
  async intercept(capability) {
@@ -11,13 +12,13 @@ export class MicrofrontendViewCapabilityValidator {
11
12
  }
12
13
  const viewCapability = capability;
13
14
  // Assert the view capability to have a qualifier set.
14
- if (!viewCapability.qualifier || !Object.keys(viewCapability.qualifier).length) {
15
+ if (!Object.keys(viewCapability.qualifier ?? {}).length) {
15
16
  throw Error(`[NullQualifierError] View capability requires a qualifier [capability=${JSON.stringify(viewCapability)}]`);
16
17
  }
17
18
  // Assert the view capability to have a path set.
18
19
  const path = viewCapability.properties?.path;
19
20
  if (path === undefined || path === null) {
20
- throw Error(`[NullPathError] View capability requires a path to the microfrontend in its properties [capability=${JSON.stringify(viewCapability)}]`);
21
+ throw Error(`[NullPathError] View capability requires a path to the microfrontend in its properties [application="${viewCapability.metadata.appSymbolicName}", capability="${Objects.toMatrixNotation(viewCapability.qualifier)}"]`);
21
22
  }
22
23
  return capability;
23
24
  }
@@ -27,4 +28,4 @@ export class MicrofrontendViewCapabilityValidator {
27
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator, decorators: [{
28
29
  type: Injectable
29
30
  }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LWNhcGFiaWxpdHktdmFsaWRhdG9yLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvbWljcm9mcm9udGVuZC1wbGF0Zm9ybS9yb3V0aW5nL21pY3JvZnJvbnRlbmQtdmlldy1jYXBhYmlsaXR5LXZhbGlkYXRvci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxxQkFBcUIsRUFBMEIsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFdkY7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0NBQW9DO0lBRXhDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBc0I7UUFDM0MsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25ELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxVQUFxQyxDQUFDO1FBQzdELHNEQUFzRDtRQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9FLE1BQU0sS0FBSyxDQUFDLHlFQUF5RSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxSCxDQUFDO1FBRUQsaURBQWlEO1FBQ2pELE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO1FBQzdDLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDeEMsTUFBTSxLQUFLLENBQUMsc0dBQXNHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZKLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOzhHQXBCVSxvQ0FBb0M7a0hBQXBDLG9DQUFvQzs7MkZBQXBDLG9DQUFvQztrQkFEaEQsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDYXBhYmlsaXR5LCBDYXBhYmlsaXR5SW50ZXJjZXB0b3J9IGZyb20gJ0BzY2lvbi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1dvcmtiZW5jaENhcGFiaWxpdGllcywgV29ya2JlbmNoVmlld0NhcGFiaWxpdHl9IGZyb20gJ0BzY2lvbi93b3JrYmVuY2gtY2xpZW50JztcblxuLyoqXG4gKiBBc3NlcnRzIHZpZXcgY2FwYWJpbGl0aWVzIHRvIGhhdmUgcmVxdWlyZWQgcHJvcGVydGllcyBhbmQgYXNzaWducyBlYWNoIHZpZXcgY2FwYWJpbGl0eSBhIHN0YWJsZSBpZGVudGlmZXIgcmVxdWlyZWQgZm9yIHBlcnNpc3RlbnQgbmF2aWdhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoLyogRE8gTk9UIFBST1ZJREUgdmlhICdwcm92aWRlZEluJyBtZXRhZGF0YSBhcyBvbmx5IHJlZ2lzdGVyZWQgaWYgbWljcm9mcm9udGVuZCBzdXBwb3J0IGlzIGVuYWJsZWQuICovKVxuZXhwb3J0IGNsYXNzIE1pY3JvZnJvbnRlbmRWaWV3Q2FwYWJpbGl0eVZhbGlkYXRvciBpbXBsZW1lbnRzIENhcGFiaWxpdHlJbnRlcmNlcHRvciB7XG5cbiAgcHVibGljIGFzeW5jIGludGVyY2VwdChjYXBhYmlsaXR5OiBDYXBhYmlsaXR5KTogUHJvbWlzZTxDYXBhYmlsaXR5PiB7XG4gICAgaWYgKGNhcGFiaWxpdHkudHlwZSAhPT0gV29ya2JlbmNoQ2FwYWJpbGl0aWVzLlZpZXcpIHtcbiAgICAgIHJldHVybiBjYXBhYmlsaXR5O1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXdDYXBhYmlsaXR5ID0gY2FwYWJpbGl0eSBhcyBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eTtcbiAgICAvLyBBc3NlcnQgdGhlIHZpZXcgY2FwYWJpbGl0eSB0byBoYXZlIGEgcXVhbGlmaWVyIHNldC5cbiAgICBpZiAoIXZpZXdDYXBhYmlsaXR5LnF1YWxpZmllciB8fCAhT2JqZWN0LmtleXModmlld0NhcGFiaWxpdHkucXVhbGlmaWVyKS5sZW5ndGgpIHtcbiAgICAgIHRocm93IEVycm9yKGBbTnVsbFF1YWxpZmllckVycm9yXSBWaWV3IGNhcGFiaWxpdHkgcmVxdWlyZXMgYSBxdWFsaWZpZXIgW2NhcGFiaWxpdHk9JHtKU09OLnN0cmluZ2lmeSh2aWV3Q2FwYWJpbGl0eSl9XWApO1xuICAgIH1cblxuICAgIC8vIEFzc2VydCB0aGUgdmlldyBjYXBhYmlsaXR5IHRvIGhhdmUgYSBwYXRoIHNldC5cbiAgICBjb25zdCBwYXRoID0gdmlld0NhcGFiaWxpdHkucHJvcGVydGllcz8ucGF0aDtcbiAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkIHx8IHBhdGggPT09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKGBbTnVsbFBhdGhFcnJvcl0gVmlldyBjYXBhYmlsaXR5IHJlcXVpcmVzIGEgcGF0aCB0byB0aGUgbWljcm9mcm9udGVuZCBpbiBpdHMgcHJvcGVydGllcyBbY2FwYWJpbGl0eT0ke0pTT04uc3RyaW5naWZ5KHZpZXdDYXBhYmlsaXR5KX1dYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcGFiaWxpdHk7XG4gIH1cbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LWNhcGFiaWxpdHktdmFsaWRhdG9yLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvbWljcm9mcm9udGVuZC1wbGF0Zm9ybS9yb3V0aW5nL21pY3JvZnJvbnRlbmQtdmlldy1jYXBhYmlsaXR5LXZhbGlkYXRvci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxxQkFBcUIsRUFBMEIsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7O0FBRWxEOztHQUVHO0FBRUgsTUFBTSxPQUFPLG9DQUFvQztJQUV4QyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQXNCO1FBQzNDLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsVUFBcUMsQ0FBQztRQUM3RCxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4RCxNQUFNLEtBQUssQ0FBQyx5RUFBeUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUgsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztRQUM3QyxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hDLE1BQU0sS0FBSyxDQUFDLHdHQUF3RyxjQUFjLENBQUMsUUFBUyxDQUFDLGVBQWUsa0JBQWtCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hPLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOzhHQXBCVSxvQ0FBb0M7a0hBQXBDLG9DQUFvQzs7MkZBQXBDLG9DQUFvQztrQkFEaEQsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDYXBhYmlsaXR5LCBDYXBhYmlsaXR5SW50ZXJjZXB0b3J9IGZyb20gJ0BzY2lvbi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1dvcmtiZW5jaENhcGFiaWxpdGllcywgV29ya2JlbmNoVmlld0NhcGFiaWxpdHl9IGZyb20gJ0BzY2lvbi93b3JrYmVuY2gtY2xpZW50JztcbmltcG9ydCB7T2JqZWN0c30gZnJvbSAnLi4vLi4vY29tbW9uL29iamVjdHMudXRpbCc7XG5cbi8qKlxuICogQXNzZXJ0cyB2aWV3IGNhcGFiaWxpdGllcyB0byBoYXZlIHJlcXVpcmVkIHByb3BlcnRpZXMuXG4gKi9cbkBJbmplY3RhYmxlKC8qIERPIE5PVCBQUk9WSURFIHZpYSAncHJvdmlkZWRJbicgbWV0YWRhdGEgYXMgb25seSByZWdpc3RlcmVkIGlmIG1pY3JvZnJvbnRlbmQgc3VwcG9ydCBpcyBlbmFibGVkLiAqLylcbmV4cG9ydCBjbGFzcyBNaWNyb2Zyb250ZW5kVmlld0NhcGFiaWxpdHlWYWxpZGF0b3IgaW1wbGVtZW50cyBDYXBhYmlsaXR5SW50ZXJjZXB0b3Ige1xuXG4gIHB1YmxpYyBhc3luYyBpbnRlcmNlcHQoY2FwYWJpbGl0eTogQ2FwYWJpbGl0eSk6IFByb21pc2U8Q2FwYWJpbGl0eT4ge1xuICAgIGlmIChjYXBhYmlsaXR5LnR5cGUgIT09IFdvcmtiZW5jaENhcGFiaWxpdGllcy5WaWV3KSB7XG4gICAgICByZXR1cm4gY2FwYWJpbGl0eTtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3Q2FwYWJpbGl0eSA9IGNhcGFiaWxpdHkgYXMgV29ya2JlbmNoVmlld0NhcGFiaWxpdHk7XG4gICAgLy8gQXNzZXJ0IHRoZSB2aWV3IGNhcGFiaWxpdHkgdG8gaGF2ZSBhIHF1YWxpZmllciBzZXQuXG4gICAgaWYgKCFPYmplY3Qua2V5cyh2aWV3Q2FwYWJpbGl0eS5xdWFsaWZpZXIgPz8ge30pLmxlbmd0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsUXVhbGlmaWVyRXJyb3JdIFZpZXcgY2FwYWJpbGl0eSByZXF1aXJlcyBhIHF1YWxpZmllciBbY2FwYWJpbGl0eT0ke0pTT04uc3RyaW5naWZ5KHZpZXdDYXBhYmlsaXR5KX1dYCk7XG4gICAgfVxuXG4gICAgLy8gQXNzZXJ0IHRoZSB2aWV3IGNhcGFiaWxpdHkgdG8gaGF2ZSBhIHBhdGggc2V0LlxuICAgIGNvbnN0IHBhdGggPSB2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzPy5wYXRoO1xuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQgfHwgcGF0aCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsUGF0aEVycm9yXSBWaWV3IGNhcGFiaWxpdHkgcmVxdWlyZXMgYSBwYXRoIHRvIHRoZSBtaWNyb2Zyb250ZW5kIGluIGl0cyBwcm9wZXJ0aWVzIFthcHBsaWNhdGlvbj1cIiR7dmlld0NhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZX1cIiwgY2FwYWJpbGl0eT1cIiR7T2JqZWN0cy50b01hdHJpeE5vdGF0aW9uKHZpZXdDYXBhYmlsaXR5LnF1YWxpZmllcil9XCJdYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcGFiaWxpdHk7XG4gIH1cbn1cbiJdfQ==
@@ -57,10 +57,12 @@ export class MicrofrontendViewIntentHandler {
57
57
  const { urlParams, transientParams } = MicrofrontendViewRoutes.splitParams(intentParams, viewCapability);
58
58
  const targets = this.resolveTargets(message, extras);
59
59
  const commands = extras.close ? [] : MicrofrontendViewRoutes.createMicrofrontendNavigateCommands(viewCapability.metadata.id, urlParams);
60
+ const partId = extras.close ? undefined : extras.partId;
60
61
  this._logger.debug(() => `Navigating to: ${viewCapability.properties.path}`, LoggerNames.MICROFRONTEND_ROUTING, commands, viewCapability, transientParams);
61
62
  const navigations = await Promise.all(Arrays.coerce(targets).map(target => {
62
63
  return this._workbenchRouter.navigate(commands, {
63
64
  target,
65
+ partId,
64
66
  activate: extras.activate,
65
67
  close: extras.close,
66
68
  position: extras.position ?? extras.blankInsertionIndex,
@@ -81,10 +83,10 @@ export class MicrofrontendViewIntentHandler {
81
83
  throw Error(`[NavigateError] The target must be empty if closing a view [target=${(extras.target)}]`);
82
84
  }
83
85
  if (extras.close) {
84
- return this.resolvePresentViewIds(intentMessage, { matchWildcardParams: true }) ?? [];
86
+ return this.resolvePresentViewIds(intentMessage, extras, { matchWildcardParams: true }) ?? [];
85
87
  }
86
88
  if (!extras.target || extras.target === 'auto') {
87
- return this.resolvePresentViewIds(intentMessage) ?? 'blank';
89
+ return this.resolvePresentViewIds(intentMessage, extras) ?? 'blank';
88
90
  }
89
91
  return extras.target;
90
92
  }
@@ -94,10 +96,11 @@ export class MicrofrontendViewIntentHandler {
94
96
  *
95
97
  * Allows matching wildcard parameters by setting the option `matchWildcardParameters` to `true`.
96
98
  */
97
- resolvePresentViewIds(intentMessage, options) {
99
+ resolvePresentViewIds(intentMessage, extras, options) {
98
100
  const requiredParams = intentMessage.capability.params?.filter(param => param.required).map(param => param.name) ?? [];
99
101
  const matchWildcardParams = options?.matchWildcardParams ?? false;
100
102
  const viewIds = this._viewRegistry.views
103
+ .filter(view => !extras.partId || extras.partId === view.part.id)
101
104
  .filter(view => {
102
105
  const microfrontendWorkbenchView = view.adapt(MicrofrontendWorkbenchView);
103
106
  if (!microfrontendWorkbenchView) {
@@ -122,4 +125,4 @@ export class MicrofrontendViewIntentHandler {
122
125
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewIntentHandler, decorators: [{
123
126
  type: Injectable
124
127
  }], ctorParameters: () => [{ type: i1.WorkbenchRouter }, { type: i2.WorkbenchViewRegistry }, { type: i3.Logger }] });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LWludGVudC1oYW5kbGVyLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvbWljcm9mcm9udGVuZC1wbGF0Zm9ybS9yb3V0aW5nL21pY3JvZnJvbnRlbmQtdmlldy1pbnRlbnQtaGFuZGxlci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBNEMsYUFBYSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzVJLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLHFCQUFxQixFQUFxRCxNQUFNLHlCQUF5QixDQUFDO0FBRWxILE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBUyxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFekQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDcEcsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7OztBQUVsRDs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyw4QkFBOEI7SUFFekMsWUFBb0IsZ0JBQWlDLEVBQ2pDLGFBQW9DLEVBQ3BDLE9BQWU7UUFGZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLGtCQUFhLEdBQWIsYUFBYSxDQUF1QjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUFRO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FB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S0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELHVDQUF1QztZQUN2QyxJQUFJLDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxRQUFTLENBQUMsRUFBRSxLQUFLLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNqRyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCxnREFBZ0Q7WUFDaEQsT0FBTyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEUsT0FBTyxDQUFDLG1CQUFtQixJQUFJLGdCQUFnQixLQUFLLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixLQUFLLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQzthQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7OEdBcEdVLDhCQUE4QjtrSEFBOUIsOEJBQThCOzsyRkFBOUIsOEJBQThCO2tCQUQxQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIyIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0hhbmRsZXIsIEludGVudEludGVyY2VwdG9yLCBJbnRlbnRNZXNzYWdlLCBNZXNzYWdlQ2xpZW50LCBNZXNzYWdlSGVhZGVycywgUmVzcG9uc2VTdGF0dXNDb2Rlc30gZnJvbSAnQHNjaW9uL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0nO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7V29ya2JlbmNoQ2FwYWJpbGl0aWVzLCBXb3JrYmVuY2hOYXZpZ2F0aW9uRXh0cmFzLCBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eX0gZnJvbSAnQHNjaW9uL3dvcmtiZW5jaC1jbGllbnQnO1xuaW1wb3J0IHtXb3JrYmVuY2hSb3V0ZXJ9IGZyb20gJy4uLy4uL3JvdXRpbmcvd29ya2JlbmNoLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFZpZXdSb3V0ZXN9IGZyb20gJy4vbWljcm9mcm9udGVuZC12aWV3LXJvdXRlcyc7XG5pbXBvcnQge0xvZ2dlciwgTG9nZ2VyTmFtZXN9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHtCZWFuc30gZnJvbSAnQHNjaW9uL3Rvb2xraXQvYmVhbi1tYW5hZ2VyJztcbmltcG9ydCB7QXJyYXlzLCBEaWN0aW9uYXJpZXN9IGZyb20gJ0BzY2lvbi90b29sa2l0L3V0aWwnO1xuaW1wb3J0IHtXb3JrYmVuY2hWaWV3UmVnaXN0cnl9IGZyb20gJy4uLy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcucmVnaXN0cnknO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlld30gZnJvbSAnLi4vbWljcm9mcm9udGVuZC12aWV3L21pY3JvZnJvbnRlbmQtd29ya2JlbmNoLXZpZXcubW9kZWwnO1xuaW1wb3J0IHtPYmplY3RzfSBmcm9tICcuLi8uLi9jb21tb24vb2JqZWN0cy51dGlsJztcblxuLyoqXG4gKiBIYW5kbGVzIG1pY3JvZnJvbnRlbmQgdmlldyBpbnRlbnRzLCBpbnN0cnVjdGluZyB0aGUgd29ya2JlbmNoIHRvIG5hdmlnYXRlIHRvIHRoZSBtaWNyb2Zyb250ZW5kIG9mIHRoZSByZXNvbHZlZCBjYXBhYmlsaXR5LlxuICpcbiAqIFZpZXcgaW50ZW50cyBhcmUgaGFuZGxlZCBpbiB0aGlzIGludGVyY2VwdG9yIGFuZCBhcmUgbm90IHRyYW5zcG9ydGVkIHRvIHRoZSBwcm92aWRpbmcgYXBwbGljYXRpb24sIGVuYWJsaW5nIHN1cHBvcnQgZm9yIGFwcGxpY2F0aW9uc1xuICogdGhhdCBhcmUgbm90IGNvbm5lY3RlZCB0byB0aGUgU0NJT04gV29ya2JlbmNoLlxuICovXG5ASW5qZWN0YWJsZSgvKiBETyBOT1QgUFJPVklERSB2aWEgJ3Byb3ZpZGVkSW4nIG1ldGFkYXRhIGFzIG9ubHkgcmVnaXN0ZXJlZCBpZiBtaWNyb2Zyb250ZW5kIHN1cHBvcnQgaXMgZW5hYmxlZC4gKi8pXG5leHBvcnQgY2xhc3MgTWljcm9mcm9udGVuZFZpZXdJbnRlbnRIYW5kbGVyIGltcGxlbWVudHMgSW50ZW50SW50ZXJjZXB0b3Ige1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3dvcmtiZW5jaFJvdXRlcjogV29ya2JlbmNoUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF92aWV3UmVnaXN0cnk6IFdvcmtiZW5jaFZpZXdSZWdpc3RyeSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9nZ2VyOiBMb2dnZXIpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWV3IGludGVudHMgYXJlIGhhbmRsZWQgaW4gdGhpcyBpbnRlcmNlcHRvciBhbmQgdGhlbiBzd2FsbG93ZWQuXG4gICAqL1xuICBwdWJsaWMgaW50ZXJjZXB0KGludGVudE1lc3NhZ2U6IEludGVudE1lc3NhZ2UsIG5leHQ6IEhhbmRsZXI8SW50ZW50TWVzc2FnZT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoaW50ZW50TWVzc2FnZS5pbnRlbnQudHlwZSA9PT0gV29ya2JlbmNoQ2FwYWJpbGl0aWVzLlZpZXcpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVWaWV3SW50ZW50KGludGVudE1lc3NhZ2UpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShpbnRlbnRNZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnN1bWVWaWV3SW50ZW50KG1lc3NhZ2U6IEludGVudE1lc3NhZ2U8V29ya2JlbmNoTmF2aWdhdGlvbkV4dHJhcyB8IHVuZGVmaW5lZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXBseVRvID0gbWVzc2FnZS5oZWFkZXJzLmdldChNZXNzYWdlSGVhZGVycy5SZXBseVRvKTtcbiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdGhpcy5uYXZpZ2F0ZShtZXNzYWdlKTtcbiAgICBhd2FpdCBCZWFucy5nZXQoTWVzc2FnZUNsaWVudCkucHVibGlzaChyZXBseVRvLCBzdWNjZXNzLCB7aGVhZGVyczogbmV3IE1hcCgpLnNldChNZXNzYWdlSGVhZGVycy5TdGF0dXMsIFJlc3BvbnNlU3RhdHVzQ29kZXMuVEVSTUlOQUwpfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG5hdmlnYXRlKG1lc3NhZ2U6IEludGVudE1lc3NhZ2U8V29ya2JlbmNoTmF2aWdhdGlvbkV4dHJhcyB8IHVuZGVmaW5lZD4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB2aWV3Q2FwYWJpbGl0eSA9IG1lc3NhZ2UuY2FwYWJpbGl0eSBhcyBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eTtcbiAgICBjb25zdCBpbnRlbnQgPSBtZXNzYWdlLmludGVudDtcbiAgICAvLyBUT0RPIFtBbmd1bGFyIDIwXSByZW1vdmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgcHJvcGVydHkgJ2JsYW5rSW5zZXJ0aW9uSW5kZXgnXG4gICAgY29uc3QgZXh0cmFzOiBXb3JrYmVuY2hOYXZpZ2F0aW9uRXh0cmFzICYge2JsYW5rSW5zZXJ0aW9uSW5kZXg/OiBudW1iZXIgfCAnc3RhcnQnIHwgJ2VuZCcgfCAnYmVmb3JlLWFjdGl2ZS12aWV3JyB8ICdhZnRlci1hY3RpdmUtdmlldyd9ID0gbWVzc2FnZS5ib2R5ID8/IHt9O1xuXG4gICAgY29uc3QgaW50ZW50UGFyYW1zID0gT2JqZWN0cy53aXRob3V0VW5kZWZpbmVkRW50cmllcyhEaWN0aW9uYXJpZXMuY29lcmNlKGludGVudC5wYXJhbXMpKTtcbiAgICBjb25zdCB7dXJsUGFyYW1zLCB0cmFuc2llbnRQYXJhbXN9ID0gTWljcm9mcm9udGVuZFZpZXdSb3V0ZXMuc3BsaXRQYXJhbXMoaW50ZW50UGFyYW1zLCB2aWV3Q2FwYWJpbGl0eSk7XG4gICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMucmVzb2x2ZVRhcmdldHMobWVzc2FnZSwgZXh0cmFzKTtcbiAgICBjb25zdCBjb21tYW5kcyA9IGV4dHJhcy5jbG9zZSA/IFtdIDogTWljcm9mcm9udGVuZFZpZXdSb3V0ZXMuY3JlYXRlTWljcm9mcm9udGVuZE5hdmlnYXRlQ29tbWFuZHModmlld0NhcGFiaWxpdHkubWV0YWRhdGEhLmlkLCB1cmxQYXJhbXMpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBOYXZpZ2F0aW5nIHRvOiAke3ZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMucGF0aH1gLCBMb2dnZXJOYW1lcy5NSUNST0ZST05URU5EX1JPVVRJTkcsIGNvbW1hbmRzLCB2aWV3Q2FwYWJpbGl0eSwgdHJhbnNpZW50UGFyYW1zKTtcbiAgICBjb25zdCBuYXZpZ2F0aW9ucyA9IGF3YWl0IFByb21pc2UuYWxsKEFycmF5cy5jb2VyY2UodGFyZ2V0cykubWFwKHRhcmdldCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fd29ya2JlbmNoUm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzLCB7XG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgYWN0aXZhdGU6IGV4dHJhcy5hY3RpdmF0ZSxcbiAgICAgICAgY2xvc2U6IGV4dHJhcy5jbG9zZSxcbiAgICAgICAgcG9zaXRpb246IGV4dHJhcy5wb3NpdGlvbiA/PyBleHRyYXMuYmxhbmtJbnNlcnRpb25JbmRleCxcbiAgICAgICAgY3NzQ2xhc3M6IGV4dHJhcy5jc3NDbGFzcyxcbiAgICAgICAgc3RhdGU6IE9iamVjdHMud2l0aG91dFVuZGVmaW5lZEVudHJpZXMoe1xuICAgICAgICAgIFtNaWNyb2Zyb250ZW5kVmlld1JvdXRlcy5TVEFURV9UUkFOU0lFTlRfUEFSQU1TXTogdHJhbnNpZW50UGFyYW1zLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgICByZXR1cm4gbmF2aWdhdGlvbnMuZXZlcnkoQm9vbGVhbik7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHRhcmdldChzKSBmb3IgdGhpcyBuYXZpZ2F0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlVGFyZ2V0cyhpbnRlbnRNZXNzYWdlOiBJbnRlbnRNZXNzYWdlLCBleHRyYXM6IFdvcmtiZW5jaE5hdmlnYXRpb25FeHRyYXMpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgLy8gQ2xvc2luZyBhIG1pY3JvZnJvbnRlbmQgdmlldyBieSB2aWV3SWQgaXMgbm90IGFsbG93ZWQsIGFzIHRoaXMgd291bGQgdmlvbGF0ZSB0aGUgY29uY2VwdCBvZiBpbnRlbnQtYmFzZWQgdmlldyBuYXZpZ2F0aW9uLlxuICAgIGlmIChleHRyYXMuY2xvc2UgJiYgZXh0cmFzLnRhcmdldCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOYXZpZ2F0ZUVycm9yXSBUaGUgdGFyZ2V0IG11c3QgYmUgZW1wdHkgaWYgY2xvc2luZyBhIHZpZXcgW3RhcmdldD0keyhleHRyYXMudGFyZ2V0KX1dYCk7XG4gICAgfVxuICAgIGlmIChleHRyYXMuY2xvc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVQcmVzZW50Vmlld0lkcyhpbnRlbnRNZXNzYWdlLCB7bWF0Y2hXaWxkY2FyZFBhcmFtczogdHJ1ZX0pID8/IFtdO1xuICAgIH1cbiAgICBpZiAoIWV4dHJhcy50YXJnZXQgfHwgZXh0cmFzLnRhcmdldCA9PT0gJ2F1dG8nKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlUHJlc2VudFZpZXdJZHMoaW50ZW50TWVzc2FnZSkgPz8gJ2JsYW5rJztcbiAgICB9XG4gICAgcmV0dXJuIGV4dHJhcy50YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb3BlbmVkIHZpZXdzIHdoaWNoIG1hdGNoIHRoZSBnaXZlbiB2aWV3IGludGVudC5cbiAgICogQSB2aWV3IG1hdGNoZXMgaWYgaXRzIHZpZXcgY2FwYWJpbGl0eSBhbmQgYWxsIGl0cyByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBlcXVhbC5cbiAgICpcbiAgICogQWxsb3dzIG1hdGNoaW5nIHdpbGRjYXJkIHBhcmFtZXRlcnMgYnkgc2V0dGluZyB0aGUgb3B0aW9uIGBtYXRjaFdpbGRjYXJkUGFyYW1ldGVyc2AgdG8gYHRydWVgLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlUHJlc2VudFZpZXdJZHMoaW50ZW50TWVzc2FnZTogSW50ZW50TWVzc2FnZSwgb3B0aW9ucz86IHttYXRjaFdpbGRjYXJkUGFyYW1zPzogYm9vbGVhbn0pOiBzdHJpbmdbXSB8IG51bGwge1xuICAgIGNvbnN0IHJlcXVpcmVkUGFyYW1zID0gaW50ZW50TWVzc2FnZS5jYXBhYmlsaXR5LnBhcmFtcz8uZmlsdGVyKHBhcmFtID0+IHBhcmFtLnJlcXVpcmVkKS5tYXAocGFyYW0gPT4gcGFyYW0ubmFtZSkgPz8gW107XG4gICAgY29uc3QgbWF0Y2hXaWxkY2FyZFBhcmFtcyA9IG9wdGlvbnM/Lm1hdGNoV2lsZGNhcmRQYXJhbXMgPz8gZmFsc2U7XG5cbiAgICBjb25zdCB2aWV3SWRzID0gdGhpcy5fdmlld1JlZ2lzdHJ5LnZpZXdzXG4gICAgICAuZmlsdGVyKHZpZXcgPT4ge1xuICAgICAgICBjb25zdCBtaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldyA9IHZpZXcuYWRhcHQoTWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXcpO1xuICAgICAgICBpZiAoIW1pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGVzdCB3aGV0aGVyIHRoZSBjYXBhYmlsaXR5IG1hdGNoZXMuXG4gICAgICAgIGlmIChtaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldy5jYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCAhPT0gaW50ZW50TWVzc2FnZS5jYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRlc3Qgd2hldGhlciBhbGwgXCJuYXZpZ2F0aW9uYWxcIiBwYXJhbXMgbWF0Y2guXG4gICAgICAgIHJldHVybiByZXF1aXJlZFBhcmFtcy5ldmVyeShuYW1lID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRlbnRQYXJhbVZhbHVlID0gaW50ZW50TWVzc2FnZS5pbnRlbnQucGFyYW1zIS5nZXQobmFtZSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaFdpbGRjYXJkUGFyYW1zICYmIGludGVudFBhcmFtVmFsdWUgPT09ICcqJykgfHwgaW50ZW50UGFyYW1WYWx1ZSA9PT0gbWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXcucGFyYW1zW25hbWVdO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAubWFwKHZpZXcgPT4gdmlldy5pZCk7XG5cbiAgICByZXR1cm4gdmlld0lkcy5sZW5ndGggPyB2aWV3SWRzIDogbnVsbDtcbiAgfVxufVxuIl19
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LWludGVudC1oYW5kbGVyLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvbWljcm9mcm9udGVuZC1wbGF0Zm9ybS9yb3V0aW5nL21pY3JvZnJvbnRlbmQtdmlldy1pbnRlbnQtaGFuZGxlci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBNEMsYUFBYSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzVJLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLHFCQUFxQixFQUFxRCxNQUFNLHlCQUF5QixDQUFDO0FBRWxILE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBUyxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFekQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDcEcsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7OztBQUVsRDs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyw4QkFBOEI7SUFFekMsWUFBb0IsZ0JBQWlDLEVBQ2pDLGFBQW9DLEVBQ3BDLE9BQWU7UUFGZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLGtCQUFhLEdBQWIsYUFBYSxDQUF1QjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUFRO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxhQUE0QixFQUFFLElBQTRCO1FBQ3pFLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsQ0FBQzthQUNJLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBNkQ7UUFDM0YsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDLENBQUM7SUFDMUksQ0FBQztJQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBNkQ7UUFDbEYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFVBQXFDLENBQUM7UUFDckUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5QixxRkFBcUY7UUFDckYsTUFBTSxNQUFNLEdBQThILE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRTdKLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sRUFBQyxTQUFTLEVBQUUsZUFBZSxFQUFDLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLG1DQUFtQyxDQUFDLGNBQWMsQ0FBQyxRQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pJLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUV4RCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLENBQUMscUJBQXFCLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMzSixNQUFNLFdBQVcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDOUMsTUFBTTtnQkFDTixNQUFNO2dCQUNOLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsbUJBQW1CO2dCQUN2RCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLEtBQUssRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUM7b0JBQ3JDLENBQUMsdUJBQXVCLENBQUMsc0JBQXNCLENBQUMsRUFBRSxlQUFlO2lCQUNsRSxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNKLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjLENBQUMsYUFBNEIsRUFBRSxNQUFpQztRQUNwRiw0SEFBNEg7UUFDNUgsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxNQUFNLEtBQUssQ0FBQyxzRUFBc0UsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLEVBQUMsbUJBQW1CLEVBQUUsSUFBSSxFQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUYsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQztRQUN0RSxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHFCQUFxQixDQUFDLGFBQTRCLEVBQUUsTUFBaUMsRUFBRSxPQUF5QztRQUN0SSxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2SCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sRUFBRSxtQkFBbUIsSUFBSSxLQUFLLENBQUM7UUFFbEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLO2FBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2FBQ2hFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNiLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2dCQUNoQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCx1Q0FBdUM7WUFDdkMsSUFBSSwwQkFBMEIsQ0FBQyxVQUFVLENBQUMsUUFBUyxDQUFDLEVBQUUsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDakcsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsZ0RBQWdEO1lBQ2hELE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDakMsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hFLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxnQkFBZ0IsS0FBSyxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsS0FBSywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7YUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6QyxDQUFDOzhHQXZHVSw4QkFBOEI7a0hBQTlCLDhCQUE4Qjs7MkZBQTlCLDhCQUE4QjtrQkFEMUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtIYW5kbGVyLCBJbnRlbnRJbnRlcmNlcHRvciwgSW50ZW50TWVzc2FnZSwgTWVzc2FnZUNsaWVudCwgTWVzc2FnZUhlYWRlcnMsIFJlc3BvbnNlU3RhdHVzQ29kZXN9IGZyb20gJ0BzY2lvbi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1dvcmtiZW5jaENhcGFiaWxpdGllcywgV29ya2JlbmNoTmF2aWdhdGlvbkV4dHJhcywgV29ya2JlbmNoVmlld0NhcGFiaWxpdHl9IGZyb20gJ0BzY2lvbi93b3JrYmVuY2gtY2xpZW50JztcbmltcG9ydCB7V29ya2JlbmNoUm91dGVyfSBmcm9tICcuLi8uLi9yb3V0aW5nL3dvcmtiZW5jaC1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRWaWV3Um91dGVzfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtdmlldy1yb3V0ZXMnO1xuaW1wb3J0IHtMb2dnZXIsIExvZ2dlck5hbWVzfSBmcm9tICcuLi8uLi9sb2dnaW5nJztcbmltcG9ydCB7QmVhbnN9IGZyb20gJ0BzY2lvbi90b29sa2l0L2JlYW4tbWFuYWdlcic7XG5pbXBvcnQge0FycmF5cywgRGljdGlvbmFyaWVzfSBmcm9tICdAc2Npb24vdG9vbGtpdC91dGlsJztcbmltcG9ydCB7V29ya2JlbmNoVmlld1JlZ2lzdHJ5fSBmcm9tICcuLi8uLi92aWV3L3dvcmtiZW5jaC12aWV3LnJlZ2lzdHJ5JztcbmltcG9ydCB7TWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXd9IGZyb20gJy4uL21pY3JvZnJvbnRlbmQtdmlldy9taWNyb2Zyb250ZW5kLXdvcmtiZW5jaC12aWV3Lm1vZGVsJztcbmltcG9ydCB7T2JqZWN0c30gZnJvbSAnLi4vLi4vY29tbW9uL29iamVjdHMudXRpbCc7XG5cbi8qKlxuICogSGFuZGxlcyBtaWNyb2Zyb250ZW5kIHZpZXcgaW50ZW50cywgaW5zdHJ1Y3RpbmcgdGhlIHdvcmtiZW5jaCB0byBuYXZpZ2F0ZSB0byB0aGUgbWljcm9mcm9udGVuZCBvZiB0aGUgcmVzb2x2ZWQgY2FwYWJpbGl0eS5cbiAqXG4gKiBWaWV3IGludGVudHMgYXJlIGhhbmRsZWQgaW4gdGhpcyBpbnRlcmNlcHRvciBhbmQgYXJlIG5vdCB0cmFuc3BvcnRlZCB0byB0aGUgcHJvdmlkaW5nIGFwcGxpY2F0aW9uLCBlbmFibGluZyBzdXBwb3J0IGZvciBhcHBsaWNhdGlvbnNcbiAqIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gdGhlIFNDSU9OIFdvcmtiZW5jaC5cbiAqL1xuQEluamVjdGFibGUoLyogRE8gTk9UIFBST1ZJREUgdmlhICdwcm92aWRlZEluJyBtZXRhZGF0YSBhcyBvbmx5IHJlZ2lzdGVyZWQgaWYgbWljcm9mcm9udGVuZCBzdXBwb3J0IGlzIGVuYWJsZWQuICovKVxuZXhwb3J0IGNsYXNzIE1pY3JvZnJvbnRlbmRWaWV3SW50ZW50SGFuZGxlciBpbXBsZW1lbnRzIEludGVudEludGVyY2VwdG9yIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF93b3JrYmVuY2hSb3V0ZXI6IFdvcmtiZW5jaFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdmlld1JlZ2lzdHJ5OiBXb3JrYmVuY2hWaWV3UmVnaXN0cnksXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvZ2dlcjogTG9nZ2VyKSB7XG4gIH1cblxuICAvKipcbiAgICogVmlldyBpbnRlbnRzIGFyZSBoYW5kbGVkIGluIHRoaXMgaW50ZXJjZXB0b3IgYW5kIHRoZW4gc3dhbGxvd2VkLlxuICAgKi9cbiAgcHVibGljIGludGVyY2VwdChpbnRlbnRNZXNzYWdlOiBJbnRlbnRNZXNzYWdlLCBuZXh0OiBIYW5kbGVyPEludGVudE1lc3NhZ2U+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGludGVudE1lc3NhZ2UuaW50ZW50LnR5cGUgPT09IFdvcmtiZW5jaENhcGFiaWxpdGllcy5WaWV3KSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25zdW1lVmlld0ludGVudChpbnRlbnRNZXNzYWdlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUoaW50ZW50TWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb25zdW1lVmlld0ludGVudChtZXNzYWdlOiBJbnRlbnRNZXNzYWdlPFdvcmtiZW5jaE5hdmlnYXRpb25FeHRyYXMgfCB1bmRlZmluZWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVwbHlUbyA9IG1lc3NhZ2UuaGVhZGVycy5nZXQoTWVzc2FnZUhlYWRlcnMuUmVwbHlUbyk7XG4gICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHRoaXMubmF2aWdhdGUobWVzc2FnZSk7XG4gICAgYXdhaXQgQmVhbnMuZ2V0KE1lc3NhZ2VDbGllbnQpLnB1Ymxpc2gocmVwbHlUbywgc3VjY2Vzcywge2hlYWRlcnM6IG5ldyBNYXAoKS5zZXQoTWVzc2FnZUhlYWRlcnMuU3RhdHVzLCBSZXNwb25zZVN0YXR1c0NvZGVzLlRFUk1JTkFMKX0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBuYXZpZ2F0ZShtZXNzYWdlOiBJbnRlbnRNZXNzYWdlPFdvcmtiZW5jaE5hdmlnYXRpb25FeHRyYXMgfCB1bmRlZmluZWQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgdmlld0NhcGFiaWxpdHkgPSBtZXNzYWdlLmNhcGFiaWxpdHkgYXMgV29ya2JlbmNoVmlld0NhcGFiaWxpdHk7XG4gICAgY29uc3QgaW50ZW50ID0gbWVzc2FnZS5pbnRlbnQ7XG4gICAgLy8gVE9ETyBbQW5ndWxhciAyMF0gcmVtb3ZlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHByb3BlcnR5ICdibGFua0luc2VydGlvbkluZGV4J1xuICAgIGNvbnN0IGV4dHJhczogV29ya2JlbmNoTmF2aWdhdGlvbkV4dHJhcyAmIHtibGFua0luc2VydGlvbkluZGV4PzogbnVtYmVyIHwgJ3N0YXJ0JyB8ICdlbmQnIHwgJ2JlZm9yZS1hY3RpdmUtdmlldycgfCAnYWZ0ZXItYWN0aXZlLXZpZXcnfSA9IG1lc3NhZ2UuYm9keSA/PyB7fTtcblxuICAgIGNvbnN0IGludGVudFBhcmFtcyA9IE9iamVjdHMud2l0aG91dFVuZGVmaW5lZEVudHJpZXMoRGljdGlvbmFyaWVzLmNvZXJjZShpbnRlbnQucGFyYW1zKSk7XG4gICAgY29uc3Qge3VybFBhcmFtcywgdHJhbnNpZW50UGFyYW1zfSA9IE1pY3JvZnJvbnRlbmRWaWV3Um91dGVzLnNwbGl0UGFyYW1zKGludGVudFBhcmFtcywgdmlld0NhcGFiaWxpdHkpO1xuICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnJlc29sdmVUYXJnZXRzKG1lc3NhZ2UsIGV4dHJhcyk7XG4gICAgY29uc3QgY29tbWFuZHMgPSBleHRyYXMuY2xvc2UgPyBbXSA6IE1pY3JvZnJvbnRlbmRWaWV3Um91dGVzLmNyZWF0ZU1pY3JvZnJvbnRlbmROYXZpZ2F0ZUNvbW1hbmRzKHZpZXdDYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCwgdXJsUGFyYW1zKTtcbiAgICBjb25zdCBwYXJ0SWQgPSBleHRyYXMuY2xvc2UgPyB1bmRlZmluZWQgOiBleHRyYXMucGFydElkO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBOYXZpZ2F0aW5nIHRvOiAke3ZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMucGF0aH1gLCBMb2dnZXJOYW1lcy5NSUNST0ZST05URU5EX1JPVVRJTkcsIGNvbW1hbmRzLCB2aWV3Q2FwYWJpbGl0eSwgdHJhbnNpZW50UGFyYW1zKTtcbiAgICBjb25zdCBuYXZpZ2F0aW9ucyA9IGF3YWl0IFByb21pc2UuYWxsKEFycmF5cy5jb2VyY2UodGFyZ2V0cykubWFwKHRhcmdldCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fd29ya2JlbmNoUm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzLCB7XG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgcGFydElkLFxuICAgICAgICBhY3RpdmF0ZTogZXh0cmFzLmFjdGl2YXRlLFxuICAgICAgICBjbG9zZTogZXh0cmFzLmNsb3NlLFxuICAgICAgICBwb3NpdGlvbjogZXh0cmFzLnBvc2l0aW9uID8/IGV4dHJhcy5ibGFua0luc2VydGlvbkluZGV4LFxuICAgICAgICBjc3NDbGFzczogZXh0cmFzLmNzc0NsYXNzLFxuICAgICAgICBzdGF0ZTogT2JqZWN0cy53aXRob3V0VW5kZWZpbmVkRW50cmllcyh7XG4gICAgICAgICAgW01pY3JvZnJvbnRlbmRWaWV3Um91dGVzLlNUQVRFX1RSQU5TSUVOVF9QQVJBTVNdOiB0cmFuc2llbnRQYXJhbXMsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICAgIHJldHVybiBuYXZpZ2F0aW9ucy5ldmVyeShCb29sZWFuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgdGFyZ2V0KHMpIGZvciB0aGlzIG5hdmlnYXRpb24uXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVUYXJnZXRzKGludGVudE1lc3NhZ2U6IEludGVudE1lc3NhZ2UsIGV4dHJhczogV29ya2JlbmNoTmF2aWdhdGlvbkV4dHJhcyk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICAvLyBDbG9zaW5nIGEgbWljcm9mcm9udGVuZCB2aWV3IGJ5IHZpZXdJZCBpcyBub3QgYWxsb3dlZCwgYXMgdGhpcyB3b3VsZCB2aW9sYXRlIHRoZSBjb25jZXB0IG9mIGludGVudC1iYXNlZCB2aWV3IG5hdmlnYXRpb24uXG4gICAgaWYgKGV4dHJhcy5jbG9zZSAmJiBleHRyYXMudGFyZ2V0KSB7XG4gICAgICB0aHJvdyBFcnJvcihgW05hdmlnYXRlRXJyb3JdIFRoZSB0YXJnZXQgbXVzdCBiZSBlbXB0eSBpZiBjbG9zaW5nIGEgdmlldyBbdGFyZ2V0PSR7KGV4dHJhcy50YXJnZXQpfV1gKTtcbiAgICB9XG4gICAgaWYgKGV4dHJhcy5jbG9zZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVByZXNlbnRWaWV3SWRzKGludGVudE1lc3NhZ2UsIGV4dHJhcywge21hdGNoV2lsZGNhcmRQYXJhbXM6IHRydWV9KSA/PyBbXTtcbiAgICB9XG4gICAgaWYgKCFleHRyYXMudGFyZ2V0IHx8IGV4dHJhcy50YXJnZXQgPT09ICdhdXRvJykge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVByZXNlbnRWaWV3SWRzKGludGVudE1lc3NhZ2UsIGV4dHJhcykgPz8gJ2JsYW5rJztcbiAgICB9XG4gICAgcmV0dXJuIGV4dHJhcy50YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb3BlbmVkIHZpZXdzIHdoaWNoIG1hdGNoIHRoZSBnaXZlbiB2aWV3IGludGVudC5cbiAgICogQSB2aWV3IG1hdGNoZXMgaWYgaXRzIHZpZXcgY2FwYWJpbGl0eSBhbmQgYWxsIGl0cyByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBlcXVhbC5cbiAgICpcbiAgICogQWxsb3dzIG1hdGNoaW5nIHdpbGRjYXJkIHBhcmFtZXRlcnMgYnkgc2V0dGluZyB0aGUgb3B0aW9uIGBtYXRjaFdpbGRjYXJkUGFyYW1ldGVyc2AgdG8gYHRydWVgLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlUHJlc2VudFZpZXdJZHMoaW50ZW50TWVzc2FnZTogSW50ZW50TWVzc2FnZSwgZXh0cmFzOiBXb3JrYmVuY2hOYXZpZ2F0aW9uRXh0cmFzLCBvcHRpb25zPzoge21hdGNoV2lsZGNhcmRQYXJhbXM/OiBib29sZWFufSk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgY29uc3QgcmVxdWlyZWRQYXJhbXMgPSBpbnRlbnRNZXNzYWdlLmNhcGFiaWxpdHkucGFyYW1zPy5maWx0ZXIocGFyYW0gPT4gcGFyYW0ucmVxdWlyZWQpLm1hcChwYXJhbSA9PiBwYXJhbS5uYW1lKSA/PyBbXTtcbiAgICBjb25zdCBtYXRjaFdpbGRjYXJkUGFyYW1zID0gb3B0aW9ucz8ubWF0Y2hXaWxkY2FyZFBhcmFtcyA/PyBmYWxzZTtcblxuICAgIGNvbnN0IHZpZXdJZHMgPSB0aGlzLl92aWV3UmVnaXN0cnkudmlld3NcbiAgICAgIC5maWx0ZXIodmlldyA9PiAhZXh0cmFzLnBhcnRJZCB8fCBleHRyYXMucGFydElkID09PSB2aWV3LnBhcnQuaWQpXG4gICAgICAuZmlsdGVyKHZpZXcgPT4ge1xuICAgICAgICBjb25zdCBtaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldyA9IHZpZXcuYWRhcHQoTWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXcpO1xuICAgICAgICBpZiAoIW1pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGVzdCB3aGV0aGVyIHRoZSBjYXBhYmlsaXR5IG1hdGNoZXMuXG4gICAgICAgIGlmIChtaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldy5jYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCAhPT0gaW50ZW50TWVzc2FnZS5jYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRlc3Qgd2hldGhlciBhbGwgXCJuYXZpZ2F0aW9uYWxcIiBwYXJhbXMgbWF0Y2guXG4gICAgICAgIHJldHVybiByZXF1aXJlZFBhcmFtcy5ldmVyeShuYW1lID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRlbnRQYXJhbVZhbHVlID0gaW50ZW50TWVzc2FnZS5pbnRlbnQucGFyYW1zIS5nZXQobmFtZSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaFdpbGRjYXJkUGFyYW1zICYmIGludGVudFBhcmFtVmFsdWUgPT09ICcqJykgfHwgaW50ZW50UGFyYW1WYWx1ZSA9PT0gbWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXcucGFyYW1zW25hbWVdO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAubWFwKHZpZXcgPT4gdmlldy5pZCk7XG5cbiAgICByZXR1cm4gdmlld0lkcy5sZW5ndGggPyB2aWV3SWRzIDogbnVsbDtcbiAgfVxufVxuIl19