@c8y/ngx-components 1021.38.0 → 1021.49.1
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/api/services.d.ts +1 -1
- package/api/services.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts.map +1 -1
- package/connectivity/abstract-connectivity-tab.factory.d.ts +1 -1
- package/context-dashboard/add-dashboard.component.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.model.d.ts +4 -2
- package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-manager/dashboard-manager.model.d.ts +1 -0
- package/context-dashboard/dashboard-manager/dashboard-manager.model.d.ts.map +1 -1
- package/context-dashboard/dashboard-manager/dashboard-manager.service.d.ts +0 -1
- package/context-dashboard/dashboard-manager/dashboard-manager.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts.map +1 -1
- package/context-dashboard/new-dashboard.guard.d.ts +1 -1
- package/context-dashboard/new-dashboard.guard.d.ts.map +1 -1
- package/core/action/action.component.d.ts +2 -1
- package/core/action/action.component.d.ts.map +1 -1
- package/core/action/action.model.d.ts +3 -2
- package/core/action/action.model.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts +2 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb.model.d.ts +2 -1
- package/core/breadcrumb/breadcrumb.model.d.ts.map +1 -1
- package/core/common/ApplicationOptions.d.ts +1 -0
- package/core/common/ApplicationOptions.d.ts.map +1 -1
- package/core/common/empty-state/empty-state.component.d.ts +2 -1
- package/core/common/empty-state/empty-state.component.d.ts.map +1 -1
- package/core/common/get-group-icon.pipe.d.ts +2 -1
- package/core/common/get-group-icon.pipe.d.ts.map +1 -1
- package/core/common/group.service.d.ts +22 -7
- package/core/common/group.service.d.ts.map +1 -1
- package/core/common/icon.directive.d.ts +5 -5
- package/core/common/icon.directive.d.ts.map +1 -1
- package/core/common/service-registry.model.d.ts +2 -1
- package/core/common/service-registry.model.d.ts.map +1 -1
- package/core/data-grid/data-grid.model.d.ts +2 -1
- package/core/data-grid/data-grid.model.d.ts.map +1 -1
- package/core/docs/docs.models.d.ts +2 -1
- package/core/docs/docs.models.d.ts.map +1 -1
- package/core/docs/help-and-support-outlet/help-and-support-outlet.component.d.ts +5 -1
- package/core/docs/help-and-support-outlet/help-and-support-outlet.component.d.ts.map +1 -1
- package/core/docs/legal-notices-outlet/legal-notices-outlet.component.d.ts +5 -1
- package/core/docs/legal-notices-outlet/legal-notices-outlet.component.d.ts.map +1 -1
- package/core/docs/support-outlet/support-outlet.component.d.ts +5 -1
- package/core/docs/support-outlet/support-outlet.component.d.ts.map +1 -1
- package/core/forms/filter-input.component.d.ts +8 -3
- package/core/forms/filter-input.component.d.ts.map +1 -1
- package/core/list-group/list-item-action.component.d.ts +2 -1
- package/core/list-group/list-item-action.component.d.ts.map +1 -1
- package/core/list-group/list-item-icon.component.d.ts +2 -1
- package/core/list-group/list-item-icon.component.d.ts.map +1 -1
- package/core/login/login.service.d.ts.map +1 -1
- package/core/navigator/navigator-icon.component.d.ts +1 -1
- package/core/navigator/navigator-icon.component.d.ts.map +1 -1
- package/core/navigator/navigator-node-data.d.ts +2 -1
- package/core/navigator/navigator-node-data.d.ts.map +1 -1
- package/core/navigator/navigator-node.component.d.ts.map +1 -1
- package/core/navigator/navigator-node.d.ts +2 -1
- package/core/navigator/navigator-node.d.ts.map +1 -1
- package/core/plugins/plugins.model.d.ts +7 -2
- package/core/plugins/plugins.model.d.ts.map +1 -1
- package/core/plugins/plugins.service.d.ts.map +1 -1
- package/core/properties-list/properties-list.component.d.ts +2 -1
- package/core/properties-list/properties-list.component.d.ts.map +1 -1
- package/core/provider-configuration/model/dynamic-provider-config.model.d.ts +2 -2
- package/core/provider-configuration/model/dynamic-provider-config.model.d.ts.map +1 -1
- package/core/router/context-route.service.d.ts.map +1 -1
- package/core/router/router.model.d.ts +1 -1
- package/core/router/router.model.d.ts.map +1 -1
- package/core/router/scoped-context-route.service.d.ts.map +1 -1
- package/core/search/search.model.d.ts +2 -1
- package/core/search/search.model.d.ts.map +1 -1
- package/core/select/select-keyboard.service.d.ts +4 -0
- package/core/select/select-keyboard.service.d.ts.map +1 -1
- package/core/select/select.component.d.ts +14 -3
- package/core/select/select.component.d.ts.map +1 -1
- package/core/select-modal/select-modal.component.d.ts +2 -1
- package/core/select-modal/select-modal.component.d.ts.map +1 -1
- package/core/shared/core.model.d.ts +5 -1
- package/core/shared/core.model.d.ts.map +1 -1
- package/core/tabs/conditional-tabs-outlet.component.d.ts.map +1 -1
- package/core/tabs/tab.component.d.ts +3 -2
- package/core/tabs/tab.component.d.ts.map +1 -1
- package/core/tabs/tab.model.d.ts +10 -5
- package/core/tabs/tab.model.d.ts.map +1 -1
- package/core/tabs/tabs-outlet.component.d.ts +7 -4
- package/core/tabs/tabs-outlet.component.d.ts.map +1 -1
- package/core/user/user-menu-item.component.d.ts +2 -1
- package/core/user/user-menu-item.component.d.ts.map +1 -1
- package/core/user/user.model.d.ts +2 -1
- package/core/user/user.model.d.ts.map +1 -1
- package/core/wizard/wizard.model.d.ts +4 -3
- package/core/wizard/wizard.model.d.ts.map +1 -1
- package/data-grid-columns/asset-type/asset-type.cell-renderer.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +15 -46
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts +3 -0
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selection.model.d.ts +6 -7
- package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts +2 -1
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
- package/device-grid/columns/icon.cell-renderer.component.d.ts +14 -0
- package/device-grid/columns/icon.cell-renderer.component.d.ts.map +1 -0
- package/device-grid/columns/index.d.ts +1 -0
- package/device-grid/columns/index.d.ts.map +1 -1
- package/device-grid/device-grid.component.d.ts.map +1 -1
- package/device-grid/device-grid.service.d.ts +0 -2
- package/device-grid/device-grid.service.d.ts.map +1 -1
- package/device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.d.ts.map +1 -0
- package/device-provisioned-certificates/device-provisioned-certificates.guard.d.ts +11 -0
- package/device-provisioned-certificates/device-provisioned-certificates.guard.d.ts.map +1 -0
- package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts +13 -0
- package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts.map +1 -0
- package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts +13 -0
- package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts.map +1 -0
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts +57 -0
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -0
- package/device-provisioned-certificates/index.d.ts +2 -0
- package/device-provisioned-certificates/index.d.ts.map +1 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.module.d.ts +2 -2
- package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
- package/ecosystem/application-plugins/index.d.ts +1 -0
- package/ecosystem/application-plugins/index.d.ts.map +1 -1
- package/ecosystem/application-plugins/install-plugin.component.d.ts +9 -11
- package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts +12 -0
- package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts.map +1 -0
- package/ecosystem/application-plugins/plugin-list-item.component.d.ts +8 -3
- package/ecosystem/application-plugins/plugin-list-item.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts.map +1 -1
- package/ecosystem/applications/application-list/application-list.component.d.ts +2 -2
- package/ecosystem/applications/application-list/application-list.component.d.ts.map +1 -1
- package/ecosystem/applications/install-from-package/install-from-package.component.d.ts.map +1 -1
- package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts +11 -0
- package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts.map +1 -0
- package/ecosystem/archived-confirm/archived-confirm.module.d.ts +10 -0
- package/ecosystem/archived-confirm/archived-confirm.module.d.ts.map +1 -0
- package/ecosystem/archived-confirm/c8y-ngx-components-ecosystem-archived-confirm.d.ts.map +1 -0
- package/ecosystem/archived-confirm/index.d.ts +3 -0
- package/ecosystem/archived-confirm/index.d.ts.map +1 -0
- package/ecosystem/ecosystem.module.d.ts +2 -1
- package/ecosystem/ecosystem.module.d.ts.map +1 -1
- package/ecosystem/features/feature-list.component.d.ts +2 -2
- package/ecosystem/features/feature-list.component.d.ts.map +1 -1
- package/ecosystem/microservices/microservice-list.component.d.ts +2 -2
- package/ecosystem/microservices/microservice-list.component.d.ts.map +1 -1
- package/ecosystem/packages/deploy-application/deploy-application.component.d.ts.map +1 -1
- package/ecosystem/packages/package-details/package-details.component.d.ts +7 -2
- package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
- package/ecosystem/packages/package-list/packages-list.component.d.ts +2 -2
- package/ecosystem/packages/package-list/packages-list.component.d.ts.map +1 -1
- package/ecosystem/shared/add-application.component.d.ts +2 -1
- package/ecosystem/shared/add-application.component.d.ts.map +1 -1
- package/ecosystem/shared/application-card.component.d.ts +4 -0
- package/ecosystem/shared/application-card.component.d.ts.map +1 -1
- package/ecosystem/shared/archived-filter/archived-filter.component.d.ts +12 -0
- package/ecosystem/shared/archived-filter/archived-filter.component.d.ts.map +1 -0
- package/ecosystem/shared/ecosystem.constants.d.ts +4 -0
- package/ecosystem/shared/ecosystem.constants.d.ts.map +1 -1
- package/ecosystem/shared/ecosystem.model.d.ts +5 -1
- package/ecosystem/shared/ecosystem.model.d.ts.map +1 -1
- package/ecosystem/shared/ecosystem.service.d.ts +7 -0
- package/ecosystem/shared/ecosystem.service.d.ts.map +1 -1
- package/ecosystem/shared/index.d.ts +1 -0
- package/ecosystem/shared/index.d.ts.map +1 -1
- package/ecosystem/shared/list-filters/list-filters.component.d.ts +14 -4
- package/ecosystem/shared/list-filters/list-filters.component.d.ts.map +1 -1
- package/ecosystem/shared/list-filters/list-filters.model.d.ts +8 -2
- package/ecosystem/shared/list-filters/list-filters.model.d.ts.map +1 -1
- package/ecosystem/shared/shared-ecosystem.module.d.ts +9 -8
- package/ecosystem/shared/shared-ecosystem.module.d.ts.map +1 -1
- package/ecosystem/shared/translate-package-label.pipe.d.ts +1 -1
- package/ecosystem/shared/translate-package-label.pipe.d.ts.map +1 -1
- package/esm2022/alarms/alarm-info.component.mjs +1 -1
- package/esm2022/api/services.mjs +2 -2
- package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.mjs +10 -5
- package/esm2022/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.mjs +4 -4
- package/esm2022/context-dashboard/add-dashboard.component.mjs +4 -2
- package/esm2022/context-dashboard/context-dashboard.model.mjs +3 -2
- package/esm2022/context-dashboard/context-dashboard.service.mjs +2 -2
- package/esm2022/context-dashboard/dashboard-detail.component.mjs +5 -3
- package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.model.mjs +1 -1
- package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.service.mjs +5 -15
- package/esm2022/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.mjs +2 -2
- package/esm2022/context-dashboard/new-dashboard.guard.mjs +1 -1
- package/esm2022/core/action/action.component.mjs +1 -1
- package/esm2022/core/action/action.model.mjs +1 -1
- package/esm2022/core/bootstrap/bootstrap.component.mjs +1 -1
- package/esm2022/core/breadcrumb/breadcrumb-item.component.mjs +1 -1
- package/esm2022/core/breadcrumb/breadcrumb.model.mjs +1 -1
- package/esm2022/core/common/ApplicationOptions.mjs +1 -1
- package/esm2022/core/common/empty-state/empty-state.component.mjs +1 -1
- package/esm2022/core/common/get-group-icon.pipe.mjs +1 -1
- package/esm2022/core/common/group.service.mjs +2 -2
- package/esm2022/core/common/icon.directive.mjs +1 -1
- package/esm2022/core/common/service-registry.model.mjs +1 -1
- package/esm2022/core/data-grid/data-grid.model.mjs +1 -1
- package/esm2022/core/docs/docs.models.mjs +1 -1
- package/esm2022/core/docs/support-outlet/support-outlet.component.mjs +3 -3
- package/esm2022/core/forms/filter-input.component.mjs +22 -7
- package/esm2022/core/list-group/list-item-action.component.mjs +1 -1
- package/esm2022/core/list-group/list-item-icon.component.mjs +1 -1
- package/esm2022/core/login/credentials.component.mjs +2 -2
- package/esm2022/core/login/login.service.mjs +18 -7
- package/esm2022/core/navigator/navigator-node-data.mjs +1 -1
- package/esm2022/core/navigator/navigator-node.component.mjs +11 -2
- package/esm2022/core/navigator/navigator-node.mjs +1 -1
- package/esm2022/core/plugins/plugins.model.mjs +5 -1
- package/esm2022/core/plugins/plugins.service.mjs +6 -2
- package/esm2022/core/properties-list/properties-list.component.mjs +1 -1
- package/esm2022/core/provider-configuration/model/dynamic-provider-config.model.mjs +1 -1
- package/esm2022/core/router/context-route.service.mjs +4 -2
- package/esm2022/core/router/router.model.mjs +1 -1
- package/esm2022/core/router/scoped-context-route.service.mjs +4 -2
- package/esm2022/core/search/search.model.mjs +1 -1
- package/esm2022/core/select/select-keyboard.service.mjs +7 -3
- package/esm2022/core/select/select.component.mjs +36 -8
- package/esm2022/core/select-modal/select-modal.component.mjs +2 -2
- package/esm2022/core/shared/core.model.mjs +6 -2
- package/esm2022/core/tabs/conditional-tabs-outlet.component.mjs +4 -2
- package/esm2022/core/tabs/tab.component.mjs +1 -1
- package/esm2022/core/tabs/tab.model.mjs +1 -1
- package/esm2022/core/tabs/tabs-outlet.component.mjs +41 -12
- package/esm2022/core/user/user-menu-item.component.mjs +1 -1
- package/esm2022/core/user/user.model.mjs +1 -1
- package/esm2022/core/wizard/wizard.model.mjs +1 -1
- package/esm2022/data-grid-columns/asset-type/asset-type.cell-renderer.component.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +47 -22
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +1 -1
- package/esm2022/device-grid/columns/icon.cell-renderer.component.mjs +42 -0
- package/esm2022/device-grid/columns/index.mjs +2 -1
- package/esm2022/device-grid/device-grid.component.mjs +3 -3
- package/esm2022/device-grid/device-grid.service.mjs +7 -25
- package/esm2022/device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.mjs +5 -0
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.guard.mjs +28 -0
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.module.mjs +51 -0
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.service.mjs +31 -0
- package/esm2022/device-provisioned-certificates/device-tab-provisioned-certificates.component.mjs +76 -0
- package/esm2022/device-provisioned-certificates/index.mjs +2 -0
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +41 -39
- package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +8 -6
- package/esm2022/ecosystem/application-plugins/apps-to-update-remotes-select.component.mjs +1 -1
- package/esm2022/ecosystem/application-plugins/index.mjs +2 -1
- package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +18 -21
- package/esm2022/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.mjs +26 -0
- package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +14 -6
- package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +14 -12
- package/esm2022/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +7 -1
- package/esm2022/ecosystem/applications/application-list/application-list.component.mjs +1 -1
- package/esm2022/ecosystem/applications/install-from-package/install-from-package.component.mjs +6 -1
- package/esm2022/ecosystem/archived-confirm/archived-confirm-modal.component.mjs +22 -0
- package/esm2022/ecosystem/archived-confirm/archived-confirm.module.mjs +32 -0
- package/esm2022/ecosystem/archived-confirm/c8y-ngx-components-ecosystem-archived-confirm.mjs +5 -0
- package/esm2022/ecosystem/archived-confirm/index.mjs +3 -0
- package/esm2022/ecosystem/ecosystem.module.mjs +20 -16
- package/esm2022/ecosystem/features/feature-list.component.mjs +1 -1
- package/esm2022/ecosystem/microservices/microservice-list.component.mjs +1 -1
- package/esm2022/ecosystem/packages/deploy-application/deploy-application.component.mjs +6 -1
- package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +13 -8
- package/esm2022/ecosystem/packages/package-list/packages-list.component.mjs +4 -4
- package/esm2022/ecosystem/shared/add-application.component.mjs +1 -1
- package/esm2022/ecosystem/shared/application-card.component.mjs +3 -3
- package/esm2022/ecosystem/shared/archived-filter/archived-filter.component.mjs +27 -0
- package/esm2022/ecosystem/shared/ecosystem.constants.mjs +5 -1
- package/esm2022/ecosystem/shared/ecosystem.model.mjs +7 -3
- package/esm2022/ecosystem/shared/ecosystem.service.mjs +26 -1
- package/esm2022/ecosystem/shared/index.mjs +2 -1
- package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +75 -13
- package/esm2022/ecosystem/shared/list-filters/list-filters.model.mjs +1 -1
- package/esm2022/ecosystem/shared/shared-ecosystem.module.mjs +10 -5
- package/esm2022/ecosystem/shared/translate-package-label.pipe.mjs +3 -3
- package/esm2022/files-repository/files-repository.component.mjs +2 -2
- package/esm2022/files-repository/files-repository.service.mjs +5 -16
- package/esm2022/icon-selector/icon-selector.component.mjs +1 -1
- package/esm2022/icon-selector/icons/index.mjs +1 -1
- package/esm2022/operations/shared/status-option.model.mjs +1 -1
- package/esm2022/protocol-lwm2m/components/configuration/lwm2m-configuration.component.mjs +2 -2
- package/esm2022/protocol-opcua/opcua-auto-apply-settings.component.mjs +1 -1
- package/esm2022/register-device/bulk/bulk-device-registration-modal.component.mjs +17 -9
- package/esm2022/register-device/general/general-device-registration-button.component.mjs +3 -3
- package/esm2022/register-device/general/general-device-registration.component.mjs +109 -33
- package/esm2022/remote-access/configurations/c8y-ngx-components-remote-access-configurations.mjs +5 -0
- package/esm2022/remote-access/configurations/index.mjs +16 -0
- package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.mjs +218 -0
- package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.mjs +60 -0
- package/esm2022/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.mjs +36 -0
- package/esm2022/remote-access/data/c8y-ngx-components-remote-access-data.mjs +5 -0
- package/esm2022/remote-access/data/index.mjs +3 -0
- package/esm2022/remote-access/data/remote-access-protocol-provider.mjs +2 -0
- package/esm2022/remote-access/data/remote-access.service.mjs +200 -0
- package/esm2022/remote-access/passthrough/c8y-ngx-components-remote-access-passthrough.mjs +5 -0
- package/esm2022/remote-access/passthrough/index.mjs +36 -0
- package/esm2022/remote-access/shared/c8y-ngx-components-remote-access-shared.mjs +5 -0
- package/esm2022/remote-access/shared/index.mjs +3 -0
- package/esm2022/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.mjs +49 -0
- package/esm2022/remote-access/shared/ssh-key-input/ssh-key-input.component.mjs +87 -0
- package/esm2022/remote-access/ssh/c8y-ngx-components-remote-access-ssh.mjs +5 -0
- package/esm2022/remote-access/ssh/index.mjs +73 -0
- package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +5 -0
- package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/index.mjs +2 -0
- package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.mjs +104 -0
- package/esm2022/remote-access/telnet/c8y-ngx-components-remote-access-telnet.mjs +5 -0
- package/esm2022/remote-access/telnet/index.mjs +43 -0
- package/esm2022/remote-access/terminal-viewer/c8y-ngx-components-remote-access-terminal-viewer.mjs +5 -0
- package/esm2022/remote-access/terminal-viewer/index.mjs +2 -0
- package/esm2022/remote-access/terminal-viewer/shell-adapter.mjs +36 -0
- package/esm2022/remote-access/terminal-viewer/telnet-negotiator.mjs +96 -0
- package/esm2022/remote-access/terminal-viewer/terminal-viewer.component.mjs +101 -0
- package/esm2022/remote-access/vnc/c8y-ngx-components-remote-access-vnc.mjs +5 -0
- package/esm2022/remote-access/vnc/index.mjs +73 -0
- package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +5 -0
- package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/index.mjs +2 -0
- package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.mjs +59 -0
- package/esm2022/remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +5 -0
- package/esm2022/remote-access/vnc/vnc-viewer/index.mjs +2 -0
- package/esm2022/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.mjs +57 -0
- package/esm2022/remote-access/vnc/vnc-viewer/vnc-viewer.component.mjs +158 -0
- package/esm2022/replace-device/replace-device-wizard/replace-device-wizard.model.mjs +1 -1
- package/esm2022/report-dashboard/report-dashboard-list.component.mjs +4 -3
- package/esm2022/repository/configuration/device-tab/device-configuration-list.component.mjs +1 -1
- package/esm2022/repository/shared/repository.model.mjs +1 -1
- package/esm2022/repository/shared/repository.service.mjs +3 -3
- package/esm2022/services/status-options/status-options.model.mjs +1 -1
- package/esm2022/sub-assets/group-info.component.mjs +1 -1
- package/esm2022/tenants/custom-properties/custom-properties.service.mjs +6 -2
- package/esm2022/translation-editor/data/translation-store.service.mjs +4 -3
- package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +35 -9
- package/esm2022/upgrade/bridge.service.mjs +16 -2
- package/esm2022/widgets/implementations/alarms/severity-icon.pipe.mjs +1 -1
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +3 -2
- package/esm2022/widgets/implementations/kpi/kpi-widget.model.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-api.mjs +3 -2
- package/fesm2022/c8y-ngx-components-api.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +12 -7
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +15 -20
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +48 -23
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +48 -28
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +174 -0
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +125 -105
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +57 -0
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +147 -31
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +1452 -1414
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs +5 -16
- package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs +269 -188
- package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +314 -0
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs +206 -0
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +42 -0
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +138 -0
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +111 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +79 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +50 -0
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +235 -0
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +66 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +211 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +79 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +3 -2
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +2 -2
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs +5 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -2
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +43 -17
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +16 -2
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +151 -38
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/files-repository/files-repository.component.d.ts.map +1 -1
- package/files-repository/files-repository.service.d.ts +0 -2
- package/files-repository/files-repository.service.d.ts.map +1 -1
- package/icon-selector/icon-selector.component.d.ts +3 -2
- package/icon-selector/icon-selector.component.d.ts.map +1 -1
- package/icon-selector/icons/index.d.ts +1 -0
- package/icon-selector/icons/index.d.ts.map +1 -1
- package/locales/de.po +157 -5
- package/locales/es.po +157 -5
- package/locales/fr.po +157 -5
- package/locales/ja_JP.po +156 -5
- package/locales/ko.po +156 -5
- package/locales/locales.pot +156 -4
- package/locales/nl.po +157 -5
- package/locales/pl.po +159 -7
- package/locales/pt_BR.po +157 -5
- package/locales/zh_CN.po +156 -5
- package/locales/zh_TW.po +156 -5
- package/operations/shared/status-option.model.d.ts +2 -1
- package/operations/shared/status-option.model.d.ts.map +1 -1
- package/package.json +1 -1
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts +6 -2
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
- package/register-device/general/general-device-registration-button.component.d.ts +1 -1
- package/register-device/general/general-device-registration-button.component.d.ts.map +1 -1
- package/register-device/general/general-device-registration.component.d.ts +21 -7
- package/register-device/general/general-device-registration.component.d.ts.map +1 -1
- package/remote-access/configurations/c8y-ngx-components-remote-access-configurations.d.ts.map +1 -0
- package/remote-access/configurations/index.d.ts +3 -0
- package/remote-access/configurations/index.d.ts.map +1 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts +34 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts.map +1 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.d.ts +17 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.d.ts.map +1 -0
- package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts +18 -0
- package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts.map +1 -0
- package/remote-access/data/c8y-ngx-components-remote-access-data.d.ts.map +1 -0
- package/remote-access/data/index.d.ts +3 -0
- package/remote-access/data/index.d.ts.map +1 -0
- package/remote-access/data/remote-access-protocol-provider.d.ts +21 -0
- package/remote-access/data/remote-access-protocol-provider.d.ts.map +1 -0
- package/remote-access/data/remote-access.service.d.ts +94 -0
- package/remote-access/data/remote-access.service.d.ts.map +1 -0
- package/remote-access/passthrough/c8y-ngx-components-remote-access-passthrough.d.ts.map +1 -0
- package/remote-access/passthrough/index.d.ts +17 -0
- package/remote-access/passthrough/index.d.ts.map +1 -0
- package/remote-access/shared/c8y-ngx-components-remote-access-shared.d.ts.map +1 -0
- package/remote-access/shared/index.d.ts +3 -0
- package/remote-access/shared/index.d.ts.map +1 -0
- package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts +37 -0
- package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts.map +1 -0
- package/remote-access/shared/ssh-key-input/ssh-key-input.component.d.ts +38 -0
- package/remote-access/shared/ssh-key-input/ssh-key-input.component.d.ts.map +1 -0
- package/remote-access/ssh/c8y-ngx-components-remote-access-ssh.d.ts.map +1 -0
- package/remote-access/ssh/index.d.ts +22 -0
- package/remote-access/ssh/index.d.ts.map +1 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.d.ts.map +1 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/index.d.ts +2 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/index.d.ts.map +1 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.d.ts +64 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.d.ts.map +1 -0
- package/remote-access/telnet/c8y-ngx-components-remote-access-telnet.d.ts.map +1 -0
- package/remote-access/telnet/index.d.ts +17 -0
- package/remote-access/telnet/index.d.ts.map +1 -0
- package/remote-access/terminal-viewer/c8y-ngx-components-remote-access-terminal-viewer.d.ts.map +1 -0
- package/remote-access/terminal-viewer/index.d.ts +2 -0
- package/remote-access/terminal-viewer/index.d.ts.map +1 -0
- package/remote-access/terminal-viewer/shell-adapter.d.ts +14 -0
- package/remote-access/terminal-viewer/shell-adapter.d.ts.map +1 -0
- package/remote-access/terminal-viewer/telnet-negotiator.d.ts +13 -0
- package/remote-access/terminal-viewer/telnet-negotiator.d.ts.map +1 -0
- package/remote-access/terminal-viewer/terminal-viewer.component.d.ts +25 -0
- package/remote-access/terminal-viewer/terminal-viewer.component.d.ts.map +1 -0
- package/remote-access/vnc/c8y-ngx-components-remote-access-vnc.d.ts.map +1 -0
- package/remote-access/vnc/index.d.ts +22 -0
- package/remote-access/vnc/index.d.ts.map +1 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.d.ts.map +1 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/index.d.ts +2 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/index.d.ts.map +1 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.d.ts +46 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/index.d.ts +2 -0
- package/remote-access/vnc/vnc-viewer/index.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.d.ts +32 -0
- package/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/vnc-viewer.component.d.ts +37 -0
- package/remote-access/vnc/vnc-viewer/vnc-viewer.component.d.ts.map +1 -0
- package/replace-device/replace-device-wizard/replace-device-wizard.model.d.ts +2 -1
- package/replace-device/replace-device-wizard/replace-device-wizard.model.d.ts.map +1 -1
- package/report-dashboard/report-dashboard-list.component.d.ts +29 -0
- package/report-dashboard/report-dashboard-list.component.d.ts.map +1 -1
- package/repository/shared/repository.model.d.ts +2 -1
- package/repository/shared/repository.model.d.ts.map +1 -1
- package/services/status-options/status-options.model.d.ts +2 -1
- package/services/status-options/status-options.model.d.ts.map +1 -1
- package/sub-assets/group-info.component.d.ts +2 -1
- package/sub-assets/group-info.component.d.ts.map +1 -1
- package/tenants/custom-properties/custom-properties.service.d.ts.map +1 -1
- package/translation-editor/data/translation-store.service.d.ts.map +1 -1
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts +7 -2
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
- package/upgrade/bridge.service.d.ts +5 -0
- package/upgrade/bridge.service.d.ts.map +1 -1
- package/widgets/implementations/alarms/severity-icon.pipe.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -1
- package/widgets/implementations/kpi/kpi-widget.model.d.ts +2 -1
- package/widgets/implementations/kpi/kpi-widget.model.d.ts.map +1 -1
- package/ecosystem/application-plugins/only-latest-plugin-version.pipe.d.ts +0 -10
- package/ecosystem/application-plugins/only-latest-plugin-version.pipe.d.ts.map +0 -1
- package/esm2022/ecosystem/application-plugins/only-latest-plugin-version.pipe.mjs +0 -20
|
@@ -3,7 +3,7 @@ import { isArray } from 'lodash-es';
|
|
|
3
3
|
import { BehaviorSubject, combineLatest, from, fromEventPattern, merge, Observable, of } from 'rxjs';
|
|
4
4
|
import { debounceTime, filter, map, startWith, switchMap, take } from 'rxjs/operators';
|
|
5
5
|
import { NgZone } from '@angular/core';
|
|
6
|
-
import { ActivationEnd, Router } from '@angular/router';
|
|
6
|
+
import { ActivationEnd, ResolveEnd, Router } from '@angular/router';
|
|
7
7
|
import { ViewContextLegacyParameter } from './ng1/views.provider';
|
|
8
8
|
export class BridgeService {
|
|
9
9
|
constructor(injector, appState, router, ngZone, routerService, actionService, plugins) {
|
|
@@ -22,6 +22,7 @@ export class BridgeService {
|
|
|
22
22
|
this.hookNavigator();
|
|
23
23
|
this.hookUserMenu();
|
|
24
24
|
this.hookViewProvider();
|
|
25
|
+
this.hookRoute();
|
|
25
26
|
plugins.allPluginsLoaded$
|
|
26
27
|
.pipe(filter(tmp => !!tmp), take(1))
|
|
27
28
|
.subscribe(() => {
|
|
@@ -29,6 +30,19 @@ export class BridgeService {
|
|
|
29
30
|
});
|
|
30
31
|
this.ng1Routes();
|
|
31
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Ensure that angularjs routes are not using any
|
|
35
|
+
* secondary router outlets
|
|
36
|
+
*/
|
|
37
|
+
hookRoute() {
|
|
38
|
+
this.router.events
|
|
39
|
+
.pipe(filter(event => event instanceof ResolveEnd), map((event) => event.state.root.firstChild), filter(route => route && route.routeConfig && route.routeConfig.path === '**'))
|
|
40
|
+
.subscribe((event) => {
|
|
41
|
+
if (event.root.children.length > 1) {
|
|
42
|
+
window.location.hash = event.root.children[0].url.toString();
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
32
46
|
hookViewProvider() {
|
|
33
47
|
const c8yViews = this.injector.get('c8yViews');
|
|
34
48
|
// fix to trigger an angularjs route change success
|
|
@@ -325,4 +339,4 @@ export const bridgeServiceProvider = {
|
|
|
325
339
|
PluginsResolveService
|
|
326
340
|
]
|
|
327
341
|
};
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJpZGdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91cGdyYWRlL2JyaWRnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxhQUFhLEVBQ2IsZUFBZSxFQUlmLGNBQWMsRUFDZCxPQUFPLEVBQ1AscUJBQXFCLEVBQ3JCLGFBQWEsRUFHYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBRUgsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsTUFBTSxPQUFPLGFBQWE7SUFNeEIsWUFDUyxRQUFhLEVBQ1osUUFBeUIsRUFDMUIsTUFBYyxFQUNiLE1BQWMsRUFDZCxhQUE0QixFQUM1QixhQUE0QixFQUNwQyxPQUE4QjtRQU52QixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVJ0QyxjQUFTLEdBQW1CLElBQUksZUFBZSxDQUFD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QUFVLEVBQUUsb0JBQW9CO0lBQ2hDLElBQUksRUFBRTtRQUNKLFdBQVc7UUFDWCxlQUFlO1FBQ2YsTUFBTTtRQUNOLE1BQU07UUFDTixhQUFhO1FBQ2IsYUFBYTtRQUNiLHFCQUFxQjtLQUN0QjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBY3Rpb24sXG4gIEFjdGlvbkJhckl0ZW0sXG4gIEFjdGlvblNlcnZpY2UsXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQnJlYWRjcnVtYixcbiAgQnJlYWRjcnVtYkl0ZW0sXG4gIERvY0xpbmssXG4gIEVtcHR5Q29tcG9uZW50LFxuICBnZXR0ZXh0LFxuICBQbHVnaW5zUmVzb2x2ZVNlcnZpY2UsXG4gIFJvdXRlclNlcnZpY2UsXG4gIFNlYXJjaCxcbiAgVGFiLFxuICBWaWV3Q29udGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmcm9tLFxuICBmcm9tRXZlbnRQYXR0ZXJuLFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YmplY3Rcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVmlld0NvbnRleHRMZWdhY3lQYXJhbWV0ZXIgfSBmcm9tICcuL25nMS92aWV3cy5wcm92aWRlcic7XG5cbmV4cG9ydCBjbGFzcyBCcmlkZ2VTZXJ2aWNlIHtcbiAgJHJvdXRlQ2hhbmdlczogT2JzZXJ2YWJsZTxhbnk+O1xuICAkbmcxUm91dGVDaGFuZ2VTdWNjZXNzOiBPYnNlcnZhYmxlPGFueT47XG4gICRuZzFSb3V0ZUNoYW5nZVN0YXJ0OiBPYnNlcnZhYmxlPGFueT47XG4gICRsaXZlVGFiczogU3ViamVjdDxUYWJbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgbmF2aWdhdGlvbk5vZGVzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5qZWN0b3I6IGFueSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByb3V0ZXJTZXJ2aWNlOiBSb3V0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uU2VydmljZTogQWN0aW9uU2VydmljZSxcbiAgICBwbHVnaW5zOiBQbHVnaW5zUmVzb2x2ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5maXhFMmVJc3N1ZXMoKTtcbiAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3MgPSB0aGlzLmZyb21OZzFFdmVudChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksXG4gICAgICAnJHJvdXRlQ2hhbmdlU3VjY2VzcydcbiAgICApO1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQgPSB0aGlzLmZyb21OZzFFdmVudChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksXG4gICAgICAnJHJvdXRlQ2hhbmdlU3RhcnQnXG4gICAgKTtcbiAgICB0aGlzLmhvb2tMYW5ndWFnZSgpO1xuICAgIHRoaXMuaG9va1RhYigpO1xuICAgIHRoaXMuaG9va05hdmlnYXRvcigpO1xuICAgIHRoaXMuaG9va1VzZXJNZW51KCk7XG4gICAgdGhpcy5ob29rVmlld1Byb3ZpZGVyKCk7XG4gICAgcGx1Z2lucy5hbGxQbHVnaW5zTG9hZGVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcih0bXAgPT4gISF0bXApLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIuaW5pdGlhbE5hdmlnYXRpb24oKTtcbiAgICAgIH0pO1xuICAgIHRoaXMubmcxUm91dGVzKCk7XG4gIH1cblxuICBob29rVmlld1Byb3ZpZGVyKCkge1xuICAgIGNvbnN0IGM4eVZpZXdzID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVZpZXdzJyk7XG4gICAgLy8gZml4IHRvIHRyaWdnZXIgYW4gYW5ndWxhcmpzIHJvdXRlIGNoYW5nZSBzdWNjZXNzXG4gICAgLy8gZXZlbnQgb24gY29udGV4dCByb3V0ZSBtYXRjaCB0byBtYWtlIGxlZ2FjeVxuICAgIC8vIHZpZXctcHJvdmlkZXJzIHJlc29sdmUuXG4gICAgYzh5Vmlld3Mud2hlbignL2RldmljZS86aWQnLCB7XG4gICAgICB0ZW1wbGF0ZTogJydcbiAgICB9KTtcbiAgICBjOHlWaWV3cy53aGVuKCcvZ3JvdXAvOmlkJywge1xuICAgICAgdGVtcGxhdGU6ICcnXG4gICAgfSk7XG4gICAgYzh5Vmlld3MuY29udGV4dFZpZXdzLnN1YnNjcmliZShjZmcgPT4gdGhpcy5hZGRSb3V0ZShjZmcpKTtcbiAgfVxuXG4gIGFkZFJvdXRlKGNmZykge1xuICAgIHRoaXMucm91dGVyU2VydmljZS5hZGRSb3V0ZSh7XG4gICAgICBsYWJlbDogY2ZnLmxhYmVsIHx8IGNmZy5uYW1lLFxuICAgICAgcGF0aDogY2ZnLnBhdGgsXG4gICAgICBpY29uOiBjZmcuaWNvbixcbiAgICAgIGNvbnRleHQ6IFZpZXdDb250ZXh0W2NmZy5jb250ZXh0S2V5XSBhcyBWaWV3Q29udGV4dCxcbiAgICAgIHByaW9yaXR5OiBjZmcucHJpb3JpdHksXG4gICAgICBjb21wb25lbnQ6IEVtcHR5Q29tcG9uZW50LFxuICAgICAgZGF0YToge1xuICAgICAgICBzaG93SWY6IGNmZy5zaG93SWZcbiAgICAgICAgICA/IG5neFJvdXRlID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLm5neFJvdXRlLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBbVmlld0NvbnRleHRMZWdhY3lQYXJhbWV0ZXJbY2ZnLmNvbnRleHRLZXldXTogbmd4Um91dGUucGFyYW1zLmlkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGNvbnN0IHNob3dJZlJlc3VsdCA9IHRoaXMuaW5qZWN0b3IuaW52b2tlKGNmZy5zaG93SWYsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICRyb3V0ZVBhcmFtczogcGFyYW1zXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgc2hvd0lmIHJlc3VsdCBpcyBhIHByb21pc2Ugd2l0aCBib29sZWFuIHJlc3VsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KCckcScpLndoZW4oc2hvd0lmUmVzdWx0KS50aGVuKEJvb2xlYW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgLi4uKGNmZy5mZWF0dXJlSWQgJiYgeyBmZWF0dXJlSWQ6IGNmZy5mZWF0dXJlSWQgfSlcbiAgICB9KTtcblxuICAgIGlmIChjZmcucnVuUGhhc2UpIHtcbiAgICAgIHRoaXMucm91dGVyU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmcxUm91dGVzKCkge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gJyc7XG4gICAgY29uc3QgZmFsbGJhY2tSb3V0ZXMgPSBbXTtcblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZm9yaW5cbiAgICBmb3IgKGNvbnN0IGNvbnRleHQgaW4gVmlld0NvbnRleHQpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBWaWV3Q29udGV4dFtjb250ZXh0XS5tYXRjaCgvKFxcdyspXFwvLylbMV07XG4gICAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGBeLyR7cGF0aH0vKD86KFteL10rKSkuKiRgKTtcbiAgICAgIGZhbGxiYWNrUm91dGVzLnB1c2goe1xuICAgICAgICBrZXlzOiBbeyBuYW1lOiBWaWV3Q29udGV4dExlZ2FjeVBhcmFtZXRlcltjb250ZXh0XSwgb3B0aW9uYWw6IGZhbHNlIH1dLFxuICAgICAgICByZWdleHAsXG4gICAgICAgIHRlbXBsYXRlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGFzc2V0IGRldGFpbCByb3V0ZXMgKC9kZXZpY2UvOmlkLCAgL2dyb3VwLzppZCkgYXJlIG1hdGNoZWQgaW4gQW5ndWxhciBSb3V0ZXIsIG5nUm91dGUgaW5cbiAgICAgKiBhbmd1bGFyLmpzIG11c3QgYWxzbyBoYXZlIG1hdGNoaW5nIGdlbmVyaWMgcm91dGVzIHNvIHRoYXQgdGhlIGlkcyBjYW4gYmUgZXh0cmFjdGVkIGZyb20gdGhlIHBhdGhzIGFuZFxuICAgICAqIGluamVjdGVkIGluIG11bHRpcGxlIGNhbGxzIChzaG93SWYsIGM4eUFjdGlvbnMsIGV0YykgYXMgcHJvcGVydGllcyBvZiAkcm91dGVQYXJhbXMuXG4gICAgICpcbiAgICAgKiBUaGUgZnVuY3Rpb24gaW4gc3JjL25nUm91dGUvcm91dGUuanMgKGFuZ3VsYXIuanMpIHdoZXJlIHRoZSByb3V0ZXMgYXJlIG1hdGNoZWQgaXMgY2FsbGVkIHBhcnNlUm91dGUoKS4gVGhpc1xuICAgICAqIGZ1bmN0aW9uIGNhbGxzIGFuZ3VsYXIuZm9yRWFjaCBhbmQgaW4gdHVybiB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgZm9yRWFjaCBtZXRob2QgYmVmb3JlXG4gICAgICogdHJ5aW5nIG9iamVjdCBrZXkgaXRlcmF0aW9uLlxuICAgICAqIEJ5IGF0dGFjaGluZyBhIG5vbiBlbnVtZXJhYmxlIGZvckVhY2ggbWV0aG9kIHRvIHRoZSByb3V0ZXMgb2JqZWN0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBmYWxsYmFjayBnZW5lcmljIHJvdXRlc1xuICAgICAqIGFyZSBvbmx5IG1hdGNoZWQgYWZ0ZXIgYW55IG90aGVyIHJlZ2lzdGVyZWQgdGhyb3VnaCAkcm91dGVQcm92aWRlci53aGVuLlxuICAgICAqL1xuICAgIGNvbnN0ICRyb3V0ZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KCckcm91dGUnKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoJHJvdXRlLnJvdXRlcywgJ2ZvckVhY2gnLCB7XG4gICAgICAvLyBtYWtlIG5vbiBlbnVtZXJhYmxlXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZvcmluXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMpIHtcbiAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHRoaXNba2V5XSwga2V5LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBmYWxsYmFja1JvdXRlcy5mb3JFYWNoKHIgPT4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCByKSk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTb21lIGZ1bmN0aW9ucyB1c2UgdGhlIGN1cnJlbnQgY29udGV4dC4gQXMgc29tZSBwYXJ0cyBhcmUgdXBncmFkZWQgYW5kIHNvbWUgbm90LCB0aGUgZm9sbG93aW5nIHVwZGF0ZXMgdGhlXG4gICAgICogYW5ndWxhcmpzIGdldENvbnRleHQgZnVuY3Rpb24gdG8gcmVzb2x2ZSBhbHdheXMgdGhlIHJpZ2h0IGNvbnRleHQuXG4gICAgICovXG4gICAgY29uc3QgYzh5VWlVdGlsID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVVpVXRpbCcpO1xuICAgIGNvbnN0IF9nZXRDb250ZXh0ID0gYzh5VWlVdGlsLmdldENvbnRleHQ7XG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBBY3RpdmF0aW9uRW5kKSA9PiB7XG4gICAgICAgIGlmIChldmVudC5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoID09PSAnKionKSB7XG4gICAgICAgICAgYzh5VWlVdGlsLmdldENvbnRleHQgPSBfZ2V0Q29udGV4dDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zbmFwc2hvdC5kYXRhICYmIGV2ZW50LnNuYXBzaG90LmRhdGEuY29udGV4dCkge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGV4dDogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0LnJlcGxhY2UoJy86aWQnLCAnJyksXG4gICAgICAgICAgICAgIGlkOiBldmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhLmlkLFxuICAgICAgICAgICAgICBjb250ZXh0RGF0YTogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4gKHsgY29udGV4dDogbnVsbCwgaWQ6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZml4RTJlSXNzdWVzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5nWm9uZSB9ID0gdGhpcztcbiAgICAgIGNvbnN0IHsgVXRpbHMgfSA9ICh3aW5kb3cgYXMgYW55KS5vcmcuY29tZXRkO1xuICAgICAgY29uc3QgdGltZW91dEZuID0gVXRpbHMuc2V0VGltZW91dDtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgVXRpbHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGltZW91dEZuLmFwcGx5KFV0aWxzLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBhY2UgfSA9IHdpbmRvdyBhcyBhbnk7XG4gICAgICBjb25zdCBlZGl0Rm4gPSBhY2UuZWRpdDtcbiAgICAgIGNvbnN0IHsgbmdab25lIH0gPSB0aGlzO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9ubHktYXJyb3ctZnVuY3Rpb25zXG4gICAgICBhY2UuZWRpdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZWRpdEZuLmFwcGx5KGFjZSwgYXJncykpO1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgaG9va0xhbmd1YWdlKCkge1xuICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgdGhpcy5hcHBTdGF0ZVxuICAgICAgLm1hcChzdG9yZSA9PiBzdG9yZS5sYW5nKVxuICAgICAgLnN1YnNjcmliZShsYW5nID0+IHtcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUxvY2FsZXMnKS5zd2l0Y2hUb0xhbmd1YWdlKGxhbmcpO1xuICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKS4kYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBob29rVGFiKCkge1xuICAgIC8vIEp1c3QgZm9yIGluc3RhbnRpYXRpb24gb2YgdGhlIGM4eUFjdGlvbiBzZXJ2aWNlXG4gICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbnMnKTtcbiAgICBjb25zdCAkbG9jYXRpb24gPSB0aGlzLmluamVjdG9yLmdldCgnJGxvY2F0aW9uJyk7XG4gICAgY29uc3QgYzh5VGFicyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlUYWJzJyk7XG4gICAgbGV0IGxpdmVUYWJzID0gW107XG4gICAgYzh5VGFicy5hZGRUYWIgPSB0YWIgPT4ge1xuICAgICAgbGl2ZVRhYnMucHVzaCh7XG4gICAgICAgIC4uLnRhYixcbiAgICAgICAgbGFiZWw6IHRhYi5sYWJlbCB8fCB0YWIubmFtZSxcbiAgICAgICAgcGF0aDogZGVjb2RlVVJJQ29tcG9uZW50KHRhYi5wYXRoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9O1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGxpdmVUYWJzID0gW107XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9KTtcbiAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3Muc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSAkbG9jYXRpb24ucGF0aCgpO1xuICAgICAgaWYgKHRoaXMucm91dGVyLnVybCAhPT0gcGF0aCkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShwYXRoID09PSAnLycgPyAnJyA6IHBhdGguc3BsaXQoJy8nKSwge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiAkbG9jYXRpb24uc2VhcmNoKCksXG4gICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWN0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLmFjdGlvblNlcnZpY2UucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuJHJvdXRlQ2hhbmdlcyA9IG1lcmdlKFxuICAgICAgdGhpcy4kbmcxUm91dGVDaGFuZ2VTdWNjZXNzLFxuICAgICAgdGhpcy5mcm9tTmcxRXZlbnQoYzh5VGFicywgYzh5VGFicy5FVkVOVF9VUERBVEUpLFxuICAgICAgb2YoMSlcbiAgICApLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpO1xuICB9XG5cbiAgaG9va05hdmlnYXRvcigpIHtcbiAgICB0aGlzLm5hdmlnYXRpb25Ob2RlcyQgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5TmF2aWdhdG9yJykucm9vdE5vZGVzJDtcbiAgfVxuXG4gIGdldFRhYnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBvbmx5VmlzaWJsZSA9ICh7IHNob3cgfSkgPT4gc2hvdztcbiAgICBjb25zdCB1cGdyYWRlVGFiID0gdGFiID0+ICh7XG4gICAgICAuLi50YWIsXG4gICAgICBsYWJlbDogdGFiLmxhYmVsIHx8IHRhYi5uYW1lLFxuICAgICAgcGF0aDogZGVjb2RlVVJJQ29tcG9uZW50KHRhYi5wYXRoKVxuICAgIH0pO1xuICAgIGNvbnN0IHJvdXRlVGFicyA9IHRoaXMuJHJvdXRlQ2hhbmdlcy5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGVzID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVRhYnMnKS5yb3V0ZVRhYnM7XG4gICAgICAgIGNvbnN0IHZpc2liaWxpdHlQcm9taXNlID0gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcm91dGVzLm1hcCgoeyBjaGVja2luZ1Zpc2liaWxpdHkgfSkgPT4gY2hlY2tpbmdWaXNpYmlsaXR5KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdmlzaWJpbGl0eVByb21pc2UudGhlbigoKSA9PiByb3V0ZXMuZmlsdGVyKG9ubHlWaXNpYmxlKS5tYXAodXBncmFkZVRhYikpO1xuICAgICAgfSksXG4gICAgICBzdGFydFdpdGgoW10pXG4gICAgKTtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbcm91dGVUYWJzLCB0aGlzLiRsaXZlVGFic10pLnBpcGUoXG4gICAgICBtYXAoKFtyb3V0ZSwgbGl2ZV0pID0+IHJvdXRlLmNvbmNhdChsaXZlKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UXVpY2tMaW5rcygpOiBQcm9taXNlPERvY0xpbmtbXT4ge1xuICAgIGNvbnN0IGM4eVF1aWNrTGlua3MgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5UXVpY2tMaW5rcycpO1xuICAgIHJldHVybiBjOHlRdWlja0xpbmtzLmxpc3QoKTtcbiAgfVxuXG4gIGdldEFjdGlvbkJhckl0ZW1zKCk6IE9ic2VydmFibGU8QWN0aW9uQmFySXRlbT4ge1xuICAgIGNvbnN0IGM4eUFjdGlvbkJhciA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlBY3Rpb25CYXInKTtcbiAgICBjb25zdCAkcm9vdFNjb3BlID0gdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKTtcbiAgICBjb25zdCBnZXRBY3Rpb25CYXJFbGVtZW50cyA9ICgpID0+XG4gICAgICBjOHlBY3Rpb25CYXIuZWxlbWVudHMubWFwKGVsZW1lbnQgPT4gKHtcbiAgICAgICAgcHJpb3JpdHk6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhY3Rpb24tYmFyLXByaW9yaXR5JykgfHwgMCxcbiAgICAgICAgdGVtcGxhdGU6IGVsZW1lbnQsXG4gICAgICAgIHBsYWNlbWVudDogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbi1iYXItcG9zaXRpb24nKSB8fCAncmlnaHQnXG4gICAgICB9KSk7XG4gICAgcmV0dXJuIHRoaXMuZnJvbU5nMUV2ZW50KCRyb290U2NvcGUsICdjOHlBY3Rpb25CYXJDaGFuZ2VkJykucGlwZShcbiAgICAgIHN0YXJ0V2l0aCgxKSxcbiAgICAgIG1hcChnZXRBY3Rpb25CYXJFbGVtZW50cylcbiAgICApO1xuICB9XG5cbiAgZ2V0QnJlYWRjcnVtYnMoKTogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+IHtcbiAgICBjb25zdCAkbG9jYXRpb24gPSB0aGlzLmluamVjdG9yLmdldCgnJGxvY2F0aW9uJyk7XG4gICAgY29uc3QgYzh5QnJlYWRjcnVtYnMgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5QnJlYWRjcnVtYnMnKTtcbiAgICBjb25zdCBicmVhZGNydW1ic1VwZGF0ZSQgPSBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+XG4gICAgICBjOHlCcmVhZGNydW1icy4kb24oJ3VwZGF0ZScsICgpID0+IHN1YnNjcmliZXIubmV4dCgpKVxuICAgICk7XG4gICAgcmV0dXJuIGJyZWFkY3J1bWJzVXBkYXRlJC5waXBlKFxuICAgICAgc3RhcnRXaXRoKDApLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGF0aCA9ICRsb2NhdGlvbi5wYXRoKCk7XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzID0gYzh5QnJlYWRjcnVtYnMuZ2V0KHBhdGgpIHx8IHt9O1xuICAgICAgICBjb25zdCBicmVhZGNydW1ic0RhdGEgPSB0aGlzLnJlc29sdmVCcmVhZGNydW1ic0RhdGEoYnJlYWRjcnVtYnMuZGF0YSk7XG4gICAgICAgIHJldHVybiBmcm9tKGJyZWFkY3J1bWJzRGF0YSkucGlwZShcbiAgICAgICAgICBtYXAoKHZhbHVlOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGl2ZUJyZWFkY3J1bWJzID0gYzh5QnJlYWRjcnVtYnMuZ2V0TGl2ZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNvbmNhdChsaXZlQnJlYWRjcnVtYnMpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtcyA9PiAoeyBpdGVtczogaXRlbXMgYXMgQnJlYWRjcnVtYkl0ZW1bXSB9KSBhcyBCcmVhZGNydW1iKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmVzb2x2ZUJyZWFkY3J1bWJzRGF0YShkYXRhKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5pbnZva2UoZGF0YSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGVtcHR5XG4gICAgfVxuICAgIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgICByZXR1cm4gb2YoW2RhdGFdKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIGdldFNlYXJjaCgpOiBTZWFyY2hbXSB7XG4gICAgY29uc3QgYzh5U2VhcmNoID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVNlYXJjaCcpO1xuICAgIHJldHVybiBjOHlTZWFyY2gubGlzdCgpLm1hcChpdGVtID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb246ICdzZWFyY2gnLFxuICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgIHRlcm06ICcnLFxuICAgICAgICBvblNlYXJjaCgpIHtcbiAgICAgICAgICBpZiAodGhpcy50ZXJtKSB7XG4gICAgICAgICAgICBjOHlTZWFyY2guc2VhcmNoKHRoaXMudGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGFzIFNlYXJjaDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFjdGlvbnMoKTogT2JzZXJ2YWJsZTxBY3Rpb24+IHtcbiAgICBjb25zdCByZWdpc3RlcmVkQWN0aW9ucyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlBY3Rpb25zJykucmVnaXN0ZXJlZEFjdGlvbnM7XG4gICAgcmV0dXJuIG9mKFxuICAgICAgcmVnaXN0ZXJlZEFjdGlvbnNcbiAgICAgICAgLmZpbHRlcihhY3Rpb24gPT4gIWFjdGlvbi5oaWRkZW4pXG4gICAgICAgIC5tYXAoYWN0aW9uID0+ICh7XG4gICAgICAgICAgLy8gVGhlIHByaW9yaXR5IHdhcyByZXZlcnNlZDogQWxpZ25lZCBpdCB0byBkYXNoYm9hcmQsIGhpZ2ggZmlyc3QsIGxvdyBsYXN0LlxuICAgICAgICAgIHByaW9yaXR5OiAoYWN0aW9uLnByaW9yaXR5IHx8IDApICogLTEsXG4gICAgICAgICAgbGFiZWw6IGFjdGlvbi50ZXh0LFxuICAgICAgICAgIGljb246IGFjdGlvbi5pY29uLFxuICAgICAgICAgIGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWQsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluamVjdG9yLmludm9rZShhY3Rpb24uYWN0aW9uLCBhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gIGZyb21OZzFFdmVudChvYmosIGV2dCkge1xuICAgIGxldCBzdG9wTGlzdGVuaW5nO1xuICAgIGZ1bmN0aW9uIGFkZChoYW5kbGVyKSB7XG4gICAgICBzdG9wTGlzdGVuaW5nID0gb2JqLiRvbihldnQsIGhhbmRsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbUV2ZW50UGF0dGVybihhZGQsICgpID0+IHN0b3BMaXN0ZW5pbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGhvb2tVc2VyTWVudSgpIHtcbiAgICBjb25zdCB1c2VyTWVudVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5VXNlck1lbnVTZXJ2aWNlJyk7XG4gICAgY29uc3QgYzh5QWNjZXNzRGVuaWVkID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjY2Vzc0RlbmllZCcpO1xuICAgIHVzZXJNZW51U2VydmljZS5hZGQoe1xuICAgICAgaWNvbjogJ2FjY2VzcycsXG4gICAgICBwcmlvcml0eTogMTAsXG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQWNjZXNzIGRlbmllZCByZXF1ZXN0cycpLFxuICAgICAgY2xpY2s6IGM4eUFjY2Vzc0RlbmllZC5zaG93QWNjZXNzRGVuaWVkUmVxdWVzdHNMaXN0XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyaWRnZVNlcnZpY2VGYWN0b3J5KFxuICBpbmplY3RvcjogYW55LFxuICBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICByb3V0ZXI6IFJvdXRlcixcbiAgbmdab25lOiBOZ1pvbmUsXG4gIHJvdXRlclNlcnZpY2U6IFJvdXRlclNlcnZpY2UsXG4gIGFjdGlvblNlcnZpY2U6IEFjdGlvblNlcnZpY2UsXG4gIHBsdWdpbnM6IFBsdWdpbnNSZXNvbHZlU2VydmljZVxuKSB7XG4gIHJldHVybiBuZXcgQnJpZGdlU2VydmljZShcbiAgICBpbmplY3RvcixcbiAgICBhcHBTdGF0ZSxcbiAgICByb3V0ZXIsXG4gICAgbmdab25lLFxuICAgIHJvdXRlclNlcnZpY2UsXG4gICAgYWN0aW9uU2VydmljZSxcbiAgICBwbHVnaW5zXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBicmlkZ2VTZXJ2aWNlUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IEJyaWRnZVNlcnZpY2UsXG4gIHVzZUZhY3Rvcnk6IGJyaWRnZVNlcnZpY2VGYWN0b3J5LFxuICBkZXBzOiBbXG4gICAgJyRpbmplY3RvcicsXG4gICAgQXBwU3RhdGVTZXJ2aWNlLFxuICAgIFJvdXRlcixcbiAgICBOZ1pvbmUsXG4gICAgUm91dGVyU2VydmljZSxcbiAgICBBY3Rpb25TZXJ2aWNlLFxuICAgIFBsdWdpbnNSZXNvbHZlU2VydmljZVxuICBdXG59O1xuIl19
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJpZGdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91cGdyYWRlL2JyaWRnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxhQUFhLEVBQ2IsZUFBZSxFQUlmLGNBQWMsRUFDZCxPQUFPLEVBQ1AscUJBQXFCLEVBQ3JCLGFBQWEsRUFHYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBRUgsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBMEIsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRSxNQUFNLE9BQU8sYUFBYTtJQU14QixZQUNTLFFBQWEsRUFDWixRQUF5QixFQUMxQixNQUFjLEVBQ2IsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLGFBQTRCLEVBQ3BDLE9BQThCO1FBTnZCLGFBQVEsR0FBUixRQUFRLENBQUs7UUFDWixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBUnRDLGNBQVMsR0FBbUIsSUFB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LENBQUM7SUFDdEQsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNoRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdELGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFDbEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsRUFBRTtZQUNaLEtBQUssRUFBRSxPQUFPLENBQUMsd0JBQXdCLENBQUM7WUFDeEMsS0FBSyxFQUFFLGVBQWUsQ0FBQyw0QkFBNEI7U0FDcEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxRQUFhLEVBQ2IsUUFBeUIsRUFDekIsTUFBYyxFQUNkLE1BQWMsRUFDZCxhQUE0QixFQUM1QixhQUE0QixFQUM1QixPQUE4QjtJQUU5QixPQUFPLElBQUksYUFBYSxDQUN0QixRQUFRLEVBQ1IsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sYUFBYSxFQUNiLGFBQWEsRUFDYixPQUFPLENBQ1IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUNuQyxPQUFPLEVBQUUsYUFBYTtJQUN0QixVQUFVLEVBQUUsb0JBQW9CO0lBQ2hDLElBQUksRUFBRTtRQUNKLFdBQVc7UUFDWCxlQUFlO1FBQ2YsTUFBTTtRQUNOLE1BQU07UUFDTixhQUFhO1FBQ2IsYUFBYTtRQUNiLHFCQUFxQjtLQUN0QjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBY3Rpb24sXG4gIEFjdGlvbkJhckl0ZW0sXG4gIEFjdGlvblNlcnZpY2UsXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQnJlYWRjcnVtYixcbiAgQnJlYWRjcnVtYkl0ZW0sXG4gIERvY0xpbmssXG4gIEVtcHR5Q29tcG9uZW50LFxuICBnZXR0ZXh0LFxuICBQbHVnaW5zUmVzb2x2ZVNlcnZpY2UsXG4gIFJvdXRlclNlcnZpY2UsXG4gIFNlYXJjaCxcbiAgVGFiLFxuICBWaWV3Q29udGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmcm9tLFxuICBmcm9tRXZlbnRQYXR0ZXJuLFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YmplY3Rcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBBY3RpdmF0aW9uRW5kLCBSZXNvbHZlRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVmlld0NvbnRleHRMZWdhY3lQYXJhbWV0ZXIgfSBmcm9tICcuL25nMS92aWV3cy5wcm92aWRlcic7XG5cbmV4cG9ydCBjbGFzcyBCcmlkZ2VTZXJ2aWNlIHtcbiAgJHJvdXRlQ2hhbmdlczogT2JzZXJ2YWJsZTxhbnk+O1xuICAkbmcxUm91dGVDaGFuZ2VTdWNjZXNzOiBPYnNlcnZhYmxlPGFueT47XG4gICRuZzFSb3V0ZUNoYW5nZVN0YXJ0OiBPYnNlcnZhYmxlPGFueT47XG4gICRsaXZlVGFiczogU3ViamVjdDxUYWJbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgbmF2aWdhdGlvbk5vZGVzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5qZWN0b3I6IGFueSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByb3V0ZXJTZXJ2aWNlOiBSb3V0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uU2VydmljZTogQWN0aW9uU2VydmljZSxcbiAgICBwbHVnaW5zOiBQbHVnaW5zUmVzb2x2ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5maXhFMmVJc3N1ZXMoKTtcbiAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3MgPSB0aGlzLmZyb21OZzFFdmVudChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksXG4gICAgICAnJHJvdXRlQ2hhbmdlU3VjY2VzcydcbiAgICApO1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQgPSB0aGlzLmZyb21OZzFFdmVudChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksXG4gICAgICAnJHJvdXRlQ2hhbmdlU3RhcnQnXG4gICAgKTtcbiAgICB0aGlzLmhvb2tMYW5ndWFnZSgpO1xuICAgIHRoaXMuaG9va1RhYigpO1xuICAgIHRoaXMuaG9va05hdmlnYXRvcigpO1xuICAgIHRoaXMuaG9va1VzZXJNZW51KCk7XG4gICAgdGhpcy5ob29rVmlld1Byb3ZpZGVyKCk7XG4gICAgdGhpcy5ob29rUm91dGUoKTtcbiAgICBwbHVnaW5zLmFsbFBsdWdpbnNMb2FkZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKHRtcCA9PiAhIXRtcCksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvdXRlci5pbml0aWFsTmF2aWdhdGlvbigpO1xuICAgICAgfSk7XG4gICAgdGhpcy5uZzFSb3V0ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgdGhhdCBhbmd1bGFyanMgcm91dGVzIGFyZSBub3QgdXNpbmcgYW55XG4gICAqIHNlY29uZGFyeSByb3V0ZXIgb3V0bGV0c1xuICAgKi9cbiAgaG9va1JvdXRlKCkge1xuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIFJlc29sdmVFbmQpLFxuICAgICAgICBtYXAoKGV2ZW50OiBSZXNvbHZlRW5kKSA9PiBldmVudC5zdGF0ZS5yb290LmZpcnN0Q2hpbGQpLFxuICAgICAgICBmaWx0ZXIocm91dGUgPT4gcm91dGUgJiYgcm91dGUucm91dGVDb25maWcgJiYgcm91dGUucm91dGVDb25maWcucGF0aCA9PT0gJyoqJylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5yb290LmNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IGV2ZW50LnJvb3QuY2hpbGRyZW5bMF0udXJsLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgaG9va1ZpZXdQcm92aWRlcigpIHtcbiAgICBjb25zdCBjOHlWaWV3cyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlWaWV3cycpO1xuICAgIC8vIGZpeCB0byB0cmlnZ2VyIGFuIGFuZ3VsYXJqcyByb3V0ZSBjaGFuZ2Ugc3VjY2Vzc1xuICAgIC8vIGV2ZW50IG9uIGNvbnRleHQgcm91dGUgbWF0Y2ggdG8gbWFrZSBsZWdhY3lcbiAgICAvLyB2aWV3LXByb3ZpZGVycyByZXNvbHZlLlxuICAgIGM4eVZpZXdzLndoZW4oJy9kZXZpY2UvOmlkJywge1xuICAgICAgdGVtcGxhdGU6ICcnXG4gICAgfSk7XG4gICAgYzh5Vmlld3Mud2hlbignL2dyb3VwLzppZCcsIHtcbiAgICAgIHRlbXBsYXRlOiAnJ1xuICAgIH0pO1xuICAgIGM4eVZpZXdzLmNvbnRleHRWaWV3cy5zdWJzY3JpYmUoY2ZnID0+IHRoaXMuYWRkUm91dGUoY2ZnKSk7XG4gIH1cblxuICBhZGRSb3V0ZShjZmcpIHtcbiAgICB0aGlzLnJvdXRlclNlcnZpY2UuYWRkUm91dGUoe1xuICAgICAgbGFiZWw6IGNmZy5sYWJlbCB8fCBjZmcubmFtZSxcbiAgICAgIHBhdGg6IGNmZy5wYXRoLFxuICAgICAgaWNvbjogY2ZnLmljb24sXG4gICAgICBjb250ZXh0OiBWaWV3Q29udGV4dFtjZmcuY29udGV4dEtleV0gYXMgVmlld0NvbnRleHQsXG4gICAgICBwcmlvcml0eTogY2ZnLnByaW9yaXR5LFxuICAgICAgY29tcG9uZW50OiBFbXB0eUNvbXBvbmVudCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2hvd0lmOiBjZmcuc2hvd0lmXG4gICAgICAgICAgPyBuZ3hSb3V0ZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5uZ3hSb3V0ZS5wYXJhbXMsXG4gICAgICAgICAgICAgICAgW1ZpZXdDb250ZXh0TGVnYWN5UGFyYW1ldGVyW2NmZy5jb250ZXh0S2V5XV06IG5neFJvdXRlLnBhcmFtcy5pZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBjb25zdCBzaG93SWZSZXN1bHQgPSB0aGlzLmluamVjdG9yLmludm9rZShjZmcuc2hvd0lmLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgICAkcm91dGVQYXJhbXM6IHBhcmFtc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHNob3dJZiByZXN1bHQgaXMgYSBwcm9taXNlIHdpdGggYm9vbGVhbiByZXN1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldCgnJHEnKS53aGVuKHNob3dJZlJlc3VsdCkudGhlbihCb29sZWFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIC4uLihjZmcuZmVhdHVyZUlkICYmIHsgZmVhdHVyZUlkOiBjZmcuZmVhdHVyZUlkIH0pXG4gICAgfSk7XG5cbiAgICBpZiAoY2ZnLnJ1blBoYXNlKSB7XG4gICAgICB0aGlzLnJvdXRlclNlcnZpY2UucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nMVJvdXRlcygpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICcnO1xuICAgIGNvbnN0IGZhbGxiYWNrUm91dGVzID0gW107XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZvcmluXG4gICAgZm9yIChjb25zdCBjb250ZXh0IGluIFZpZXdDb250ZXh0KSB7XG4gICAgICBjb25zdCBwYXRoID0gVmlld0NvbnRleHRbY29udGV4dF0ubWF0Y2goLyhcXHcrKVxcLy8pWzFdO1xuICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgXi8ke3BhdGh9Lyg/OihbXi9dKykpLiokYCk7XG4gICAgICBmYWxsYmFja1JvdXRlcy5wdXNoKHtcbiAgICAgICAga2V5czogW3sgbmFtZTogVmlld0NvbnRleHRMZWdhY3lQYXJhbWV0ZXJbY29udGV4dF0sIG9wdGlvbmFsOiBmYWxzZSB9XSxcbiAgICAgICAgcmVnZXhwLFxuICAgICAgICB0ZW1wbGF0ZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiBhc3NldCBkZXRhaWwgcm91dGVzICgvZGV2aWNlLzppZCwgIC9ncm91cC86aWQpIGFyZSBtYXRjaGVkIGluIEFuZ3VsYXIgUm91dGVyLCBuZ1JvdXRlIGluXG4gICAgICogYW5ndWxhci5qcyBtdXN0IGFsc28gaGF2ZSBtYXRjaGluZyBnZW5lcmljIHJvdXRlcyBzbyB0aGF0IHRoZSBpZHMgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBwYXRocyBhbmRcbiAgICAgKiBpbmplY3RlZCBpbiBtdWx0aXBsZSBjYWxscyAoc2hvd0lmLCBjOHlBY3Rpb25zLCBldGMpIGFzIHByb3BlcnRpZXMgb2YgJHJvdXRlUGFyYW1zLlxuICAgICAqXG4gICAgICogVGhlIGZ1bmN0aW9uIGluIHNyYy9uZ1JvdXRlL3JvdXRlLmpzIChhbmd1bGFyLmpzKSB3aGVyZSB0aGUgcm91dGVzIGFyZSBtYXRjaGVkIGlzIGNhbGxlZCBwYXJzZVJvdXRlKCkuIFRoaXNcbiAgICAgKiBmdW5jdGlvbiBjYWxscyBhbmd1bGFyLmZvckVhY2ggYW5kIGluIHR1cm4gdGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIGZvckVhY2ggbWV0aG9kIGJlZm9yZVxuICAgICAqIHRyeWluZyBvYmplY3Qga2V5IGl0ZXJhdGlvbi5cbiAgICAgKiBCeSBhdHRhY2hpbmcgYSBub24gZW51bWVyYWJsZSBmb3JFYWNoIG1ldGhvZCB0byB0aGUgcm91dGVzIG9iamVjdCB3ZSBndWFyYW50ZWUgdGhhdCB0aGUgZmFsbGJhY2sgZ2VuZXJpYyByb3V0ZXNcbiAgICAgKiBhcmUgb25seSBtYXRjaGVkIGFmdGVyIGFueSBvdGhlciByZWdpc3RlcmVkIHRocm91Z2ggJHJvdXRlUHJvdmlkZXIud2hlbi5cbiAgICAgKi9cbiAgICBjb25zdCAkcm91dGUgPSB0aGlzLmluamVjdG9yLmdldCgnJHJvdXRlJyk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCRyb3V0ZS5yb3V0ZXMsICdmb3JFYWNoJywge1xuICAgICAgLy8gbWFrZSBub24gZW51bWVyYWJsZVxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBmb3JpblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzKSB7XG4gICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCB0aGlzW2tleV0sIGtleSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZmFsbGJhY2tSb3V0ZXMuZm9yRWFjaChyID0+IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgcikpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogU29tZSBmdW5jdGlvbnMgdXNlIHRoZSBjdXJyZW50IGNvbnRleHQuIEFzIHNvbWUgcGFydHMgYXJlIHVwZ3JhZGVkIGFuZCBzb21lIG5vdCwgdGhlIGZvbGxvd2luZyB1cGRhdGVzIHRoZVxuICAgICAqIGFuZ3VsYXJqcyBnZXRDb250ZXh0IGZ1bmN0aW9uIHRvIHJlc29sdmUgYWx3YXlzIHRoZSByaWdodCBjb250ZXh0LlxuICAgICAqL1xuICAgIGNvbnN0IGM4eVVpVXRpbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlVaVV0aWwnKTtcbiAgICBjb25zdCBfZ2V0Q29udGV4dCA9IGM4eVVpVXRpbC5nZXRDb250ZXh0O1xuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgQWN0aXZhdGlvbkVuZCkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogQWN0aXZhdGlvbkVuZCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuc25hcHNob3Qucm91dGVDb25maWcucGF0aCA9PT0gJyoqJykge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gX2dldENvbnRleHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc25hcHNob3QuZGF0YSAmJiBldmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHQpIHtcbiAgICAgICAgICBjOHlVaVV0aWwuZ2V0Q29udGV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGV2ZW50LnNuYXBzaG90LmRhdGEuY29udGV4dC5yZXBsYWNlKCcvOmlkJywgJycpLFxuICAgICAgICAgICAgICBpZDogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YS5pZCxcbiAgICAgICAgICAgICAgY29udGV4dERhdGE6IGV2ZW50LnNuYXBzaG90LmRhdGEuY29udGV4dERhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjOHlVaVV0aWwuZ2V0Q29udGV4dCA9ICgpID0+ICh7IGNvbnRleHQ6IG51bGwsIGlkOiBudWxsIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGZpeEUyZUlzc3VlcygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBuZ1pvbmUgfSA9IHRoaXM7XG4gICAgICBjb25zdCB7IFV0aWxzIH0gPSAod2luZG93IGFzIGFueSkub3JnLmNvbWV0ZDtcbiAgICAgIGNvbnN0IHRpbWVvdXRGbiA9IFV0aWxzLnNldFRpbWVvdXQ7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6b25seS1hcnJvdy1mdW5jdGlvbnNcbiAgICAgIFV0aWxzLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRpbWVvdXRGbi5hcHBseShVdGlscywgYXJncykpO1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYWNlIH0gPSB3aW5kb3cgYXMgYW55O1xuICAgICAgY29uc3QgZWRpdEZuID0gYWNlLmVkaXQ7XG4gICAgICBjb25zdCB7IG5nWm9uZSB9ID0gdGhpcztcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgYWNlLmVkaXQgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IGVkaXRGbi5hcHBseShhY2UsIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIGhvb2tMYW5ndWFnZSgpIHtcbiAgICBsZXQgZmlyc3QgPSB0cnVlO1xuICAgIHRoaXMuYXBwU3RhdGVcbiAgICAgIC5tYXAoc3RvcmUgPT4gc3RvcmUubGFuZylcbiAgICAgIC5zdWJzY3JpYmUobGFuZyA9PiB7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlMb2NhbGVzJykuc3dpdGNoVG9MYW5ndWFnZShsYW5nKTtcbiAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJykuJGFwcGx5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgaG9va1RhYigpIHtcbiAgICAvLyBKdXN0IGZvciBpbnN0YW50aWF0aW9uIG9mIHRoZSBjOHlBY3Rpb24gc2VydmljZVxuICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlBY3Rpb25zJyk7XG4gICAgY29uc3QgJGxvY2F0aW9uID0gdGhpcy5pbmplY3Rvci5nZXQoJyRsb2NhdGlvbicpO1xuICAgIGNvbnN0IGM4eVRhYnMgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5VGFicycpO1xuICAgIGxldCBsaXZlVGFicyA9IFtdO1xuICAgIGM4eVRhYnMuYWRkVGFiID0gdGFiID0+IHtcbiAgICAgIGxpdmVUYWJzLnB1c2goe1xuICAgICAgICAuLi50YWIsXG4gICAgICAgIGxhYmVsOiB0YWIubGFiZWwgfHwgdGFiLm5hbWUsXG4gICAgICAgIHBhdGg6IGRlY29kZVVSSUNvbXBvbmVudCh0YWIucGF0aClcbiAgICAgIH0pO1xuICAgICAgdGhpcy4kbGl2ZVRhYnMubmV4dChsaXZlVGFicyk7XG4gICAgfTtcbiAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN0YXJ0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBsaXZlVGFicyA9IFtdO1xuICAgICAgdGhpcy4kbGl2ZVRhYnMubmV4dChsaXZlVGFicyk7XG4gICAgfSk7XG4gICAgdGhpcy4kbmcxUm91dGVDaGFuZ2VTdWNjZXNzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBwYXRoID0gJGxvY2F0aW9uLnBhdGgoKTtcbiAgICAgIGlmICh0aGlzLnJvdXRlci51cmwgIT09IHBhdGgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUocGF0aCA9PT0gJy8nID8gJycgOiBwYXRoLnNwbGl0KCcvJyksIHtcbiAgICAgICAgICBxdWVyeVBhcmFtczogJGxvY2F0aW9uLnNlYXJjaCgpLFxuICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFjdGlvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25TZXJ2aWNlLnJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLiRyb3V0ZUNoYW5nZXMgPSBtZXJnZShcbiAgICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3VjY2VzcyxcbiAgICAgIHRoaXMuZnJvbU5nMUV2ZW50KGM4eVRhYnMsIGM4eVRhYnMuRVZFTlRfVVBEQVRFKSxcbiAgICAgIG9mKDEpXG4gICAgKS5waXBlKGRlYm91bmNlVGltZSgxMDApKTtcbiAgfVxuXG4gIGhvb2tOYXZpZ2F0b3IoKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uTm9kZXMkID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eU5hdmlnYXRvcicpLnJvb3ROb2RlcyQ7XG4gIH1cblxuICBnZXRUYWJzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb25seVZpc2libGUgPSAoeyBzaG93IH0pID0+IHNob3c7XG4gICAgY29uc3QgdXBncmFkZVRhYiA9IHRhYiA9PiAoe1xuICAgICAgLi4udGFiLFxuICAgICAgbGFiZWw6IHRhYi5sYWJlbCB8fCB0YWIubmFtZSxcbiAgICAgIHBhdGg6IGRlY29kZVVSSUNvbXBvbmVudCh0YWIucGF0aClcbiAgICB9KTtcbiAgICBjb25zdCByb3V0ZVRhYnMgPSB0aGlzLiRyb3V0ZUNoYW5nZXMucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdXRlcyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlUYWJzJykucm91dGVUYWJzO1xuICAgICAgICBjb25zdCB2aXNpYmlsaXR5UHJvbWlzZSA9IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJvdXRlcy5tYXAoKHsgY2hlY2tpbmdWaXNpYmlsaXR5IH0pID0+IGNoZWNraW5nVmlzaWJpbGl0eSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHZpc2liaWxpdHlQcm9taXNlLnRoZW4oKCkgPT4gcm91dGVzLmZpbHRlcihvbmx5VmlzaWJsZSkubWFwKHVwZ3JhZGVUYWIpKTtcbiAgICAgIH0pLFxuICAgICAgc3RhcnRXaXRoKFtdKVxuICAgICk7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3JvdXRlVGFicywgdGhpcy4kbGl2ZVRhYnNdKS5waXBlKFxuICAgICAgbWFwKChbcm91dGUsIGxpdmVdKSA9PiByb3V0ZS5jb25jYXQobGl2ZSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldFF1aWNrTGlua3MoKTogUHJvbWlzZTxEb2NMaW5rW10+IHtcbiAgICBjb25zdCBjOHlRdWlja0xpbmtzID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVF1aWNrTGlua3MnKTtcbiAgICByZXR1cm4gYzh5UXVpY2tMaW5rcy5saXN0KCk7XG4gIH1cblxuICBnZXRBY3Rpb25CYXJJdGVtcygpOiBPYnNlcnZhYmxlPEFjdGlvbkJhckl0ZW0+IHtcbiAgICBjb25zdCBjOHlBY3Rpb25CYXIgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5QWN0aW9uQmFyJyk7XG4gICAgY29uc3QgJHJvb3RTY29wZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyk7XG4gICAgY29uc3QgZ2V0QWN0aW9uQmFyRWxlbWVudHMgPSAoKSA9PlxuICAgICAgYzh5QWN0aW9uQmFyLmVsZW1lbnRzLm1hcChlbGVtZW50ID0+ICh7XG4gICAgICAgIHByaW9yaXR5OiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnYWN0aW9uLWJhci1wcmlvcml0eScpIHx8IDAsXG4gICAgICAgIHRlbXBsYXRlOiBlbGVtZW50LFxuICAgICAgICBwbGFjZW1lbnQ6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhY3Rpb24tYmFyLXBvc2l0aW9uJykgfHwgJ3JpZ2h0J1xuICAgICAgfSkpO1xuICAgIHJldHVybiB0aGlzLmZyb21OZzFFdmVudCgkcm9vdFNjb3BlLCAnYzh5QWN0aW9uQmFyQ2hhbmdlZCcpLnBpcGUoXG4gICAgICBzdGFydFdpdGgoMSksXG4gICAgICBtYXAoZ2V0QWN0aW9uQmFyRWxlbWVudHMpXG4gICAgKTtcbiAgfVxuXG4gIGdldEJyZWFkY3J1bWJzKCk6IE9ic2VydmFibGU8QnJlYWRjcnVtYltdPiB7XG4gICAgY29uc3QgJGxvY2F0aW9uID0gdGhpcy5pbmplY3Rvci5nZXQoJyRsb2NhdGlvbicpO1xuICAgIGNvbnN0IGM4eUJyZWFkY3J1bWJzID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUJyZWFkY3J1bWJzJyk7XG4gICAgY29uc3QgYnJlYWRjcnVtYnNVcGRhdGUkID0gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PlxuICAgICAgYzh5QnJlYWRjcnVtYnMuJG9uKCd1cGRhdGUnLCAoKSA9PiBzdWJzY3JpYmVyLm5leHQoKSlcbiAgICApO1xuICAgIHJldHVybiBicmVhZGNydW1ic1VwZGF0ZSQucGlwZShcbiAgICAgIHN0YXJ0V2l0aCgwKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSAkbG9jYXRpb24ucGF0aCgpO1xuICAgICAgICBjb25zdCBicmVhZGNydW1icyA9IGM4eUJyZWFkY3J1bWJzLmdldChwYXRoKSB8fCB7fTtcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYnNEYXRhID0gdGhpcy5yZXNvbHZlQnJlYWRjcnVtYnNEYXRhKGJyZWFkY3J1bWJzLmRhdGEpO1xuICAgICAgICByZXR1cm4gZnJvbShicmVhZGNydW1ic0RhdGEpLnBpcGUoXG4gICAgICAgICAgbWFwKCh2YWx1ZTogYW55W10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpdmVCcmVhZGNydW1icyA9IGM4eUJyZWFkY3J1bWJzLmdldExpdmVCcmVhZGNydW1icygpO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jb25jYXQobGl2ZUJyZWFkY3J1bWJzKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaXRlbXMgPT4gKHsgaXRlbXM6IGl0ZW1zIGFzIEJyZWFkY3J1bWJJdGVtW10gfSkgYXMgQnJlYWRjcnVtYik7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJlc29sdmVCcmVhZGNydW1ic0RhdGEoZGF0YSk6IE9ic2VydmFibGU8YW55W10+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuaW52b2tlKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBlbXB0eVxuICAgIH1cbiAgICBpZiAoaXNBcnJheShkYXRhKSkge1xuICAgICAgcmV0dXJuIG9mKFtkYXRhXSk7XG4gICAgfVxuICAgIHJldHVybiBvZihbXSk7XG4gIH1cblxuICBnZXRTZWFyY2goKTogU2VhcmNoW10ge1xuICAgIGNvbnN0IGM4eVNlYXJjaCA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlTZWFyY2gnKTtcbiAgICByZXR1cm4gYzh5U2VhcmNoLmxpc3QoKS5tYXAoaXRlbSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpY29uOiAnc2VhcmNoJyxcbiAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICB0ZXJtOiAnJyxcbiAgICAgICAgb25TZWFyY2goKSB7XG4gICAgICAgICAgaWYgKHRoaXMudGVybSkge1xuICAgICAgICAgICAgYzh5U2VhcmNoLnNlYXJjaCh0aGlzLnRlcm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBhcyBTZWFyY2g7XG4gICAgfSk7XG4gIH1cblxuICBnZXRBY3Rpb25zKCk6IE9ic2VydmFibGU8QWN0aW9uPiB7XG4gICAgY29uc3QgcmVnaXN0ZXJlZEFjdGlvbnMgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5QWN0aW9ucycpLnJlZ2lzdGVyZWRBY3Rpb25zO1xuICAgIHJldHVybiBvZihcbiAgICAgIHJlZ2lzdGVyZWRBY3Rpb25zXG4gICAgICAgIC5maWx0ZXIoYWN0aW9uID0+ICFhY3Rpb24uaGlkZGVuKVxuICAgICAgICAubWFwKGFjdGlvbiA9PiAoe1xuICAgICAgICAgIC8vIFRoZSBwcmlvcml0eSB3YXMgcmV2ZXJzZWQ6IEFsaWduZWQgaXQgdG8gZGFzaGJvYXJkLCBoaWdoIGZpcnN0LCBsb3cgbGFzdC5cbiAgICAgICAgICBwcmlvcml0eTogKGFjdGlvbi5wcmlvcml0eSB8fCAwKSAqIC0xLFxuICAgICAgICAgIGxhYmVsOiBhY3Rpb24udGV4dCxcbiAgICAgICAgICBpY29uOiBhY3Rpb24uaWNvbixcbiAgICAgICAgICBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbmplY3Rvci5pbnZva2UoYWN0aW9uLmFjdGlvbiwgYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICk7XG4gIH1cblxuICBmcm9tTmcxRXZlbnQob2JqLCBldnQpIHtcbiAgICBsZXQgc3RvcExpc3RlbmluZztcbiAgICBmdW5jdGlvbiBhZGQoaGFuZGxlcikge1xuICAgICAgc3RvcExpc3RlbmluZyA9IG9iai4kb24oZXZ0LCBoYW5kbGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyb21FdmVudFBhdHRlcm4oYWRkLCAoKSA9PiBzdG9wTGlzdGVuaW5nKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBob29rVXNlck1lbnUoKSB7XG4gICAgY29uc3QgdXNlck1lbnVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVVzZXJNZW51U2VydmljZScpO1xuICAgIGNvbnN0IGM4eUFjY2Vzc0RlbmllZCA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlBY2Nlc3NEZW5pZWQnKTtcbiAgICB1c2VyTWVudVNlcnZpY2UuYWRkKHtcbiAgICAgIGljb246ICdhY2Nlc3MnLFxuICAgICAgcHJpb3JpdHk6IDEwLFxuICAgICAgbGFiZWw6IGdldHRleHQoJ0FjY2VzcyBkZW5pZWQgcmVxdWVzdHMnKSxcbiAgICAgIGNsaWNrOiBjOHlBY2Nlc3NEZW5pZWQuc2hvd0FjY2Vzc0RlbmllZFJlcXVlc3RzTGlzdFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmlkZ2VTZXJ2aWNlRmFjdG9yeShcbiAgaW5qZWN0b3I6IGFueSxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgcm91dGVyOiBSb3V0ZXIsXG4gIG5nWm9uZTogTmdab25lLFxuICByb3V0ZXJTZXJ2aWNlOiBSb3V0ZXJTZXJ2aWNlLFxuICBhY3Rpb25TZXJ2aWNlOiBBY3Rpb25TZXJ2aWNlLFxuICBwbHVnaW5zOiBQbHVnaW5zUmVzb2x2ZVNlcnZpY2Vcbikge1xuICByZXR1cm4gbmV3IEJyaWRnZVNlcnZpY2UoXG4gICAgaW5qZWN0b3IsXG4gICAgYXBwU3RhdGUsXG4gICAgcm91dGVyLFxuICAgIG5nWm9uZSxcbiAgICByb3V0ZXJTZXJ2aWNlLFxuICAgIGFjdGlvblNlcnZpY2UsXG4gICAgcGx1Z2luc1xuICApO1xufVxuXG5leHBvcnQgY29uc3QgYnJpZGdlU2VydmljZVByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBCcmlkZ2VTZXJ2aWNlLFxuICB1c2VGYWN0b3J5OiBicmlkZ2VTZXJ2aWNlRmFjdG9yeSxcbiAgZGVwczogW1xuICAgICckaW5qZWN0b3InLFxuICAgIEFwcFN0YXRlU2VydmljZSxcbiAgICBSb3V0ZXIsXG4gICAgTmdab25lLFxuICAgIFJvdXRlclNlcnZpY2UsXG4gICAgQWN0aW9uU2VydmljZSxcbiAgICBQbHVnaW5zUmVzb2x2ZVNlcnZpY2VcbiAgXVxufTtcbiJdfQ==
|
|
@@ -39,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
39
39
|
name: 'severityIcon'
|
|
40
40
|
}]
|
|
41
41
|
}] });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V2ZXJpdHktaWNvbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvYWxhcm1zL3NldmVyaXR5LWljb24ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQVl2QyxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFNBQVMsQ0FBQyxRQUFnQjtRQUN4QixJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLGFBQWEsR0FBOEIsRUFBRSxDQUFDO1FBRWxELFFBQVEsUUFBUSxFQUFFLENBQUM7WUFDakIsS0FBSyxRQUFRLENBQUMsUUFBUTtnQkFDcEIsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO2dCQUMvQixhQUFhLEdBQUcsb0JBQW9CLENBQUM7Z0JBQ3JDLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxLQUFLO2dCQUNqQixpQkFBaUIsR0FBRyxPQUFPLENBQUM7Z0JBQzVCLGFBQWEsR0FBRyxTQUFTLENBQUM7Z0JBQzFCLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxLQUFLO2dCQUNqQixpQkFBaUIsR0FBRyxPQUFPLENBQUM7Z0JBQzVCLGFBQWEsR0FBRyxlQUFlLENBQUM7Z0JBQ2hDLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxPQUFPO2dCQUNuQixpQkFBaUIsR0FBRyxTQUFTLENBQUM7Z0JBQzlCLGFBQWEsR0FBRyxRQUFRLENBQUM7Z0JBQ3pCLE1BQU07WUFDUjtnQkFDRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU87WUFDTCxTQUFTLEVBQUUsNENBQTRDLGFBQWEsSUFBSSxpQkFBaUIsRUFBRTtZQUMzRixPQUFPLEVBQUUsaUJBQWlCO1NBQzNCLENBQUM7SUFDSixDQUFDOzhHQTlCVSxnQkFBZ0I7NEdBQWhCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFINUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsY0FBYztpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZXZlcml0eSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IFN1cHBvcnRlZEljb25zU3VnZ2VzdGlvbnMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ljb24tc2VsZWN0b3IvaWNvbnMnO1xuXG5pbnRlcmZhY2UgU2V2ZXJpdHlJY29uIHtcbiAgYzh5SWNvbj86IHN0cmluZztcbiAgaWNvbkNsYXNzOiBzdHJpbmc7XG4gIHNldmVyaXR5Q2xhc3M/OiBzdHJpbmc7XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3NldmVyaXR5SWNvbidcbn0pXG5leHBvcnQgY2xhc3MgU2V2ZXJpdHlJY29uUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oc2V2ZXJpdHk6IHN0cmluZyk6IFNldmVyaXR5SWNvbiB7XG4gICAgbGV0IHNldmVyaXR5Q2xhc3NOYW1lID0gJyc7XG4gICAgbGV0IGljb25DbGFzc05hbWU6IFN1cHBvcnRlZEljb25zU3VnZ2VzdGlvbnMgPSAnJztcblxuICAgIHN3aXRjaCAoc2V2ZXJpdHkpIHtcbiAgICAgIGNhc2UgU2V2ZXJpdHkuQ1JJVElDQUw6XG4gICAgICAgIHNldmVyaXR5Q2xhc3NOYW1lID0gJ2NyaXRpY2FsJztcbiAgICAgICAgaWNvbkNsYXNzTmFtZSA9ICdleGNsYW1hdGlvbi1jaXJjbGUnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU2V2ZXJpdHkuTUFKT1I6XG4gICAgICAgIHNldmVyaXR5Q2xhc3NOYW1lID0gJ21ham9yJztcbiAgICAgICAgaWNvbkNsYXNzTmFtZSA9ICd3YXJuaW5nJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNldmVyaXR5Lk1JTk9SOlxuICAgICAgICBzZXZlcml0eUNsYXNzTmFtZSA9ICdtaW5vcic7XG4gICAgICAgIGljb25DbGFzc05hbWUgPSAnaGlnaC1wcmlvcml0eSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTZXZlcml0eS5XQVJOSU5HOlxuICAgICAgICBzZXZlcml0eUNsYXNzTmFtZSA9ICd3YXJuaW5nJztcbiAgICAgICAgaWNvbkNsYXNzTmFtZSA9ICdjaXJjbGUnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7IGljb25DbGFzczogJycsIHNldmVyaXR5Q2xhc3M6ICcnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGljb25DbGFzczogYHN0YXR1cyBpY29uLWxnIHN0cm9rZWQtaWNvbiBkbHQtYzh5LWljb24tJHtpY29uQ2xhc3NOYW1lfSAke3NldmVyaXR5Q2xhc3NOYW1lfWAsXG4gICAgICBjOHlJY29uOiBzZXZlcml0eUNsYXNzTmFtZVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -53,7 +53,8 @@ export class DatapointsTableWidgetConfigComponent {
|
|
|
53
53
|
this.datapointSelectionConfig = {};
|
|
54
54
|
this.disabledAggregationOptions = {};
|
|
55
55
|
this.defaultFormOptions = {
|
|
56
|
-
|
|
56
|
+
selectableChartLineTypes: [],
|
|
57
|
+
selectableAxisTypes: [],
|
|
57
58
|
showRedRange: true,
|
|
58
59
|
showYellowRange: true
|
|
59
60
|
};
|
|
@@ -380,4 +381,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
380
381
|
}], ctorParameters: () => [{ type: i1.DatapointsTableService }, { type: i2.DatapointsTableConfigService }, { type: i3.FormBuilder }, { type: i3.NgForm }, { type: i4.WidgetConfigComponent }], propDecorators: { config: [{
|
|
381
382
|
type: Input
|
|
382
383
|
}] } });
|
|
383
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvZGF0YXBvaW50cy10YWJsZS9kYXRhcG9pbnRzLXRhYmxlLWNvbmZpZy9kYXRhcG9pbnRzLXRhYmxlLWNvbmZpZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtY29uZmlnL2RhdGFwb2ludHMtdGFibGUtY29uZmlnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBRUwsV0FBVyxFQUNYLFdBQVcsRUFDWCxNQUFNLEVBQ04sbUJBQW1CLEVBR25CLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUd0QixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBR0wsdUJBQXVCLEVBRXhCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixnQ0FBZ0MsRUFFakMsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFFTCxxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUV6Qix1QkFBdUIsRUFDdkIsbUJB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d0I7d0JBQ3hCLGFBQWE7d0JBQ2IsbUJBQW1CO3FCQUNwQjt5TkFNUSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIE5nRm9ybSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yRm4sXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fTEFCRUxTLFxuICBBR0dSRUdBVElPTl9WQUxVRVMsXG4gIEFHR1JFR0FUSU9OX1ZBTFVFU19BUlIsXG4gIEFnZ3JlZ2F0aW9uT3B0aW9uLFxuICBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1cyxcbiAgQ29yZU1vZHVsZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFdpZGdldENvbmZpZ0NvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvY29udGV4dC1kYXNoYm9hcmQnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db25maWcsXG4gIERhdGFwb2ludFNlbGVjdG9yTW9kYWxPcHRpb25zLFxuICBEYXRhcG9pbnRTZWxlY3Rvck1vZHVsZSxcbiAgS1BJRGV0YWlsc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1zZWxlY3Rvcic7XG5pbXBvcnQge1xuICBkYXRlUmFuZ2VWYWxpZGF0b3IsXG4gIFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLFxuICBUaW1lUmFuZ2VJbnRlcnZhbFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yJztcbmltcG9ydCB7IFBvcG92ZXJNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3BvcG92ZXInO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50c1RhYmxlQ29uZmlnLFxuICBEQVRFX1NFTEVDVElPTl9MQUJFTFMsXG4gIERBVEVfU0VMRUNUSU9OX1ZBTFVFUyxcbiAgREFURV9TRUxFQ1RJT05fVkFMVUVTX0FSUixcbiAgRGF0ZVJhbmdlLFxuICBERUZBVUxUX0NPVU5URE9XTl9WQUxVRSxcbiAgSU5URVJWQUxfVkFMVUVTX0FSUixcbiAgUkVGUkVTSF9JTlRFUlZBTF9WQUxVRVNfQVJSLFxuICBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMU1xufSBmcm9tICcuLi9kYXRhcG9pbnRzLXRhYmxlLXdpZGdldC5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhcG9pbnRzVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YXBvaW50cy10YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhcG9pbnRzVGFibGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhcG9pbnRzLXRhYmxlLWNvbmZpZy5zZXJ2aWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1pbk9uZURhdGFwb2ludEFjdGl2ZSgpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGRhdGFwb2ludHM6IEtQSURldGFpbHNbXSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWRhdGFwb2ludHMgfHwgIWRhdGFwb2ludHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVEYXRhcG9pbnRzID0gZGF0YXBvaW50cy5maWx0ZXIoZGF0YXBvaW50ID0+IGRhdGFwb2ludC5fX2FjdGl2ZSk7XG5cbiAgICBpZiAoYWN0aXZlRGF0YXBvaW50cy5sZW5ndGggPj0gMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7IGV4YWN0bHlPbmVEYXRhcG9pbnROZWVkc1RvQmVBY3RpdmU6IHRydWUgfTtcbiAgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhdGFwb2ludHMtdGFibGUtdmlldy1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXBvaW50cy10YWJsZS1jb25maWcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29yZU1vZHVsZSxcbiAgICBEYXRhcG9pbnRTZWxlY3Rvck1vZHVsZSxcbiAgICBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQsXG4gICAgUG9wb3Zlck1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50c1RhYmxlV2lkZ2V0Q29uZmlnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogIERhdGEgcG9pbnRzIHRhYmxlIHdpZGdldCBjb25maWcuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc6IERhdGFwb2ludHNUYWJsZUNvbmZpZztcblxuICByZWFkb25seSBBR0dSRUdBVElPTl9MQUJFTFMgPSBBR0dSRUdBVElPTl9MQUJFTFM7XG4gIHJlYWRvbmx5IERBVEVfU0VMRUNUSU9OX0xBQkVMUyA9IERBVEVfU0VMRUNUSU9OX0xBQkVMUztcbiAgLy8gV2lsbCBiZSB1bmNvbW1lbnRlZCBpbiBNVE0tNjE5MjBcbiAgLy8gcmVhZG9ubHkgREVGQVVMVF9EQVRFX1NFTEVDVE9SX1ZBTFVFID0gREFURV9TRUxFQ1RJT05fVkFMVUVTLmRhc2hib2FyZF9jb250ZXh0O1xuICByZWFkb25seSBERUZBVUxUX0RBVEVfU0VMRUNUT1JfVkFMVUUgPSBEQVRFX1NFTEVDVElPTl9WQUxVRVMuY29uZmlnO1xuICByZWFkb25seSBERUZBVUxUX0lOVEVSVkFMX1ZBTFVFID0gVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuaG91cnM7XG4gIHJlYWRvbmx5IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTID0gVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFM7XG5cbiAgcmVhZG9ubHkgQUdHUkVHQVRJT05fVkFMVUVTX0FSUiA9IEFHR1JFR0FUSU9OX1ZBTFVFU19BUlI7XG4gIHJlYWRvbmx5IERBVEVfU0VMRUNUSU9OX1ZBTFVFU19BUlIgPSBEQVRFX1NFTEVDVElPTl9WQUxVRVNfQVJSO1xuICByZWFkb25seSBJTlRFUlZBTF9WQUxVRVNfQVJSID0gSU5URVJWQUxfVkFMVUVTX0FSUjtcbiAgcmVhZG9ubHkgUkVGUkVTSF9JTlRFUlZBTF9WQUxVRVNfQVJSID0gUkVGUkVTSF9JTlRFUlZBTF9WQUxVRVNfQVJSO1xuXG4gIGRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZzogUGFydGlhbDxEYXRhcG9pbnRTZWxlY3Rvck1vZGFsT3B0aW9ucz4gPSB7fTtcbiAgZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnM6IEFnZ3JlZ2F0aW9uT3B0aW9uU3RhdHVzID0ge307XG4gIGRlZmF1bHRGb3JtT3B0aW9uczogUGFydGlhbDxEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZz4gPSB7XG4gICAgc2hvd0Rpc3BsYXk6IHRydWUsXG4gICAgc2hvd1JlZFJhbmdlOiB0cnVlLFxuICAgIHNob3dZZWxsb3dSYW5nZTogdHJ1ZVxuICB9O1xuICBmb3JtR3JvdXA6IFJldHVyblR5cGU8RGF0YXBvaW50c1RhYmxlV2lkZ2V0Q29uZmlnQ29tcG9uZW50WydjcmVhdGVGb3JtJ10+O1xuICBpc1dpZGdldExpbmtlZFRvR2xvYmFsVGltZUNvbnRleHQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBkZWNpbWFsTGltaXRzID0ge1xuICAgIG51bWJlck9mRGVjaW1hbFBsYWNlc01pbjogMCxcbiAgICBudW1iZXJPZkRlY2ltYWxQbGFjZXNNYXg6IDEwXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlIHdoZW4gdGhlIHRpbWUgaW50ZXJ2YWwgc2VsZWN0b3IgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkIHByb2dyYW1tYXRpY2FsbHkuXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZCB0byB0cmFjayBjaGFuZ2VzIGluIHRoZSB0aW1lIGludGVydmFsIHNlbGVjdG9yXG4gICAqIHRoYXQgYXJlIG5vdCB0cmlnZ2VyZWQgYnkgZGlyZWN0IHVzZXIgaW50ZXJhY3Rpb24sIGJ1dCBieSB0aGUgYXBwbGljYXRpb24gaXRzZWxmLlxuICAgKlxuICAgKiBJbiBvdXIgY2FzZSwgdGhlIGRhdGUgc2VsZWN0b3IgYW5kIHRoZSBpbnRlcnZhbCBzZWxlY3RvciBhcmUgbGlua2VkLlxuICAgKiBTbywgd2hlbiBvbmUgb2YgdGhlbSBjaGFuZ2VzLCBpdCBhZmZlY3RzIHRoZSBvdGhlci5cbiAgICogRm9yIGV4YW1wbGUsIHNlbGVjdGluZyBcIkxhc3QgaG91clwiIGluIHRoZSBpbnRlcnZhbCBzZWxlY3RvciBzaG91bGQgYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIGRhdGUgcmFuZ2UgdG8gdGhlIGxhc3QgaG91ci5cbiAgICogQnV0IHdpdGhvdXQgdGhpcyBmbGFnLCBjaGFuZ2luZyB0aGUgZGF0ZSByYW5nZSB3b3VsZCBhbHNvIHVwZGF0ZSB0aGUgaW50ZXJ2YWwgc2VsZWN0b3IsIHJlc3VsdGluZyBpbiBcIkN1c3RvbSBkYXRlXCIgYmVpbmcgc2VsZWN0ZWQuXG4gICAqIFRoaXMgaGFwcGVucyBiZWNhdXNlIHRoZSBzeXN0ZW0gd291bGQgaW50ZXJwcmV0IHRoZSBiZWhhdmlvciB0aGlzIHdheS5cbiAgICovXG4gIHByaXZhdGUgaXNJbnRlcnZhbFNlbGVjdG9yQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRhcG9pbnRzVGFibGVTZXJ2aWNlOiBEYXRhcG9pbnRzVGFibGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZTogRGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGZvcm06IE5nRm9ybSxcbiAgICBwcml2YXRlIHdpZGdldENvbmZpZzogV2lkZ2V0Q29uZmlnQ29tcG9uZW50XG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBDb25kaXRpb24gd2lsbCBiZSByZW1vdmVkIGluIE1UTS02MTkyMFxuICAgIGlmICh0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnLmNvbnRleHQ/LmlkKSB7XG4gICAgICB0aGlzLmRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZy5jb250ZXh0QXNzZXQgPSB0aGlzLndpZGdldENvbmZpZz8uY29udGV4dDtcbiAgICB9XG4gICAgdGhpcy5pc1dpZGdldExpbmtlZFRvR2xvYmFsVGltZUNvbnRleHQgPSB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0O1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcblxuICAgIHRoaXMuaGFuZGxlQXV0b1JlZnJlc2hUb2dnbGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVJbnRlcnZhbFNlbGVjdG9yQ2hhbmdlcygpO1xuICAgIHRoaXMuaGFuZGxlRGF0ZVNlbGVjdG9yQ2hhbmdlcygpO1xuICAgIHRoaXMuaGFuZGxlR2xvYmFsRGF0ZVNlbGVjdG9yQ2hhbmdlcygpO1xuXG4gICAgdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucyA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UudXBkYXRlRGlzYWJsZWRTdGF0ZU9mQWdncmVnYXRpb25PcHRpb25FbnRyaWVzKFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS52YWx1ZSxcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZVRvLnZhbHVlLFxuICAgICAgICBBR0dSRUdBVElPTl9WQUxVRVNfQVJSXG4gICAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25CZWZvcmVTYXZlKGNvbmZpZz86IERhdGFwb2ludHNUYWJsZUNvbmZpZyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlLmFnZ3JlZ2F0aW9uID09PSBBR0dSRUdBVElPTl9WQUxVRVMubm9uZSB8fFxuICAgICAgKCF0aGlzLmZvcm1Hcm91cC52YWx1ZS5hZ2dyZWdhdGlvbiAmJiBjb25maWcuYWdncmVnYXRpb24gPT09IEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lKVxuICAgICkge1xuICAgICAgLy8gVGhlICdOT05FJyBhZ2dyZWdhdGlvbiB0eXBlIGlzIG5vdCBoYW5kbGVkIGJ5IGEgYmFja2VuZCwgc28gaXQgc2ltcGx5IG5lZWRzIHRvIGJlIGRlbGV0ZWQgdG8gZ2V0IGRhdGEgd2l0aG91dCBhZ2dyZWdhdGlvbi5cbiAgICAgIGRlbGV0ZSB0aGlzLmZvcm1Hcm91cC52YWx1ZS5hZ2dyZWdhdGlvbjtcbiAgICAgIGRlbGV0ZSBjb25maWcuYWdncmVnYXRpb247XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGltZUNvbnRleHQoY29uZmlnLCB0aGlzLmZvcm1Hcm91cC52YWx1ZS5nbG9iYWxEYXRlU2VsZWN0b3IpO1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCB0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XG4gIH1cblxuICB0b2dnbGVSZWZyZXNoSW50ZXJ2YWxDb250cm9sKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmlzQXV0b1JlZnJlc2hFbmFibGVkLnZhbHVlXG4gICAgICA/IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLnJlZnJlc2hJbnRlcnZhbC5kaXNhYmxlKClcbiAgICAgIDogdGhpcy5mb3JtR3JvdXAuY29udHJvbHMucmVmcmVzaEludGVydmFsLmVuYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUaW1lQ29udGV4dChjb25maWc6IERhdGFwb2ludHNUYWJsZUNvbmZpZywgc2VsZWN0ZWREYXRlQ29udGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgc3dpdGNoIChzZWxlY3RlZERhdGVDb250ZXh0KSB7XG4gICAgICAvLyBDb25kaXRpb24gd2lsbCBiZSByZW1vdmVkIGluIE1UTS02MTkyMFxuICAgICAgLy8gY2FzZSBEQVRFX1NFTEVDVElPTl9WQUxVRVMuZGFzaGJvYXJkX2NvbnRleHQ6XG4gICAgICAvLyAgIGNvbmZpZy5kaXNwbGF5RGF0ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgLy8gICBjb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCA9IHRydWU7XG4gICAgICAvLyAgIGJyZWFrO1xuICAgICAgY2FzZSBEQVRFX1NFTEVDVElPTl9WQUxVRVMudmlld19hbmRfY29uZmlnOlxuICAgICAgICBjb25maWcuZGlzcGxheURhdGVTZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICBjb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFURV9TRUxFQ1RJT05fVkFMVUVTLmNvbmZpZzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbmZpZy5kaXNwbGF5RGF0ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgICBjb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgICAvLyBXaGVuIHRoZSAnTk9ORScgYWdncmVnYXRpb24gaXMgcmVtb3ZlZCBhdCB0aGUgJ29uQmVmb3JlU2F2ZScgYmxvY2ssXG4gICAgLy8gYW5kIGEgR2xvYmFsIERhdGUgQ29udGV4dCBmb3JjZXMgd2lkZ2V0cyBhdXRvIHJlZnJlc2ggdG8gYmUgZW5hYmxlZFxuICAgIC8vIHRoZW4sIHRoZSBhZ2dyZWdhdGlvbiBzZWxlY3RvciB3aWxsIGJlIGVtcHR5IG9uIGluaXRpYWwgbG9hZC5cbiAgICB0aGlzLmNvbmZpZy5hZ2dyZWdhdGlvbiA9IHRoaXMuY29uZmlnLmFnZ3JlZ2F0aW9uID8/IEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lO1xuXG4gICAgdGhpcy5mb3JtLmZvcm0uYWRkQ29udHJvbCgnY29uZmlnJywgdGhpcy5mb3JtR3JvdXApO1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodGhpcy5jb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xuICAgIGNvbnN0IHsgZGF0ZUZyb20sIGRhdGVUbyB9ID0gdGhpcy5kYXRhcG9pbnRzVGFibGVTZXJ2aWNlLmNhbGN1bGF0ZURhdGVSYW5nZShcbiAgICAgIHRoaXMuREVGQVVMVF9JTlRFUlZBTF9WQUxVRVxuICAgICk7XG4gICAgY29uc3QgaXNMZWdhY3lXaWRnZXQgPSB0aGlzLmNvbmZpZy5yZWFsdGltZSAhPT0gdW5kZWZpbmVkICYmICF0aGlzLmNvbmZpZy5kZWNpbWFsUGxhY2VzO1xuXG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICB7XG4gICAgICAgIGFnZ3JlZ2F0aW9uOiBuZXcgRm9ybUNvbnRyb2woe1xuICAgICAgICAgIHZhbHVlOiBBR0dSRUdBVElPTl9WQUxVRVMubm9uZSBhcyBBZ2dyZWdhdGlvbk9wdGlvbixcbiAgICAgICAgICBkaXNhYmxlZDogIXRoaXMuaXNBdXRvUmVmZXJzaERpc2FibGVkKClcbiAgICAgICAgfSksXG4gICAgICAgIGRhdGFwb2ludHM6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChuZXcgQXJyYXk8S1BJRGV0YWlscz4oKSwgW1xuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoMSksXG4gICAgICAgICAgbWluT25lRGF0YXBvaW50QWN0aXZlKClcbiAgICAgICAgXSksXG4gICAgICAgIGdsb2JhbERhdGVTZWxlY3RvcjogbmV3IEZvcm1Db250cm9sKFxuICAgICAgICAgIGlzTGVnYWN5V2lkZ2V0XG4gICAgICAgICAgICA/IHRoaXMuZGV0ZXJtaW5lR2xvYmFsRGF0ZVNlbGVjdG9yVmFsdWUoKVxuICAgICAgICAgICAgOiB0aGlzLkRFRkFVTFRfREFURV9TRUxFQ1RPUl9WQUxVRVxuICAgICAgICApLFxuICAgICAgICBkYXRlRnJvbTogbmV3IEZvcm1Db250cm9sKGRhdGVGcm9tKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRm9ybUNvbnRyb2woZGF0ZVRvKSxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogW1xuICAgICAgICAgIDIsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWluKHRoaXMuZGVjaW1hbExpbWl0cy5udW1iZXJPZkRlY2ltYWxQbGFjZXNNaW4pLFxuICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgodGhpcy5kZWNpbWFsTGltaXRzLm51bWJlck9mRGVjaW1hbFBsYWNlc01heCksXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bMC05XSskJylcbiAgICAgICAgICBdXG4gICAgICAgIF0sXG4gICAgICAgIGludGVydmFsOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5ERUZBVUxUX0lOVEVSVkFMX1ZBTFVFIGFzIFRpbWVSYW5nZUludGVydmFsKSxcbiAgICAgICAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IGlzTGVnYWN5V2lkZ2V0ID8gdGhpcy5jb25maWcucmVhbHRpbWUgOiBbdHJ1ZV0sXG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbDogbmV3IEZvcm1Db250cm9sKHtcbiAgICAgICAgICB2YWx1ZTogREVGQVVMVF9DT1VOVERPV05fVkFMVUUsXG4gICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNBdXRvUmVmZXJzaERpc2FibGVkKClcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICB7IHZhbGlkYXRvcnM6IGRhdGVSYW5nZVZhbGlkYXRvciB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lR2xvYmFsRGF0ZVNlbGVjdG9yVmFsdWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jb25maWcuZGlzcGxheURhdGVTZWxlY3Rpb24gJiYgIXRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQpIHtcbiAgICAgIHJldHVybiBEQVRFX1NFTEVDVElPTl9WQUxVRVMudmlld19hbmRfY29uZmlnO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb25maWcuZGlzcGxheURhdGVTZWxlY3Rpb24gJiYgIXRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQpIHtcbiAgICAgIHJldHVybiBEQVRFX1NFTEVDVElPTl9WQUxVRVMuY29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNBdXRvUmVmZXJzaERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzSW5pdGlhbFdpZGdldENyZWF0aW9uID1cbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29uZmlnKS5sZW5ndGggPT09IDEgJiYgdGhpcy5jb25maWdbJ3NldHRpbmdzJ107XG5cbiAgICBpZiAoaXNJbml0aWFsV2lkZ2V0Q3JlYXRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0xlZ2FjeVdpZGdldFJlYWx0aW1lTm90QWN0aXZlID1cbiAgICAgICF0aGlzLmNvbmZpZy5yZWFsdGltZSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmRlY2ltYWxQbGFjZXMgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZDtcblxuICAgIGlmIChpc0xlZ2FjeVdpZGdldFJlYWx0aW1lTm90QWN0aXZlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXMuY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2hhbmdlcyB0byB0aGUgYXV0by1yZWZyZXNoIHRvZ2dsZSBjb250cm9sIGFuZCB1cGRhdGVzIHRoZSBhZ2dyZWdhdGlvbiBjb250cm9sIGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBzdWJzY3JpYmVzIHRvIHRoZSB2YWx1ZSBjaGFuZ2VzIG9mIHRoZSBhdXRvLXJlZnJlc2ggdG9nZ2xlIGZvcm0gY29udHJvbC5cbiAgICogV2hlbiBhdXRvLXJlZnJlc2ggaXMgZW5hYmxlZCwgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wncyB2YWx1ZSBpcyBzZXQgdG8gJ25vbmUnIGFuZCB0aGUgY29udHJvbCBpc1xuICAgKiB2aXN1YWxseSBkaXNhYmxlZCAoYnV0IG5vdCBwcm9ncmFtbWF0aWNhbGx5IGRpc2FibGVkIHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgc2F2ZWQpLlxuICAgKiBXaGVuIGF1dG8tcmVmcmVzaCBpcyBkaXNhYmxlZCwgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wgaXMgZW5hYmxlZC5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlQXV0b1JlZnJlc2hUb2dnbGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmlzQXV0b1JlZnJlc2hFbmFibGVkLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb247XG4gICAgICAgIGlmIChpc0F1dG9SZWZyZXNoRW5hYmxlZCkge1xuICAgICAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC5zZXRWYWx1ZShBR0dSRUdBVElPTl9WQUxVRVMubm9uZSk7XG4gICAgICAgICAgLy8gRG8gbm90IGRpc2FibGUgdGhlIGNvbnRyb2wgcHJvZ3JhbW1hdGljYWxseSB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNhdmVkLlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIGluIHRoZSBpbnRlcnZhbCBzZWxlY3RvciBmb3JtIGNvbnRyb2wuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUludGVydmFsU2VsZWN0b3JDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmludGVydmFsLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWRJbnRlcnZhbDogVGltZVJhbmdlSW50ZXJ2YWwpID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGVkSW50ZXJ2YWwgPT09IFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmN1c3RvbSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZU5vbkN1c3RvbUludGVydmFsKHNlbGVjdGVkSW50ZXJ2YWwpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5vbkN1c3RvbUludGVydmFsKHNlbGVjdGVkSW50ZXJ2YWw6IFRpbWVSYW5nZUludGVydmFsKTogdm9pZCB7XG4gICAgdGhpcy5pc0ludGVydmFsU2VsZWN0b3JDaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2Uoc2VsZWN0ZWRJbnRlcnZhbCk7XG4gICAgdGhpcy51cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlQWdncmVnYXRpb25JZkF1dG9SZWZyZXNoRGlzYWJsZWQoc2VsZWN0ZWRJbnRlcnZhbCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGVSYW5nZShzZWxlY3RlZEludGVydmFsOiBUaW1lUmFuZ2VJbnRlcnZhbCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGVSYW5nZTogRGF0ZVJhbmdlID0gdGhpcy5kYXRhcG9pbnRzVGFibGVTZXJ2aWNlLmNhbGN1bGF0ZURhdGVSYW5nZShzZWxlY3RlZEludGVydmFsKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlVG8uc2V0VmFsdWUoZGF0ZVJhbmdlLmRhdGVUbyk7XG5cbiAgICAvLyBNVE0tNjEzNTFcbiAgICAvLyBVc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIHF1ZXVlIHRoZSBkYXRlRnJvbSB1cGRhdGUuXG4gICAgLy8gVGhpcyBwcmV2ZW50cyB0aW1pbmcgaXNzdWVzIHdoZXJlIHJhcGlkIHNldFZhbHVlIGNhbGxzIG1pZ2h0XG4gICAgLy8gY2F1c2UgdGhlIHZpZXcgdG8gZ28gb3V0IG9mIHN5bmMgd2l0aCBmb3JtIGNvbnRyb2wgdmFsdWVzLFxuICAgIC8vIGVzcGVjaWFsbHkgZHVyaW5nIHRoZSBmaXJzdCBjaGFuZ2UgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXG4gICAgLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAvKipcbiAgICAgKiBXaXRob3V0IHRoaXMgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIG9yIHNldFRpbWVvdXQsIGRhdGVGcm9tIHdvbid0IGNoYW5nZSB0byBhIGNvcnJlY3QgdmFsdWUgYWZ0ZXIgZmlyc3Qgc2VsZWN0b3IgY2hhbmdlLlxuICAgICAqIFdoZW4gZm9ybSBpcyBzYXZlZCBpdCBzYXZlcyB3aXRoIGEgY29ycmVjdCB2YWx1ZSwgZXZlbiB3aXRob3V0IHdpdGggdGhpcyBmaXguXG4gICAgICogSG93IHRvIHJlcHJvZHVjZTpcbiAgICAgKiAxLiBzZXQgZGF0ZSB2YWx1ZXMgdG8gZS5nLjogMDEuMDUuMjAyNC0zMC4wNS4yMDI0IGFuZCBzYXZlIGl0XG4gICAgICogMi4gcmVvcGVuIGEgY29uZmlnIGFuZCBzd2l0Y2ggaW50ZXJ2YWwgdG8gbGFzdCBtb250aFxuICAgICAqL1xuICAgIC8vIFRoaXMgZml4IGJyYWtlcyBhIGxvZ2ljIGJlaGluZCBkaXNhYmxpbmcgbm9uIGF2YWlsYWJsZSBhZ2dyZWdhdGlvbnMuXG4gICAgLy8gRm9ybSB3aWxsIGJlIHN0aWxsIHNhdmVkIHdpdGggY29ycmVjdCBkYXRlIHZhbHVlLCBvbmx5IHZpZXcgaXMgb3V0IG9mIGEgc3luYy5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS5zZXRWYWx1ZShkYXRlUmFuZ2UuZGF0ZUZyb20pO1xuICAgIHRoaXMuaXNJbnRlcnZhbFNlbGVjdG9yQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucyA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UudXBkYXRlRGlzYWJsZWRTdGF0ZU9mQWdncmVnYXRpb25PcHRpb25FbnRyaWVzKFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS52YWx1ZSxcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZVRvLnZhbHVlLFxuICAgICAgICBBR0dSRUdBVElPTl9WQUxVRVNfQVJSXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVBZ2dyZWdhdGlvbklmQXV0b1JlZnJlc2hEaXNhYmxlZChzZWxlY3RlZEludGVydmFsOiBUaW1lUmFuZ2VJbnRlcnZhbCk6IHZvaWQge1xuICAgIGNvbnN0IGlzQXV0b1JlZnJlc2hEaXNhYmxlZCA9ICF0aGlzLmZvcm1Hcm91cC5jb250cm9scy5pc0F1dG9SZWZyZXNoRW5hYmxlZC52YWx1ZTtcbiAgICBpZiAoaXNBdXRvUmVmcmVzaERpc2FibGVkKSB7XG4gICAgICB0aGlzLnNldEFnZ3JlZ2F0aW9uVmFsdWUoc2VsZWN0ZWRJbnRlcnZhbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRBZ2dyZWdhdGlvblZhbHVlKGludGVydmFsOiBUaW1lUmFuZ2VJbnRlcnZhbCk6IHZvaWQge1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uO1xuXG4gICAgY29uc3QgbmV3QWdncmVnYXRpb25WYWx1ZSA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UuZGV0ZXJtaW5lQWdncmVnYXRpb25WYWx1ZShpbnRlcnZhbCk7XG4gICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKG5ld0FnZ3JlZ2F0aW9uVmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2hhbmdlcyBpbiB0aGUgZGF0ZSBzZWxlY3RvciBmb3JtIGNvbnRyb2wuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZURhdGVTZWxlY3RvckNoYW5nZXMoKTogdm9pZCB7XG4gICAgbWVyZ2UoXG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS52YWx1ZUNoYW5nZXMsXG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlVG8udmFsdWVDaGFuZ2VzXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhhbmRsZURhdGVDaGFuZ2UoKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbnRlcnZhbFNlbGVjdG9yQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnZhbENvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5pbnRlcnZhbDtcbiAgICBpZiAoaW50ZXJ2YWxDb250cm9sLnZhbHVlID09PSBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy5jdXN0b20pIHtcbiAgICAgIHRoaXMuaGFuZGxlQ3VzdG9tSW50ZXJ2YWxEYXRlQ2hhbmdlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0SW50ZXJ2YWxUb0N1c3RvbShpbnRlcnZhbENvbnRyb2wpO1xuICAgIH1cbiAgICB0aGlzLnNldFRvRmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvbk9wdGlvbklmQ3VycmVudEFnZ3JlZ2F0aW9uSXNEaXNhYmxlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDdXN0b21JbnRlcnZhbERhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbnRlcnZhbFRvQ3VzdG9tKGludGVydmFsQ29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XG4gICAgaW50ZXJ2YWxDb250cm9sLnNldFZhbHVlKFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmN1c3RvbSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIGluIHRoZSBnbG9iYWwgZGF0ZSBzZWxlY3RvciBmb3JtIGNvbnRyb2wuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUdsb2JhbERhdGVTZWxlY3RvckNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZ2xvYmFsRGF0ZVNlbGVjdG9yLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgLy8gQ29uZGl0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBNVE0tNjE5MjBcbiAgICAgICAgLy8gaWYgKHNlbGVjdGVkID09PSBEQVRFX1NFTEVDVElPTl9WQUxVRVMuZGFzaGJvYXJkX2NvbnRleHQpIHtcbiAgICAgICAgLy8gdGhpcy5oYW5kbGVEYXNoYm9hcmRDb250ZXh0KCk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlTm9uRGFzaGJvYXJkQ29udGV4dCgpO1xuICAgICAgICAvLyB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGFzaGJvYXJkQ29udGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzV2lkZ2V0TGlua2VkVG9HbG9iYWxUaW1lQ29udGV4dCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5vbkRhc2hib2FyZENvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1dpZGdldExpbmtlZFRvR2xvYmFsVGltZUNvbnRleHQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzQ29uZmlnU2F2ZWRXaXRob3V0RGFzaGJvYXJkVGltZU9wdGlvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVBZ2dyZWdhdGlvbklmTmVjZXNzYXJ5KCk7XG4gICAgdGhpcy5zZXRJbnRlcnZhbFRvQ3VzdG9tKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmludGVydmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDb25maWdTYXZlZFdpdGhvdXREYXNoYm9hcmRUaW1lT3B0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQWdncmVnYXRpb25JZk5lY2Vzc2FyeSgpOiB2b2lkIHtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbkNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbjtcbiAgICBjb25zdCBpc0Rhc2hib2FyZFRpbWVPcHRpb25TZXRBZ2dyZWdhdGlvblRvTnVsbCA9ICFhZ2dyZWdhdGlvbkNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoaXNEYXNoYm9hcmRUaW1lT3B0aW9uU2V0QWdncmVnYXRpb25Ub051bGwpIHtcbiAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC5zZXRWYWx1ZShBR0dSRUdBVElPTl9WQUxVRVMubm9uZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wgdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSAobm9uLWRpc2FibGVkKSBvcHRpb24gaWYgdGhlIGN1cnJlbnQgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZDpcbiAgICogLSBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wuXG4gICAqIC0gQ2hlY2tzIGlmIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uIG9wdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogLSBJZiB0aGUgY3VycmVudCBvcHRpb24gaXMgZGlzYWJsZWQsIHNldHMgdGhlIGNvbnRyb2wgdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSAobm9uLWRpc2FibGVkKSBvcHRpb24gYmFzZWQgb24gdGhlIGZvbGxvd2luZyBvcmRlcjpcbiAgICogICAtIElmIHRoZSBjdXJyZW50IHZhbHVlIGlzIGBEQUlMWWAsIGl0IHN3aXRjaGVzIHRvIGBIT1VSTFlgIGlmIGl0J3Mgbm90IGRpc2FibGVkLCBvdGhlcndpc2UgdG8gYE1JTlVURUxZYCBpZiBgSE9VUkxZYCBpcyBhbHNvIGRpc2FibGVkLlxuICAgKiAgIC0gSWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYEhPVVJMWWAsIGl0IHN3aXRjaGVzIHRvIGBNSU5VVEVMWWAgaWYgaXQncyBub3QgZGlzYWJsZWQuXG4gICAqICAgLSBJZiBhbGwgb3B0aW9ucyBhcmUgZGlzYWJsZWQsIGl0IHNldHMgdGhlIHZhbHVlIHRvIGBOT05FYC5cbiAgICpcbiAgICogVGhlIGRpc2FibGVkIHN0YXRlIGlzIHN0b3JlZCBpbiB0aGUgYGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zYCBvYmplY3QsXG4gICAqIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGFnZ3JlZ2F0aW9uIHZhbHVlIGFuZCB0aGUgdmFsdWUgaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBUaGUgYEFHR1JFR0FUSU9OX1ZBTFVFU2Agb2JqZWN0IGRlZmluZXMgdGhlIHBvc3NpYmxlIGFnZ3JlZ2F0aW9uIHZhbHVlcy5cbiAgICovXG4gIC8vIFRPRE8gc2FtZSBtZXRob2QgaXMgaW4gZGF0YXBvaW50cyBleHBvcnQgY29tcG9uZW50LiBDb25zaWRlciBtb3ZpbmcgaXQgdG8gYSBzaGFyZWQgc2VydmljZSB3aGVuIERQVCB3aWxsIGJlIGludGVncmF0aW5nIHdpdGggTVRNLTU5Njg5LlxuICAvLyBUT0RPICdkZXRlcm1pbmVOZXdBZ2dyZWdhdGlvblZhbHVlJyB3aWxsIGJlIGEgc2hhcmVkIG1ldGhvZC5cbiAgLy8gSW50ZWdyYXRpb24gdGFzazogTVRNLTYwMjIxXG4gIHByaXZhdGUgc2V0VG9GaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uT3B0aW9uSWZDdXJyZW50QWdncmVnYXRpb25Jc0Rpc2FibGVkKCk6IHZvaWQge1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGFnZ3JlZ2F0aW9uQ29udHJvbC52YWx1ZTtcblxuICAgIGNvbnN0IG5ld0FnZ3JlZ2F0aW9uVmFsdWUgPSB0aGlzLmRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UuZGV0ZXJtaW5lTmV3QWdncmVnYXRpb25WYWx1ZShcbiAgICAgIGN1cnJlbnRWYWx1ZSxcbiAgICAgIHRoaXMuZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYgKG5ld0FnZ3JlZ2F0aW9uVmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKG5ld0FnZ3JlZ2F0aW9uVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtbC0yNCBwLXItMjRcIj5cbiAgPGZvcm1cbiAgICBjbGFzcz1cIm5vLWNhcmQtY29udGV4dFwiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICA+XG4gICAgPCEtLSA8ZGF0YXBvaW50cy1zZWxlY3Rvcj4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDwhLS0gZ2xvYmFsLXRpbWUtY29udGV4dC1zZWxlY3RvciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbS1iLTAgcC1iLTE2IHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC10LTRcIlxuICAgICAgICAgICAgZm9yPVwiZGF0ZVNlbGVjdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ0RhdGUgc2VsZWN0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3BvcG92ZXJdPVwicG9wb3ZlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcG9wb3ZlclRlbXBsYXRlPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBDaG9vc2UgaG93IHRvIHNlbGVjdCBhIGRhdGUgcmFuZ2UsIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm0tbC0wIHAtbC04IG0tdC04IG0tYi0wXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBXaWxsIGJlIHJlLWVuYWJsZWQgaW4gTVRNLTYxOTIwIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxpPlxuICAgICAgICAgICAgICAgICAgPGI+RGFzaGJvYXJkIHRpbWUgcmFuZ2U6PC9iPlxuICAgICAgICAgICAgICAgICAgcmVzdHJpY3RzIGRhdGUgc2VsZWN0aW9uIHRvIHRoZSBnbG9iYWwgZGFzaGJvYXJkIGNvbmZpZ3VyYXRpb24gb25seVxuICAgICAgICAgICAgICAgIDwvbGk+IC0tPlxuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgIDxiPldpZGdldCBjb25maWd1cmF0aW9uOjwvYj5cbiAgICAgICAgICAgICAgICAgIHJlc3RyaWN0cyB0aGUgZGF0ZSBzZWxlY3Rpb24gb25seSB0byB0aGUgd2lkZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgIDxiPldpZGdldCBhbmQgd2lkZ2V0IGNvbmZpZ3VyYXRpb246PC9iPlxuICAgICAgICAgICAgICAgICAgcmVzdHJpY3RzIHRoZSBkYXRlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0IHZpZXcgYW5kIHdpZGdldCBjb25maWd1cmF0aW9uIG9ubHlcbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LTEyXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidEYXRlIHNlbGVjdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidEYXRlIHNlbGVjdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBpZD1cImdsb2JhbERhdGVTZWxlY3RvclwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImdsb2JhbERhdGVTZWxlY3RvclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YVNlbGVjdGlvblZhbHVlIG9mIERBVEVfU0VMRUNUSU9OX1ZBTFVFU19BUlJcIlxuICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cImRhdGFTZWxlY3Rpb25WYWx1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBEQVRFX1NFTEVDVElPTl9MQUJFTFNbZGF0YVNlbGVjdGlvblZhbHVlXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8Yzh5LWRhdGFwb2ludC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICAgIGNsYXNzPVwiYmctaW5oZXJpdCBzZXBhcmF0b3ItdG9wIHAtdC0xNiBkLWJsb2NrXCJcbiAgICAgICAgICBsaXN0VGl0bGU9XCJ7eyAnRGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBuYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgICAgW2RlZmF1bHRGb3JtT3B0aW9uc109XCJkZWZhdWx0Rm9ybU9wdGlvbnNcIlxuICAgICAgICAgIFtjb25maWddPVwiZGF0YXBvaW50U2VsZWN0aW9uQ29uZmlnXCJcbiAgICAgICAgICBbbWluQWN0aXZlQ291bnRdPVwiMVwiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgID48L2M4eS1kYXRhcG9pbnQtc2VsZWN0aW9uLWxpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1dpZGdldExpbmtlZFRvR2xvYmFsVGltZUNvbnRleHRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDwhLS0gaW50ZXJ2YWwgc2VsZWN0b3IgLS0+XG4gICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAge3sgJ0F1dG8gcmVmcmVzaCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgJ0NoYW5nZSB0aGUgc3RhdGUgb2YgaW50ZXJ2YWwgYXV0b21hdGljIHJlZnJlc2ggYW5kIHNldCB0aGUgcmVmcmVzaCBmcmVxdWVuY3kuJ1xuICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0xNiBmb3JtLWdyb3VwLXNtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtNCBtLXQtOCBtLWItOCBhLWktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwicmVmcmVzaFRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlzQXV0b1JlZnJlc2hFbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlzQXV0b1JlZnJlc2hFbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUmVmcmVzaEludGVydmFsQ29udHJvbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyAnQXV0byByZWZyZXNoJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLWItMFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcj1cInJlZnJlc2hJbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdJbnRlcnZhbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LTEyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1JlZnJlc2ggaW50ZXJ2YWwgaW4gc2Vjb25kcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwicmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJlZnJlc2hJbnRlcnZhbCBvZiBSRUZSRVNIX0lOVEVSVkFMX1ZBTFVFU19BUlJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwicmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAne3sgc2Vjb25kcyB9fSBzJyB8IHRyYW5zbGF0ZTogeyBzZWNvbmRzOiByZWZyZXNoSW50ZXJ2YWwgLyAxMDAwIH0gfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIGRlY2ltYWwgaW5wdXQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldFwiPlxuICAgICAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICAgICAge3sgJ0RlY2ltYWwgcGxhY2VzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLXQtOFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImRlY2ltYWxQbGFjZXNcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlY2ltYWxQbGFjZXNcIlxuICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gYWdncmVnYXRpb24gc2VsZWN0b3IgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzV2lkZ2V0TGlua2VkVG9HbG9iYWxUaW1lQ29udGV4dFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICAgICAgICB7eyAnQWdncmVnYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLXQtOFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZyBiZWxvdyBbYXR0ci5kaXNhYmxlZF0gZW5zdXJlcyB0aGF0IHRoZSBjb250cm9sIGlzIHZpc3VhbGx5IGRpc2FibGVkIGFuZCB1c2VyIGludGVyYWN0aW9uIGlzIHByZXZlbnRlZCxcbiAgICAgICAgICAgICAgIHdoaWxlIHN0aWxsIGFsbG93aW5nIHRoZSB2YWx1ZSB0byBiZSB1cGRhdGVkIGFuZCBzYXZlZCBjb3JyZWN0bHkgaW4gdGhlIGZvcm0uXG4gICAgICAgICAgICAgICBUaGlzIHNvbHV0aW9uIGNvdmVycyB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciBlbmFibGVzIGF1dG8tcmVmcmVzaCwgaW4gd2hpY2ggY2FzZSBhZ2dyZWdhdGlvbiBtdXN0IGJlIHNldCB0byBOT05FLiAtLT5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC0xMlwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQWdncmVnYXRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZ2dyZWdhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFnZ3JlZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZm9ybUdyb3VwLnZhbHVlLmlzQXV0b1JlZnJlc2hFbmFibGVkID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFnZ3JlZ2F0aW9uVmFsdWUgb2YgQUdHUkVHQVRJT05fVkFMVUVTX0FSUlwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwiYWdncmVnYXRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zW2FnZ3JlZ2F0aW9uVmFsdWVdXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IEFHR1JFR0FUSU9OX0xBQkVMU1thZ2dyZWdhdGlvblZhbHVlXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIHRpbWUgaW50ZXJ2YWwgc2VsZWN0b3IgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICAgICAgICB7eyAnVGltZSBpbnRlcnZhbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cInAtdC04XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LTEyXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidJbnRlcnZhbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cImludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGludGVydmFsVmFsdWUgb2YgSU5URVJWQUxfVkFMVUVTX0FSUlwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwiaW50ZXJ2YWxWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMU1tpbnRlcnZhbFZhbHVlXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gZGF0ZSBwaWNrZXJzIC0tPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgICA8bGVnZW5kPlxuICAgICAgICAgICAge3sgJ0RhdGUgcmFuZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgICAgPGM4eS1kYXRlLXJhbmdlLXBpY2tlcj48L2M4eS1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
|
|
384
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvZGF0YXBvaW50cy10YWJsZS9kYXRhcG9pbnRzLXRhYmxlLWNvbmZpZy9kYXRhcG9pbnRzLXRhYmxlLWNvbmZpZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtY29uZmlnL2RhdGFwb2ludHMtdGFibGUtY29uZmlnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBRUwsV0FBVyxFQUNYLFdBQVcsRUFDWCxNQUFNLEVBQ04sbUJBQW1CLEVBR25CLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUd0QixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBR0wsdUJBQXVCLEVBRXhCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixnQ0FBZ0MsRUFFakMsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFFTCxxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUV6Qix1QkFBdUIsRUFDdkIsbUJB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O3dCQUNWLHVCQUF1Qjt3QkFDdkIsd0JBQXdCO3dCQUN4QixhQUFhO3dCQUNiLG1CQUFtQjtxQkFDcEI7eU5BTVEsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBOZ0Zvcm0sXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvckZuLFxuICBWYWxpZGF0b3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX0xBQkVMUyxcbiAgQUdHUkVHQVRJT05fVkFMVUVTLFxuICBBR0dSRUdBVElPTl9WQUxVRVNfQVJSLFxuICBBZ2dyZWdhdGlvbk9wdGlvbixcbiAgQWdncmVnYXRpb25PcHRpb25TdGF0dXMsXG4gIENvcmVNb2R1bGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBXaWRnZXRDb25maWdDb21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2NvbnRleHQtZGFzaGJvYXJkJztcbmltcG9ydCB7XG4gIERhdGFwb2ludEF0dHJpYnV0ZXNGb3JtQ29uZmlnLFxuICBEYXRhcG9pbnRTZWxlY3Rvck1vZGFsT3B0aW9ucyxcbiAgRGF0YXBvaW50U2VsZWN0b3JNb2R1bGUsXG4gIEtQSURldGFpbHNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuaW1wb3J0IHtcbiAgZGF0ZVJhbmdlVmFsaWRhdG9yLFxuICBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUyxcbiAgVGltZVJhbmdlSW50ZXJ2YWxcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wb3BvdmVyJztcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGFwb2ludHNUYWJsZUNvbmZpZyxcbiAgREFURV9TRUxFQ1RJT05fTEFCRUxTLFxuICBEQVRFX1NFTEVDVElPTl9WQUxVRVMsXG4gIERBVEVfU0VMRUNUSU9OX1ZBTFVFU19BUlIsXG4gIERhdGVSYW5nZSxcbiAgREVGQVVMVF9DT1VOVERPV05fVkFMVUUsXG4gIElOVEVSVkFMX1ZBTFVFU19BUlIsXG4gIFJFRlJFU0hfSU5URVJWQUxfVkFMVUVTX0FSUixcbiAgVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFNcbn0gZnJvbSAnLi4vZGF0YXBvaW50cy10YWJsZS13aWRnZXQubW9kZWwnO1xuaW1wb3J0IHsgRGF0YXBvaW50c1RhYmxlU2VydmljZSB9IGZyb20gJy4uL2RhdGFwb2ludHMtdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vZGF0YXBvaW50cy10YWJsZS1jb25maWcuc2VydmljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5PbmVEYXRhcG9pbnRBY3RpdmUoKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBjb25zdCBkYXRhcG9pbnRzOiBLUElEZXRhaWxzW10gPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFkYXRhcG9pbnRzIHx8ICFkYXRhcG9pbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlRGF0YXBvaW50cyA9IGRhdGFwb2ludHMuZmlsdGVyKGRhdGFwb2ludCA9PiBkYXRhcG9pbnQuX19hY3RpdmUpO1xuXG4gICAgaWYgKGFjdGl2ZURhdGFwb2ludHMubGVuZ3RoID49IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4geyBleGFjdGx5T25lRGF0YXBvaW50TmVlZHNUb0JlQWN0aXZlOiB0cnVlIH07XG4gIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnRzLXRhYmxlLXZpZXctY29uZmlnJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludHMtdGFibGUtY29uZmlnLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvcmVNb2R1bGUsXG4gICAgRGF0YXBvaW50U2VsZWN0b3JNb2R1bGUsXG4gICAgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LFxuICAgIFBvcG92ZXJNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludHNUYWJsZVdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqICBEYXRhIHBvaW50cyB0YWJsZSB3aWRnZXQgY29uZmlnLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBEYXRhcG9pbnRzVGFibGVDb25maWc7XG5cbiAgcmVhZG9ubHkgQUdHUkVHQVRJT05fTEFCRUxTID0gQUdHUkVHQVRJT05fTEFCRUxTO1xuICByZWFkb25seSBEQVRFX1NFTEVDVElPTl9MQUJFTFMgPSBEQVRFX1NFTEVDVElPTl9MQUJFTFM7XG4gIC8vIFdpbGwgYmUgdW5jb21tZW50ZWQgaW4gTVRNLTYxOTIwXG4gIC8vIHJlYWRvbmx5IERFRkFVTFRfREFURV9TRUxFQ1RPUl9WQUxVRSA9IERBVEVfU0VMRUNUSU9OX1ZBTFVFUy5kYXNoYm9hcmRfY29udGV4dDtcbiAgcmVhZG9ubHkgREVGQVVMVF9EQVRFX1NFTEVDVE9SX1ZBTFVFID0gREFURV9TRUxFQ1RJT05fVkFMVUVTLmNvbmZpZztcbiAgcmVhZG9ubHkgREVGQVVMVF9JTlRFUlZBTF9WQUxVRSA9IFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmhvdXJzO1xuICByZWFkb25seSBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMUyA9IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTO1xuXG4gIHJlYWRvbmx5IEFHR1JFR0FUSU9OX1ZBTFVFU19BUlIgPSBBR0dSRUdBVElPTl9WQUxVRVNfQVJSO1xuICByZWFkb25seSBEQVRFX1NFTEVDVElPTl9WQUxVRVNfQVJSID0gREFURV9TRUxFQ1RJT05fVkFMVUVTX0FSUjtcbiAgcmVhZG9ubHkgSU5URVJWQUxfVkFMVUVTX0FSUiA9IElOVEVSVkFMX1ZBTFVFU19BUlI7XG4gIHJlYWRvbmx5IFJFRlJFU0hfSU5URVJWQUxfVkFMVUVTX0FSUiA9IFJFRlJFU0hfSU5URVJWQUxfVkFMVUVTX0FSUjtcblxuICBkYXRhcG9pbnRTZWxlY3Rpb25Db25maWc6IFBhcnRpYWw8RGF0YXBvaW50U2VsZWN0b3JNb2RhbE9wdGlvbnM+ID0ge307XG4gIGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zOiBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1cyA9IHt9O1xuICBkZWZhdWx0Rm9ybU9wdGlvbnM6IFBhcnRpYWw8RGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db25maWc+ID0ge1xuICAgIHNlbGVjdGFibGVDaGFydExpbmVUeXBlczogW10sXG4gICAgc2VsZWN0YWJsZUF4aXNUeXBlczogW10sXG4gICAgc2hvd1JlZFJhbmdlOiB0cnVlLFxuICAgIHNob3dZZWxsb3dSYW5nZTogdHJ1ZVxuICB9O1xuICBmb3JtR3JvdXA6IFJldHVyblR5cGU8RGF0YXBvaW50c1RhYmxlV2lkZ2V0Q29uZmlnQ29tcG9uZW50WydjcmVhdGVGb3JtJ10+O1xuICBpc1dpZGdldExpbmtlZFRvR2xvYmFsVGltZUNvbnRleHQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBkZWNpbWFsTGltaXRzID0ge1xuICAgIG51bWJlck9mRGVjaW1hbFBsYWNlc01pbjogMCxcbiAgICBudW1iZXJPZkRlY2ltYWxQbGFjZXNNYXg6IDEwXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlIHdoZW4gdGhlIHRpbWUgaW50ZXJ2YWwgc2VsZWN0b3IgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkIHByb2dyYW1tYXRpY2FsbHkuXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZCB0byB0cmFjayBjaGFuZ2VzIGluIHRoZSB0aW1lIGludGVydmFsIHNlbGVjdG9yXG4gICAqIHRoYXQgYXJlIG5vdCB0cmlnZ2VyZWQgYnkgZGlyZWN0IHVzZXIgaW50ZXJhY3Rpb24sIGJ1dCBieSB0aGUgYXBwbGljYXRpb24gaXRzZWxmLlxuICAgKlxuICAgKiBJbiBvdXIgY2FzZSwgdGhlIGRhdGUgc2VsZWN0b3IgYW5kIHRoZSBpbnRlcnZhbCBzZWxlY3RvciBhcmUgbGlua2VkLlxuICAgKiBTbywgd2hlbiBvbmUgb2YgdGhlbSBjaGFuZ2VzLCBpdCBhZmZlY3RzIHRoZSBvdGhlci5cbiAgICogRm9yIGV4YW1wbGUsIHNlbGVjdGluZyBcIkxhc3QgaG91clwiIGluIHRoZSBpbnRlcnZhbCBzZWxlY3RvciBzaG91bGQgYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIGRhdGUgcmFuZ2UgdG8gdGhlIGxhc3QgaG91ci5cbiAgICogQnV0IHdpdGhvdXQgdGhpcyBmbGFnLCBjaGFuZ2luZyB0aGUgZGF0ZSByYW5nZSB3b3VsZCBhbHNvIHVwZGF0ZSB0aGUgaW50ZXJ2YWwgc2VsZWN0b3IsIHJlc3VsdGluZyBpbiBcIkN1c3RvbSBkYXRlXCIgYmVpbmcgc2VsZWN0ZWQuXG4gICAqIFRoaXMgaGFwcGVucyBiZWNhdXNlIHRoZSBzeXN0ZW0gd291bGQgaW50ZXJwcmV0IHRoZSBiZWhhdmlvciB0aGlzIHdheS5cbiAgICovXG4gIHByaXZhdGUgaXNJbnRlcnZhbFNlbGVjdG9yQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRhcG9pbnRzVGFibGVTZXJ2aWNlOiBEYXRhcG9pbnRzVGFibGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZTogRGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGZvcm06IE5nRm9ybSxcbiAgICBwcml2YXRlIHdpZGdldENvbmZpZzogV2lkZ2V0Q29uZmlnQ29tcG9uZW50XG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBDb25kaXRpb24gd2lsbCBiZSByZW1vdmVkIGluIE1UTS02MTkyMFxuICAgIGlmICh0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnLmNvbnRleHQ/LmlkKSB7XG4gICAgICB0aGlzLmRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZy5jb250ZXh0QXNzZXQgPSB0aGlzLndpZGdldENvbmZpZz8uY29udGV4dDtcbiAgICB9XG4gICAgdGhpcy5pc1dpZGdldExpbmtlZFRvR2xvYmFsVGltZUNvbnRleHQgPSB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0O1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcblxuICAgIHRoaXMuaGFuZGxlQXV0b1JlZnJlc2hUb2dnbGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVJbnRlcnZhbFNlbGVjdG9yQ2hhbmdlcygpO1xuICAgIHRoaXMuaGFuZGxlRGF0ZVNlbGVjdG9yQ2hhbmdlcygpO1xuICAgIHRoaXMuaGFuZGxlR2xvYmFsRGF0ZVNlbGVjdG9yQ2hhbmdlcygpO1xuXG4gICAgdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucyA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UudXBkYXRlRGlzYWJsZWRTdGF0ZU9mQWdncmVnYXRpb25PcHRpb25FbnRyaWVzKFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS52YWx1ZSxcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZVRvLnZhbHVlLFxuICAgICAgICBBR0dSRUdBVElPTl9WQUxVRVNfQVJSXG4gICAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25CZWZvcmVTYXZlKGNvbmZpZz86IERhdGFwb2ludHNUYWJsZUNvbmZpZyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlLmFnZ3JlZ2F0aW9uID09PSBBR0dSRUdBVElPTl9WQUxVRVMubm9uZSB8fFxuICAgICAgKCF0aGlzLmZvcm1Hcm91cC52YWx1ZS5hZ2dyZWdhdGlvbiAmJiBjb25maWcuYWdncmVnYXRpb24gPT09IEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lKVxuICAgICkge1xuICAgICAgLy8gVGhlICdOT05FJyBhZ2dyZWdhdGlvbiB0eXBlIGlzIG5vdCBoYW5kbGVkIGJ5IGEgYmFja2VuZCwgc28gaXQgc2ltcGx5IG5lZWRzIHRvIGJlIGRlbGV0ZWQgdG8gZ2V0IGRhdGEgd2l0aG91dCBhZ2dyZWdhdGlvbi5cbiAgICAgIGRlbGV0ZSB0aGlzLmZvcm1Hcm91cC52YWx1ZS5hZ2dyZWdhdGlvbjtcbiAgICAgIGRlbGV0ZSBjb25maWcuYWdncmVnYXRpb247XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGltZUNvbnRleHQoY29uZmlnLCB0aGlzLmZvcm1Hcm91cC52YWx1ZS5nbG9iYWxEYXRlU2VsZWN0b3IpO1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCB0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XG4gIH1cblxuICB0b2dnbGVSZWZyZXNoSW50ZXJ2YWxDb250cm9sKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmlzQXV0b1JlZnJlc2hFbmFibGVkLnZhbHVlXG4gICAgICA/IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLnJlZnJlc2hJbnRlcnZhbC5kaXNhYmxlKClcbiAgICAgIDogdGhpcy5mb3JtR3JvdXAuY29udHJvbHMucmVmcmVzaEludGVydmFsLmVuYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUaW1lQ29udGV4dChjb25maWc6IERhdGFwb2ludHNUYWJsZUNvbmZpZywgc2VsZWN0ZWREYXRlQ29udGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgc3dpdGNoIChzZWxlY3RlZERhdGVDb250ZXh0KSB7XG4gICAgICAvLyBDb25kaXRpb24gd2lsbCBiZSByZW1vdmVkIGluIE1UTS02MTkyMFxuICAgICAgLy8gY2FzZSBEQVRFX1NFTEVDVElPTl9WQUxVRVMuZGFzaGJvYXJkX2NvbnRleHQ6XG4gICAgICAvLyAgIGNvbmZpZy5kaXNwbGF5RGF0ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgLy8gICBjb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCA9IHRydWU7XG4gICAgICAvLyAgIGJyZWFrO1xuICAgICAgY2FzZSBEQVRFX1NFTEVDVElPTl9WQUxVRVMudmlld19hbmRfY29uZmlnOlxuICAgICAgICBjb25maWcuZGlzcGxheURhdGVTZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICBjb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFURV9TRUxFQ1RJT05fVkFMVUVTLmNvbmZpZzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbmZpZy5kaXNwbGF5RGF0ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgICBjb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgICAvLyBXaGVuIHRoZSAnTk9ORScgYWdncmVnYXRpb24gaXMgcmVtb3ZlZCBhdCB0aGUgJ29uQmVmb3JlU2F2ZScgYmxvY2ssXG4gICAgLy8gYW5kIGEgR2xvYmFsIERhdGUgQ29udGV4dCBmb3JjZXMgd2lkZ2V0cyBhdXRvIHJlZnJlc2ggdG8gYmUgZW5hYmxlZFxuICAgIC8vIHRoZW4sIHRoZSBhZ2dyZWdhdGlvbiBzZWxlY3RvciB3aWxsIGJlIGVtcHR5IG9uIGluaXRpYWwgbG9hZC5cbiAgICB0aGlzLmNvbmZpZy5hZ2dyZWdhdGlvbiA9IHRoaXMuY29uZmlnLmFnZ3JlZ2F0aW9uID8/IEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lO1xuXG4gICAgdGhpcy5mb3JtLmZvcm0uYWRkQ29udHJvbCgnY29uZmlnJywgdGhpcy5mb3JtR3JvdXApO1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodGhpcy5jb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xuICAgIGNvbnN0IHsgZGF0ZUZyb20sIGRhdGVUbyB9ID0gdGhpcy5kYXRhcG9pbnRzVGFibGVTZXJ2aWNlLmNhbGN1bGF0ZURhdGVSYW5nZShcbiAgICAgIHRoaXMuREVGQVVMVF9JTlRFUlZBTF9WQUxVRVxuICAgICk7XG4gICAgY29uc3QgaXNMZWdhY3lXaWRnZXQgPSB0aGlzLmNvbmZpZy5yZWFsdGltZSAhPT0gdW5kZWZpbmVkICYmICF0aGlzLmNvbmZpZy5kZWNpbWFsUGxhY2VzO1xuXG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICB7XG4gICAgICAgIGFnZ3JlZ2F0aW9uOiBuZXcgRm9ybUNvbnRyb2woe1xuICAgICAgICAgIHZhbHVlOiBBR0dSRUdBVElPTl9WQUxVRVMubm9uZSBhcyBBZ2dyZWdhdGlvbk9wdGlvbixcbiAgICAgICAgICBkaXNhYmxlZDogIXRoaXMuaXNBdXRvUmVmZXJzaERpc2FibGVkKClcbiAgICAgICAgfSksXG4gICAgICAgIGRhdGFwb2ludHM6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChuZXcgQXJyYXk8S1BJRGV0YWlscz4oKSwgW1xuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoMSksXG4gICAgICAgICAgbWluT25lRGF0YXBvaW50QWN0aXZlKClcbiAgICAgICAgXSksXG4gICAgICAgIGdsb2JhbERhdGVTZWxlY3RvcjogbmV3IEZvcm1Db250cm9sKFxuICAgICAgICAgIGlzTGVnYWN5V2lkZ2V0XG4gICAgICAgICAgICA/IHRoaXMuZGV0ZXJtaW5lR2xvYmFsRGF0ZVNlbGVjdG9yVmFsdWUoKVxuICAgICAgICAgICAgOiB0aGlzLkRFRkFVTFRfREFURV9TRUxFQ1RPUl9WQUxVRVxuICAgICAgICApLFxuICAgICAgICBkYXRlRnJvbTogbmV3IEZvcm1Db250cm9sKGRhdGVGcm9tKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRm9ybUNvbnRyb2woZGF0ZVRvKSxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogW1xuICAgICAgICAgIDIsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWluKHRoaXMuZGVjaW1hbExpbWl0cy5udW1iZXJPZkRlY2ltYWxQbGFjZXNNaW4pLFxuICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgodGhpcy5kZWNpbWFsTGltaXRzLm51bWJlck9mRGVjaW1hbFBsYWNlc01heCksXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bMC05XSskJylcbiAgICAgICAgICBdXG4gICAgICAgIF0sXG4gICAgICAgIGludGVydmFsOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5ERUZBVUxUX0lOVEVSVkFMX1ZBTFVFIGFzIFRpbWVSYW5nZUludGVydmFsKSxcbiAgICAgICAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IGlzTGVnYWN5V2lkZ2V0ID8gdGhpcy5jb25maWcucmVhbHRpbWUgOiBbdHJ1ZV0sXG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbDogbmV3IEZvcm1Db250cm9sKHtcbiAgICAgICAgICB2YWx1ZTogREVGQVVMVF9DT1VOVERPV05fVkFMVUUsXG4gICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNBdXRvUmVmZXJzaERpc2FibGVkKClcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICB7IHZhbGlkYXRvcnM6IGRhdGVSYW5nZVZhbGlkYXRvciB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lR2xvYmFsRGF0ZVNlbGVjdG9yVmFsdWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jb25maWcuZGlzcGxheURhdGVTZWxlY3Rpb24gJiYgIXRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQpIHtcbiAgICAgIHJldHVybiBEQVRFX1NFTEVDVElPTl9WQUxVRVMudmlld19hbmRfY29uZmlnO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb25maWcuZGlzcGxheURhdGVTZWxlY3Rpb24gJiYgIXRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQpIHtcbiAgICAgIHJldHVybiBEQVRFX1NFTEVDVElPTl9WQUxVRVMuY29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNBdXRvUmVmZXJzaERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzSW5pdGlhbFdpZGdldENyZWF0aW9uID1cbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29uZmlnKS5sZW5ndGggPT09IDEgJiYgdGhpcy5jb25maWdbJ3NldHRpbmdzJ107XG5cbiAgICBpZiAoaXNJbml0aWFsV2lkZ2V0Q3JlYXRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0xlZ2FjeVdpZGdldFJlYWx0aW1lTm90QWN0aXZlID1cbiAgICAgICF0aGlzLmNvbmZpZy5yZWFsdGltZSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmRlY2ltYWxQbGFjZXMgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZDtcblxuICAgIGlmIChpc0xlZ2FjeVdpZGdldFJlYWx0aW1lTm90QWN0aXZlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXMuY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2hhbmdlcyB0byB0aGUgYXV0by1yZWZyZXNoIHRvZ2dsZSBjb250cm9sIGFuZCB1cGRhdGVzIHRoZSBhZ2dyZWdhdGlvbiBjb250cm9sIGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBzdWJzY3JpYmVzIHRvIHRoZSB2YWx1ZSBjaGFuZ2VzIG9mIHRoZSBhdXRvLXJlZnJlc2ggdG9nZ2xlIGZvcm0gY29udHJvbC5cbiAgICogV2hlbiBhdXRvLXJlZnJlc2ggaXMgZW5hYmxlZCwgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wncyB2YWx1ZSBpcyBzZXQgdG8gJ25vbmUnIGFuZCB0aGUgY29udHJvbCBpc1xuICAgKiB2aXN1YWxseSBkaXNhYmxlZCAoYnV0IG5vdCBwcm9ncmFtbWF0aWNhbGx5IGRpc2FibGVkIHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgc2F2ZWQpLlxuICAgKiBXaGVuIGF1dG8tcmVmcmVzaCBpcyBkaXNhYmxlZCwgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wgaXMgZW5hYmxlZC5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlQXV0b1JlZnJlc2hUb2dnbGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmlzQXV0b1JlZnJlc2hFbmFibGVkLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb247XG4gICAgICAgIGlmIChpc0F1dG9SZWZyZXNoRW5hYmxlZCkge1xuICAgICAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC5zZXRWYWx1ZShBR0dSRUdBVElPTl9WQUxVRVMubm9uZSk7XG4gICAgICAgICAgLy8gRG8gbm90IGRpc2FibGUgdGhlIGNvbnRyb2wgcHJvZ3JhbW1hdGljYWxseSB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNhdmVkLlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIGluIHRoZSBpbnRlcnZhbCBzZWxlY3RvciBmb3JtIGNvbnRyb2wuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUludGVydmFsU2VsZWN0b3JDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmludGVydmFsLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWRJbnRlcnZhbDogVGltZVJhbmdlSW50ZXJ2YWwpID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGVkSW50ZXJ2YWwgPT09IFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmN1c3RvbSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZU5vbkN1c3RvbUludGVydmFsKHNlbGVjdGVkSW50ZXJ2YWwpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5vbkN1c3RvbUludGVydmFsKHNlbGVjdGVkSW50ZXJ2YWw6IFRpbWVSYW5nZUludGVydmFsKTogdm9pZCB7XG4gICAgdGhpcy5pc0ludGVydmFsU2VsZWN0b3JDaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2Uoc2VsZWN0ZWRJbnRlcnZhbCk7XG4gICAgdGhpcy51cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlQWdncmVnYXRpb25JZkF1dG9SZWZyZXNoRGlzYWJsZWQoc2VsZWN0ZWRJbnRlcnZhbCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGVSYW5nZShzZWxlY3RlZEludGVydmFsOiBUaW1lUmFuZ2VJbnRlcnZhbCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGVSYW5nZTogRGF0ZVJhbmdlID0gdGhpcy5kYXRhcG9pbnRzVGFibGVTZXJ2aWNlLmNhbGN1bGF0ZURhdGVSYW5nZShzZWxlY3RlZEludGVydmFsKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlVG8uc2V0VmFsdWUoZGF0ZVJhbmdlLmRhdGVUbyk7XG5cbiAgICAvLyBNVE0tNjEzNTFcbiAgICAvLyBVc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIHF1ZXVlIHRoZSBkYXRlRnJvbSB1cGRhdGUuXG4gICAgLy8gVGhpcyBwcmV2ZW50cyB0aW1pbmcgaXNzdWVzIHdoZXJlIHJhcGlkIHNldFZhbHVlIGNhbGxzIG1pZ2h0XG4gICAgLy8gY2F1c2UgdGhlIHZpZXcgdG8gZ28gb3V0IG9mIHN5bmMgd2l0aCBmb3JtIGNvbnRyb2wgdmFsdWVzLFxuICAgIC8vIGVzcGVjaWFsbHkgZHVyaW5nIHRoZSBmaXJzdCBjaGFuZ2UgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXG4gICAgLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAvKipcbiAgICAgKiBXaXRob3V0IHRoaXMgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIG9yIHNldFRpbWVvdXQsIGRhdGVGcm9tIHdvbid0IGNoYW5nZSB0byBhIGNvcnJlY3QgdmFsdWUgYWZ0ZXIgZmlyc3Qgc2VsZWN0b3IgY2hhbmdlLlxuICAgICAqIFdoZW4gZm9ybSBpcyBzYXZlZCBpdCBzYXZlcyB3aXRoIGEgY29ycmVjdCB2YWx1ZSwgZXZlbiB3aXRob3V0IHdpdGggdGhpcyBmaXguXG4gICAgICogSG93IHRvIHJlcHJvZHVjZTpcbiAgICAgKiAxLiBzZXQgZGF0ZSB2YWx1ZXMgdG8gZS5nLjogMDEuMDUuMjAyNC0zMC4wNS4yMDI0IGFuZCBzYXZlIGl0XG4gICAgICogMi4gcmVvcGVuIGEgY29uZmlnIGFuZCBzd2l0Y2ggaW50ZXJ2YWwgdG8gbGFzdCBtb250aFxuICAgICAqL1xuICAgIC8vIFRoaXMgZml4IGJyYWtlcyBhIGxvZ2ljIGJlaGluZCBkaXNhYmxpbmcgbm9uIGF2YWlsYWJsZSBhZ2dyZWdhdGlvbnMuXG4gICAgLy8gRm9ybSB3aWxsIGJlIHN0aWxsIHNhdmVkIHdpdGggY29ycmVjdCBkYXRlIHZhbHVlLCBvbmx5IHZpZXcgaXMgb3V0IG9mIGEgc3luYy5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS5zZXRWYWx1ZShkYXRlUmFuZ2UuZGF0ZUZyb20pO1xuICAgIHRoaXMuaXNJbnRlcnZhbFNlbGVjdG9yQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucyA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UudXBkYXRlRGlzYWJsZWRTdGF0ZU9mQWdncmVnYXRpb25PcHRpb25FbnRyaWVzKFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS52YWx1ZSxcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZVRvLnZhbHVlLFxuICAgICAgICBBR0dSRUdBVElPTl9WQUxVRVNfQVJSXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVBZ2dyZWdhdGlvbklmQXV0b1JlZnJlc2hEaXNhYmxlZChzZWxlY3RlZEludGVydmFsOiBUaW1lUmFuZ2VJbnRlcnZhbCk6IHZvaWQge1xuICAgIGNvbnN0IGlzQXV0b1JlZnJlc2hEaXNhYmxlZCA9ICF0aGlzLmZvcm1Hcm91cC5jb250cm9scy5pc0F1dG9SZWZyZXNoRW5hYmxlZC52YWx1ZTtcbiAgICBpZiAoaXNBdXRvUmVmcmVzaERpc2FibGVkKSB7XG4gICAgICB0aGlzLnNldEFnZ3JlZ2F0aW9uVmFsdWUoc2VsZWN0ZWRJbnRlcnZhbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRBZ2dyZWdhdGlvblZhbHVlKGludGVydmFsOiBUaW1lUmFuZ2VJbnRlcnZhbCk6IHZvaWQge1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uO1xuXG4gICAgY29uc3QgbmV3QWdncmVnYXRpb25WYWx1ZSA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UuZGV0ZXJtaW5lQWdncmVnYXRpb25WYWx1ZShpbnRlcnZhbCk7XG4gICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKG5ld0FnZ3JlZ2F0aW9uVmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2hhbmdlcyBpbiB0aGUgZGF0ZSBzZWxlY3RvciBmb3JtIGNvbnRyb2wuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZURhdGVTZWxlY3RvckNoYW5nZXMoKTogdm9pZCB7XG4gICAgbWVyZ2UoXG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS52YWx1ZUNoYW5nZXMsXG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlVG8udmFsdWVDaGFuZ2VzXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhhbmRsZURhdGVDaGFuZ2UoKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbnRlcnZhbFNlbGVjdG9yQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnZhbENvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5pbnRlcnZhbDtcbiAgICBpZiAoaW50ZXJ2YWxDb250cm9sLnZhbHVlID09PSBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy5jdXN0b20pIHtcbiAgICAgIHRoaXMuaGFuZGxlQ3VzdG9tSW50ZXJ2YWxEYXRlQ2hhbmdlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0SW50ZXJ2YWxUb0N1c3RvbShpbnRlcnZhbENvbnRyb2wpO1xuICAgIH1cbiAgICB0aGlzLnNldFRvRmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvbk9wdGlvbklmQ3VycmVudEFnZ3JlZ2F0aW9uSXNEaXNhYmxlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDdXN0b21JbnRlcnZhbERhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbnRlcnZhbFRvQ3VzdG9tKGludGVydmFsQ29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XG4gICAgaW50ZXJ2YWxDb250cm9sLnNldFZhbHVlKFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmN1c3RvbSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIGluIHRoZSBnbG9iYWwgZGF0ZSBzZWxlY3RvciBmb3JtIGNvbnRyb2wuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUdsb2JhbERhdGVTZWxlY3RvckNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZ2xvYmFsRGF0ZVNlbGVjdG9yLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgLy8gQ29uZGl0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBNVE0tNjE5MjBcbiAgICAgICAgLy8gaWYgKHNlbGVjdGVkID09PSBEQVRFX1NFTEVDVElPTl9WQUxVRVMuZGFzaGJvYXJkX2NvbnRleHQpIHtcbiAgICAgICAgLy8gdGhpcy5oYW5kbGVEYXNoYm9hcmRDb250ZXh0KCk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlTm9uRGFzaGJvYXJkQ29udGV4dCgpO1xuICAgICAgICAvLyB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGFzaGJvYXJkQ29udGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzV2lkZ2V0TGlua2VkVG9HbG9iYWxUaW1lQ29udGV4dCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5vbkRhc2hib2FyZENvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1dpZGdldExpbmtlZFRvR2xvYmFsVGltZUNvbnRleHQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzQ29uZmlnU2F2ZWRXaXRob3V0RGFzaGJvYXJkVGltZU9wdGlvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVBZ2dyZWdhdGlvbklmTmVjZXNzYXJ5KCk7XG4gICAgdGhpcy5zZXRJbnRlcnZhbFRvQ3VzdG9tKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmludGVydmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDb25maWdTYXZlZFdpdGhvdXREYXNoYm9hcmRUaW1lT3B0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQWdncmVnYXRpb25JZk5lY2Vzc2FyeSgpOiB2b2lkIHtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbkNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbjtcbiAgICBjb25zdCBpc0Rhc2hib2FyZFRpbWVPcHRpb25TZXRBZ2dyZWdhdGlvblRvTnVsbCA9ICFhZ2dyZWdhdGlvbkNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoaXNEYXNoYm9hcmRUaW1lT3B0aW9uU2V0QWdncmVnYXRpb25Ub051bGwpIHtcbiAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC5zZXRWYWx1ZShBR0dSRUdBVElPTl9WQUxVRVMubm9uZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wgdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSAobm9uLWRpc2FibGVkKSBvcHRpb24gaWYgdGhlIGN1cnJlbnQgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZDpcbiAgICogLSBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wuXG4gICAqIC0gQ2hlY2tzIGlmIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uIG9wdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogLSBJZiB0aGUgY3VycmVudCBvcHRpb24gaXMgZGlzYWJsZWQsIHNldHMgdGhlIGNvbnRyb2wgdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSAobm9uLWRpc2FibGVkKSBvcHRpb24gYmFzZWQgb24gdGhlIGZvbGxvd2luZyBvcmRlcjpcbiAgICogICAtIElmIHRoZSBjdXJyZW50IHZhbHVlIGlzIGBEQUlMWWAsIGl0IHN3aXRjaGVzIHRvIGBIT1VSTFlgIGlmIGl0J3Mgbm90IGRpc2FibGVkLCBvdGhlcndpc2UgdG8gYE1JTlVURUxZYCBpZiBgSE9VUkxZYCBpcyBhbHNvIGRpc2FibGVkLlxuICAgKiAgIC0gSWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYEhPVVJMWWAsIGl0IHN3aXRjaGVzIHRvIGBNSU5VVEVMWWAgaWYgaXQncyBub3QgZGlzYWJsZWQuXG4gICAqICAgLSBJZiBhbGwgb3B0aW9ucyBhcmUgZGlzYWJsZWQsIGl0IHNldHMgdGhlIHZhbHVlIHRvIGBOT05FYC5cbiAgICpcbiAgICogVGhlIGRpc2FibGVkIHN0YXRlIGlzIHN0b3JlZCBpbiB0aGUgYGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zYCBvYmplY3QsXG4gICAqIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGFnZ3JlZ2F0aW9uIHZhbHVlIGFuZCB0aGUgdmFsdWUgaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBUaGUgYEFHR1JFR0FUSU9OX1ZBTFVFU2Agb2JqZWN0IGRlZmluZXMgdGhlIHBvc3NpYmxlIGFnZ3JlZ2F0aW9uIHZhbHVlcy5cbiAgICovXG4gIC8vIFRPRE8gc2FtZSBtZXRob2QgaXMgaW4gZGF0YXBvaW50cyBleHBvcnQgY29tcG9uZW50LiBDb25zaWRlciBtb3ZpbmcgaXQgdG8gYSBzaGFyZWQgc2VydmljZSB3aGVuIERQVCB3aWxsIGJlIGludGVncmF0aW5nIHdpdGggTVRNLTU5Njg5LlxuICAvLyBUT0RPICdkZXRlcm1pbmVOZXdBZ2dyZWdhdGlvblZhbHVlJyB3aWxsIGJlIGEgc2hhcmVkIG1ldGhvZC5cbiAgLy8gSW50ZWdyYXRpb24gdGFzazogTVRNLTYwMjIxXG4gIHByaXZhdGUgc2V0VG9GaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uT3B0aW9uSWZDdXJyZW50QWdncmVnYXRpb25Jc0Rpc2FibGVkKCk6IHZvaWQge1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGFnZ3JlZ2F0aW9uQ29udHJvbC52YWx1ZTtcblxuICAgIGNvbnN0IG5ld0FnZ3JlZ2F0aW9uVmFsdWUgPSB0aGlzLmRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UuZGV0ZXJtaW5lTmV3QWdncmVnYXRpb25WYWx1ZShcbiAgICAgIGN1cnJlbnRWYWx1ZSxcbiAgICAgIHRoaXMuZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYgKG5ld0FnZ3JlZ2F0aW9uVmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKG5ld0FnZ3JlZ2F0aW9uVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtbC0yNCBwLXItMjRcIj5cbiAgPGZvcm1cbiAgICBjbGFzcz1cIm5vLWNhcmQtY29udGV4dFwiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICA+XG4gICAgPCEtLSA8ZGF0YXBvaW50cy1zZWxlY3Rvcj4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDwhLS0gZ2xvYmFsLXRpbWUtY29udGV4dC1zZWxlY3RvciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbS1iLTAgcC1iLTE2IHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC10LTRcIlxuICAgICAgICAgICAgZm9yPVwiZGF0ZVNlbGVjdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ0RhdGUgc2VsZWN0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3BvcG92ZXJdPVwicG9wb3ZlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcG9wb3ZlclRlbXBsYXRlPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBDaG9vc2UgaG93IHRvIHNlbGVjdCBhIGRhdGUgcmFuZ2UsIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm0tbC0wIHAtbC04IG0tdC04IG0tYi0wXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBXaWxsIGJlIHJlLWVuYWJsZWQgaW4gTVRNLTYxOTIwIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxpPlxuICAgICAgICAgICAgICAgICAgPGI+RGFzaGJvYXJkIHRpbWUgcmFuZ2U6PC9iPlxuICAgICAgICAgICAgICAgICAgcmVzdHJpY3RzIGRhdGUgc2VsZWN0aW9uIHRvIHRoZSBnbG9iYWwgZGFzaGJvYXJkIGNvbmZpZ3VyYXRpb24gb25seVxuICAgICAgICAgICAgICAgIDwvbGk+IC0tPlxuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgIDxiPldpZGdldCBjb25maWd1cmF0aW9uOjwvYj5cbiAgICAgICAgICAgICAgICAgIHJlc3RyaWN0cyB0aGUgZGF0ZSBzZWxlY3Rpb24gb25seSB0byB0aGUgd2lkZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgIDxiPldpZGdldCBhbmQgd2lkZ2V0IGNvbmZpZ3VyYXRpb246PC9iPlxuICAgICAgICAgICAgICAgICAgcmVzdHJpY3RzIHRoZSBkYXRlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0IHZpZXcgYW5kIHdpZGdldCBjb25maWd1cmF0aW9uIG9ubHlcbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LTEyXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidEYXRlIHNlbGVjdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidEYXRlIHNlbGVjdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBpZD1cImdsb2JhbERhdGVTZWxlY3RvclwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImdsb2JhbERhdGVTZWxlY3RvclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YVNlbGVjdGlvblZhbHVlIG9mIERBVEVfU0VMRUNUSU9OX1ZBTFVFU19BUlJcIlxuICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cImRhdGFTZWxlY3Rpb25WYWx1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBEQVRFX1NFTEVDVElPTl9MQUJFTFNbZGF0YVNlbGVjdGlvblZhbHVlXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8Yzh5LWRhdGFwb2ludC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICAgIGNsYXNzPVwiYmctaW5oZXJpdCBzZXBhcmF0b3ItdG9wIHAtdC0xNiBkLWJsb2NrXCJcbiAgICAgICAgICBsaXN0VGl0bGU9XCJ7eyAnRGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBuYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgICAgW2RlZmF1bHRGb3JtT3B0aW9uc109XCJkZWZhdWx0Rm9ybU9wdGlvbnNcIlxuICAgICAgICAgIFtjb25maWddPVwiZGF0YXBvaW50U2VsZWN0aW9uQ29uZmlnXCJcbiAgICAgICAgICBbbWluQWN0aXZlQ291bnRdPVwiMVwiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgID48L2M4eS1kYXRhcG9pbnQtc2VsZWN0aW9uLWxpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1dpZGdldExpbmtlZFRvR2xvYmFsVGltZUNvbnRleHRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDwhLS0gaW50ZXJ2YWwgc2VsZWN0b3IgLS0+XG4gICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAge3sgJ0F1dG8gcmVmcmVzaCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgJ0NoYW5nZSB0aGUgc3RhdGUgb2YgaW50ZXJ2YWwgYXV0b21hdGljIHJlZnJlc2ggYW5kIHNldCB0aGUgcmVmcmVzaCBmcmVxdWVuY3kuJ1xuICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0xNiBmb3JtLWdyb3VwLXNtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtNCBtLXQtOCBtLWItOCBhLWktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwicmVmcmVzaFRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlzQXV0b1JlZnJlc2hFbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlzQXV0b1JlZnJlc2hFbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUmVmcmVzaEludGVydmFsQ29udHJvbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyAnQXV0byByZWZyZXNoJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLWItMFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcj1cInJlZnJlc2hJbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdJbnRlcnZhbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LTEyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1JlZnJlc2ggaW50ZXJ2YWwgaW4gc2Vjb25kcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwicmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJlZnJlc2hJbnRlcnZhbCBvZiBSRUZSRVNIX0lOVEVSVkFMX1ZBTFVFU19BUlJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwicmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAne3sgc2Vjb25kcyB9fSBzJyB8IHRyYW5zbGF0ZTogeyBzZWNvbmRzOiByZWZyZXNoSW50ZXJ2YWwgLyAxMDAwIH0gfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIGRlY2ltYWwgaW5wdXQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldFwiPlxuICAgICAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICAgICAge3sgJ0RlY2ltYWwgcGxhY2VzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLXQtOFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImRlY2ltYWxQbGFjZXNcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlY2ltYWxQbGFjZXNcIlxuICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gYWdncmVnYXRpb24gc2VsZWN0b3IgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzV2lkZ2V0TGlua2VkVG9HbG9iYWxUaW1lQ29udGV4dFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICAgICAgICB7eyAnQWdncmVnYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLXQtOFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZyBiZWxvdyBbYXR0ci5kaXNhYmxlZF0gZW5zdXJlcyB0aGF0IHRoZSBjb250cm9sIGlzIHZpc3VhbGx5IGRpc2FibGVkIGFuZCB1c2VyIGludGVyYWN0aW9uIGlzIHByZXZlbnRlZCxcbiAgICAgICAgICAgICAgIHdoaWxlIHN0aWxsIGFsbG93aW5nIHRoZSB2YWx1ZSB0byBiZSB1cGRhdGVkIGFuZCBzYXZlZCBjb3JyZWN0bHkgaW4gdGhlIGZvcm0uXG4gICAgICAgICAgICAgICBUaGlzIHNvbHV0aW9uIGNvdmVycyB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciBlbmFibGVzIGF1dG8tcmVmcmVzaCwgaW4gd2hpY2ggY2FzZSBhZ2dyZWdhdGlvbiBtdXN0IGJlIHNldCB0byBOT05FLiAtLT5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC0xMlwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQWdncmVnYXRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZ2dyZWdhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFnZ3JlZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZm9ybUdyb3VwLnZhbHVlLmlzQXV0b1JlZnJlc2hFbmFibGVkID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFnZ3JlZ2F0aW9uVmFsdWUgb2YgQUdHUkVHQVRJT05fVkFMVUVTX0FSUlwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwiYWdncmVnYXRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zW2FnZ3JlZ2F0aW9uVmFsdWVdXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IEFHR1JFR0FUSU9OX0xBQkVMU1thZ2dyZWdhdGlvblZhbHVlXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIHRpbWUgaW50ZXJ2YWwgc2VsZWN0b3IgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICAgICAgICB7eyAnVGltZSBpbnRlcnZhbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cInAtdC04XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LTEyXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidJbnRlcnZhbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cImludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGludGVydmFsVmFsdWUgb2YgSU5URVJWQUxfVkFMVUVTX0FSUlwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwiaW50ZXJ2YWxWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMU1tpbnRlcnZhbFZhbHVlXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gZGF0ZSBwaWNrZXJzIC0tPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgICA8bGVnZW5kPlxuICAgICAgICAgICAge3sgJ0RhdGUgcmFuZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgICAgPGM4eS1kYXRlLXJhbmdlLXBpY2tlcj48L2M4eS1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpLXdpZGdldC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2twaS9rcGktd2lkZ2V0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLUElEZXRhaWxzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgU3VwcG9ydGVkSWNvbnNTdWdnZXN0aW9ucyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaWNvbi1zZWxlY3Rvci9pY29ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgS3BpV2lkZ2V0Q29uZmlnIHtcbiAgZGF0YXBvaW50czogS1BJRGV0YWlsc1tdO1xuICBpY29uPzogU3VwcG9ydGVkSWNvbnNTdWdnZXN0aW9ucztcbiAgc2hvd1RpbWVzdGFtcD86IGJvb2xlYW47XG4gIHNob3dUcmVuZD86IGJvb2xlYW47XG4gIHNob3dJY29uPzogYm9vbGVhbjtcbiAgbnVtYmVyT2ZEZWNpbWFsUGxhY2VzPzogbnVtYmVyO1xuICBmb250U2l6ZT86IG51bWJlcjtcbn1cbiJdfQ==
|
|
@@ -1006,7 +1006,7 @@ class AlarmInfoComponent {
|
|
|
1006
1006
|
this.router.navigate(backLink, { queryParamsHandling: 'preserve' });
|
|
1007
1007
|
}
|
|
1008
1008
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmInfoComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i1$1.Router }, { token: i3.ContextRouteService }, { token: AlarmsViewService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1009
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmInfoComponent, selector: "c8y-alarm-info", ngImport: i0, template: "<ng-container *ngIf=\"!isContextRoute\">\n <c8y-title>{{ TITLE | translate }}</c8y-title>\n</ng-container>\n\n<div\n class=\"inner-scroll split-view__detail split-view__detail--selected\"\n *ngIf=\"selectedAlarm$ | async\"\n>\n <div class=\"sticky-top bg-component\">\n <div class=\"card-header gap-16 d-block-xs d-block-sm p-l-24 p-r-24 p-t-16 separator\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n [title]=\"'Back' | translate\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n\n <div class=\"flex-no-shrink a-s-start\"></div>\n <div class=\"flex-grow d-col\">\n <div\n class=\"text-break-word flex-grow text-16\"\n data-cy=\"c8y-alarms-info--title\"\n >\n {{ (selectedAlarm$ | async)?.text | translate }}\n </div>\n </div>\n </div>\n <div class=\"p-relative\">\n <c8y-tabs-outlet\n outletName=\"alarms\"\n orientation=\"horizontal\"\n ></c8y-tabs-outlet>\n </div>\n <div class=\"card-block overflow-visible p-l-24 p-r-24\">\n <c8y-alarm-details [selectedAlarm]=\"selectedAlarm$ | async\"></c8y-alarm-details>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen", "outletName", "context", "hasHeader"] }, { kind: "component", type: AlarmDetailsComponent, selector: "c8y-alarm-details", inputs: ["selectedAlarm"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
1009
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmInfoComponent, selector: "c8y-alarm-info", ngImport: i0, template: "<ng-container *ngIf=\"!isContextRoute\">\n <c8y-title>{{ TITLE | translate }}</c8y-title>\n</ng-container>\n\n<div\n class=\"inner-scroll split-view__detail split-view__detail--selected\"\n *ngIf=\"selectedAlarm$ | async\"\n>\n <div class=\"sticky-top bg-component\">\n <div class=\"card-header gap-16 d-block-xs d-block-sm p-l-24 p-r-24 p-t-16 separator\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n [title]=\"'Back' | translate\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span>{{ 'Back' | translate }}</span>\n </button>\n\n <div class=\"flex-no-shrink a-s-start\"></div>\n <div class=\"flex-grow d-col\">\n <div\n class=\"text-break-word flex-grow text-16\"\n data-cy=\"c8y-alarms-info--title\"\n >\n {{ (selectedAlarm$ | async)?.text | translate }}\n </div>\n </div>\n </div>\n <div class=\"p-relative\">\n <c8y-tabs-outlet\n outletName=\"alarms\"\n orientation=\"horizontal\"\n ></c8y-tabs-outlet>\n </div>\n <div class=\"card-block overflow-visible p-l-24 p-r-24\">\n <c8y-alarm-details [selectedAlarm]=\"selectedAlarm$ | async\"></c8y-alarm-details>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen", "outletName", "context", "openFirstTab", "hasHeader"] }, { kind: "component", type: AlarmDetailsComponent, selector: "c8y-alarm-details", inputs: ["selectedAlarm"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
1010
1010
|
}
|
|
1011
1011
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmInfoComponent, decorators: [{
|
|
1012
1012
|
type: Component,
|