@scion/workbench 17.0.0-beta.9 → 18.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_index.scss +7 -5
- package/design/_workbench-global-styles.scss +18 -0
- package/design/_workbench-icon-font.scss +1 -1
- package/design/_workbench-popup-global-styles.scss +1 -1
- package/design/{_workbench-view-drag-image-global-styles.scss → _workbench-view-global-styles.scss} +1 -2
- package/esm2022/lib/activation-instant.provider.mjs +3 -3
- package/esm2022/lib/common/asserts.util.mjs +1 -1
- package/esm2022/lib/common/class-list.mjs +67 -29
- package/esm2022/lib/common/coerce-observable.pipe.mjs +3 -3
- package/esm2022/lib/common/dom.util.mjs +1 -1
- package/esm2022/lib/common/grid-element-if-visible.pipe.mjs +4 -4
- package/esm2022/lib/common/instanceof.pipe.mjs +3 -3
- package/esm2022/lib/common/map-coerce.pipe.mjs +3 -3
- package/esm2022/lib/common/math.util.mjs +16 -0
- package/esm2022/lib/common/null-if-empty.pipe.mjs +4 -4
- package/esm2022/lib/common/objects.util.mjs +7 -1
- package/esm2022/lib/common/observables.mjs +1 -1
- package/esm2022/lib/common/operators.mjs +1 -12
- package/esm2022/lib/common/stringify-error.util.mjs +1 -1
- package/esm2022/lib/common/typeof.pipe.mjs +3 -3
- package/esm2022/lib/common/uid.util.mjs +22 -0
- package/esm2022/lib/common//311/265destroy-ref.mjs +1 -1
- package/esm2022/lib/content-projection/content-as-overlay.component.mjs +87 -30
- package/esm2022/lib/content-projection/workbench-element-references.mjs +32 -0
- package/esm2022/lib/dialog/dialog-footer/dialog-action-filter.pipe.mjs +3 -3
- package/esm2022/lib/dialog/dialog-footer/dialog-footer.component.mjs +3 -3
- package/esm2022/lib/dialog/dialog-footer/workbench-dialog-action.directive.mjs +3 -3
- package/esm2022/lib/dialog/dialog-footer/workbench-dialog-footer.directive.mjs +3 -3
- package/esm2022/lib/dialog/dialog-header/dialog-header.component.mjs +5 -10
- package/esm2022/lib/dialog/dialog-header/workbench-dialog-header.directive.mjs +3 -3
- package/esm2022/lib/dialog/movable.directive.mjs +6 -6
- package/esm2022/lib/dialog/resizable.directive.mjs +6 -6
- package/esm2022/lib/dialog/workbench-dialog.component.mjs +27 -25
- package/esm2022/lib/dialog/workbench-dialog.mjs +61 -1
- package/esm2022/lib/dialog/workbench-dialog.registry.mjs +4 -4
- package/esm2022/lib/dialog/workbench-dialog.service.mjs +3 -3
- package/esm2022/lib/dialog//311/265workbench-dialog.mjs +99 -61
- package/esm2022/lib/dialog//311/265workbench-dialog.service.mjs +28 -25
- package/esm2022/lib/executor/latest-task-executor.mjs +55 -0
- package/esm2022/lib/executor/single-task-executor.mjs +9 -19
- package/esm2022/lib/filter-field/filter-field.component.mjs +8 -8
- package/esm2022/lib/glass-pane/glass-pane.directive.mjs +4 -4
- package/esm2022/lib/layout/grid-element/grid-element.component.mjs +10 -20
- package/esm2022/lib/layout/main-area-layout/main-area-layout.component.mjs +19 -22
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v5.model.mjs +11 -0
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v6.model.mjs +11 -0
- package/esm2022/lib/layout/migration/workbench-layout-migration-v3.service.mjs +7 -7
- package/esm2022/lib/layout/migration/workbench-layout-migration-v4.service.mjs +4 -4
- package/esm2022/lib/layout/migration/workbench-layout-migration-v5.service.mjs +67 -0
- package/esm2022/lib/layout/migration/workbench-layout-migration-v6.service.mjs +59 -0
- package/esm2022/lib/layout/stringifier.mjs +70 -0
- package/esm2022/lib/layout/workbench-layout.component.mjs +19 -23
- package/esm2022/lib/layout/workbench-layout.factory.mjs +3 -3
- package/esm2022/lib/layout/workbench-layout.mjs +1 -1
- package/esm2022/lib/layout/workbench-layout.model.mjs +1 -1
- package/esm2022/lib/layout/workbench-layout.service.mjs +28 -26
- package/esm2022/lib/layout/workbench-layouts.util.mjs +1 -9
- package/esm2022/lib/layout/workench-layout-serializer.service.mjs +22 -32
- package/esm2022/lib/layout//311/265workbench-layout.factory.mjs +6 -5
- package/esm2022/lib/layout//311/265workbench-layout.mjs +77 -66
- package/esm2022/lib/logging/console-appender.service.mjs +4 -4
- package/esm2022/lib/logging/logger.mjs +3 -3
- package/esm2022/lib/logging/logging-support.mjs +7 -13
- package/esm2022/lib/logging/logging.model.mjs +3 -3
- package/esm2022/lib/logging//311/265logger.mjs +12 -12
- package/esm2022/lib/message-box/message-box-footer/message-box-footer.component.mjs +9 -8
- package/esm2022/lib/message-box/message-box-header/message-box-header.component.mjs +5 -5
- package/esm2022/lib/message-box/workbench-message-box.component.mjs +5 -5
- package/esm2022/lib/message-box/workbench-message-box.service.mjs +3 -3
- package/esm2022/lib/message-box//311/265workbench-message-box.service.mjs +6 -5
- package/esm2022/lib/microfrontend-platform/common/microfrontend.util.mjs +22 -6
- package/esm2022/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.mjs +29 -22
- package/esm2022/lib/microfrontend-platform/initialization/ng-zone-observable-decorator.mjs +6 -6
- package/esm2022/lib/microfrontend-platform/initialization/workbench-host-manifest-interceptor.service.mjs +14 -4
- package/esm2022/lib/microfrontend-platform/manifest-object-cache.service.mjs +63 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.mjs +8 -7
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-intent-handler.interceptor.mjs +4 -4
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.mjs +8 -12
- package/esm2022/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.mjs +21 -12
- package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.mjs +10 -9
- package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.mjs +6 -6
- package/esm2022/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.mjs +17 -15
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.mjs +6 -5
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.interceptor.mjs +4 -4
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-legacy-intent-translator.interceptor.mjs +4 -4
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.mjs +10 -15
- package/esm2022/lib/microfrontend-platform/microfrontend-notification/microfrontend-notification-intent-handler.service.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.mjs +39 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.mjs +120 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.mjs +55 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.mjs +19 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-platform-config-loader.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-validator.interceptor.mjs +7 -6
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.mjs +13 -14
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.mjs +14 -30
- package/esm2022/lib/microfrontend-platform/microfrontend-splash/microfrontend-splash.component.mjs +5 -5
- package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.mjs +13 -29
- package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs +92 -72
- package/esm2022/lib/microfrontend-platform/public_api.mjs +2 -1
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.mjs +8 -7
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.mjs +20 -18
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-routes.mjs +30 -8
- package/esm2022/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.mjs +32 -0
- package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +29 -11
- package/esm2022/lib/migration/workbench-migrator.mjs +1 -1
- package/esm2022/lib/notification/notification-css-classes.pipe.mjs +3 -3
- package/esm2022/lib/notification/notification-list.component.mjs +6 -10
- package/esm2022/lib/notification/notification.component.mjs +6 -7
- package/esm2022/lib/notification/notification.service.mjs +8 -7
- package/esm2022/lib/notification/text-notification.component.mjs +3 -3
- package/esm2022/lib/notification//311/265notification.mjs +1 -1
- package/esm2022/lib/page-not-found/page-not-found.component.mjs +7 -9
- package/esm2022/lib/part/part-action-bar/part-action-bar.component.mjs +12 -20
- package/esm2022/lib/part/part-action-bar/part-action.directive.mjs +7 -7
- package/esm2022/lib/part/part-bar/part-bar.component.mjs +334 -265
- package/esm2022/lib/part/part-portal.pipe.mjs +10 -10
- package/esm2022/lib/part/part.component.mjs +34 -43
- package/esm2022/lib/part/view-context-menu/accelerator-format.pipe.mjs +4 -4
- package/esm2022/lib/part/view-context-menu/text.component.mjs +17 -13
- package/esm2022/lib/part/view-context-menu/view-menu.component.mjs +6 -8
- package/esm2022/lib/part/view-context-menu/view-menu.directive.mjs +5 -5
- package/esm2022/lib/part/view-context-menu/view-menu.service.mjs +50 -51
- package/esm2022/lib/part/view-list/view-list.component.mjs +42 -49
- package/esm2022/lib/part/view-list-button/view-list-button.component.mjs +23 -27
- package/esm2022/lib/part/view-list-item/view-list-item.component.mjs +16 -18
- package/esm2022/lib/part/view-tab/view-tab.component.mjs +100 -111
- package/esm2022/lib/part/view-tab-content/view-tab-content.component.mjs +5 -6
- package/esm2022/lib/part/view-tab-drag-image/view-tab-drag-image.component.mjs +17 -18
- package/esm2022/lib/part/workbench-part-action.registry.mjs +18 -42
- package/esm2022/lib/part/workbench-part.model.mjs +10 -1
- package/esm2022/lib/part/workbench-part.registry.mjs +11 -45
- package/esm2022/lib/part//311/265workbench-part.model.mjs +71 -55
- package/esm2022/lib/perspective/migration/workbench-perspective-migration-v2.service.mjs +4 -4
- package/esm2022/lib/perspective/workbench-grid-merger.service.mjs +6 -6
- package/esm2022/lib/perspective/workbench-perspective-storage.service.mjs +4 -4
- package/esm2022/lib/perspective/workbench-perspective-view-conflict-resolver.service.mjs +4 -4
- package/esm2022/lib/perspective/workbench-perspective.model.mjs +1 -1
- package/esm2022/lib/perspective/workbench-perspective.registry.mjs +11 -43
- package/esm2022/lib/perspective/workbench-perspective.service.mjs +73 -64
- package/esm2022/lib/perspective/workench-perspective-serializer.service.mjs +5 -5
- package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +62 -47
- package/esm2022/lib/popup/popup.component.mjs +6 -6
- package/esm2022/lib/popup/popup.config.mjs +27 -25
- package/esm2022/lib/popup/popup.service.mjs +171 -176
- package/esm2022/lib/portal/wb-component-portal.mjs +18 -17
- package/esm2022/lib/portal/workbench-portal-outlet.directive.mjs +4 -4
- package/esm2022/lib/public_api.mjs +1 -1
- package/esm2022/lib/registry/workbench-object-registry.mjs +38 -17
- package/esm2022/lib/routing/empty-outlet/empty-outlet.component.mjs +3 -3
- package/esm2022/lib/routing/public_api.mjs +2 -2
- package/esm2022/lib/routing/routing.model.mjs +1 -1
- package/esm2022/lib/routing/routing.util.mjs +215 -0
- package/esm2022/lib/routing/url-segment-matcher.mjs +1 -1
- package/esm2022/lib/routing/workbench-auxiliary-route-installer.service.mjs +110 -0
- package/esm2022/lib/routing/workbench-dialog-differ.mjs +6 -6
- package/esm2022/lib/routing/workbench-layout-differ.mjs +6 -13
- package/esm2022/lib/routing/workbench-message-box-differ.mjs +6 -6
- package/esm2022/lib/routing/workbench-navigational-states.mjs +2 -2
- package/esm2022/lib/routing/workbench-popup-differ.mjs +6 -6
- package/esm2022/lib/routing/workbench-route-guards.mjs +57 -0
- package/esm2022/lib/routing/workbench-router-link.directive.mjs +5 -5
- package/esm2022/lib/routing/workbench-router.service.mjs +3 -3
- package/esm2022/lib/routing/workbench-url-observer.service.mjs +143 -151
- package/esm2022/lib/routing/workbench-view-outlet-differ.mjs +58 -0
- package/esm2022/lib/routing//311/265location.mjs +3 -3
- package/esm2022/lib/routing//311/265workbench-router.service.mjs +121 -76
- package/esm2022/lib/startup/splash/splash.component.mjs +5 -5
- package/esm2022/lib/startup/workbench-initializer.mjs +1 -1
- package/esm2022/lib/startup/workbench-launcher.service.mjs +28 -16
- package/esm2022/lib/storage/workbench-storage.mjs +3 -3
- package/esm2022/lib/testing/workbench-testing.module.mjs +4 -4
- package/esm2022/lib/testing/workbench.provider.mjs +5 -5
- package/esm2022/lib/theme/workbench-theme-switcher.service.mjs +18 -22
- package/esm2022/lib/view/public_api.mjs +1 -2
- package/esm2022/lib/view/view-move-handler.service.mjs +73 -58
- package/esm2022/lib/view/view-portal.pipe.mjs +9 -9
- package/esm2022/lib/view/view.component.mjs +55 -43
- package/esm2022/lib/view/workbench-view.model.mjs +1 -1
- package/esm2022/lib/view/workbench-view.registry.mjs +11 -45
- package/esm2022/lib/view//311/265workbench-view.model.mjs +183 -153
- package/esm2022/lib/view-dnd/grid-drop-targets.util.mjs +2 -2
- package/esm2022/lib/view-dnd/requires-drop-zone.pipe.mjs +4 -4
- package/esm2022/lib/view-dnd/view-drag.service.mjs +89 -73
- package/esm2022/lib/view-dnd/view-drop-placeholder-renderer.service.mjs +9 -9
- package/esm2022/lib/view-dnd/view-drop-zone.directive.mjs +9 -9
- package/esm2022/lib/view-dnd/view-tab-drag-image-renderer.service.mjs +45 -58
- package/esm2022/lib/workbench-config.mjs +2 -2
- package/esm2022/lib/workbench-id.mjs +3 -3
- package/esm2022/lib/workbench.component.mjs +67 -55
- package/esm2022/lib/workbench.constants.mjs +1 -5
- package/esm2022/lib/workbench.model.mjs +1 -1
- package/esm2022/lib/workbench.module.mjs +4 -4
- package/esm2022/lib/workbench.provider.mjs +3 -9
- package/esm2022/lib/workbench.service.mjs +4 -4
- package/esm2022/lib//311/265workbench.service.mjs +40 -44
- package/fesm2022/scion-workbench.mjs +4348 -3628
- package/fesm2022/scion-workbench.mjs.map +1 -1
- package/lib/common/class-list.d.ts +35 -22
- package/lib/common/math.util.d.ts +7 -0
- package/lib/common/objects.util.d.ts +6 -2
- package/lib/common/operators.d.ts +1 -6
- package/lib/common/uid.util.d.ts +9 -0
- package/lib/content-projection/content-as-overlay.component.d.ts +39 -22
- package/lib/content-projection/workbench-element-references.d.ts +13 -0
- package/lib/dialog/workbench-dialog.component.d.ts +3 -2
- package/lib/dialog/workbench-dialog.d.ts +57 -13
- package/lib/dialog//311/265workbench-dialog.d.ts +38 -24
- package/lib/dialog//311/265workbench-dialog.service.d.ts +10 -11
- package/lib/executor/latest-task-executor.d.ts +26 -0
- package/lib/executor/single-task-executor.d.ts +5 -8
- package/lib/filter-field/filter-field.component.d.ts +1 -1
- package/lib/layout/grid-element/grid-element.component.d.ts +1 -8
- package/lib/layout/main-area-layout/main-area-layout.component.d.ts +0 -4
- package/lib/layout/migration/model/workbench-layout-migration-v5.model.d.ts +36 -0
- package/lib/layout/migration/model/workbench-layout-migration-v6.model.d.ts +35 -0
- package/lib/layout/migration/{workbench-layout-migration-v2.service.d.ts → workbench-layout-migration-v5.service.d.ts} +4 -5
- package/lib/layout/migration/workbench-layout-migration-v6.service.d.ts +12 -0
- package/lib/layout/stringifier.d.ts +26 -0
- package/lib/layout/workbench-layout.component.d.ts +4 -5
- package/lib/layout/workbench-layout.d.ts +9 -6
- package/lib/layout/workbench-layout.model.d.ts +4 -3
- package/lib/layout/workbench-layout.service.d.ts +14 -16
- package/lib/layout/workbench-layouts.util.d.ts +0 -6
- package/lib/layout/workench-layout-serializer.service.d.ts +13 -16
- package/lib/layout//311/265workbench-layout.d.ts +18 -19
- package/lib/layout//311/265workbench-layout.factory.d.ts +3 -2
- package/lib/logging//311/265logger.d.ts +2 -3
- package/lib/microfrontend-platform/common/microfrontend.util.d.ts +5 -1
- package/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.d.ts +7 -3
- package/lib/microfrontend-platform/manifest-object-cache.service.d.ts +33 -0
- package/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.d.ts +3 -6
- package/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.d.ts +2 -1
- package/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.d.ts +1 -1
- package/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.d.ts +2 -1
- package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.d.ts +10 -0
- package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.d.ts +24 -0
- package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.d.ts +20 -0
- package/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.d.ts +9 -0
- package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.d.ts +4 -8
- package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.d.ts +0 -4
- package/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.d.ts +5 -12
- package/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.d.ts +23 -33
- package/lib/microfrontend-platform/public_api.d.ts +1 -0
- package/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.d.ts +1 -1
- package/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.d.ts +3 -7
- package/lib/microfrontend-platform/routing/microfrontend-view-routes.d.ts +9 -2
- package/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.d.ts +11 -0
- package/lib/notification/notification-list.component.d.ts +0 -2
- package/lib/page-not-found/page-not-found.component.d.ts +1 -0
- package/lib/part/part-action-bar/part-action-bar.component.d.ts +3 -4
- package/lib/part/part-action-bar/part-action.directive.d.ts +2 -2
- package/lib/part/part-bar/part-bar.component.d.ts +73 -63
- package/lib/part/part-portal.pipe.d.ts +3 -5
- package/lib/part/part.component.d.ts +9 -12
- package/lib/part/view-context-menu/text.component.d.ts +3 -4
- package/lib/part/view-context-menu/view-menu.directive.d.ts +1 -1
- package/lib/part/view-context-menu/view-menu.service.d.ts +13 -17
- package/lib/part/view-list/view-list.component.d.ts +8 -21
- package/lib/part/view-list-button/view-list-button.component.d.ts +8 -11
- package/lib/part/view-list-item/view-list-item.component.d.ts +3 -7
- package/lib/part/view-tab/view-tab.component.d.ts +19 -29
- package/lib/part/view-tab-drag-image/view-tab-drag-image.component.d.ts +4 -4
- package/lib/part/workbench-part-action.registry.d.ts +3 -23
- package/lib/part/workbench-part.model.d.ts +8 -27
- package/lib/part/workbench-part.registry.d.ts +3 -26
- package/lib/part//311/265workbench-part.model.d.ts +23 -17
- package/lib/perspective/workbench-perspective.model.d.ts +18 -25
- package/lib/perspective/workbench-perspective.registry.d.ts +3 -26
- package/lib/perspective/workbench-perspective.service.d.ts +16 -14
- package/lib/perspective/workench-perspective-serializer.service.d.ts +1 -1
- package/lib/perspective//311/265workbench-perspective.model.d.ts +30 -21
- package/lib/popup/popup.config.d.ts +11 -10
- package/lib/popup/popup.service.d.ts +15 -28
- package/lib/portal/wb-component-portal.d.ts +21 -5
- package/lib/public_api.d.ts +1 -1
- package/lib/registry/workbench-object-registry.d.ts +10 -6
- package/lib/routing/public_api.d.ts +2 -2
- package/lib/routing/routing.model.d.ts +25 -13
- package/lib/routing/{router.util.d.ts → routing.util.d.ts} +28 -1
- package/lib/routing/{workbench-auxiliary-routes-registrator.service.d.ts → workbench-auxiliary-route-installer.service.d.ts} +10 -3
- package/lib/routing/workbench-layout-differ.d.ts +1 -2
- package/lib/routing/workbench-navigational-states.d.ts +8 -4
- package/lib/{view/workbench-view-route-guards.d.ts → routing/workbench-route-guards.d.ts} +8 -2
- package/lib/routing/workbench-url-observer.service.d.ts +31 -55
- package/lib/routing/workbench-view-outlet-differ.d.ts +32 -0
- package/lib/routing//311/265workbench-router.service.d.ts +22 -18
- package/lib/startup/workbench-launcher.service.d.ts +4 -5
- package/lib/testing/workbench.provider.d.ts +3 -1
- package/lib/theme/workbench-theme-switcher.service.d.ts +4 -6
- package/lib/view/public_api.d.ts +0 -1
- package/lib/view/view-move-handler.service.d.ts +16 -14
- package/lib/view/view-portal.pipe.d.ts +1 -3
- package/lib/view/view.component.d.ts +21 -12
- package/lib/view/workbench-view.model.d.ts +88 -36
- package/lib/view/workbench-view.registry.d.ts +3 -27
- package/lib/view//311/265workbench-view.model.d.ts +62 -71
- package/lib/view-dnd/view-drag.service.d.ts +79 -49
- package/lib/view-dnd/view-drop-placeholder-renderer.service.d.ts +1 -1
- package/lib/view-dnd/view-tab-drag-image-renderer.service.d.ts +12 -36
- package/lib/workbench-config.d.ts +19 -7
- package/lib/workbench.component.d.ts +16 -30
- package/lib/workbench.constants.d.ts +0 -5
- package/lib/workbench.model.d.ts +31 -3
- package/lib/workbench.service.d.ts +58 -56
- package/lib//311/265workbench.service.d.ts +18 -31
- package/package.json +12 -12
- package/esm2022/lib/common/filter-by-predicate.pipe.mjs +0 -27
- package/esm2022/lib/common/filter-by-text.pipe.mjs +0 -39
- package/esm2022/lib/common/uuid.util.mjs +0 -17
- package/esm2022/lib/content-projection/content-projection.directive.mjs +0 -101
- package/esm2022/lib/content-projection/view-container.reference.mjs +0 -68
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v1.model.mjs +0 -11
- package/esm2022/lib/layout/migration/workbench-layout-migration-v2.service.mjs +0 -59
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.mjs +0 -41
- package/esm2022/lib/page-not-found/format-url.pipe.mjs +0 -26
- package/esm2022/lib/part/part-action-bar/part-action-filter.pipe.mjs +0 -26
- package/esm2022/lib/routing/router.util.mjs +0 -126
- package/esm2022/lib/routing/workbench-auxiliary-routes-registrator.service.mjs +0 -94
- package/esm2022/lib/view/workbench-view-route-guards.mjs +0 -47
- package/lib/common/filter-by-predicate.pipe.d.ts +0 -10
- package/lib/common/filter-by-text.pipe.d.ts +0 -12
- package/lib/common/uuid.util.d.ts +0 -8
- package/lib/content-projection/content-projection.directive.d.ts +0 -30
- package/lib/content-projection/view-container.reference.d.ts +0 -42
- package/lib/layout/migration/model/workbench-layout-migration-v1.model.d.ts +0 -16
- package/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.d.ts +0 -10
- package/lib/page-not-found/format-url.pipe.d.ts +0 -11
- package/lib/part/part-action-bar/part-action-filter.pipe.d.ts +0 -11
package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs
CHANGED
|
@@ -7,22 +7,27 @@
|
|
|
7
7
|
*
|
|
8
8
|
* SPDX-License-Identifier: EPL-2.0
|
|
9
9
|
*/
|
|
10
|
-
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject,
|
|
10
|
+
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, effect, ElementRef, inject, Injector, runInInjectionContext, untracked, viewChild } from '@angular/core';
|
|
11
|
+
import { ActivatedRoute } from '@angular/router';
|
|
11
12
|
import { combineLatest, firstValueFrom, of, Subject, switchMap } from 'rxjs';
|
|
12
13
|
import { first, map, takeUntil } from 'rxjs/operators';
|
|
13
|
-
import { mapToBody, MessageHeaders, MicrofrontendPlatformConfig, ResponseStatusCodes } from '@scion/microfrontend-platform';
|
|
14
|
+
import { ManifestService, mapToBody, MessageClient, MessageHeaders, MicrofrontendPlatformConfig, OutletRouter, ResponseStatusCodes } from '@scion/microfrontend-platform';
|
|
15
|
+
import { ManifestObjectCache } from '../manifest-object-cache.service';
|
|
14
16
|
import { ɵMicrofrontendRouteParams, ɵVIEW_ID_CONTEXT_KEY, ɵWorkbenchCommands } from '@scion/workbench-client';
|
|
15
17
|
import { Dictionaries, Maps } from '@scion/toolkit/util';
|
|
16
|
-
import { LoggerNames } from '../../logging';
|
|
17
|
-
import {
|
|
18
|
+
import { Logger, LoggerNames } from '../../logging';
|
|
19
|
+
import { IFRAME_OVERLAY_HOST } from '../../content-projection/workbench-element-references';
|
|
18
20
|
import { serializeExecution } from '../../common/operators';
|
|
19
21
|
import { ɵWorkbenchView } from '../../view/ɵworkbench-view.model';
|
|
20
22
|
import { filterArray, mapArray } from '@scion/toolkit/operators';
|
|
23
|
+
import { ViewMenuService } from '../../part/view-context-menu/view-menu.service';
|
|
24
|
+
import { WorkbenchRouter } from '../../routing/workbench-router.service';
|
|
21
25
|
import { stringifyError } from '../../common/stringify-error.util';
|
|
22
26
|
import { MicrofrontendViewRoutes } from '../routing/microfrontend-view-routes';
|
|
23
27
|
import { AsyncPipe, NgClass, NgComponentOutlet } from '@angular/common';
|
|
24
28
|
import { ContentAsOverlayComponent } from '../../content-projection/content-as-overlay.component';
|
|
25
29
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
30
|
+
import { WorkbenchLayoutService } from '../../layout/workbench-layout.service';
|
|
26
31
|
import { MicrofrontendSplashComponent } from '../microfrontend-splash/microfrontend-splash.component';
|
|
27
32
|
import { GLASS_PANE_BLOCKABLE, GLASS_PANE_OPTIONS, GlassPaneDirective } from '../../glass-pane/glass-pane.directive';
|
|
28
33
|
import { MicrofrontendWorkbenchView } from './microfrontend-workbench-view.model';
|
|
@@ -30,49 +35,51 @@ import { Microfrontends } from '../common/microfrontend.util';
|
|
|
30
35
|
import { Objects } from '../../common/objects.util';
|
|
31
36
|
import { WorkbenchView } from '../../view/workbench-view.model';
|
|
32
37
|
import * as i0 from "@angular/core";
|
|
33
|
-
import * as i1 from "@angular/router";
|
|
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";
|
|
41
38
|
/**
|
|
42
39
|
* Embeds the microfrontend of a view capability.
|
|
43
40
|
*/
|
|
44
41
|
export class MicrofrontendViewComponent {
|
|
45
|
-
constructor(
|
|
46
|
-
this._host =
|
|
47
|
-
this._route =
|
|
48
|
-
this._outletRouter =
|
|
49
|
-
this._manifestService =
|
|
50
|
-
this.
|
|
51
|
-
this.
|
|
52
|
-
this._logger =
|
|
53
|
-
this._viewContextMenuService =
|
|
54
|
-
this._workbenchLayoutService =
|
|
55
|
-
this._workbenchRouter =
|
|
56
|
-
this._injector =
|
|
57
|
-
this.
|
|
58
|
-
this.
|
|
59
|
-
this.
|
|
42
|
+
constructor() {
|
|
43
|
+
this._host = inject((ElementRef));
|
|
44
|
+
this._route = inject(ActivatedRoute);
|
|
45
|
+
this._outletRouter = inject(OutletRouter);
|
|
46
|
+
this._manifestService = inject(ManifestService);
|
|
47
|
+
this._manifestObjectCache = inject(ManifestObjectCache);
|
|
48
|
+
this._messageClient = inject(MessageClient);
|
|
49
|
+
this._logger = inject(Logger);
|
|
50
|
+
this._viewContextMenuService = inject(ViewMenuService);
|
|
51
|
+
this._workbenchLayoutService = inject(WorkbenchLayoutService);
|
|
52
|
+
this._workbenchRouter = inject(WorkbenchRouter);
|
|
53
|
+
this._injector = inject(Injector);
|
|
54
|
+
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
55
|
+
this._destroyRef = inject(DestroyRef);
|
|
56
|
+
this._routerOutletElement = viewChild.required('router_outlet');
|
|
60
57
|
this._unsubscribeParamsUpdater$ = new Subject();
|
|
61
58
|
this._universalKeystrokes = [
|
|
62
59
|
'keydown.escape', // allows closing notifications
|
|
63
60
|
];
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
61
|
+
this.view = inject(ɵWorkbenchView);
|
|
62
|
+
this.capability = null;
|
|
63
|
+
/** Splash to display until the microfrontend signals readiness. */
|
|
64
|
+
this.splash = inject(MicrofrontendPlatformConfig).splash ?? MicrofrontendSplashComponent;
|
|
65
|
+
/** Indicates whether a workbench drag operation is in progress, such as when dragging a view or moving a sash. */
|
|
67
66
|
this.isWorkbenchDrag = false;
|
|
67
|
+
/** Configures iframe projection. */
|
|
68
|
+
this.overlayConfig = {
|
|
69
|
+
location: inject(IFRAME_OVERLAY_HOST),
|
|
70
|
+
visible: this.view.portal.attached,
|
|
71
|
+
};
|
|
68
72
|
this._logger.debug(() => `Constructing MicrofrontendViewComponent. [viewId=${this.view.id}]`, LoggerNames.MICROFRONTEND_ROUTING);
|
|
69
73
|
this.keystrokesToBubble$ = combineLatest([this.viewContextMenuKeystrokes$(), of(this._universalKeystrokes)])
|
|
70
74
|
.pipe(map(keystrokes => new Array().concat(...keystrokes)));
|
|
71
75
|
this.installWorkbenchDragDetector();
|
|
72
|
-
this.
|
|
76
|
+
this.installViewActivePublisher();
|
|
77
|
+
this.installPartIdPublisher();
|
|
78
|
+
this.installCanCloseGuard(ɵWorkbenchCommands.canCloseTopic(this.view.id));
|
|
79
|
+
this.installCanCloseGuard(ɵWorkbenchCommands.viewClosingTopic(this.view.id));
|
|
73
80
|
}
|
|
74
81
|
ngOnInit() {
|
|
75
|
-
this.
|
|
82
|
+
this._routerOutletElement().nativeElement.setContextValue(ɵVIEW_ID_CONTEXT_KEY, this.view.id);
|
|
76
83
|
this.propagateWorkbenchTheme();
|
|
77
84
|
this.installMenuItemAccelerators$();
|
|
78
85
|
this.installNavigator();
|
|
@@ -85,7 +92,7 @@ export class MicrofrontendViewComponent {
|
|
|
85
92
|
async onNavigate(prevCapability, capability, params) {
|
|
86
93
|
if (!capability) {
|
|
87
94
|
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
|
-
|
|
95
|
+
this.unload();
|
|
89
96
|
return;
|
|
90
97
|
}
|
|
91
98
|
this.capability = capability;
|
|
@@ -109,7 +116,7 @@ export class MicrofrontendViewComponent {
|
|
|
109
116
|
await this.waitForCapabilityParam(capability.metadata.id);
|
|
110
117
|
}
|
|
111
118
|
// Navigate to the microfrontend.
|
|
112
|
-
const application = this._manifestService.
|
|
119
|
+
const application = this._manifestService.getApplication(capability.metadata.appSymbolicName);
|
|
113
120
|
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
121
|
await this._outletRouter.navigate(capability.properties.path, {
|
|
115
122
|
outlet: this.view.id,
|
|
@@ -119,20 +126,20 @@ export class MicrofrontendViewComponent {
|
|
|
119
126
|
showSplash: capability.properties.showSplash,
|
|
120
127
|
ɵcapabilityId: capability.metadata.id,
|
|
121
128
|
});
|
|
122
|
-
// Inactive views are detached from the Angular
|
|
123
|
-
//
|
|
124
|
-
if (!this.view.active) {
|
|
125
|
-
this.
|
|
129
|
+
// Inactive views are not checked for changes since detached from the Angular component tree.
|
|
130
|
+
// So, we manually trigger change detection to update attributes on the `sci-router-outlet`.
|
|
131
|
+
if (!this.view.active()) {
|
|
132
|
+
this._changeDetectorRef.detectChanges();
|
|
126
133
|
}
|
|
127
134
|
}
|
|
128
135
|
fetchCapability$(capabilityId) {
|
|
129
|
-
return this.
|
|
136
|
+
return this._manifestObjectCache.observeCapability$(capabilityId);
|
|
130
137
|
}
|
|
131
138
|
installMenuItemAccelerators$() {
|
|
132
139
|
// Since the iframe is added at a top-level location in the DOM, that is, not as a child element of this component,
|
|
133
140
|
// the workbench view misses keyboard events from embedded content. As a result, menu item accelerators of the context
|
|
134
141
|
// menu of this view do not work, so we install the accelerators on the router outlet as well.
|
|
135
|
-
this._viewContextMenuService.installMenuItemAccelerators$(this.
|
|
142
|
+
this._viewContextMenuService.installMenuItemAccelerators$(this._routerOutletElement().nativeElement, this.view)
|
|
136
143
|
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
137
144
|
.subscribe();
|
|
138
145
|
}
|
|
@@ -177,10 +184,28 @@ export class MicrofrontendViewComponent {
|
|
|
177
184
|
setViewProperties(viewCapability, params) {
|
|
178
185
|
this.view.title = Microfrontends.substituteNamedParameters(viewCapability.properties.title, Maps.coerce(params)) ?? null;
|
|
179
186
|
this.view.heading = Microfrontends.substituteNamedParameters(viewCapability.properties.heading, Maps.coerce(params)) ?? null;
|
|
180
|
-
this.view.classList.
|
|
187
|
+
this.view.classList.application = viewCapability.properties.cssClass;
|
|
181
188
|
this.view.closable = viewCapability.properties.closable ?? true;
|
|
182
189
|
this.view.dirty = false;
|
|
183
190
|
}
|
|
191
|
+
installViewActivePublisher() {
|
|
192
|
+
effect(() => {
|
|
193
|
+
const active = this.view.active();
|
|
194
|
+
untracked(() => {
|
|
195
|
+
const commandTopic = ɵWorkbenchCommands.viewActiveTopic(this.view.id);
|
|
196
|
+
this._messageClient.publish(commandTopic, active, { retain: true }).then();
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
installPartIdPublisher() {
|
|
201
|
+
effect(() => {
|
|
202
|
+
const part = this.view.part();
|
|
203
|
+
untracked(() => {
|
|
204
|
+
const commandTopic = ɵWorkbenchCommands.viewPartIdTopic(this.view.id);
|
|
205
|
+
this._messageClient.publish(commandTopic, part.id, { retain: true }).then();
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
}
|
|
184
209
|
/**
|
|
185
210
|
* Promise that resolves once params contain the given capability id.
|
|
186
211
|
*/
|
|
@@ -189,17 +214,18 @@ export class MicrofrontendViewComponent {
|
|
|
189
214
|
.pipe(mapToBody(), first(params => params.get(ɵMicrofrontendRouteParams.ɵVIEW_CAPABILITY_ID) === viewCapabilityId));
|
|
190
215
|
await firstValueFrom(viewParams$);
|
|
191
216
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
217
|
+
installCanCloseGuard(canCloseTopic) {
|
|
218
|
+
let canCloseRef;
|
|
219
|
+
this._messageClient.subscriberCount$(canCloseTopic)
|
|
220
|
+
.pipe(map(count => count > 0), takeUntilDestroyed())
|
|
221
|
+
.subscribe(confirmClosing => {
|
|
222
|
+
if (confirmClosing) {
|
|
223
|
+
canCloseRef = this.view.canClose(() => this._messageClient.request$(canCloseTopic).pipe(mapToBody()));
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
canCloseRef?.dispose();
|
|
227
|
+
}
|
|
228
|
+
});
|
|
203
229
|
}
|
|
204
230
|
onFocusWithin(event) {
|
|
205
231
|
const { detail: focusWithin } = event;
|
|
@@ -232,28 +258,28 @@ export class MicrofrontendViewComponent {
|
|
|
232
258
|
* such as when dragging a view or moving a sash.
|
|
233
259
|
*/
|
|
234
260
|
installWorkbenchDragDetector() {
|
|
235
|
-
this._workbenchLayoutService.dragging
|
|
236
|
-
.pipe(takeUntilDestroyed())
|
|
237
|
-
.subscribe(event => {
|
|
238
|
-
this.isWorkbenchDrag = (event === 'start');
|
|
239
|
-
});
|
|
261
|
+
effect(() => this.isWorkbenchDrag = this._workbenchLayoutService.dragging());
|
|
240
262
|
}
|
|
241
263
|
propagateWorkbenchTheme() {
|
|
242
|
-
runInInjectionContext(this._injector, () => Microfrontends.propagateTheme(this.
|
|
264
|
+
runInInjectionContext(this._injector, () => Microfrontends.propagateTheme(this._routerOutletElement().nativeElement));
|
|
243
265
|
}
|
|
244
|
-
|
|
245
|
-
//
|
|
266
|
+
unload() {
|
|
267
|
+
// Delete retained messages to free resources.
|
|
246
268
|
this._messageClient.publish(ɵWorkbenchCommands.viewActiveTopic(this.view.id), undefined, { retain: true }).then();
|
|
247
269
|
this._messageClient.publish(ɵWorkbenchCommands.viewParamsTopic(this.view.id), undefined, { retain: true }).then();
|
|
270
|
+
this._messageClient.publish(ɵWorkbenchCommands.viewPartIdTopic(this.view.id), undefined, { retain: true }).then();
|
|
248
271
|
this._outletRouter.navigate(null, { outlet: this.view.id }).then();
|
|
249
272
|
this.view.unregisterAdapter(MicrofrontendWorkbenchView);
|
|
250
273
|
}
|
|
251
|
-
|
|
252
|
-
|
|
274
|
+
ngOnDestroy() {
|
|
275
|
+
this.unload();
|
|
276
|
+
}
|
|
277
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
278
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.2", type: MicrofrontendViewComponent, isStandalone: true, selector: "wb-microfrontend-view", viewQueries: [{ propertyName: "_routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, isSignal: true }], ngImport: i0, template: "<wb-content-as-overlay [config]=\"overlayConfig\">\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.asList()\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble$ | async\">\n <ng-container *ngComponentOutlet=\"splash\"/>\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: ["config"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
|
|
253
279
|
configureMicrofrontendGlassPane(),
|
|
254
280
|
] }); }
|
|
255
281
|
}
|
|
256
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
282
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewComponent, decorators: [{
|
|
257
283
|
type: Component,
|
|
258
284
|
args: [{ selector: 'wb-microfrontend-view', standalone: true, imports: [
|
|
259
285
|
NgClass,
|
|
@@ -263,14 +289,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
263
289
|
GlassPaneDirective,
|
|
264
290
|
], viewProviders: [
|
|
265
291
|
configureMicrofrontendGlassPane(),
|
|
266
|
-
], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<wb-content-as-overlay [
|
|
267
|
-
}], ctorParameters: () => [
|
|
268
|
-
type: Inject,
|
|
269
|
-
args: [IFRAME_HOST]
|
|
270
|
-
}] }], propDecorators: { routerOutletElement: [{
|
|
271
|
-
type: ViewChild,
|
|
272
|
-
args: ['router_outlet', { static: true }]
|
|
273
|
-
}] } });
|
|
292
|
+
], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<wb-content-as-overlay [config]=\"overlayConfig\">\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.asList()\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble$ | async\">\n <ng-container *ngComponentOutlet=\"splash\"/>\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"] }]
|
|
293
|
+
}], ctorParameters: () => [] });
|
|
274
294
|
/**
|
|
275
295
|
* Blocks the microfrontend outlet when dialog(s) overlay this view.
|
|
276
296
|
*/
|
|
@@ -286,4 +306,4 @@ function configureMicrofrontendGlassPane() {
|
|
|
286
306
|
},
|
|
287
307
|
];
|
|
288
308
|
}
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vbWljcm9mcm9udGVuZC12aWV3L21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtL21pY3JvZnJvbnRlbmQtdmlldy9taWNyb2Zyb250ZW5kLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQW9CLFNBQVMsRUFBRSxzQkFBc0IsRUFBMEIsTUFBTSxFQUFFLE1BQU0sRUFBeUMscUJBQXFCLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXBNLE9BQU8sRUFBQyxhQUFhLEVBQUUsY0FBYyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBa0IsU0FBUyxFQUFpQixjQUFjLEVBQUUsMkJBQTJCLEVBQWdCLG1CQUFtQixFQUF1QyxNQUFNLCtCQUErQixDQUFDO0FBQzlNLE9BQU8sRUFBMEIseUJBQXlCLEVBQUUsb0JBQW9CLEVBQTRCLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDL0osT0FBTyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQVMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBQyxXQUFXLEVBQXlCLE1BQU0sbURBQW1ELENBQUM7QUFDdEcsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFHL0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDaEcsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFHOUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFDcEcsT0FBTyxFQUFDLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFtQixNQUFNLHVDQUF1QyxDQUFDO0FBQ3JJLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7O0FBRTlEOztHQUVHO0FBa0JILE1BQU0sT0FBTywwQkFBMEI7SUEyQnJDLFlBQW9CLEtBQThCLEVBQzlCLE1BQXNCLEVBQ3RCLGFBQTJCLEVBQzNCLGdCQUFpQyxFQUNqQyxjQUE2QixFQUM3QixXQUF1QixFQUN2QixPQUFlLEVBQ2YsdUJBQXdDLEVBQ3hDLHVCQUErQyxFQUMvQyxnQkFBaUMsRUFDakMsU0FBbUIsRUFDbkIsR0FBc0IsRUFDdkIsSUFBb0IsRUFDSSxhQUFxQztRQWI1RCxVQUFLLEdBQUwsS0FBSyxDQUF5QjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQWlCO1FBQ3hDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFDL0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3ZCLFNBQUksR0FBSixJQUFJLENBQWdCO1FBQ0ksa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBdEN4RSwrQkFBMEIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2pELHlCQUFvQixHQUFHO1lBQzdCLGdCQUFnQixFQUFFLCtCQUErQjtTQUNsRCxDQUFDO1FBaUJGOztXQUVHO1FBQ0ksb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFnQjdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLG9EQUFvRCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2pJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQzthQUN6RyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxNQUFNLElBQUksNEJBQTRCLENBQUM7SUFDM0YsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2FBQ2YsSUFBSSxDQUNILFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2pKLGtCQUFrQixDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFDbEcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQzthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQW1ELEVBQUUsVUFBK0MsRUFBRSxNQUFjO1FBQzNJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrRkFBa0YsTUFBTSxDQUFDLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLDRGQUE0RixFQUFFLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2hTLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTFHLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsY0FBYyxJQUFJLGNBQWMsQ0FBQyxRQUFTLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxRQUFTLENBQUMsRUFBRSxFQUFFO1lBQzlFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQscURBQXFEO1FBQ3JELElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxRQUFTLENBQUMsZUFBZSxLQUFLLFVBQVUsQ0FBQyxRQUFTLENBQUMsZUFBZSxFQUFFO1lBQ3ZHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3hGO1FBRUQsd0NBQXdDO1FBQ3hDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBRXpILHdJQUF3STtRQUN4SSw0R0FBNEc7UUFDNUcsSUFBSSxjQUFjO2VBQ2IsY0FBYyxDQUFDLFFBQVMsQ0FBQyxlQUFlLEtBQUssVUFBVSxDQUFDLFFBQVMsQ0FBQyxlQUFlO2VBQ2pGLGNBQWMsQ0FBQyxRQUFTLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxRQUFTLENBQUMsRUFBRSxFQUFFO1lBQzVELE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxRQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUQ7UUFFRCxpQ0FBaUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQyxRQUFTLENBQUMsZUFBZSxDQUFFLENBQUM7UUFDL0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMscURBQXFELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLFVBQVUsQ0FBQyxRQUFTLENBQUMsZUFBZSxhQUFhLFdBQVcsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxUSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQzVELE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEIsVUFBVSxFQUFFLFdBQVcsQ0FBQyxPQUFPO1lBQy9CLE1BQU0sRUFBRSxNQUFNO1lBQ2QsOEJBQThCLEVBQUUsS0FBSztZQUNyQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVO1lBQzVDLGFBQWEsRUFBRSxVQUFVLENBQUMsUUFBUyxDQUFDLEVBQUU7U0FDdkMsQ0FBQyxDQUFDO1FBRUgsc0VBQXNFO1FBQ3RFLDRHQUE0RztRQUM1RyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxZQUFvQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBMEIsRUFBQyxFQUFFLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUksQ0FBQztJQUVPLDRCQUE0QjtRQUNsQyxtSEFBbUg7UUFDbkgsc0hBQXNIO1FBQ3RILDhGQUE4RjtRQUM5RixJQUFJLENBQUMsdUJBQXVCLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ3pHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDMUMsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CLENBQUMsY0FBdUM7UUFDbEUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUEyQixrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsUUFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzdKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3RGLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBK0MsRUFBRSxFQUFFO1lBQ25FLHVIQUF1SDtZQUN2SCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFNUQsSUFBSTtnQkFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQzVELDZIQUE2SDtvQkFDN0gsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO3dCQUN2QixPQUFPLElBQUksQ0FBQztxQkFDYjtvQkFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSyxDQUFDLGNBQWMsQ0FBQztvQkFDcEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUNsRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQywyQ0FBMkM7b0JBQ3hHLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsU0FBUyxFQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNoSSxNQUFNLEVBQUMsU0FBUyxFQUFFLGVBQWUsRUFBQyxHQUFHLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7b0JBRXZHLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUNwRCxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ3ZCLEtBQUssRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUM7NEJBQ3JDLENBQUMsdUJBQXVCLENBQUMsc0JBQXNCLENBQUMsRUFBRSxlQUFlO3lCQUNsRSxDQUFDO3FCQUNILENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFFSCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDLENBQUM7YUFDcEk7WUFDRCxPQUFPLEtBQUssRUFBRTtnQkFDWixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUM7YUFDL0k7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQixDQUFDLGNBQXVDLEVBQUUsTUFBYztRQUMvRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMseUJBQXlCLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUN6SCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMseUJBQXlCLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUM3SCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBd0I7UUFDM0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQXNCLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3BILElBQUksQ0FDSCxTQUFTLEVBQUUsRUFDWCxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLEtBQUssZ0JBQWdCLENBQUMsQ0FDaEcsQ0FBQztRQUNKLE1BQU0sY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxrQkFBa0I7SUFDWCxLQUFLLENBQUMsUUFBUTtRQUNuQixNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRSxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFOUUsNEdBQTRHO1FBQzVHLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2RyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuSCxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUNoRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQVUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQy9KLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBWTtRQUMvQixNQUFNLEVBQUMsTUFBTSxFQUFFLFdBQVcsRUFBQyxHQUFHLEtBQTZCLENBQUM7UUFDNUQsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsMkJBQTJCLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZHO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDBCQUEwQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTthQUN4QixJQUFJLENBQ0gsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFDL0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDM0Qsd0VBQXdFO1lBQ3hFLFFBQVEsV0FBVyxFQUFFO2dCQUNuQixLQUFLLE1BQU07b0JBQ1QsT0FBTyxTQUFTLENBQUM7Z0JBQ25CLEtBQUssR0FBRztvQkFDTixPQUFPLEtBQUssQ0FBQztnQkFDZixLQUFLLEdBQUc7b0JBQ04sT0FBTyxPQUFPLENBQUM7Z0JBQ2pCO29CQUNFLE9BQU8sV0FBVyxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQUMsRUFDSCxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDbkUsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSyw0QkFBNEI7UUFDbEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVM7YUFDbkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRU0sV0FBVztRQUNoQiw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDMUQsQ0FBQzs4R0FwUVUsMEJBQTBCLDZZQXdDakIsV0FBVztrR0F4Q3BCLDBCQUEwQixxTkMzRHZDLGd4QkFnQkEsaVBEZ0NJLE9BQU8sK0VBQ1AsU0FBUyw4Q0FDVCx5QkFBeUIsMkZBQ3pCLGlCQUFpQixvUEFDakIsa0JBQWtCLCtDQUVMO1lBQ2IsK0JBQStCLEVBQUU7U0FDbEM7OzJGQUdVLDBCQUEwQjtrQkFqQnRDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUksV0FDUDt3QkFDUCxPQUFPO3dCQUNQLFNBQVM7d0JBQ1QseUJBQXlCO3dCQUN6QixpQkFBaUI7d0JBQ2pCLGtCQUFrQjtxQkFDbkIsaUJBQ2M7d0JBQ2IsK0JBQStCLEVBQUU7cUJBQ2xDLFdBQ1EsQ0FBQyxzQkFBc0IsQ0FBQzs7MEJBMENwQixNQUFNOzJCQUFDLFdBQVc7eUNBekJ4QixtQkFBbUI7c0JBRHpCLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzs7QUF5UDVDOztHQUVHO0FBQ0gsU0FBUywrQkFBK0I7SUFDdEMsT0FBTztRQUNMO1lBQ0UsT0FBTyxFQUFFLG9CQUFvQjtZQUM3QixXQUFXLEVBQUUsY0FBYztTQUM1QjtRQUNEO1lBQ0UsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixVQUFVLEVBQUUsR0FBcUIsRUFBRSxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUUsRUFBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFDLENBQUM7U0FDOUY7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBpbmplY3QsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBQcm92aWRlciwgcnVuSW5JbmplY3Rpb25Db250ZXh0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpcnN0LCBtYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtNYW5pZmVzdFNlcnZpY2UsIG1hcFRvQm9keSwgTWVzc2FnZUNsaWVudCwgTWVzc2FnZUhlYWRlcnMsIE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZywgT3V0bGV0Um91dGVyLCBSZXNwb25zZVN0YXR1c0NvZGVzLCBTY2lSb3V0ZXJPdXRsZXRFbGVtZW50LCBUb3BpY01lc3NhZ2V9IGZyb20gJ0BzY2lvbi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtJztcbmltcG9ydCB7V29ya2JlbmNoVmlld0NhcGFiaWxpdHksIMm1TWljcm9mcm9udGVuZFJvdXRlUGFyYW1zLCDJtVZJRVdfSURfQ09OVEVYVF9LRVksIMm1Vmlld1BhcmFtc1VwZGF0ZUNvbW1hbmQsIMm1V29ya2JlbmNoQ29tbWFuZHN9IGZyb20gJ0BzY2lvbi93b3JrYmVuY2gtY2xpZW50JztcbmltcG9ydCB7RGljdGlvbmFyaWVzLCBNYXBzfSBmcm9tICdAc2Npb24vdG9vbGtpdC91dGlsJztcbmltcG9ydCB7TG9nZ2VyLCBMb2dnZXJOYW1lc30gZnJvbSAnLi4vLi4vbG9nZ2luZyc7XG5pbXBvcnQge0NhbkNsb3NlfSBmcm9tICcuLi8uLi93b3JrYmVuY2gubW9kZWwnO1xuaW1wb3J0IHtJRlJBTUVfSE9TVCwgVmlld0NvbnRhaW5lclJlZmVyZW5jZX0gZnJvbSAnLi4vLi4vY29udGVudC1wcm9qZWN0aW9uL3ZpZXctY29udGFpbmVyLnJlZmVyZW5jZSc7XG5pbXBvcnQge3NlcmlhbGl6ZUV4ZWN1dGlvbn0gZnJvbSAnLi4vLi4vY29tbW9uL29wZXJhdG9ycyc7XG5pbXBvcnQge8m1V29ya2JlbmNoVmlld30gZnJvbSAnLi4vLi4vdmlldy/JtXdvcmtiZW5jaC12aWV3Lm1vZGVsJztcbmltcG9ydCB7ZmlsdGVyQXJyYXksIG1hcEFycmF5fSBmcm9tICdAc2Npb24vdG9vbGtpdC9vcGVyYXRvcnMnO1xuaW1wb3J0IHtWaWV3TWVudVNlcnZpY2V9IGZyb20gJy4uLy4uL3BhcnQvdmlldy1jb250ZXh0LW1lbnUvdmlldy1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHtXb3JrYmVuY2hSb3V0ZXJ9IGZyb20gJy4uLy4uL3JvdXRpbmcvd29ya2JlbmNoLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7c3RyaW5naWZ5RXJyb3J9IGZyb20gJy4uLy4uL2NvbW1vbi9zdHJpbmdpZnktZXJyb3IudXRpbCc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRWaWV3Um91dGVzfSBmcm9tICcuLi9yb3V0aW5nL21pY3JvZnJvbnRlbmQtdmlldy1yb3V0ZXMnO1xuaW1wb3J0IHtBc3luY1BpcGUsIE5nQ2xhc3MsIE5nQ29tcG9uZW50T3V0bGV0fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDb250ZW50QXNPdmVybGF5Q29tcG9uZW50fSBmcm9tICcuLi8uLi9jb250ZW50LXByb2plY3Rpb24vY29udGVudC1hcy1vdmVybGF5LmNvbXBvbmVudCc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlfSBmcm9tICcuLi8uLi9sYXlvdXQvd29ya2JlbmNoLWxheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7Q29tcG9uZW50VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRTcGxhc2hDb21wb25lbnR9IGZyb20gJy4uL21pY3JvZnJvbnRlbmQtc3BsYXNoL21pY3JvZnJvbnRlbmQtc3BsYXNoLmNvbXBvbmVudCc7XG5pbXBvcnQge0dMQVNTX1BBTkVfQkxPQ0tBQkxFLCBHTEFTU19QQU5FX09QVElPTlMsIEdsYXNzUGFuZURpcmVjdGl2ZSwgR2xhc3NQYW5lT3B0aW9uc30gZnJvbSAnLi4vLi4vZ2xhc3MtcGFuZS9nbGFzcy1wYW5lLmRpcmVjdGl2ZSc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3fSBmcm9tICcuL21pY3JvZnJvbnRlbmQtd29ya2JlbmNoLXZpZXcubW9kZWwnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kc30gZnJvbSAnLi4vY29tbW9uL21pY3JvZnJvbnRlbmQudXRpbCc7XG5pbXBvcnQge09iamVjdHN9IGZyb20gJy4uLy4uL2NvbW1vbi9vYmplY3RzLnV0aWwnO1xuaW1wb3J0IHtXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi8uLi92aWV3L3dvcmtiZW5jaC12aWV3Lm1vZGVsJztcblxuLyoqXG4gKiBFbWJlZHMgdGhlIG1pY3JvZnJvbnRlbmQgb2YgYSB2aWV3IGNhcGFiaWxpdHkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3diLW1pY3JvZnJvbnRlbmQtdmlldycsXG4gIHN0eWxlVXJsczogWycuL21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQXN5bmNQaXBlLFxuICAgIENvbnRlbnRBc092ZXJsYXlDb21wb25lbnQsXG4gICAgTmdDb21wb25lbnRPdXRsZXQsXG4gICAgR2xhc3NQYW5lRGlyZWN0aXZlLFxuICBdLFxuICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgY29uZmlndXJlTWljcm9mcm9udGVuZEdsYXNzUGFuZSgpLFxuICBdLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sIC8vIHJlcXVpcmVkIGJlY2F1c2UgPHNjaS1yb3V0ZXItb3V0bGV0PiBpcyBhIGN1c3RvbSBlbGVtZW50XG59KVxuZXhwb3J0IGNsYXNzIE1pY3JvZnJvbnRlbmRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENhbkNsb3NlIHtcblxuICBwcml2YXRlIF91bnN1YnNjcmliZVBhcmFtc1VwZGF0ZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfdW5pdmVyc2FsS2V5c3Ryb2tlcyA9IFtcbiAgICAna2V5ZG93bi5lc2NhcGUnLCAvLyBhbGxvd3MgY2xvc2luZyBub3RpZmljYXRpb25zXG4gIF07XG5cbiAgcHJvdGVjdGVkIGNhcGFiaWxpdHk6IFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGxhc2ggdG8gZGlzcGxheSB1bnRpbCB0aGUgbWljcm9mcm9udGVuZCBzaWduYWxzIHJlYWRpbmVzcy5cbiAgICovXG4gIHByb3RlY3RlZCBzcGxhc2g6IENvbXBvbmVudFR5cGU8dW5rbm93bj47XG5cbiAgQFZpZXdDaGlsZCgncm91dGVyX291dGxldCcsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgcm91dGVyT3V0bGV0RWxlbWVudCE6IEVsZW1lbnRSZWY8U2NpUm91dGVyT3V0bGV0RWxlbWVudD47XG5cbiAgLyoqXG4gICAqIEtleXN0cm9rZXMgd2hpY2ggdG8gYnViYmxlIGFjcm9zcyBpZnJhbWUgYm91bmRhcmllcyBvZiBlbWJlZGRlZCBjb250ZW50LlxuICAgKi9cbiAgcHVibGljIGtleXN0cm9rZXNUb0J1YmJsZSQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhIHdvcmtiZW5jaCBkcmFnIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcywgc3VjaCBhcyB3aGVuIGRyYWdnaW5nIGEgdmlldyBvciBtb3ZpbmcgYSBzYXNoLlxuICAgKi9cbiAgcHVibGljIGlzV29ya2JlbmNoRHJhZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2hvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICAgICAgICBwcml2YXRlIF9yb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgX291dGxldFJvdXRlcjogT3V0bGV0Um91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9tYW5pZmVzdFNlcnZpY2U6IE1hbmlmZXN0U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbWVzc2FnZUNsaWVudDogTWVzc2FnZUNsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZGVzdHJveVJlZjogRGVzdHJveVJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9nZ2VyOiBMb2dnZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3ZpZXdDb250ZXh0TWVudVNlcnZpY2U6IFZpZXdNZW51U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfd29ya2JlbmNoTGF5b3V0U2VydmljZTogV29ya2JlbmNoTGF5b3V0U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfd29ya2JlbmNoUm91dGVyOiBXb3JrYmVuY2hSb3V0ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICBwdWJsaWMgdmlldzogybVXb3JrYmVuY2hWaWV3LFxuICAgICAgICAgICAgICBASW5qZWN0KElGUkFNRV9IT1NUKSBwcm90ZWN0ZWQgaWZyYW1lSG9zdFJlZjogVmlld0NvbnRhaW5lclJlZmVyZW5jZSkge1xuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgQ29uc3RydWN0aW5nIE1pY3JvZnJvbnRlbmRWaWV3Q29tcG9uZW50LiBbdmlld0lkPSR7dGhpcy52aWV3LmlkfV1gLCBMb2dnZXJOYW1lcy5NSUNST0ZST05URU5EX1JPVVRJTkcpO1xuICAgIHRoaXMua2V5c3Ryb2tlc1RvQnViYmxlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMudmlld0NvbnRleHRNZW51S2V5c3Ryb2tlcyQoKSwgb2YodGhpcy5fdW5pdmVyc2FsS2V5c3Ryb2tlcyldKVxuICAgICAgLnBpcGUobWFwKGtleXN0cm9rZXMgPT4gbmV3IEFycmF5PHN0cmluZz4oKS5jb25jYXQoLi4ua2V5c3Ryb2tlcykpKTtcbiAgICB0aGlzLmluc3RhbGxXb3JrYmVuY2hEcmFnRGV0ZWN0b3IoKTtcbiAgICB0aGlzLnNwbGFzaCA9IGluamVjdChNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWcpLnNwbGFzaCA/PyBNaWNyb2Zyb250ZW5kU3BsYXNoQ29tcG9uZW50O1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyT3V0bGV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldENvbnRleHRWYWx1ZSjJtVZJRVdfSURfQ09OVEVYVF9LRVksIHRoaXMudmlldy5pZCk7XG4gICAgdGhpcy5wcm9wYWdhdGVXb3JrYmVuY2hUaGVtZSgpO1xuICAgIHRoaXMuaW5zdGFsbE1lbnVJdGVtQWNjZWxlcmF0b3JzJCgpO1xuICAgIHRoaXMuaW5zdGFsbE5hdmlnYXRvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsTmF2aWdhdG9yKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlLnBhcmFtc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChwYXJhbXMgPT4gdGhpcy5mZXRjaENhcGFiaWxpdHkkKHBhcmFtc1vJtU1pY3JvZnJvbnRlbmRSb3V0ZVBhcmFtcy7JtVZJRVdfQ0FQQUJJTElUWV9JRF0pLnBpcGUobWFwKGNhcGFiaWxpdHkgPT4gKHtjYXBhYmlsaXR5LCBwYXJhbXN9KSkpKSxcbiAgICAgICAgc2VyaWFsaXplRXhlY3V0aW9uKCh7Y2FwYWJpbGl0eSwgcGFyYW1zfSkgPT4gdGhpcy5vbk5hdmlnYXRlKHRoaXMuY2FwYWJpbGl0eSwgY2FwYWJpbGl0eSwgcGFyYW1zKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25OYXZpZ2F0ZShwcmV2Q2FwYWJpbGl0eTogV29ya2JlbmNoVmlld0NhcGFiaWxpdHkgfCB1bmRlZmluZWQsIGNhcGFiaWxpdHk6IFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5IHwgdW5kZWZpbmVkLCBwYXJhbXM6IFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghY2FwYWJpbGl0eSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oKCkgPT4gYFtOdWxsQ2FwYWJpbGl0eUVycm9yXSBObyBhcHBsaWNhdGlvbiBmb3VuZCB0byBwcm92aWRlIGEgdmlldyBjYXBhYmlsaXR5IG9mIGlkICcke3BhcmFtc1vJtU1pY3JvZnJvbnRlbmRSb3V0ZVBhcmFtcy7JtVZJRVdfQ0FQQUJJTElUWV9JRF19Jy4gTWF5YmUsIHRoZSByZXF1ZXN0ZWQgdmlldyBpcyBub3QgcHVibGljIEFQSSBvciB0aGUgcHJvdmlkaW5nIGFwcGxpY2F0aW9uIG5vdCBhdmFpbGFibGUuYCwgTG9nZ2VyTmFtZXMuTUlDUk9GUk9OVEVORF9ST1VUSU5HKTtcbiAgICAgIGF3YWl0IHRoaXMudmlldy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FwYWJpbGl0eSA9IGNhcGFiaWxpdHk7XG4gICAgdGhpcy52aWV3LnJlZ2lzdGVyQWRhcHRlcihNaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldywgbmV3IE1pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3KGNhcGFiaWxpdHksIHBhcmFtcykpO1xuXG4gICAgLy8gQ2hlY2sgaWYgbmF2aWdhdGluZyB0byBhIG5ldyBtaWNyb2Zyb250ZW5kLlxuICAgIGlmICghcHJldkNhcGFiaWxpdHkgfHwgcHJldkNhcGFiaWxpdHkubWV0YWRhdGEhLmlkICE9PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCkge1xuICAgICAgdGhpcy5zZXRWaWV3UHJvcGVydGllcyhjYXBhYmlsaXR5LCBwYXJhbXMpO1xuICAgICAgdGhpcy5pbnN0YWxsUGFyYW1zVXBkYXRlcihjYXBhYmlsaXR5KTtcbiAgICB9XG5cbiAgICAvLyBTaWduYWwgdGhlIGN1cnJlbnRseSBsb2FkZWQgYXBwbGljYXRpb24gdG8gdW5sb2FkLlxuICAgIGlmIChwcmV2Q2FwYWJpbGl0eSAmJiBwcmV2Q2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lICE9PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWUpIHtcbiAgICAgIGF3YWl0IHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdVbmxvYWRpbmdUb3BpYyh0aGlzLnZpZXcuaWQpKTtcbiAgICB9XG5cbiAgICAvLyBQYXNzIHBhcmFtZXRlcnMgdG8gdGhlIG1pY3JvZnJvbnRlbmQuXG4gICAgYXdhaXQgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcmFtc1RvcGljKHRoaXMudmlldy5pZCksIE1hcHMuY29lcmNlKHBhcmFtcyksIHtyZXRhaW46IHRydWV9KTtcblxuICAgIC8vIFdoZW4gbmF2aWdhdGluZyB0byBhbm90aGVyIHZpZXcgY2FwYWJpbGl0eSBvZiB0aGUgc2FtZSBhcHAsIHdhaXQgdW50aWwgdHJhbnNwb3J0ZWQgdGhlIHBhcmFtcyB0byB0aGUgbWljcm9mcm9udGVuZCBiZWZvcmUgbG9hZGluZyB0aGVcbiAgICAvLyBuZXcgbWljcm9mcm9udGVuZCBpbnRvIHRoZSBpZnJhbWUsIGFsbG93aW5nIHRoZSBjdXJyZW50bHkgbG9hZGVkIG1pY3JvZnJvbnRlbmQgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucy5cbiAgICBpZiAocHJldkNhcGFiaWxpdHlcbiAgICAgICYmIHByZXZDYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWUgPT09IGNhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZVxuICAgICAgJiYgcHJldkNhcGFiaWxpdHkubWV0YWRhdGEhLmlkICE9PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCkge1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQ2FwYWJpbGl0eVBhcmFtKGNhcGFiaWxpdHkubWV0YWRhdGEhLmlkKTtcbiAgICB9XG5cbiAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgbWljcm9mcm9udGVuZC5cbiAgICBjb25zdCBhcHBsaWNhdGlvbiA9IHRoaXMuX21hbmlmZXN0U2VydmljZS5hcHBsaWNhdGlvbnMuZmluZChhcHAgPT4gYXBwLnN5bWJvbGljTmFtZSA9PT0gY2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lKSE7XG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBMb2FkaW5nIG1pY3JvZnJvbnRlbmQgaW50byB3b3JrYmVuY2ggdmlldyBbdmlld0lkPSR7dGhpcy52aWV3LmlkfSwgYXBwPSR7Y2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lfSwgYmFzZVVybD0ke2FwcGxpY2F0aW9uLmJhc2VVcmx9LCBwYXRoPSR7KGNhcGFiaWxpdHkucHJvcGVydGllcy5wYXRoKX1dLmAsIExvZ2dlck5hbWVzLk1JQ1JPRlJPTlRFTkRfUk9VVElORywgcGFyYW1zLCBjYXBhYmlsaXR5KTtcbiAgICBhd2FpdCB0aGlzLl9vdXRsZXRSb3V0ZXIubmF2aWdhdGUoY2FwYWJpbGl0eS5wcm9wZXJ0aWVzLnBhdGgsIHtcbiAgICAgIG91dGxldDogdGhpcy52aWV3LmlkLFxuICAgICAgcmVsYXRpdmVUbzogYXBwbGljYXRpb24uYmFzZVVybCxcbiAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgcHVzaFN0YXRlVG9TZXNzaW9uSGlzdG9yeVN0YWNrOiBmYWxzZSxcbiAgICAgIHNob3dTcGxhc2g6IGNhcGFiaWxpdHkucHJvcGVydGllcy5zaG93U3BsYXNoLFxuICAgICAgybVjYXBhYmlsaXR5SWQ6IGNhcGFiaWxpdHkubWV0YWRhdGEhLmlkLFxuICAgIH0pO1xuXG4gICAgLy8gSW5hY3RpdmUgdmlld3MgYXJlIGRldGFjaGVkIGZyb20gdGhlIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbiB0cmVlLlxuICAgIC8vIFRoZXJlZm9yZSwgbWFudWFsbHkgZGV0ZWN0IHRoaXMgY29tcG9uZW50IGZvciBjaGFuZ2VzIGZvciB1cGRhdGluZyBhdHRyaWJ1dGVzIG9uIHRoZSBgc2NpLXJvdXRlci1vdXRsZXRgLlxuICAgIGlmICghdGhpcy52aWV3LmFjdGl2ZSkge1xuICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hDYXBhYmlsaXR5JChjYXBhYmlsaXR5SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8V29ya2JlbmNoVmlld0NhcGFiaWxpdHkgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFuaWZlc3RTZXJ2aWNlLmxvb2t1cENhcGFiaWxpdGllcyQ8V29ya2JlbmNoVmlld0NhcGFiaWxpdHk+KHtpZDogY2FwYWJpbGl0eUlkfSkucGlwZShtYXAoY2FwYWJpbGl0aWVzID0+IGNhcGFiaWxpdGllcy5hdCgwKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsTWVudUl0ZW1BY2NlbGVyYXRvcnMkKCk6IHZvaWQge1xuICAgIC8vIFNpbmNlIHRoZSBpZnJhbWUgaXMgYWRkZWQgYXQgYSB0b3AtbGV2ZWwgbG9jYXRpb24gaW4gdGhlIERPTSwgdGhhdCBpcywgbm90IGFzIGEgY2hpbGQgZWxlbWVudCBvZiB0aGlzIGNvbXBvbmVudCxcbiAgICAvLyB0aGUgd29ya2JlbmNoIHZpZXcgbWlzc2VzIGtleWJvYXJkIGV2ZW50cyBmcm9tIGVtYmVkZGVkIGNvbnRlbnQuIEFzIGEgcmVzdWx0LCBtZW51IGl0ZW0gYWNjZWxlcmF0b3JzIG9mIHRoZSBjb250ZXh0XG4gICAgLy8gbWVudSBvZiB0aGlzIHZpZXcgZG8gbm90IHdvcmssIHNvIHdlIGluc3RhbGwgdGhlIGFjY2VsZXJhdG9ycyBvbiB0aGUgcm91dGVyIG91dGxldCBhcyB3ZWxsLlxuICAgIHRoaXMuX3ZpZXdDb250ZXh0TWVudVNlcnZpY2UuaW5zdGFsbE1lbnVJdGVtQWNjZWxlcmF0b3JzJCh0aGlzLnJvdXRlck91dGxldEVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy52aWV3KVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gcmVxdWVzdHMgZnJvbSB0aGUgY3VycmVudGx5IGxvYWRlZCBtaWNyb2Zyb250ZW5kIHRvIHVwZGF0ZSBpdHMgcGFyYW1ldGVycy5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbFBhcmFtc1VwZGF0ZXIodmlld0NhcGFiaWxpdHk6IFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5KTogdm9pZCB7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmVQYXJhbXNVcGRhdGVyJC5uZXh0KCk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fbWVzc2FnZUNsaWVudC5vYnNlcnZlJDzJtVZpZXdQYXJhbXNVcGRhdGVDb21tYW5kPijJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdQYXJhbXNVcGRhdGVUb3BpYyh0aGlzLnZpZXcuaWQsIHZpZXdDYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCkpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVQYXJhbXNVcGRhdGVyJCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHJlcXVlc3Q6IFRvcGljTWVzc2FnZTzJtVZpZXdQYXJhbXNVcGRhdGVDb21tYW5kPikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJ4anMvbm8tYXN5bmMtc3Vic2NyaWJlXG4gICAgICAgIC8vIFdlIERPIE5PVCBuYXZpZ2F0ZSBpZiB0aGUgc3Vic2NyaXB0aW9uIHdhcyBjbG9zZWQsIGUuZy4sIGJlY2F1c2UgY2xvc2VkIHRoZSB2aWV3IG9yIG5hdmlnYXRlZCB0byBhbm90aGVyIGNhcGFiaWxpdHkuXG4gICAgICAgIGNvbnN0IHJlcGx5VG8gPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KE1lc3NhZ2VIZWFkZXJzLlJlcGx5VG8pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHRoaXMuX3dvcmtiZW5jaFJvdXRlci5uYXZpZ2F0ZShsYXlvdXQgPT4ge1xuICAgICAgICAgICAgLy8gQ2FuY2VsIHBlbmRpbmcgbmF2aWdhdGlvbiBpZiB0aGUgc3Vic2NyaXB0aW9uIHdhcyBjbG9zZWQsIGUuZy4sIGJlY2F1c2UgY2xvc2VkIHRoZSB2aWV3IG9yIG5hdmlnYXRlZCB0byBhbm90aGVyIGNhcGFiaWxpdHlcbiAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJhbXNIYW5kbGluZyA9IHJlcXVlc3QuYm9keSEucGFyYW1zSGFuZGxpbmc7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFyYW1zID0gdGhpcy5fcm91dGUuc25hcHNob3QucGFyYW1zO1xuICAgICAgICAgICAgY29uc3QgbmV3UGFyYW1zID0gRGljdGlvbmFyaWVzLmNvZXJjZShyZXF1ZXN0LmJvZHkhLnBhcmFtcyk7IC8vIGNvZXJjZSBwYXJhbXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZFBhcmFtcyA9IE9iamVjdHMud2l0aG91dFVuZGVmaW5lZEVudHJpZXMocGFyYW1zSGFuZGxpbmcgPT09ICdtZXJnZScgPyB7Li4uY3VycmVudFBhcmFtcywgLi4ubmV3UGFyYW1zfSA6IG5ld1BhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCB7dXJsUGFyYW1zLCB0cmFuc2llbnRQYXJhbXN9ID0gTWljcm9mcm9udGVuZFZpZXdSb3V0ZXMuc3BsaXRQYXJhbXMobWVyZ2VkUGFyYW1zLCB2aWV3Q2FwYWJpbGl0eSk7XG5cbiAgICAgICAgICAgIHJldHVybiBsYXlvdXQubmF2aWdhdGVWaWV3KHRoaXMudmlldy5pZCwgW3VybFBhcmFtc10sIHtcbiAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fcm91dGUsXG4gICAgICAgICAgICAgIHN0YXRlOiBPYmplY3RzLndpdGhvdXRVbmRlZmluZWRFbnRyaWVzKHtcbiAgICAgICAgICAgICAgICBbTWljcm9mcm9udGVuZFZpZXdSb3V0ZXMuU1RBVEVfVFJBTlNJRU5UX1BBUkFNU106IHRyYW5zaWVudFBhcmFtcyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGF3YWl0IHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaChyZXBseVRvLCBzdWNjZXNzLCB7aGVhZGVyczogbmV3IE1hcCgpLnNldChNZXNzYWdlSGVhZGVycy5TdGF0dXMsIFJlc3BvbnNlU3RhdHVzQ29kZXMuVEVSTUlOQUwpfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKHJlcGx5VG8sIHN0cmluZ2lmeUVycm9yKGVycm9yKSwge2hlYWRlcnM6IG5ldyBNYXAoKS5zZXQoTWVzc2FnZUhlYWRlcnMuU3RhdHVzLCBSZXNwb25zZVN0YXR1c0NvZGVzLkVSUk9SKX0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoaXMgdmlldywgc3VjaCBhcyB0aGUgdmlldyB0aXRsZSwgYXMgZGVmaW5lZCBieSB0aGUgY2FwYWJpbGl0eS5cbiAgICovXG4gIHByaXZhdGUgc2V0Vmlld1Byb3BlcnRpZXModmlld0NhcGFiaWxpdHk6IFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5LCBwYXJhbXM6IFBhcmFtcyk6IHZvaWQge1xuICAgIHRoaXMudmlldy50aXRsZSA9IE1pY3JvZnJvbnRlbmRzLnN1YnN0aXR1dGVOYW1lZFBhcmFtZXRlcnModmlld0NhcGFiaWxpdHkucHJvcGVydGllcy50aXRsZSwgTWFwcy5jb2VyY2UocGFyYW1zKSkgPz8gbnVsbDtcbiAgICB0aGlzLnZpZXcuaGVhZGluZyA9IE1pY3JvZnJvbnRlbmRzLnN1YnN0aXR1dGVOYW1lZFBhcmFtZXRlcnModmlld0NhcGFiaWxpdHkucHJvcGVydGllcy5oZWFkaW5nLCBNYXBzLmNvZXJjZShwYXJhbXMpKSA/PyBudWxsO1xuICAgIHRoaXMudmlldy5jbGFzc0xpc3Quc2V0KHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMuY3NzQ2xhc3MsIHtzY29wZTogJ2FwcGxpY2F0aW9uJ30pO1xuICAgIHRoaXMudmlldy5jbG9zYWJsZSA9IHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMuY2xvc2FibGUgPz8gdHJ1ZTtcbiAgICB0aGlzLnZpZXcuZGlydHkgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSBwYXJhbXMgY29udGFpbiB0aGUgZ2l2ZW4gY2FwYWJpbGl0eSBpZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckNhcGFiaWxpdHlQYXJhbSh2aWV3Q2FwYWJpbGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2aWV3UGFyYW1zJCA9IHRoaXMuX21lc3NhZ2VDbGllbnQub2JzZXJ2ZSQ8TWFwPHN0cmluZywgc3RyaW5nPj4oybVXb3JrYmVuY2hDb21tYW5kcy52aWV3UGFyYW1zVG9waWModGhpcy52aWV3LmlkKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXBUb0JvZHkoKSxcbiAgICAgICAgZmlyc3QocGFyYW1zID0+IHBhcmFtcy5nZXQoybVNaWNyb2Zyb250ZW5kUm91dGVQYXJhbXMuybVWSUVXX0NBUEFCSUxJVFlfSUQpID09PSB2aWV3Q2FwYWJpbGl0eUlkKSxcbiAgICAgICk7XG4gICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odmlld1BhcmFtcyQpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBhc3luYyBjYW5DbG9zZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjYW5DbG9zZVRvcGljID0gybVXb3JrYmVuY2hDb21tYW5kcy5jYW5DbG9zZVRvcGljKHRoaXMudmlldy5pZCk7XG4gICAgY29uc3QgbGVnYWN5Q2FuQ2xvc2VUb3BpYyA9IMm1V29ya2JlbmNoQ29tbWFuZHMudmlld0Nsb3NpbmdUb3BpYyh0aGlzLnZpZXcuaWQpO1xuXG4gICAgLy8gSW5pdGlhdGUgYSByZXF1ZXN0LXJlc3BvbnNlIGNvbW11bmljYXRpb24gb25seSBpZiB0aGUgZW1iZWRkZWQgbWljcm9mcm9udGVuZCBpbXBsZW1lbnRzIGBDYW5DbG9zZWAgZ3VhcmQuXG4gICAgY29uc3QgaGFzQ2FuQ2xvc2VHdWFyZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX21lc3NhZ2VDbGllbnQuc3Vic2NyaWJlckNvdW50JChjYW5DbG9zZVRvcGljKSkgPiAwO1xuICAgIGNvbnN0IGhhc0xlZ2FjeUNhbkNsb3NlR3VhcmQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9tZXNzYWdlQ2xpZW50LnN1YnNjcmliZXJDb3VudCQobGVnYWN5Q2FuQ2xvc2VUb3BpYykpID4gMDtcbiAgICBpZiAoIWhhc0NhbkNsb3NlR3VhcmQgJiYgIWhhc0xlZ2FjeUNhbkNsb3NlR3VhcmQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5fbWVzc2FnZUNsaWVudC5yZXF1ZXN0JDxib29sZWFuPihoYXNDYW5DbG9zZUd1YXJkID8gY2FuQ2xvc2VUb3BpYyA6IGxlZ2FjeUNhbkNsb3NlVG9waWMpLnBpcGUobWFwVG9Cb2R5KCkpLCB7ZGVmYXVsdFZhbHVlOiB0cnVlfSk7XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1c1dpdGhpbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB7ZGV0YWlsOiBmb2N1c1dpdGhpbn0gPSBldmVudCBhcyBDdXN0b21FdmVudDxib29sZWFuPjtcbiAgICBpZiAoZm9jdXNXaXRoaW4pIHtcbiAgICAgIHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnc2NpLW1pY3JvZnJvbnRlbmQtZm9jdXNpbicsIHtidWJibGVzOiB0cnVlfSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcG9uIHN1YnNjcmlwdGlvbiwgZW1pdHMgdGhlIGtleXN0cm9rZXMgcmVnaXN0ZXJlZCB3aXRoIG1lbnUgaXRlbXMgb2YgdGhpcyB2aWV3J3MgY29udGV4dCBtZW51LFxuICAgKiBhbmQgdGhlbiBjb250aW51b3VzbHkgd2hlbiB0aGV5IGNoYW5nZS4gVGhlIG9ic2VydmFibGUgbmV2ZXIgY29tcGxldGVzLlxuICAgKi9cbiAgcHJpdmF0ZSB2aWV3Q29udGV4dE1lbnVLZXlzdHJva2VzJCgpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMudmlldy5tZW51SXRlbXMkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyQXJyYXkobWVudUl0ZW0gPT4gISFtZW51SXRlbS5hY2NlbGVyYXRvciksXG4gICAgICAgIG1hcEFycmF5KG1lbnVJdGVtID0+IG1lbnVJdGVtLmFjY2VsZXJhdG9yIS5tYXAoYWNjZWxlcmF0b3IgPT4ge1xuICAgICAgICAgIC8vIE5vcm1hbGl6ZSBrZXlzdHJva2VzIGFjY29yZGluZyB0byBgU2NpUm91dGVyT3V0bGV0RWxlbWVudCNrZXlzdHJva2VzYFxuICAgICAgICAgIHN3aXRjaCAoYWNjZWxlcmF0b3IpIHtcbiAgICAgICAgICAgIGNhc2UgJ2N0cmwnOlxuICAgICAgICAgICAgICByZXR1cm4gJ2NvbnRyb2wnO1xuICAgICAgICAgICAgY2FzZSAnLic6XG4gICAgICAgICAgICAgIHJldHVybiAnZG90JztcbiAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICByZXR1cm4gJ3NwYWNlJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBhY2NlbGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKSxcbiAgICAgICAgbWFwQXJyYXkoYWNjZWxlcmF0b3IgPT4gWydrZXlkb3duJ10uY29uY2F0KGFjY2VsZXJhdG9yKS5qb2luKCcuJykpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB7QGxpbmsgaXNXb3JrYmVuY2hEcmFnfSBwcm9wZXJ0eSB3aGVuIGEgd29ya2JlbmNoIGRyYWcgb3BlcmF0aW9uIGlzIGRldGVjdGVkLFxuICAgKiBzdWNoIGFzIHdoZW4gZHJhZ2dpbmcgYSB2aWV3IG9yIG1vdmluZyBhIHNhc2guXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxXb3JrYmVuY2hEcmFnRGV0ZWN0b3IoKTogdm9pZCB7XG4gICAgdGhpcy5fd29ya2JlbmNoTGF5b3V0U2VydmljZS5kcmFnZ2luZyRcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIHRoaXMuaXNXb3JrYmVuY2hEcmFnID0gKGV2ZW50ID09PSAnc3RhcnQnKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9wYWdhdGVXb3JrYmVuY2hUaGVtZSgpOiB2b2lkIHtcbiAgICBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5faW5qZWN0b3IsICgpID0+IE1pY3JvZnJvbnRlbmRzLnByb3BhZ2F0ZVRoZW1lKHRoaXMucm91dGVyT3V0bGV0RWxlbWVudC5uYXRpdmVFbGVtZW50KSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gSW5zdHJ1Y3QgdGhlIG1lc3NhZ2UgYnJva2VyIHRvIGRlbGV0ZSByZXRhaW5lZCBtZXNzYWdlcyB0byBmcmVlIHJlc291cmNlcy5cbiAgICB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goybVXb3JrYmVuY2hDb21tYW5kcy52aWV3QWN0aXZlVG9waWModGhpcy52aWV3LmlkKSwgdW5kZWZpbmVkLCB7cmV0YWluOiB0cnVlfSkudGhlbigpO1xuICAgIHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdQYXJhbXNUb3BpYyh0aGlzLnZpZXcuaWQpLCB1bmRlZmluZWQsIHtyZXRhaW46IHRydWV9KS50aGVuKCk7XG4gICAgdGhpcy5fb3V0bGV0Um91dGVyLm5hdmlnYXRlKG51bGwsIHtvdXRsZXQ6IHRoaXMudmlldy5pZH0pLnRoZW4oKTtcbiAgICB0aGlzLnZpZXcudW5yZWdpc3RlckFkYXB0ZXIoTWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXcpO1xuICB9XG59XG5cbi8qKlxuICogQmxvY2tzIHRoZSBtaWNyb2Zyb250ZW5kIG91dGxldCB3aGVuIGRpYWxvZyhzKSBvdmVybGF5IHRoaXMgdmlldy5cbiAqL1xuZnVuY3Rpb24gY29uZmlndXJlTWljcm9mcm9udGVuZEdsYXNzUGFuZSgpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBHTEFTU19QQU5FX0JMT0NLQUJMRSxcbiAgICAgIHVzZUV4aXN0aW5nOiDJtVdvcmtiZW5jaFZpZXcsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBHTEFTU19QQU5FX09QVElPTlMsXG4gICAgICB1c2VGYWN0b3J5OiAoKTogR2xhc3NQYW5lT3B0aW9ucyA9PiAoe2F0dHJpYnV0ZXM6IHsnZGF0YS12aWV3aWQnOiBpbmplY3QoV29ya2JlbmNoVmlldykuaWR9fSksXG4gICAgfSxcbiAgXTtcbn1cbiIsIjx3Yi1jb250ZW50LWFzLW92ZXJsYXkgW292ZXJsYXlIb3N0XT1cImlmcmFtZUhvc3RSZWYucmVmJCB8IGFzeW5jXCI+XG4gIDxkaXYgY2xhc3M9XCJtaWNyb2Zyb250ZW5kLXZpZXdcIlxuICAgICAgIFtjbGFzcy53b3JrYmVuY2gtZHJhZ109XCJpc1dvcmtiZW5jaERyYWdcIlxuICAgICAgIFthdHRyLmRhdGEtdmlld2lkXT1cInZpZXcuaWRcIlxuICAgICAgIHdiR2xhc3NQYW5lPlxuICAgIDxzY2ktcm91dGVyLW91dGxldCAjcm91dGVyX291dGxldFxuICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJ2aWV3LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXBhYmlsaXR5aWRdPVwiY2FwYWJpbGl0eT8ubWV0YWRhdGEhLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hcHBdPVwiY2FwYWJpbGl0eT8ubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInZpZXcuY2xhc3NMaXN0LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzd2l0aGluKT1cIm9uRm9jdXNXaXRoaW4oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtrZXlzdHJva2VzXT1cImtleXN0cm9rZXNUb0J1YmJsZSQgfCBhc3luY1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJzcGxhc2hcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NjaS1yb3V0ZXItb3V0bGV0PlxuICA8L2Rpdj5cbjwvd2ItY29udGVudC1hcy1vdmVybGF5PlxuIl19
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vbWljcm9mcm9udGVuZC12aWV3L21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtL21pY3JvZnJvbnRlbmQtdmlldy9taWNyb2Zyb250ZW5kLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQStCLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL00sT0FBTyxFQUFDLGNBQWMsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxhQUFhLEVBQUUsY0FBYyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUF1QyxNQUFNLCtCQUErQixDQUFDO0FBQzlNLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBMEIseUJBQXlCLEVBQUUs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RSxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUUsRUFBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFDLENBQUM7U0FDOUY7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBEZXN0cm95UmVmLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBQcm92aWRlciwgcnVuSW5JbmplY3Rpb25Db250ZXh0LCB1bnRyYWNrZWQsIHZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Zmlyc3QsIG1hcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge01hbmlmZXN0U2VydmljZSwgbWFwVG9Cb2R5LCBNZXNzYWdlQ2xpZW50LCBNZXNzYWdlSGVhZGVycywgTWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnLCBPdXRsZXRSb3V0ZXIsIFJlc3BvbnNlU3RhdHVzQ29kZXMsIFNjaVJvdXRlck91dGxldEVsZW1lbnQsIFRvcGljTWVzc2FnZX0gZnJvbSAnQHNjaW9uL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0nO1xuaW1wb3J0IHtNYW5pZmVzdE9iamVjdENhY2hlfSBmcm9tICcuLi9tYW5pZmVzdC1vYmplY3QtY2FjaGUuc2VydmljZSc7XG5pbXBvcnQge1dvcmtiZW5jaFZpZXdDYXBhYmlsaXR5LCDJtU1pY3JvZnJvbnRlbmRSb3V0ZVBhcmFtcywgybVWSUVXX0lEX0NPTlRFWFRfS0VZLCDJtVZpZXdQYXJhbXNVcGRhdGVDb21tYW5kLCDJtVdvcmtiZW5jaENvbW1hbmRzfSBmcm9tICdAc2Npb24vd29ya2JlbmNoLWNsaWVudCc7XG5pbXBvcnQge0RpY3Rpb25hcmllcywgTWFwc30gZnJvbSAnQHNjaW9uL3Rvb2xraXQvdXRpbCc7XG5pbXBvcnQge0xvZ2dlciwgTG9nZ2VyTmFtZXN9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHtDYW5DbG9zZVJlZn0gZnJvbSAnLi4vLi4vd29ya2JlbmNoLm1vZGVsJztcbmltcG9ydCB7SUZSQU1FX09WRVJMQVlfSE9TVH0gZnJvbSAnLi4vLi4vY29udGVudC1wcm9qZWN0aW9uL3dvcmtiZW5jaC1lbGVtZW50LXJlZmVyZW5jZXMnO1xuaW1wb3J0IHtzZXJpYWxpemVFeGVjdXRpb259IGZyb20gJy4uLy4uL2NvbW1vbi9vcGVyYXRvcnMnO1xuaW1wb3J0IHvJtVdvcmtiZW5jaFZpZXd9IGZyb20gJy4uLy4uL3ZpZXcvybV3b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge2ZpbHRlckFycmF5LCBtYXBBcnJheX0gZnJvbSAnQHNjaW9uL3Rvb2xraXQvb3BlcmF0b3JzJztcbmltcG9ydCB7Vmlld01lbnVTZXJ2aWNlfSBmcm9tICcuLi8uLi9wYXJ0L3ZpZXctY29udGV4dC1tZW51L3ZpZXctbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7V29ya2JlbmNoUm91dGVyfSBmcm9tICcuLi8uLi9yb3V0aW5nL3dvcmtiZW5jaC1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQge3N0cmluZ2lmeUVycm9yfSBmcm9tICcuLi8uLi9jb21tb24vc3RyaW5naWZ5LWVycm9yLnV0aWwnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kVmlld1JvdXRlc30gZnJvbSAnLi4vcm91dGluZy9taWNyb2Zyb250ZW5kLXZpZXctcm91dGVzJztcbmltcG9ydCB7QXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ0NvbXBvbmVudE91dGxldH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q29udGVudEFzT3ZlcmxheUNvbXBvbmVudCwgQ29udGVudEFzT3ZlcmxheUNvbmZpZ30gZnJvbSAnLi4vLi4vY29udGVudC1wcm9qZWN0aW9uL2NvbnRlbnQtYXMtb3ZlcmxheS5jb21wb25lbnQnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7V29ya2JlbmNoTGF5b3V0U2VydmljZX0gZnJvbSAnLi4vLi4vbGF5b3V0L3dvcmtiZW5jaC1sYXlvdXQuc2VydmljZSc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRTcGxhc2hDb21wb25lbnR9IGZyb20gJy4uL21pY3JvZnJvbnRlbmQtc3BsYXNoL21pY3JvZnJvbnRlbmQtc3BsYXNoLmNvbXBvbmVudCc7XG5pbXBvcnQge0dMQVNTX1BBTkVfQkxPQ0tBQkxFLCBHTEFTU19QQU5FX09QVElPTlMsIEdsYXNzUGFuZURpcmVjdGl2ZSwgR2xhc3NQYW5lT3B0aW9uc30gZnJvbSAnLi4vLi4vZ2xhc3MtcGFuZS9nbGFzcy1wYW5lLmRpcmVjdGl2ZSc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3fSBmcm9tICcuL21pY3JvZnJvbnRlbmQtd29ya2JlbmNoLXZpZXcubW9kZWwnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kc30gZnJvbSAnLi4vY29tbW9uL21pY3JvZnJvbnRlbmQudXRpbCc7XG5pbXBvcnQge09iamVjdHN9IGZyb20gJy4uLy4uL2NvbW1vbi9vYmplY3RzLnV0aWwnO1xuaW1wb3J0IHtXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi8uLi92aWV3L3dvcmtiZW5jaC12aWV3Lm1vZGVsJztcblxuLyoqXG4gKiBFbWJlZHMgdGhlIG1pY3JvZnJvbnRlbmQgb2YgYSB2aWV3IGNhcGFiaWxpdHkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3diLW1pY3JvZnJvbnRlbmQtdmlldycsXG4gIHN0eWxlVXJsczogWycuL21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQXN5bmNQaXBlLFxuICAgIENvbnRlbnRBc092ZXJsYXlDb21wb25lbnQsXG4gICAgTmdDb21wb25lbnRPdXRsZXQsXG4gICAgR2xhc3NQYW5lRGlyZWN0aXZlLFxuICBdLFxuICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgY29uZmlndXJlTWljcm9mcm9udGVuZEdsYXNzUGFuZSgpLFxuICBdLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sIC8vIHJlcXVpcmVkIGJlY2F1c2UgPHNjaS1yb3V0ZXItb3V0bGV0PiBpcyBhIGN1c3RvbSBlbGVtZW50XG59KVxuZXhwb3J0IGNsYXNzIE1pY3JvZnJvbnRlbmRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgX2hvc3QgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuICBwcml2YXRlIF9yb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgX291dGxldFJvdXRlciA9IGluamVjdChPdXRsZXRSb3V0ZXIpO1xuICBwcml2YXRlIF9tYW5pZmVzdFNlcnZpY2UgPSBpbmplY3QoTWFuaWZlc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfbWFuaWZlc3RPYmplY3RDYWNoZSA9IGluamVjdChNYW5pZmVzdE9iamVjdENhY2hlKTtcbiAgcHJpdmF0ZSBfbWVzc2FnZUNsaWVudCA9IGluamVjdChNZXNzYWdlQ2xpZW50KTtcbiAgcHJpdmF0ZSBfbG9nZ2VyID0gaW5qZWN0KExvZ2dlcik7XG4gIHByaXZhdGUgX3ZpZXdDb250ZXh0TWVudVNlcnZpY2UgPSBpbmplY3QoVmlld01lbnVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfd29ya2JlbmNoTGF5b3V0U2VydmljZSA9IGluamVjdChXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfd29ya2JlbmNoUm91dGVyID0gaW5qZWN0KFdvcmtiZW5jaFJvdXRlcik7XG4gIHByaXZhdGUgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIHByaXZhdGUgX3JvdXRlck91dGxldEVsZW1lbnQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxTY2lSb3V0ZXJPdXRsZXRFbGVtZW50Pj4oJ3JvdXRlcl9vdXRsZXQnKTtcbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVQYXJhbXNVcGRhdGVyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX3VuaXZlcnNhbEtleXN0cm9rZXMgPSBbXG4gICAgJ2tleWRvd24uZXNjYXBlJywgLy8gYWxsb3dzIGNsb3Npbmcgbm90aWZpY2F0aW9uc1xuICBdO1xuXG4gIHByb3RlY3RlZCB2aWV3ID0gaW5qZWN0KMm1V29ya2JlbmNoVmlldyk7XG4gIHByb3RlY3RlZCBjYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSB8IG51bGwgPSBudWxsO1xuICAvKiogU3BsYXNoIHRvIGRpc3BsYXkgdW50aWwgdGhlIG1pY3JvZnJvbnRlbmQgc2lnbmFscyByZWFkaW5lc3MuICovXG4gIHByb3RlY3RlZCBzcGxhc2ggPSBpbmplY3QoTWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnKS5zcGxhc2ggPz8gTWljcm9mcm9udGVuZFNwbGFzaENvbXBvbmVudDtcbiAgLyoqIEtleXN0cm9rZXMgd2hpY2ggdG8gYnViYmxlIGFjcm9zcyBpZnJhbWUgYm91bmRhcmllcyBmcm9tIGVtYmVkZGVkIGNvbnRlbnQuICovXG4gIHByb3RlY3RlZCBrZXlzdHJva2VzVG9CdWJibGUkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIGEgd29ya2JlbmNoIGRyYWcgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzLCBzdWNoIGFzIHdoZW4gZHJhZ2dpbmcgYSB2aWV3IG9yIG1vdmluZyBhIHNhc2guICovXG4gIHByb3RlY3RlZCBpc1dvcmtiZW5jaERyYWcgPSBmYWxzZTtcbiAgLyoqIENvbmZpZ3VyZXMgaWZyYW1lIHByb2plY3Rpb24uICovXG4gIHByb3RlY3RlZCBvdmVybGF5Q29uZmlnOiBDb250ZW50QXNPdmVybGF5Q29uZmlnID0ge1xuICAgIGxvY2F0aW9uOiBpbmplY3QoSUZSQU1FX09WRVJMQVlfSE9TVCksXG4gICAgdmlzaWJsZTogdGhpcy52aWV3LnBvcnRhbC5hdHRhY2hlZCxcbiAgfTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gYENvbnN0cnVjdGluZyBNaWNyb2Zyb250ZW5kVmlld0NvbXBvbmVudC4gW3ZpZXdJZD0ke3RoaXMudmlldy5pZH1dYCwgTG9nZ2VyTmFtZXMuTUlDUk9GUk9OVEVORF9ST1VUSU5HKTtcbiAgICB0aGlzLmtleXN0cm9rZXNUb0J1YmJsZSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnZpZXdDb250ZXh0TWVudUtleXN0cm9rZXMkKCksIG9mKHRoaXMuX3VuaXZlcnNhbEtleXN0cm9rZXMpXSlcbiAgICAgIC5waXBlKG1hcChrZXlzdHJva2VzID0+IG5ldyBBcnJheTxzdHJpbmc+KCkuY29uY2F0KC4uLmtleXN0cm9rZXMpKSk7XG4gICAgdGhpcy5pbnN0YWxsV29ya2JlbmNoRHJhZ0RldGVjdG9yKCk7XG4gICAgdGhpcy5pbnN0YWxsVmlld0FjdGl2ZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5zdGFsbFBhcnRJZFB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5zdGFsbENhbkNsb3NlR3VhcmQoybVXb3JrYmVuY2hDb21tYW5kcy5jYW5DbG9zZVRvcGljKHRoaXMudmlldy5pZCkpO1xuICAgIHRoaXMuaW5zdGFsbENhbkNsb3NlR3VhcmQoybVXb3JrYmVuY2hDb21tYW5kcy52aWV3Q2xvc2luZ1RvcGljKHRoaXMudmlldy5pZCkpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlck91dGxldEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LnNldENvbnRleHRWYWx1ZSjJtVZJRVdfSURfQ09OVEVYVF9LRVksIHRoaXMudmlldy5pZCk7XG4gICAgdGhpcy5wcm9wYWdhdGVXb3JrYmVuY2hUaGVtZSgpO1xuICAgIHRoaXMuaW5zdGFsbE1lbnVJdGVtQWNjZWxlcmF0b3JzJCgpO1xuICAgIHRoaXMuaW5zdGFsbE5hdmlnYXRvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsTmF2aWdhdG9yKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlLnBhcmFtc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChwYXJhbXMgPT4gdGhpcy5mZXRjaENhcGFiaWxpdHkkKHBhcmFtc1vJtU1pY3JvZnJvbnRlbmRSb3V0ZVBhcmFtcy7JtVZJRVdfQ0FQQUJJTElUWV9JRF0pLnBpcGUobWFwKGNhcGFiaWxpdHkgPT4gKHtjYXBhYmlsaXR5LCBwYXJhbXN9KSkpKSxcbiAgICAgICAgc2VyaWFsaXplRXhlY3V0aW9uKCh7Y2FwYWJpbGl0eSwgcGFyYW1zfSkgPT4gdGhpcy5vbk5hdmlnYXRlKHRoaXMuY2FwYWJpbGl0eSwgY2FwYWJpbGl0eSwgcGFyYW1zKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25OYXZpZ2F0ZShwcmV2Q2FwYWJpbGl0eTogV29ya2JlbmNoVmlld0NhcGFiaWxpdHkgfCBudWxsLCBjYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSB8IG51bGwsIHBhcmFtczogUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFjYXBhYmlsaXR5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybigoKSA9PiBgW051bGxDYXBhYmlsaXR5RXJyb3JdIE5vIGFwcGxpY2F0aW9uIGZvdW5kIHRvIHByb3ZpZGUgYSB2aWV3IGNhcGFiaWxpdHkgb2YgaWQgJyR7cGFyYW1zW8m1TWljcm9mcm9udGVuZFJvdXRlUGFyYW1zLsm1VklFV19DQVBBQklMSVRZX0lEXX0nLiBNYXliZSwgdGhlIHJlcXVlc3RlZCB2aWV3IGlzIG5vdCBwdWJsaWMgQVBJIG9yIHRoZSBwcm92aWRpbmcgYXBwbGljYXRpb24gbm90IGF2YWlsYWJsZS5gLCBMb2dnZXJOYW1lcy5NSUNST0ZST05URU5EX1JPVVRJTkcpO1xuICAgICAgdGhpcy51bmxvYWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhcGFiaWxpdHkgPSBjYXBhYmlsaXR5O1xuICAgIHRoaXMudmlldy5yZWdpc3RlckFkYXB0ZXIoTWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXcsIG5ldyBNaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldyhjYXBhYmlsaXR5LCBwYXJhbXMpKTtcblxuICAgIC8vIENoZWNrIGlmIG5hdmlnYXRpbmcgdG8gYSBuZXcgbWljcm9mcm9udGVuZC5cbiAgICBpZiAoIXByZXZDYXBhYmlsaXR5IHx8IHByZXZDYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCAhPT0gY2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQpIHtcbiAgICAgIHRoaXMuc2V0Vmlld1Byb3BlcnRpZXMoY2FwYWJpbGl0eSwgcGFyYW1zKTtcbiAgICAgIHRoaXMuaW5zdGFsbFBhcmFtc1VwZGF0ZXIoY2FwYWJpbGl0eSk7XG4gICAgfVxuXG4gICAgLy8gU2lnbmFsIHRoZSBjdXJyZW50bHkgbG9hZGVkIGFwcGxpY2F0aW9uIHRvIHVubG9hZC5cbiAgICBpZiAocHJldkNhcGFiaWxpdHkgJiYgcHJldkNhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZSAhPT0gY2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lKSB7XG4gICAgICBhd2FpdCB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goybVXb3JrYmVuY2hDb21tYW5kcy52aWV3VW5sb2FkaW5nVG9waWModGhpcy52aWV3LmlkKSk7XG4gICAgfVxuXG4gICAgLy8gUGFzcyBwYXJhbWV0ZXJzIHRvIHRoZSBtaWNyb2Zyb250ZW5kLlxuICAgIGF3YWl0IHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdQYXJhbXNUb3BpYyh0aGlzLnZpZXcuaWQpLCBNYXBzLmNvZXJjZShwYXJhbXMpLCB7cmV0YWluOiB0cnVlfSk7XG5cbiAgICAvLyBXaGVuIG5hdmlnYXRpbmcgdG8gYW5vdGhlciB2aWV3IGNhcGFiaWxpdHkgb2YgdGhlIHNhbWUgYXBwLCB3YWl0IHVudGlsIHRyYW5zcG9ydGVkIHRoZSBwYXJhbXMgdG8gdGhlIG1pY3JvZnJvbnRlbmQgYmVmb3JlIGxvYWRpbmcgdGhlXG4gICAgLy8gbmV3IG1pY3JvZnJvbnRlbmQgaW50byB0aGUgaWZyYW1lLCBhbGxvd2luZyB0aGUgY3VycmVudGx5IGxvYWRlZCBtaWNyb2Zyb250ZW5kIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMuXG4gICAgaWYgKHByZXZDYXBhYmlsaXR5XG4gICAgICAmJiBwcmV2Q2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lID09PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWVcbiAgICAgICYmIHByZXZDYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCAhPT0gY2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQpIHtcbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvckNhcGFiaWxpdHlQYXJhbShjYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCk7XG4gICAgfVxuXG4gICAgLy8gTmF2aWdhdGUgdG8gdGhlIG1pY3JvZnJvbnRlbmQuXG4gICAgY29uc3QgYXBwbGljYXRpb24gPSB0aGlzLl9tYW5pZmVzdFNlcnZpY2UuZ2V0QXBwbGljYXRpb24oY2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lKTtcbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gYExvYWRpbmcgbWljcm9mcm9udGVuZCBpbnRvIHdvcmtiZW5jaCB2aWV3IFt2aWV3SWQ9JHt0aGlzLnZpZXcuaWR9LCBhcHA9JHtjYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWV9LCBiYXNlVXJsPSR7YXBwbGljYXRpb24uYmFzZVVybH0sIHBhdGg9JHsoY2FwYWJpbGl0eS5wcm9wZXJ0aWVzLnBhdGgpfV0uYCwgTG9nZ2VyTmFtZXMuTUlDUk9GUk9OVEVORF9ST1VUSU5HLCBwYXJhbXMsIGNhcGFiaWxpdHkpO1xuICAgIGF3YWl0IHRoaXMuX291dGxldFJvdXRlci5uYXZpZ2F0ZShjYXBhYmlsaXR5LnByb3BlcnRpZXMucGF0aCwge1xuICAgICAgb3V0bGV0OiB0aGlzLnZpZXcuaWQsXG4gICAgICByZWxhdGl2ZVRvOiBhcHBsaWNhdGlvbi5iYXNlVXJsLFxuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwdXNoU3RhdGVUb1Nlc3Npb25IaXN0b3J5U3RhY2s6IGZhbHNlLFxuICAgICAgc2hvd1NwbGFzaDogY2FwYWJpbGl0eS5wcm9wZXJ0aWVzLnNob3dTcGxhc2gsXG4gICAgICDJtWNhcGFiaWxpdHlJZDogY2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQsXG4gICAgfSk7XG5cbiAgICAvLyBJbmFjdGl2ZSB2aWV3cyBhcmUgbm90IGNoZWNrZWQgZm9yIGNoYW5nZXMgc2luY2UgZGV0YWNoZWQgZnJvbSB0aGUgQW5ndWxhciBjb21wb25lbnQgdHJlZS5cbiAgICAvLyBTbywgd2UgbWFudWFsbHkgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSBhdHRyaWJ1dGVzIG9uIHRoZSBgc2NpLXJvdXRlci1vdXRsZXRgLlxuICAgIGlmICghdGhpcy52aWV3LmFjdGl2ZSgpKSB7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaENhcGFiaWxpdHkkKGNhcGFiaWxpdHlJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFuaWZlc3RPYmplY3RDYWNoZS5vYnNlcnZlQ2FwYWJpbGl0eSQoY2FwYWJpbGl0eUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zdGFsbE1lbnVJdGVtQWNjZWxlcmF0b3JzJCgpOiB2b2lkIHtcbiAgICAvLyBTaW5jZSB0aGUgaWZyYW1lIGlzIGFkZGVkIGF0IGEgdG9wLWxldmVsIGxvY2F0aW9uIGluIHRoZSBET00sIHRoYXQgaXMsIG5vdCBhcyBhIGNoaWxkIGVsZW1lbnQgb2YgdGhpcyBjb21wb25lbnQsXG4gICAgLy8gdGhlIHdvcmtiZW5jaCB2aWV3IG1pc3NlcyBrZXlib2FyZCBldmVudHMgZnJvbSBlbWJlZGRlZCBjb250ZW50LiBBcyBhIHJlc3VsdCwgbWVudSBpdGVtIGFjY2VsZXJhdG9ycyBvZiB0aGUgY29udGV4dFxuICAgIC8vIG1lbnUgb2YgdGhpcyB2aWV3IGRvIG5vdCB3b3JrLCBzbyB3ZSBpbnN0YWxsIHRoZSBhY2NlbGVyYXRvcnMgb24gdGhlIHJvdXRlciBvdXRsZXQgYXMgd2VsbC5cbiAgICB0aGlzLl92aWV3Q29udGV4dE1lbnVTZXJ2aWNlLmluc3RhbGxNZW51SXRlbUFjY2VsZXJhdG9ycyQodGhpcy5fcm91dGVyT3V0bGV0RWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQsIHRoaXMudmlldylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIHJlcXVlc3RzIGZyb20gdGhlIGN1cnJlbnRseSBsb2FkZWQgbWljcm9mcm9udGVuZCB0byB1cGRhdGUgaXRzIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxQYXJhbXNVcGRhdGVyKHZpZXdDYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSk6IHZvaWQge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlUGFyYW1zVXBkYXRlciQubmV4dCgpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX21lc3NhZ2VDbGllbnQub2JzZXJ2ZSQ8ybVWaWV3UGFyYW1zVXBkYXRlQ29tbWFuZD4oybVXb3JrYmVuY2hDb21tYW5kcy52aWV3UGFyYW1zVXBkYXRlVG9waWModGhpcy52aWV3LmlkLCB2aWV3Q2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQpKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlUGFyYW1zVXBkYXRlciQpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChyZXF1ZXN0OiBUb3BpY01lc3NhZ2U8ybVWaWV3UGFyYW1zVXBkYXRlQ29tbWFuZD4pID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByeGpzL25vLWFzeW5jLXN1YnNjcmliZVxuICAgICAgICAvLyBXZSBETyBOT1QgbmF2aWdhdGUgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YXMgY2xvc2VkLCBlLmcuLCBiZWNhdXNlIGNsb3NlZCB0aGUgdmlldyBvciBuYXZpZ2F0ZWQgdG8gYW5vdGhlciBjYXBhYmlsaXR5LlxuICAgICAgICBjb25zdCByZXBseVRvID0gcmVxdWVzdC5oZWFkZXJzLmdldChNZXNzYWdlSGVhZGVycy5SZXBseVRvKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLl93b3JrYmVuY2hSb3V0ZXIubmF2aWdhdGUobGF5b3V0ID0+IHtcbiAgICAgICAgICAgIC8vIENhbmNlbCBwZW5kaW5nIG5hdmlnYXRpb24gaWYgdGhlIHN1YnNjcmlwdGlvbiB3YXMgY2xvc2VkLCBlLmcuLCBiZWNhdXNlIGNsb3NlZCB0aGUgdmlldyBvciBuYXZpZ2F0ZWQgdG8gYW5vdGhlciBjYXBhYmlsaXR5XG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyYW1zSGFuZGxpbmcgPSByZXF1ZXN0LmJvZHkhLnBhcmFtc0hhbmRsaW5nO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhcmFtcyA9IHRoaXMuX3JvdXRlLnNuYXBzaG90LnBhcmFtcztcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IERpY3Rpb25hcmllcy5jb2VyY2UocmVxdWVzdC5ib2R5IS5wYXJhbXMpOyAvLyBjb2VyY2UgcGFyYW1zIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICBjb25zdCBtZXJnZWRQYXJhbXMgPSBPYmplY3RzLndpdGhvdXRVbmRlZmluZWRFbnRyaWVzKHBhcmFtc0hhbmRsaW5nID09PSAnbWVyZ2UnID8gey4uLmN1cnJlbnRQYXJhbXMsIC4uLm5ld1BhcmFtc30gOiBuZXdQYXJhbXMpO1xuICAgICAgICAgICAgY29uc3Qge3VybFBhcmFtcywgdHJhbnNpZW50UGFyYW1zfSA9IE1pY3JvZnJvbnRlbmRWaWV3Um91dGVzLnNwbGl0UGFyYW1zKG1lcmdlZFBhcmFtcywgdmlld0NhcGFiaWxpdHkpO1xuXG4gICAgICAgICAgICByZXR1cm4gbGF5b3V0Lm5hdmlnYXRlVmlldyh0aGlzLnZpZXcuaWQsIFt1cmxQYXJhbXNdLCB7XG4gICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX3JvdXRlLFxuICAgICAgICAgICAgICBzdGF0ZTogT2JqZWN0cy53aXRob3V0VW5kZWZpbmVkRW50cmllcyh7XG4gICAgICAgICAgICAgICAgW01pY3JvZnJvbnRlbmRWaWV3Um91dGVzLlNUQVRFX1RSQU5TSUVOVF9QQVJBTVNdOiB0cmFuc2llbnRQYXJhbXMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhd2FpdCB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2gocmVwbHlUbywgc3VjY2Vzcywge2hlYWRlcnM6IG5ldyBNYXAoKS5zZXQoTWVzc2FnZUhlYWRlcnMuU3RhdHVzLCBSZXNwb25zZVN0YXR1c0NvZGVzLlRFUk1JTkFMKX0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaChyZXBseVRvLCBzdHJpbmdpZnlFcnJvcihlcnJvciksIHtoZWFkZXJzOiBuZXcgTWFwKCkuc2V0KE1lc3NhZ2VIZWFkZXJzLlN0YXR1cywgUmVzcG9uc2VTdGF0dXNDb2Rlcy5FUlJPUil9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcHJvcGVydGllcyBvZiB0aGlzIHZpZXcsIHN1Y2ggYXMgdGhlIHZpZXcgdGl0bGUsIGFzIGRlZmluZWQgYnkgdGhlIGNhcGFiaWxpdHkuXG4gICAqL1xuICBwcml2YXRlIHNldFZpZXdQcm9wZXJ0aWVzKHZpZXdDYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSwgcGFyYW1zOiBQYXJhbXMpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXcudGl0bGUgPSBNaWNyb2Zyb250ZW5kcy5zdWJzdGl0dXRlTmFtZWRQYXJhbWV0ZXJzKHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMudGl0bGUsIE1hcHMuY29lcmNlKHBhcmFtcykpID8/IG51bGw7XG4gICAgdGhpcy52aWV3LmhlYWRpbmcgPSBNaWNyb2Zyb250ZW5kcy5zdWJzdGl0dXRlTmFtZWRQYXJhbWV0ZXJzKHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMuaGVhZGluZywgTWFwcy5jb2VyY2UocGFyYW1zKSkgPz8gbnVsbDtcbiAgICB0aGlzLnZpZXcuY2xhc3NMaXN0LmFwcGxpY2F0aW9uID0gdmlld0NhcGFiaWxpdHkucHJvcGVydGllcy5jc3NDbGFzcztcbiAgICB0aGlzLnZpZXcuY2xvc2FibGUgPSB2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzLmNsb3NhYmxlID8/IHRydWU7XG4gICAgdGhpcy52aWV3LmRpcnR5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbGxWaWV3QWN0aXZlUHVibGlzaGVyKCk6IHZvaWQge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLnZpZXcuYWN0aXZlKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjb21tYW5kVG9waWMgPSDJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdBY3RpdmVUb3BpYyh0aGlzLnZpZXcuaWQpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goY29tbWFuZFRvcGljLCBhY3RpdmUsIHtyZXRhaW46IHRydWV9KS50aGVuKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zdGFsbFBhcnRJZFB1Ymxpc2hlcigpOiB2b2lkIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgcGFydCA9IHRoaXMudmlldy5wYXJ0KCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjb21tYW5kVG9waWMgPSDJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdQYXJ0SWRUb3BpYyh0aGlzLnZpZXcuaWQpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goY29tbWFuZFRvcGljLCBwYXJ0LmlkLCB7cmV0YWluOiB0cnVlfSkudGhlbigpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgcGFyYW1zIGNvbnRhaW4gdGhlIGdpdmVuIGNhcGFiaWxpdHkgaWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JDYXBhYmlsaXR5UGFyYW0odmlld0NhcGFiaWxpdHlJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgdmlld1BhcmFtcyQgPSB0aGlzLl9tZXNzYWdlQ2xpZW50Lm9ic2VydmUkPE1hcDxzdHJpbmcsIHN0cmluZz4+KMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcmFtc1RvcGljKHRoaXMudmlldy5pZCkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwVG9Cb2R5KCksXG4gICAgICAgIGZpcnN0KHBhcmFtcyA9PiBwYXJhbXMuZ2V0KMm1TWljcm9mcm9udGVuZFJvdXRlUGFyYW1zLsm1VklFV19DQVBBQklMSVRZX0lEKSA9PT0gdmlld0NhcGFiaWxpdHlJZCksXG4gICAgICApO1xuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHZpZXdQYXJhbXMkKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zdGFsbENhbkNsb3NlR3VhcmQoY2FuQ2xvc2VUb3BpYzogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGNhbkNsb3NlUmVmOiBDYW5DbG9zZVJlZiB8IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9tZXNzYWdlQ2xpZW50LnN1YnNjcmliZXJDb3VudCQoY2FuQ2xvc2VUb3BpYylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoY291bnQgPT4gY291bnQgPiAwKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGNvbmZpcm1DbG9zaW5nID0+IHtcbiAgICAgICAgaWYgKGNvbmZpcm1DbG9zaW5nKSB7XG4gICAgICAgICAgY2FuQ2xvc2VSZWYgPSB0aGlzLnZpZXcuY2FuQ2xvc2UoKCkgPT4gdGhpcy5fbWVzc2FnZUNsaWVudC5yZXF1ZXN0JDxib29sZWFuPihjYW5DbG9zZVRvcGljKS5waXBlKG1hcFRvQm9keSgpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY2FuQ2xvc2VSZWY/LmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Gb2N1c1dpdGhpbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB7ZGV0YWlsOiBmb2N1c1dpdGhpbn0gPSBldmVudCBhcyBDdXN0b21FdmVudDxib29sZWFuPjtcbiAgICBpZiAoZm9jdXNXaXRoaW4pIHtcbiAgICAgIHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnc2NpLW1pY3JvZnJvbnRlbmQtZm9jdXNpbicsIHtidWJibGVzOiB0cnVlfSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcG9uIHN1YnNjcmlwdGlvbiwgZW1pdHMgdGhlIGtleXN0cm9rZXMgcmVnaXN0ZXJlZCB3aXRoIG1lbnUgaXRlbXMgb2YgdGhpcyB2aWV3J3MgY29udGV4dCBtZW51LFxuICAgKiBhbmQgdGhlbiBjb250aW51b3VzbHkgd2hlbiB0aGV5IGNoYW5nZS4gVGhlIG9ic2VydmFibGUgbmV2ZXIgY29tcGxldGVzLlxuICAgKi9cbiAgcHJpdmF0ZSB2aWV3Q29udGV4dE1lbnVLZXlzdHJva2VzJCgpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMudmlldy5tZW51SXRlbXMkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyQXJyYXkobWVudUl0ZW0gPT4gISFtZW51SXRlbS5hY2NlbGVyYXRvciksXG4gICAgICAgIG1hcEFycmF5KG1lbnVJdGVtID0+IG1lbnVJdGVtLmFjY2VsZXJhdG9yIS5tYXAoYWNjZWxlcmF0b3IgPT4ge1xuICAgICAgICAgIC8vIE5vcm1hbGl6ZSBrZXlzdHJva2VzIGFjY29yZGluZyB0byBgU2NpUm91dGVyT3V0bGV0RWxlbWVudCNrZXlzdHJva2VzYFxuICAgICAgICAgIHN3aXRjaCAoYWNjZWxlcmF0b3IpIHtcbiAgICAgICAgICAgIGNhc2UgJ2N0cmwnOlxuICAgICAgICAgICAgICByZXR1cm4gJ2NvbnRyb2wnO1xuICAgICAgICAgICAgY2FzZSAnLic6XG4gICAgICAgICAgICAgIHJldHVybiAnZG90JztcbiAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICByZXR1cm4gJ3NwYWNlJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBhY2NlbGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKSxcbiAgICAgICAgbWFwQXJyYXkoYWNjZWxlcmF0b3IgPT4gWydrZXlkb3duJ10uY29uY2F0KGFjY2VsZXJhdG9yKS5qb2luKCcuJykpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB7QGxpbmsgaXNXb3JrYmVuY2hEcmFnfSBwcm9wZXJ0eSB3aGVuIGEgd29ya2JlbmNoIGRyYWcgb3BlcmF0aW9uIGlzIGRldGVjdGVkLFxuICAgKiBzdWNoIGFzIHdoZW4gZHJhZ2dpbmcgYSB2aWV3IG9yIG1vdmluZyBhIHNhc2guXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxXb3JrYmVuY2hEcmFnRGV0ZWN0b3IoKTogdm9pZCB7XG4gICAgZWZmZWN0KCgpID0+IHRoaXMuaXNXb3JrYmVuY2hEcmFnID0gdGhpcy5fd29ya2JlbmNoTGF5b3V0U2VydmljZS5kcmFnZ2luZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvcGFnYXRlV29ya2JlbmNoVGhlbWUoKTogdm9pZCB7XG4gICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuX2luamVjdG9yLCAoKSA9PiBNaWNyb2Zyb250ZW5kcy5wcm9wYWdhdGVUaGVtZSh0aGlzLl9yb3V0ZXJPdXRsZXRFbGVtZW50KCkubmF0aXZlRWxlbWVudCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmxvYWQoKTogdm9pZCB7XG4gICAgLy8gRGVsZXRlIHJldGFpbmVkIG1lc3NhZ2VzIHRvIGZyZWUgcmVzb3VyY2VzLlxuICAgIHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdBY3RpdmVUb3BpYyh0aGlzLnZpZXcuaWQpLCB1bmRlZmluZWQsIHtyZXRhaW46IHRydWV9KS50aGVuKCk7XG4gICAgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcmFtc1RvcGljKHRoaXMudmlldy5pZCksIHVuZGVmaW5lZCwge3JldGFpbjogdHJ1ZX0pLnRoZW4oKTtcbiAgICB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goybVXb3JrYmVuY2hDb21tYW5kcy52aWV3UGFydElkVG9waWModGhpcy52aWV3LmlkKSwgdW5kZWZpbmVkLCB7cmV0YWluOiB0cnVlfSkudGhlbigpO1xuICAgIHRoaXMuX291dGxldFJvdXRlci5uYXZpZ2F0ZShudWxsLCB7b3V0bGV0OiB0aGlzLnZpZXcuaWR9KS50aGVuKCk7XG4gICAgdGhpcy52aWV3LnVucmVnaXN0ZXJBZGFwdGVyKE1pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVubG9hZCgpO1xuICB9XG59XG5cbi8qKlxuICogQmxvY2tzIHRoZSBtaWNyb2Zyb250ZW5kIG91dGxldCB3aGVuIGRpYWxvZyhzKSBvdmVybGF5IHRoaXMgdmlldy5cbiAqL1xuZnVuY3Rpb24gY29uZmlndXJlTWljcm9mcm9udGVuZEdsYXNzUGFuZSgpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBHTEFTU19QQU5FX0JMT0NLQUJMRSxcbiAgICAgIHVzZUV4aXN0aW5nOiDJtVdvcmtiZW5jaFZpZXcsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBHTEFTU19QQU5FX09QVElPTlMsXG4gICAgICB1c2VGYWN0b3J5OiAoKTogR2xhc3NQYW5lT3B0aW9ucyA9PiAoe2F0dHJpYnV0ZXM6IHsnZGF0YS12aWV3aWQnOiBpbmplY3QoV29ya2JlbmNoVmlldykuaWR9fSksXG4gICAgfSxcbiAgXTtcbn1cbiIsIjx3Yi1jb250ZW50LWFzLW92ZXJsYXkgW2NvbmZpZ109XCJvdmVybGF5Q29uZmlnXCI+XG4gIDxkaXYgY2xhc3M9XCJtaWNyb2Zyb250ZW5kLXZpZXdcIlxuICAgICAgIFtjbGFzcy53b3JrYmVuY2gtZHJhZ109XCJpc1dvcmtiZW5jaERyYWdcIlxuICAgICAgIFthdHRyLmRhdGEtdmlld2lkXT1cInZpZXcuaWRcIlxuICAgICAgIHdiR2xhc3NQYW5lPlxuICAgIDxzY2ktcm91dGVyLW91dGxldCAjcm91dGVyX291dGxldFxuICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJ2aWV3LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXBhYmlsaXR5aWRdPVwiY2FwYWJpbGl0eT8ubWV0YWRhdGEhLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hcHBdPVwiY2FwYWJpbGl0eT8ubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInZpZXcuY2xhc3NMaXN0LmFzTGlzdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzd2l0aGluKT1cIm9uRm9jdXNXaXRoaW4oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtrZXlzdHJva2VzXT1cImtleXN0cm9rZXNUb0J1YmJsZSQgfCBhc3luY1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJzcGxhc2hcIi8+XG4gICAgPC9zY2ktcm91dGVyLW91dGxldD5cbiAgPC9kaXY+XG48L3diLWNvbnRlbnQtYXMtb3ZlcmxheT5cbiJdfQ==
|
|
@@ -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,
|
|
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
|
|
6
|
+
* Asserts view capabilities to have required properties.
|
|
6
7
|
*/
|
|
7
8
|
export class MicrofrontendViewCapabilityValidator {
|
|
8
9
|
async intercept(capability) {
|
|
@@ -11,20 +12,20 @@ export class MicrofrontendViewCapabilityValidator {
|
|
|
11
12
|
}
|
|
12
13
|
const viewCapability = capability;
|
|
13
14
|
// Assert the view capability to have a qualifier set.
|
|
14
|
-
if (!
|
|
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
|
|
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
|
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
25
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator }); }
|
|
26
27
|
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
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,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LWNhcGFiaWxpdHktdmFsaWRhdG9yLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvbWljcm9mcm9udGVuZC1wbGF0Zm9ybS9yb3V0aW5nL21pY3JvZnJvbnRlbmQtdmlldy1jYXBhYmlsaXR5LXZhbGlkYXRvci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxxQkFBcUIsRUFBMEIsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7O0FBRWxEOztHQUVHO0FBRUgsTUFBTSxPQUFPLG9DQUFvQztJQUV4QyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQXNCO1FBQzNDLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsVUFBcUMsQ0FBQztRQUM3RCxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4RCxNQUFNLEtBQUssQ0FBQyx5RUFBeUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUgsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztRQUM3QyxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hDLE1BQU0sS0FBSyxDQUFDLHdHQUF3RyxjQUFjLENBQUMsUUFBUyxDQUFDLGVBQWUsa0JBQWtCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hPLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOzhHQXBCVSxvQ0FBb0M7a0hBQXBDLG9DQUFvQzs7MkZBQXBDLG9DQUFvQztrQkFEaEQsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDYXBhYmlsaXR5LCBDYXBhYmlsaXR5SW50ZXJjZXB0b3J9IGZyb20gJ0BzY2lvbi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1dvcmtiZW5jaENhcGFiaWxpdGllcywgV29ya2JlbmNoVmlld0NhcGFiaWxpdHl9IGZyb20gJ0BzY2lvbi93b3JrYmVuY2gtY2xpZW50JztcbmltcG9ydCB7T2JqZWN0c30gZnJvbSAnLi4vLi4vY29tbW9uL29iamVjdHMudXRpbCc7XG5cbi8qKlxuICogQXNzZXJ0cyB2aWV3IGNhcGFiaWxpdGllcyB0byBoYXZlIHJlcXVpcmVkIHByb3BlcnRpZXMuXG4gKi9cbkBJbmplY3RhYmxlKC8qIERPIE5PVCBQUk9WSURFIHZpYSAncHJvdmlkZWRJbicgbWV0YWRhdGEgYXMgb25seSByZWdpc3RlcmVkIGlmIG1pY3JvZnJvbnRlbmQgc3VwcG9ydCBpcyBlbmFibGVkLiAqLylcbmV4cG9ydCBjbGFzcyBNaWNyb2Zyb250ZW5kVmlld0NhcGFiaWxpdHlWYWxpZGF0b3IgaW1wbGVtZW50cyBDYXBhYmlsaXR5SW50ZXJjZXB0b3Ige1xuXG4gIHB1YmxpYyBhc3luYyBpbnRlcmNlcHQoY2FwYWJpbGl0eTogQ2FwYWJpbGl0eSk6IFByb21pc2U8Q2FwYWJpbGl0eT4ge1xuICAgIGlmIChjYXBhYmlsaXR5LnR5cGUgIT09IFdvcmtiZW5jaENhcGFiaWxpdGllcy5WaWV3KSB7XG4gICAgICByZXR1cm4gY2FwYWJpbGl0eTtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3Q2FwYWJpbGl0eSA9IGNhcGFiaWxpdHkgYXMgV29ya2JlbmNoVmlld0NhcGFiaWxpdHk7XG4gICAgLy8gQXNzZXJ0IHRoZSB2aWV3IGNhcGFiaWxpdHkgdG8gaGF2ZSBhIHF1YWxpZmllciBzZXQuXG4gICAgaWYgKCFPYmplY3Qua2V5cyh2aWV3Q2FwYWJpbGl0eS5xdWFsaWZpZXIgPz8ge30pLmxlbmd0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsUXVhbGlmaWVyRXJyb3JdIFZpZXcgY2FwYWJpbGl0eSByZXF1aXJlcyBhIHF1YWxpZmllciBbY2FwYWJpbGl0eT0ke0pTT04uc3RyaW5naWZ5KHZpZXdDYXBhYmlsaXR5KX1dYCk7XG4gICAgfVxuXG4gICAgLy8gQXNzZXJ0IHRoZSB2aWV3IGNhcGFiaWxpdHkgdG8gaGF2ZSBhIHBhdGggc2V0LlxuICAgIGNvbnN0IHBhdGggPSB2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzPy5wYXRoO1xuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQgfHwgcGF0aCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsUGF0aEVycm9yXSBWaWV3IGNhcGFiaWxpdHkgcmVxdWlyZXMgYSBwYXRoIHRvIHRoZSBtaWNyb2Zyb250ZW5kIGluIGl0cyBwcm9wZXJ0aWVzIFthcHBsaWNhdGlvbj1cIiR7dmlld0NhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZX1cIiwgY2FwYWJpbGl0eT1cIiR7T2JqZWN0cy50b01hdHJpeE5vdGF0aW9uKHZpZXdDYXBhYmlsaXR5LnF1YWxpZmllcil9XCJdYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcGFiaWxpdHk7XG4gIH1cbn1cbiJdfQ==
|