@eo-sdk/client 10.7.0-rc.5 → 11.0.0-beta.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/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/iframe-widget/iframe-widget.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-widget.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-widget.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.d.ts +1 -1
- package/app/eo-client/dashboard/widgets/search-widget/search-widget.component.d.ts +1 -1
- package/app/eo-client/stored-queries-state/stored-queries-state.component.d.ts.map +1 -1
- package/app/eo-framework/accordion/simple-accordion/simple-accordion.component.d.ts +1 -1
- package/app/eo-framework/actions/action.module.d.ts.map +1 -1
- package/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/add-subscription-action/add-subscription/add-subscription.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/cancel-signing-action/cancel-signing/cancel-signing.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/clipboard/clipboard-object-action/clipboard-object-action.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/custom-actions/custom-actions.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/delete-action/delete/delete.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/delete-content-action/delete-content/delete-content.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/download-action/download-object-action/download-object-action.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/email/email/email.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/finalize/finalize-object-action/finalize-object-action.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/open-document-action/open-document-action.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/signature-action/sequence-list-item/sequence-list-item.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/workflow-action/simple-workflow-action.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/workflow-action/workflow/workflow.component.d.ts +1 -1
- package/app/eo-framework/actions/actions/workflow-action/workflow-action.component.d.ts +1 -1
- package/app/eo-framework/app-shell/app-bar/app-bar.component.d.ts +1 -1
- package/app/eo-framework/app-shell/app-bar/context-search/context-search.component.d.ts +1 -1
- package/app/eo-framework/app-shell/app-bar/user-avatar-overlay/user-avatar-overlay.component.d.ts +1 -1
- package/app/eo-framework/cta/component/cta.component.d.ts +1 -1
- package/app/eo-framework/form-elements/checkbox/checkbox.component.d.ts +1 -1
- package/app/eo-framework/form-elements/codesystem/codesystem.component.d.ts +1 -1
- package/app/eo-framework/form-elements/date/date.component.d.ts +1 -1
- package/app/eo-framework/form-elements/date/year-range/year-range.directive.d.ts +1 -1
- package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts +1 -1
- package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts +1 -1
- package/app/eo-framework/form-elements/form-input/form-input.component.d.ts +1 -1
- package/app/eo-framework/form-elements/form-input/input-focus/input-focus.directive.d.ts +1 -1
- package/app/eo-framework/form-elements/id-reference/id-reference.component.d.ts +1 -1
- package/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.d.ts +1 -1
- package/app/eo-framework/form-elements/id-reference/reference-finder-entry/reference-finder-entry.component.d.ts +1 -1
- package/app/eo-framework/form-elements/number/number.component.d.ts +1 -1
- package/app/eo-framework/form-elements/number-range/number-range.component.d.ts +1 -1
- package/app/eo-framework/form-elements/organization/organization.component.d.ts +1 -1
- package/app/eo-framework/form-elements/password/password.component.d.ts +1 -1
- package/app/eo-framework/form-elements/reference/reference.component.d.ts +1 -1
- package/app/eo-framework/form-elements/string/string.component.d.ts +1 -1
- package/app/eo-framework/grid/column-configurator/column-configurator.component.d.ts +1 -1
- package/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.d.ts +1 -1
- package/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.d.ts.map +1 -1
- package/app/eo-framework/grid/extensions/filter/abstract-filter.component.d.ts +3 -3
- package/app/eo-framework/grid/extensions/filter/abstract-filter.component.d.ts.map +1 -1
- package/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.d.ts +1 -1
- package/app/eo-framework/grid/extensions/filter/setFilters/set-filter.component.d.ts +1 -1
- package/app/eo-framework/grid/extensions/filter/text/text-filter.component.d.ts +3 -3
- package/app/eo-framework/grid/extensions/filter/text/text-filter.component.d.ts.map +1 -1
- package/app/eo-framework/grid/extensions/pagination/pagination.component.d.ts +1 -1
- package/app/eo-framework/grid/extensions/quick-filter/quick-filter.component.d.ts +1 -1
- package/app/eo-framework/grid/extensions/reset-filter/reset-filter.component.d.ts +1 -1
- package/app/eo-framework/grid/extensions/total-count/total-count.component.d.ts +1 -1
- package/app/eo-framework/grid/filters/datetime-filter.component.d.ts.map +1 -1
- package/app/eo-framework/grid/grid.component.d.ts +6 -17
- package/app/eo-framework/grid/grid.component.d.ts.map +1 -1
- package/app/eo-framework/grid/grid.module.d.ts +0 -3
- package/app/eo-framework/grid/grid.module.d.ts.map +1 -1
- package/app/eo-framework/grid/row-grouping/batchRemover.d.ts +13 -0
- package/app/eo-framework/grid/row-grouping/batchRemover.d.ts.map +1 -0
- package/app/eo-framework/grid/row-grouping/group-stage.d.ts +14 -14
- package/app/eo-framework/grid/row-grouping/group-stage.d.ts.map +1 -1
- package/app/eo-framework/grid/row-grouping/row-grouping.module.d.ts +1 -0
- package/app/eo-framework/grid/row-grouping/row-grouping.module.d.ts.map +1 -1
- package/app/eo-framework/inbox-details/duetimeInfo/duetimeInfo.component.d.ts +1 -1
- package/app/eo-framework/inbox-details/inbox-details.component.d.ts +1 -1
- package/app/eo-framework/list-container/list-container.component.d.ts +1 -1
- package/app/eo-framework/media/media.component.d.ts +1 -1
- package/app/eo-framework/object-details/edit-icon/edit-icon.component.d.ts +1 -1
- package/app/eo-framework/object-details/favorite-icon/favorite-icon.component.d.ts +1 -1
- package/app/eo-framework/object-details/object-details.component.d.ts +1 -1
- package/app/eo-framework/object-details/object-history/history-filter/history-filter.component.d.ts +1 -1
- package/app/eo-framework/object-details/object-history/object-history.component.d.ts +1 -1
- package/app/eo-framework/object-details/object-links/object-links.component.d.ts +1 -1
- package/app/eo-framework/object-form/object-form/form-element/form-element-template.directive.d.ts +1 -1
- package/app/eo-framework/object-form/object-form/form-element/form-element.component.d.ts +1 -1
- package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts +4 -1
- package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts.map +1 -1
- package/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.d.ts +1 -1
- package/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.d.ts +1 -1
- package/app/eo-framework/object-form/object-form/object-form.component.d.ts +1 -1
- package/app/eo-framework/object-form/object-form-edit/object-form-edit.component.d.ts +1 -1
- package/app/eo-framework/object-state-details/object-state-details.component.d.ts +1 -1
- package/app/eo-framework/plugins/plugin.component.d.ts +2 -2
- package/app/eo-framework/plugins/plugins.module.d.ts.map +1 -1
- package/app/eo-framework/prepare-details/prepare-content-exists-info/prepare-content-exists-info.component.d.ts +1 -1
- package/app/eo-framework/prepare-details/prepare-details.component.d.ts +1 -1
- package/app/eo-framework/process/details/process-details.component.d.ts +1 -1
- package/app/eo-framework/process/history/process-history.component.d.ts +1 -1
- package/app/eo-framework/process/process-file/process-file.component.d.ts +1 -1
- package/app/eo-framework/process-form/process-form.component.d.ts +1 -1
- package/app/eo-framework/quick-search/quick-search/quick-search.component.d.ts +1 -1
- package/app/eo-framework/recyclebin-details/recyclebin-details.component.d.ts +1 -1
- package/app/eo-framework/result-list/result-list.component.d.ts +1 -1
- package/app/eo-framework/settings/change-password/change-password-form/change-password-form.component.d.ts +1 -1
- package/app/eo-framework/settings/permissions/permissions.component.d.ts +1 -1
- package/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts-section/global-shortcuts-section.component.d.ts +1 -1
- package/app/eo-framework/shortcuts/shortcuts.directive.d.ts +1 -1
- package/app/eo-framework/stored-query/stored-query/stored-query.component.d.ts +1 -1
- package/app/eo-framework/stored-query/stored-query-details/dynamic-property-switch/dynamic-property-switch.component.d.ts +1 -1
- package/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.d.ts +1 -1
- package/app/eo-framework/tree/tree-node/tree-node.component.d.ts +1 -1
- package/app/eo-framework/tree/tree.component.d.ts +1 -1
- package/app/eo-framework/ui/eo-dialog/eo-dialog.component.d.ts +1 -1
- package/app/eo-framework/ui/eo-icon/eo-icon.component.d.ts +1 -1
- package/app/eo-framework/ui/error-message/error-message.component.d.ts +1 -1
- package/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.d.ts +1 -1
- package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts +1 -1
- package/app/eo-framework/ui/loading-spinner/loading-spinner.component.d.ts +1 -1
- package/app/eo-framework/ui/overlay/overlay.component.d.ts +1 -1
- package/app/eo-framework/ui/query-scope-select/query-scope-select.component.d.ts +1 -1
- package/app/eo-framework/ui/rtl-aware/rtl-aware.directive.d.ts +1 -1
- package/app/eo-framework/ui/signature-tab/signature-tab.component.d.ts +1 -1
- package/app/eo-framework/ui/user-avatar/user-avatar.component.d.ts +1 -1
- package/app/eo-framework/upload-overlay/upload-overlay-guard.service.d.ts +2 -2
- package/app/eo-framework/upload-overlay/upload-overlay-guard.service.d.ts.map +1 -1
- package/app/eo-framework/util/directive/prevent-double-click.directive.d.ts +1 -1
- package/app/eo-framework-core/api/grid.service.d.ts +4 -3
- package/app/eo-framework-core/api/grid.service.d.ts.map +1 -1
- package/app/eo-framework-core/pending-changes/pending-changes-guard.service.d.ts +1 -2
- package/app/eo-framework-core/pending-changes/pending-changes-guard.service.d.ts.map +1 -1
- package/app/eo-framework-core/route-guards/auth/auth-guard.service.d.ts +2 -2
- package/app/eo-framework-core/route-guards/auth/auth-guard.service.d.ts.map +1 -1
- package/app/eo-framework-core/route-guards/capabilities/capabilities-guard.service.d.ts +2 -2
- package/app/eo-framework-core/route-guards/capabilities/capabilities-guard.service.d.ts.map +1 -1
- package/assets/_default/i18n/de.json +1 -0
- package/assets/_default/i18n/en.json +1 -0
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +81 -0
- package/esm2022/app/eo-client/dashboard/dashboard.component.mjs +305 -0
- package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.mjs +288 -0
- package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +265 -0
- package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.mjs +121 -0
- package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.mjs +125 -0
- package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.mjs +192 -0
- package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.mjs +164 -0
- package/esm2022/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.mjs +59 -0
- package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/iframe-widget/iframe-widget.component.mjs +8 -8
- package/esm2022/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.mjs +60 -0
- package/esm2022/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-widget.component.mjs +42 -0
- package/esm2022/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.mjs +69 -0
- package/esm2022/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-widget.component.mjs +43 -0
- package/esm2022/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.mjs +116 -0
- package/esm2022/app/eo-client/dashboard/widgets/search-widget/search-widget.component.mjs +123 -0
- package/{esm2020 → esm2022}/app/eo-client/eo-client-routing.module.mjs +5 -5
- package/esm2022/app/eo-client/eo-client.module.mjs +170 -0
- package/esm2022/app/eo-client/favorite-state/favorite-state.component.mjs +150 -0
- package/esm2022/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +218 -0
- package/{esm2020 → esm2022}/app/eo-client/inbox-state/inbox-state-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-client/inbox-state/inbox-state.module.mjs +13 -13
- package/esm2022/app/eo-client/login/login.component.mjs +111 -0
- package/esm2022/app/eo-client/notifications-state/notifications-state.component.mjs +227 -0
- package/esm2022/app/eo-client/object-state/object-state/object-state.component.mjs +342 -0
- package/{esm2020 → esm2022}/app/eo-client/object-state/object-state-routing.module.mjs +5 -5
- package/esm2022/app/eo-client/object-state/object-state-service/object-state.service.mjs +134 -0
- package/{esm2020 → esm2022}/app/eo-client/object-state/object-state.module.mjs +11 -11
- package/esm2022/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +159 -0
- package/{esm2020 → esm2022}/app/eo-client/prepare-state/prepare-state-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-client/prepare-state/prepare-state.module.mjs +15 -15
- package/esm2022/app/eo-client/process-state/process-state.component.mjs +330 -0
- package/esm2022/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +150 -0
- package/esm2022/app/eo-client/result-state/result-state.component.mjs +71 -0
- package/esm2022/app/eo-client/settings/settings.component.mjs +287 -0
- package/esm2022/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +209 -0
- package/esm2022/app/eo-client/version-state/version-state.component.mjs +142 -0
- package/{esm2020 → esm2022}/app/eo-framework/accordion/accordion.module.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/accordion/simple-accordion/simple-accordion.component.mjs +4 -4
- package/{esm2020 → esm2022}/app/eo-framework/actions/action-menu/action-component-anchor/action-component-anchor.directive.mjs +5 -5
- package/esm2022/app/eo-framework/actions/action-menu/action-menu.component.mjs +208 -0
- package/esm2022/app/eo-framework/actions/action-service/action.service.mjs +185 -0
- package/esm2022/app/eo-framework/actions/action-target.mjs +28 -0
- package/esm2022/app/eo-framework/actions/action.module.mjs +269 -0
- package/esm2022/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.mjs +201 -0
- package/esm2022/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission-action.mjs +50 -0
- package/esm2022/app/eo-framework/actions/actions/add-subscription-action/add-subscription/add-subscription.component.mjs +134 -0
- package/esm2022/app/eo-framework/actions/actions/add-subscription-action/add-subscription-action.mjs +50 -0
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/cancel-signing-action/cancel-signing/cancel-signing.component.mjs +6 -6
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/cancel-signing-action/cancel-signing-action.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/clipboard/clipboard-action.mjs +5 -5
- package/esm2022/app/eo-framework/actions/actions/clipboard/clipboard-object-action/clipboard-object-action.component.mjs +95 -0
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/copy-action/copy-action.mjs +5 -5
- package/esm2022/app/eo-framework/actions/actions/custom-actions/custom-actions.component.mjs +88 -0
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/cut-action/cut-action.mjs +5 -5
- package/esm2022/app/eo-framework/actions/actions/delete-action/delete/delete.component.mjs +111 -0
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/delete-action/delete-action.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/delete-action/delete-prepared-action.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/delete-content-action/delete-content/delete-content.component.mjs +6 -6
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/delete-content-action/delete-content-action.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/download-action/download-action.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/download-action/download-object-action/download-object-action.component.mjs +6 -6
- package/esm2022/app/eo-framework/actions/actions/email/email/email.component.mjs +97 -0
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/email/email-action.mjs +5 -5
- package/esm2022/app/eo-framework/actions/actions/favorite-action/favorite-action.mjs +76 -0
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/finalize/definalize-action.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/finalize/finalize-action.mjs +6 -6
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/finalize/finalize-object-action/finalize-object-action.component.mjs +6 -6
- package/esm2022/app/eo-framework/actions/actions/open-context-action/open-context-action.mjs +56 -0
- package/esm2022/app/eo-framework/actions/actions/open-document-action/open-document-action.component.mjs +69 -0
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/open-document-action/open-document-action.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/open-versions-action/open-versions-action.mjs +5 -5
- package/esm2022/app/eo-framework/actions/actions/remove-subscription-action/remove-subscription-action.mjs +45 -0
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/restore-version-action/restore-version-action.mjs +5 -5
- package/esm2022/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.mjs +89 -0
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/share-object-action/share-object-action.mjs +5 -5
- package/esm2022/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.mjs +184 -0
- package/esm2022/app/eo-framework/actions/actions/signature-action/sequence-list-item/sequence-list-item.component.mjs +53 -0
- package/esm2022/app/eo-framework/actions/actions/signature-action/signature/signature.component.mjs +146 -0
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/signature-action/signature-action.component.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/unlock-action/unlock-action.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/update-resubmission-action/update-resubmission-action.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/workflow-action/simple-workflow-action.component.mjs +5 -5
- package/esm2022/app/eo-framework/actions/actions/workflow-action/workflow/workflow.component.mjs +107 -0
- package/{esm2020 → esm2022}/app/eo-framework/actions/actions/workflow-action/workflow-action.component.mjs +5 -5
- package/esm2022/app/eo-framework/app-shell/app-bar/app-add/app-add-dialog/app-add-dialog.component.mjs +173 -0
- package/{esm2020 → esm2022}/app/eo-framework/app-shell/app-bar/app-add/app-add.component.mjs +5 -5
- package/esm2022/app/eo-framework/app-shell/app-bar/app-bar.component.mjs +203 -0
- package/esm2022/app/eo-framework/app-shell/app-bar/app-process/app-process.component.mjs +112 -0
- package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +793 -0
- package/esm2022/app/eo-framework/app-shell/app-bar/context-search/context-search.component.mjs +46 -0
- package/{esm2020 → esm2022}/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.mjs +6 -6
- package/esm2022/app/eo-framework/app-shell/app-bar/user-avatar-overlay/user-avatar-overlay.component.mjs +42 -0
- package/{esm2020 → esm2022}/app/eo-framework/app-shell/app-shell-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/app-shell/app-shell.module.mjs +40 -40
- package/{esm2020 → esm2022}/app/eo-framework/cta/component/cta.component.mjs +4 -4
- package/{esm2020 → esm2022}/app/eo-framework/cta/cta.module.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/eo-framework.module.mjs +110 -110
- package/{esm2020 → esm2022}/app/eo-framework/error/error.module.mjs +9 -9
- package/{esm2020 → esm2022}/app/eo-framework/error/error404/error404.component.mjs +4 -4
- package/{esm2020 → esm2022}/app/eo-framework/error/not-found/not-found.component.mjs +5 -5
- package/esm2022/app/eo-framework/form-elements/checkbox/checkbox.component.mjs +62 -0
- package/esm2022/app/eo-framework/form-elements/codesystem/codesystem.component.mjs +312 -0
- package/esm2022/app/eo-framework/form-elements/date/date.component.mjs +101 -0
- package/esm2022/app/eo-framework/form-elements/date/year-range/year-range.directive.mjs +44 -0
- package/esm2022/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +184 -0
- package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +303 -0
- package/{esm2020 → esm2022}/app/eo-framework/form-elements/form-elements.module.mjs +76 -76
- package/esm2022/app/eo-framework/form-elements/form-input/form-input.component.mjs +73 -0
- package/esm2022/app/eo-framework/form-elements/form-input/input-focus/input-focus.directive.mjs +35 -0
- package/esm2022/app/eo-framework/form-elements/id-reference/id-reference.component.mjs +252 -0
- package/esm2022/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.mjs +253 -0
- package/esm2022/app/eo-framework/form-elements/id-reference/reference-finder-entry/reference-finder-entry.component.mjs +33 -0
- package/esm2022/app/eo-framework/form-elements/id-reference/service/reference-finder.service.mjs +106 -0
- package/esm2022/app/eo-framework/form-elements/number/number.component.mjs +171 -0
- package/esm2022/app/eo-framework/form-elements/number-range/number-range.component.mjs +138 -0
- package/esm2022/app/eo-framework/form-elements/organization/organization.component.mjs +216 -0
- package/{esm2020 → esm2022}/app/eo-framework/form-elements/password/password.component.mjs +4 -4
- package/esm2022/app/eo-framework/form-elements/reference/reference.component.mjs +223 -0
- package/esm2022/app/eo-framework/form-elements/string/string.component.mjs +254 -0
- package/{esm2020 → esm2022}/app/eo-framework/frame/frame.component.mjs +5 -5
- package/esm2022/app/eo-framework/grid/column-configurator/column-configurator.component.mjs +211 -0
- package/esm2022/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.mjs +83 -0
- package/{esm2020 → esm2022}/app/eo-framework/grid/extensions/empty/empty.component.mjs +4 -4
- package/esm2022/app/eo-framework/grid/extensions/filter/abstract-filter.component.mjs +65 -0
- package/esm2022/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.mjs +82 -0
- package/esm2022/app/eo-framework/grid/extensions/filter/setFilters/set-filter.component.mjs +85 -0
- package/esm2022/app/eo-framework/grid/extensions/filter/text/text-filter.component.mjs +98 -0
- package/esm2022/app/eo-framework/grid/extensions/pagination/pagination.component.mjs +52 -0
- package/{esm2020 → esm2022}/app/eo-framework/grid/extensions/quick-filter/quick-filter.component.mjs +6 -6
- package/{esm2020 → esm2022}/app/eo-framework/grid/extensions/reset-filter/reset-filter.component.mjs +4 -4
- package/esm2022/app/eo-framework/grid/extensions/services/list-settings.service.mjs +42 -0
- package/esm2022/app/eo-framework/grid/extensions/total-count/total-count.component.mjs +36 -0
- package/esm2022/app/eo-framework/grid/filters/codesystem-filter.component.mjs +94 -0
- package/esm2022/app/eo-framework/grid/filters/datetime-filter.component.mjs +75 -0
- package/esm2022/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +96 -0
- package/esm2022/app/eo-framework/grid/filters/list-filter.component.mjs +54 -0
- package/esm2022/app/eo-framework/grid/filters/organization-filter.component.mjs +64 -0
- package/esm2022/app/eo-framework/grid/grid.component.mjs +420 -0
- package/esm2022/app/eo-framework/grid/grid.module.mjs +97 -0
- package/esm2022/app/eo-framework/grid/row-grouping/batchRemover.mjs +50 -0
- package/esm2022/app/eo-framework/grid/row-grouping/group-stage.mjs +623 -0
- package/{esm2020 → esm2022}/app/eo-framework/grid/row-grouping/row-grouping.module.mjs +2 -1
- package/{esm2020 → esm2022}/app/eo-framework/inbox-details/duetimeInfo/duetimeInfo.component.mjs +5 -5
- package/esm2022/app/eo-framework/inbox-details/inbox-details.component.mjs +457 -0
- package/esm2022/app/eo-framework/list-container/list-container.component.mjs +101 -0
- package/{esm2020 → esm2022}/app/eo-framework/list-container/list-container.module.mjs +7 -7
- package/esm2022/app/eo-framework/media/content-preview.service.mjs +42 -0
- package/esm2022/app/eo-framework/media/media.component.mjs +315 -0
- package/{esm2020 → esm2022}/app/eo-framework/media/media.module.mjs +13 -13
- package/{esm2020 → esm2022}/app/eo-framework/object-details/edit-icon/edit-icon.component.mjs +5 -5
- package/esm2022/app/eo-framework/object-details/favorite-icon/favorite-icon.component.mjs +104 -0
- package/esm2022/app/eo-framework/object-details/object-details.component.mjs +439 -0
- package/{esm2020 → esm2022}/app/eo-framework/object-details/object-details.module.mjs +42 -42
- package/esm2022/app/eo-framework/object-details/object-history/history-filter/history-filter-pipe/history-filter.pipe.mjs +32 -0
- package/{esm2020 → esm2022}/app/eo-framework/object-details/object-history/history-filter/history-filter.component.mjs +4 -4
- package/esm2022/app/eo-framework/object-details/object-history/object-history.component.mjs +82 -0
- package/esm2022/app/eo-framework/object-details/object-links/object-links.component.mjs +292 -0
- package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/form-element/form-element-template.directive.mjs +5 -5
- package/esm2022/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +123 -0
- package/esm2022/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +639 -0
- package/esm2022/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.mjs +238 -0
- package/esm2022/app/eo-framework/object-form/object-form/form-validation/form-validation.mjs +40 -0
- package/esm2022/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.mjs +81 -0
- package/esm2022/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.mjs +113 -0
- package/esm2022/app/eo-framework/object-form/object-form/object-form-script/object-form-scripting-scope.mjs +267 -0
- package/esm2022/app/eo-framework/object-form/object-form/object-form.component.mjs +148 -0
- package/esm2022/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +216 -0
- package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +717 -0
- package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form.module.mjs +37 -37
- package/esm2022/app/eo-framework/object-state-details/object-state-details.component.mjs +135 -0
- package/{esm2020 → esm2022}/app/eo-framework/plugins/plugin.component.mjs +16 -16
- package/{esm2020 → esm2022}/app/eo-framework/plugins/plugin.directive.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/plugins/plugin.service.mjs +6 -6
- package/esm2022/app/eo-framework/plugins/plugins.module.mjs +55 -0
- package/{esm2020 → esm2022}/app/eo-framework/prepare-details/prepare-content-exists-info/prepare-content-exists-info.component.mjs +4 -4
- package/esm2022/app/eo-framework/prepare-details/prepare-details.component.mjs +557 -0
- package/esm2022/app/eo-framework/process/details/process-details.component.mjs +226 -0
- package/{esm2020 → esm2022}/app/eo-framework/process/history/process-history.component.mjs +4 -4
- package/{esm2020 → esm2022}/app/eo-framework/process/process-file/process-file.component.mjs +6 -6
- package/esm2022/app/eo-framework/process-form/process-form.component.mjs +50 -0
- package/{esm2020 → esm2022}/app/eo-framework/process-form/process-form.module.mjs +11 -11
- package/esm2022/app/eo-framework/quick-search/quick-search/quick-search.component.mjs +220 -0
- package/{esm2020 → esm2022}/app/eo-framework/quick-search/quick-search.module.mjs +11 -11
- package/esm2022/app/eo-framework/recyclebin-details/recyclebin-details.component.mjs +271 -0
- package/esm2022/app/eo-framework/result-list/result-list.component.mjs +369 -0
- package/{esm2020 → esm2022}/app/eo-framework/result-list/result-list.module.mjs +11 -11
- package/esm2022/app/eo-framework/settings/change-password/change-password-form/change-password-form.component.mjs +125 -0
- package/{esm2020 → esm2022}/app/eo-framework/settings/permissions/permissions.component.mjs +4 -4
- package/{esm2020 → esm2022}/app/eo-framework/settings/settings.module.mjs +13 -13
- package/esm2022/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts-section/global-shortcuts-section.component.mjs +65 -0
- package/esm2022/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts.component.mjs +130 -0
- package/{esm2020 → esm2022}/app/eo-framework/shortcuts/shortcut.interface.mjs +1 -1
- package/{esm2020 → esm2022}/app/eo-framework/shortcuts/shortcuts.directive.mjs +5 -5
- package/{esm2020 → esm2022}/app/eo-framework/shortcuts/shortcuts.module.mjs +9 -9
- package/esm2022/app/eo-framework/shortcuts/shortcuts.service.mjs +45 -0
- package/esm2022/app/eo-framework/stored-query/stored-query/stored-query.component.mjs +225 -0
- package/esm2022/app/eo-framework/stored-query/stored-query-details/dynamic-property-switch/dynamic-property-switch.component.mjs +46 -0
- package/esm2022/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.mjs +501 -0
- package/{esm2020 → esm2022}/app/eo-framework/stored-query/stored-query.module.mjs +20 -20
- package/{esm2020 → esm2022}/app/eo-framework/tree/tree-node/tree-node.component.mjs +5 -5
- package/esm2022/app/eo-framework/tree/tree.component.mjs +281 -0
- package/{esm2020 → esm2022}/app/eo-framework/tree/tree.module.mjs +7 -7
- package/{esm2020 → esm2022}/app/eo-framework/ui/animations/panel-loading.animation.mjs +1 -1
- package/esm2022/app/eo-framework/ui/clipboard/clipboard.component.mjs +159 -0
- package/esm2022/app/eo-framework/ui/eo-dialog/eo-dialog.component.mjs +130 -0
- package/esm2022/app/eo-framework/ui/eo-icon/eo-icon.component.mjs +119 -0
- package/esm2022/app/eo-framework/ui/error-message/error-message.component.mjs +33 -0
- package/{esm2020 → esm2022}/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.mjs +4 -4
- package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +147 -0
- package/{esm2020 → esm2022}/app/eo-framework/ui/loading-spinner/loading-spinner.component.mjs +8 -8
- package/esm2022/app/eo-framework/ui/outside-click/outside-click.directive.mjs +60 -0
- package/esm2022/app/eo-framework/ui/overlay/overlay.component.mjs +71 -0
- package/{esm2020 → esm2022}/app/eo-framework/ui/query-scope-select/query-scope-select.component.mjs +5 -5
- package/esm2022/app/eo-framework/ui/router-link/router-link.directive.mjs +26 -0
- package/esm2022/app/eo-framework/ui/rtl-aware/rtl-aware.directive.mjs +57 -0
- package/esm2022/app/eo-framework/ui/signature-tab/signature-tab.component.mjs +32 -0
- package/{esm2020 → esm2022}/app/eo-framework/ui/ui.module.mjs +59 -59
- package/esm2022/app/eo-framework/ui/user-avatar/user-avatar.component.mjs +54 -0
- package/esm2022/app/eo-framework/upload-overlay/upload-overlay-guard.service.mjs +17 -0
- package/esm2022/app/eo-framework/upload-overlay/upload-overlay.component.mjs +397 -0
- package/{esm2020 → esm2022}/app/eo-framework/util/directive/prevent-double-click.directive.mjs +5 -5
- package/esm2022/app/eo-framework/util/directive/trap-focus.directive.mjs +69 -0
- package/esm2022/app/eo-framework/util/services/utilities.service.mjs +25 -0
- package/esm2022/app/eo-framework/util/sortable/order-by.pipe.mjs +48 -0
- package/{esm2020 → esm2022}/app/eo-framework/util/util.module.mjs +5 -5
- package/esm2022/app/eo-framework-core/agent/agent.service.mjs +178 -0
- package/esm2022/app/eo-framework-core/api/grid.service.mjs +732 -0
- package/esm2022/app/eo-framework-core/api/plugins.service.mjs +258 -0
- package/esm2022/app/eo-framework-core/empty-state/empty-state.service.mjs +53 -0
- package/esm2022/app/eo-framework-core/eo-framework-core.module.mjs +105 -0
- package/esm2022/app/eo-framework-core/error-handler/error-handler.service.mjs +89 -0
- package/esm2022/app/eo-framework-core/layout/layout.service.mjs +106 -0
- package/esm2022/app/eo-framework-core/location/location.service.mjs +146 -0
- package/esm2022/app/eo-framework-core/pending-changes/pending-changes-guard.service.mjs +18 -0
- package/esm2022/app/eo-framework-core/pending-changes/pending-changes.service.mjs +112 -0
- package/esm2022/app/eo-framework-core/pipes/filesize.pipe.mjs +30 -0
- package/{esm2020 → esm2022}/app/eo-framework-core/pipes/keys.pipe.mjs +4 -4
- package/esm2022/app/eo-framework-core/pipes/locale-date.pipe.mjs +63 -0
- package/esm2022/app/eo-framework-core/pipes/locale-number.pipe.mjs +109 -0
- package/{esm2020 → esm2022}/app/eo-framework-core/pipes/pipes.module.mjs +19 -19
- package/{esm2020 → esm2022}/app/eo-framework-core/pipes/safe-html.pipe.mjs +5 -5
- package/esm2022/app/eo-framework-core/references/reference.service.mjs +266 -0
- package/esm2022/app/eo-framework-core/route-guards/auth/auth-guard.service.mjs +29 -0
- package/esm2022/app/eo-framework-core/route-guards/capabilities/capabilities-guard.service.mjs +55 -0
- package/esm2022/app/eo-framework-core/search/app-search.service.mjs +387 -0
- package/esm2022/app/eo-framework-core/selection/selection.service.mjs +63 -0
- package/esm2022/app/eo-framework-core/title/page-title.service.mjs +42 -0
- package/{fesm2020 → fesm2022}/eo-sdk-client.mjs +2278 -2143
- package/fesm2022/eo-sdk-client.mjs.map +1 -0
- package/misc/scripts/copy-client-assets.js +1 -1
- package/package.json +31 -44
- package/styles.css +725 -550
- package/styles.scss +3 -3
- package/esm2020/app/eo-client/about-state/about-state.component.mjs +0 -81
- package/esm2020/app/eo-client/dashboard/dashboard.component.mjs +0 -305
- package/esm2020/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.mjs +0 -288
- package/esm2020/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +0 -265
- package/esm2020/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.mjs +0 -121
- package/esm2020/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.mjs +0 -125
- package/esm2020/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.mjs +0 -192
- package/esm2020/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.mjs +0 -164
- package/esm2020/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.mjs +0 -59
- package/esm2020/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.mjs +0 -60
- package/esm2020/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-widget.component.mjs +0 -42
- package/esm2020/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.mjs +0 -69
- package/esm2020/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-widget.component.mjs +0 -43
- package/esm2020/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.mjs +0 -116
- package/esm2020/app/eo-client/dashboard/widgets/search-widget/search-widget.component.mjs +0 -123
- package/esm2020/app/eo-client/eo-client.module.mjs +0 -170
- package/esm2020/app/eo-client/favorite-state/favorite-state.component.mjs +0 -150
- package/esm2020/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +0 -218
- package/esm2020/app/eo-client/login/login.component.mjs +0 -111
- package/esm2020/app/eo-client/notifications-state/notifications-state.component.mjs +0 -227
- package/esm2020/app/eo-client/object-state/object-state/object-state.component.mjs +0 -342
- package/esm2020/app/eo-client/object-state/object-state-service/object-state.service.mjs +0 -134
- package/esm2020/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +0 -159
- package/esm2020/app/eo-client/process-state/process-state.component.mjs +0 -330
- package/esm2020/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +0 -150
- package/esm2020/app/eo-client/result-state/result-state.component.mjs +0 -71
- package/esm2020/app/eo-client/settings/settings.component.mjs +0 -287
- package/esm2020/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +0 -209
- package/esm2020/app/eo-client/version-state/version-state.component.mjs +0 -142
- package/esm2020/app/eo-framework/actions/action-menu/action-menu.component.mjs +0 -208
- package/esm2020/app/eo-framework/actions/action-service/action.service.mjs +0 -185
- package/esm2020/app/eo-framework/actions/action-target.mjs +0 -28
- package/esm2020/app/eo-framework/actions/action.module.mjs +0 -274
- package/esm2020/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.mjs +0 -201
- package/esm2020/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission-action.mjs +0 -50
- package/esm2020/app/eo-framework/actions/actions/add-subscription-action/add-subscription/add-subscription.component.mjs +0 -134
- package/esm2020/app/eo-framework/actions/actions/add-subscription-action/add-subscription-action.mjs +0 -50
- package/esm2020/app/eo-framework/actions/actions/clipboard/clipboard-object-action/clipboard-object-action.component.mjs +0 -95
- package/esm2020/app/eo-framework/actions/actions/custom-actions/custom-actions.component.mjs +0 -88
- package/esm2020/app/eo-framework/actions/actions/delete-action/delete/delete.component.mjs +0 -111
- package/esm2020/app/eo-framework/actions/actions/email/email/email.component.mjs +0 -97
- package/esm2020/app/eo-framework/actions/actions/favorite-action/favorite-action.mjs +0 -76
- package/esm2020/app/eo-framework/actions/actions/open-context-action/open-context-action.mjs +0 -56
- package/esm2020/app/eo-framework/actions/actions/open-document-action/open-document-action.component.mjs +0 -69
- package/esm2020/app/eo-framework/actions/actions/remove-subscription-action/remove-subscription-action.mjs +0 -45
- package/esm2020/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.mjs +0 -89
- package/esm2020/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.mjs +0 -184
- package/esm2020/app/eo-framework/actions/actions/signature-action/sequence-list-item/sequence-list-item.component.mjs +0 -53
- package/esm2020/app/eo-framework/actions/actions/signature-action/signature/signature.component.mjs +0 -146
- package/esm2020/app/eo-framework/actions/actions/workflow-action/workflow/workflow.component.mjs +0 -107
- package/esm2020/app/eo-framework/app-shell/app-bar/app-add/app-add-dialog/app-add-dialog.component.mjs +0 -173
- package/esm2020/app/eo-framework/app-shell/app-bar/app-bar.component.mjs +0 -203
- package/esm2020/app/eo-framework/app-shell/app-bar/app-process/app-process.component.mjs +0 -112
- package/esm2020/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +0 -793
- package/esm2020/app/eo-framework/app-shell/app-bar/context-search/context-search.component.mjs +0 -46
- package/esm2020/app/eo-framework/app-shell/app-bar/user-avatar-overlay/user-avatar-overlay.component.mjs +0 -42
- package/esm2020/app/eo-framework/form-elements/checkbox/checkbox.component.mjs +0 -62
- package/esm2020/app/eo-framework/form-elements/codesystem/codesystem.component.mjs +0 -312
- package/esm2020/app/eo-framework/form-elements/date/date.component.mjs +0 -101
- package/esm2020/app/eo-framework/form-elements/date/year-range/year-range.directive.mjs +0 -44
- package/esm2020/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +0 -184
- package/esm2020/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +0 -303
- package/esm2020/app/eo-framework/form-elements/form-input/form-input.component.mjs +0 -73
- package/esm2020/app/eo-framework/form-elements/form-input/input-focus/input-focus.directive.mjs +0 -35
- package/esm2020/app/eo-framework/form-elements/id-reference/id-reference.component.mjs +0 -252
- package/esm2020/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.mjs +0 -253
- package/esm2020/app/eo-framework/form-elements/id-reference/reference-finder-entry/reference-finder-entry.component.mjs +0 -33
- package/esm2020/app/eo-framework/form-elements/id-reference/service/reference-finder.service.mjs +0 -106
- package/esm2020/app/eo-framework/form-elements/number/number.component.mjs +0 -171
- package/esm2020/app/eo-framework/form-elements/number-range/number-range.component.mjs +0 -138
- package/esm2020/app/eo-framework/form-elements/organization/organization.component.mjs +0 -216
- package/esm2020/app/eo-framework/form-elements/reference/reference.component.mjs +0 -223
- package/esm2020/app/eo-framework/form-elements/string/string.component.mjs +0 -254
- package/esm2020/app/eo-framework/grid/column-configurator/column-configurator.component.mjs +0 -211
- package/esm2020/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.mjs +0 -83
- package/esm2020/app/eo-framework/grid/extensions/filter/abstract-filter.component.mjs +0 -65
- package/esm2020/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.mjs +0 -82
- package/esm2020/app/eo-framework/grid/extensions/filter/setFilters/set-filter.component.mjs +0 -85
- package/esm2020/app/eo-framework/grid/extensions/filter/text/text-filter.component.mjs +0 -98
- package/esm2020/app/eo-framework/grid/extensions/pagination/pagination.component.mjs +0 -52
- package/esm2020/app/eo-framework/grid/extensions/services/list-settings.service.mjs +0 -42
- package/esm2020/app/eo-framework/grid/extensions/total-count/total-count.component.mjs +0 -36
- package/esm2020/app/eo-framework/grid/filters/codesystem-filter.component.mjs +0 -94
- package/esm2020/app/eo-framework/grid/filters/datetime-filter.component.mjs +0 -75
- package/esm2020/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +0 -96
- package/esm2020/app/eo-framework/grid/filters/list-filter.component.mjs +0 -54
- package/esm2020/app/eo-framework/grid/filters/organization-filter.component.mjs +0 -64
- package/esm2020/app/eo-framework/grid/grid.component.mjs +0 -421
- package/esm2020/app/eo-framework/grid/grid.module.mjs +0 -107
- package/esm2020/app/eo-framework/grid/row-grouping/group-stage.mjs +0 -528
- package/esm2020/app/eo-framework/inbox-details/inbox-details.component.mjs +0 -457
- package/esm2020/app/eo-framework/list-container/list-container.component.mjs +0 -101
- package/esm2020/app/eo-framework/media/content-preview.service.mjs +0 -42
- package/esm2020/app/eo-framework/media/media.component.mjs +0 -314
- package/esm2020/app/eo-framework/object-details/favorite-icon/favorite-icon.component.mjs +0 -104
- package/esm2020/app/eo-framework/object-details/object-details.component.mjs +0 -439
- package/esm2020/app/eo-framework/object-details/object-history/history-filter/history-filter-pipe/history-filter.pipe.mjs +0 -32
- package/esm2020/app/eo-framework/object-details/object-history/object-history.component.mjs +0 -82
- package/esm2020/app/eo-framework/object-details/object-links/object-links.component.mjs +0 -292
- package/esm2020/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +0 -123
- package/esm2020/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +0 -634
- package/esm2020/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.mjs +0 -238
- package/esm2020/app/eo-framework/object-form/object-form/form-validation/form-validation.mjs +0 -40
- package/esm2020/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.mjs +0 -81
- package/esm2020/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.mjs +0 -113
- package/esm2020/app/eo-framework/object-form/object-form/object-form-script/object-form-scripting-scope.mjs +0 -267
- package/esm2020/app/eo-framework/object-form/object-form/object-form.component.mjs +0 -148
- package/esm2020/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +0 -216
- package/esm2020/app/eo-framework/object-form/object-form-helper.service.mjs +0 -717
- package/esm2020/app/eo-framework/object-state-details/object-state-details.component.mjs +0 -134
- package/esm2020/app/eo-framework/plugins/plugins.module.mjs +0 -59
- package/esm2020/app/eo-framework/prepare-details/prepare-details.component.mjs +0 -557
- package/esm2020/app/eo-framework/process/details/process-details.component.mjs +0 -226
- package/esm2020/app/eo-framework/process-form/process-form.component.mjs +0 -50
- package/esm2020/app/eo-framework/quick-search/quick-search/quick-search.component.mjs +0 -220
- package/esm2020/app/eo-framework/recyclebin-details/recyclebin-details.component.mjs +0 -271
- package/esm2020/app/eo-framework/result-list/result-list.component.mjs +0 -368
- package/esm2020/app/eo-framework/settings/change-password/change-password-form/change-password-form.component.mjs +0 -125
- package/esm2020/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts-section/global-shortcuts-section.component.mjs +0 -65
- package/esm2020/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts.component.mjs +0 -130
- package/esm2020/app/eo-framework/shortcuts/shortcuts.service.mjs +0 -45
- package/esm2020/app/eo-framework/stored-query/stored-query/stored-query.component.mjs +0 -225
- package/esm2020/app/eo-framework/stored-query/stored-query-details/dynamic-property-switch/dynamic-property-switch.component.mjs +0 -46
- package/esm2020/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.mjs +0 -501
- package/esm2020/app/eo-framework/tree/tree.component.mjs +0 -281
- package/esm2020/app/eo-framework/ui/clipboard/clipboard.component.mjs +0 -159
- package/esm2020/app/eo-framework/ui/eo-dialog/eo-dialog.component.mjs +0 -130
- package/esm2020/app/eo-framework/ui/eo-icon/eo-icon.component.mjs +0 -119
- package/esm2020/app/eo-framework/ui/error-message/error-message.component.mjs +0 -33
- package/esm2020/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +0 -146
- package/esm2020/app/eo-framework/ui/outside-click/outside-click.directive.mjs +0 -60
- package/esm2020/app/eo-framework/ui/overlay/overlay.component.mjs +0 -71
- package/esm2020/app/eo-framework/ui/router-link/router-link.directive.mjs +0 -26
- package/esm2020/app/eo-framework/ui/rtl-aware/rtl-aware.directive.mjs +0 -57
- package/esm2020/app/eo-framework/ui/signature-tab/signature-tab.component.mjs +0 -32
- package/esm2020/app/eo-framework/ui/user-avatar/user-avatar.component.mjs +0 -54
- package/esm2020/app/eo-framework/upload-overlay/upload-overlay-guard.service.mjs +0 -17
- package/esm2020/app/eo-framework/upload-overlay/upload-overlay.component.mjs +0 -397
- package/esm2020/app/eo-framework/util/directive/trap-focus.directive.mjs +0 -69
- package/esm2020/app/eo-framework/util/services/utilities.service.mjs +0 -25
- package/esm2020/app/eo-framework/util/sortable/order-by.pipe.mjs +0 -48
- package/esm2020/app/eo-framework-core/agent/agent.service.mjs +0 -178
- package/esm2020/app/eo-framework-core/api/grid.service.mjs +0 -732
- package/esm2020/app/eo-framework-core/api/plugins.service.mjs +0 -258
- package/esm2020/app/eo-framework-core/empty-state/empty-state.service.mjs +0 -53
- package/esm2020/app/eo-framework-core/eo-framework-core.module.mjs +0 -105
- package/esm2020/app/eo-framework-core/error-handler/error-handler.service.mjs +0 -89
- package/esm2020/app/eo-framework-core/layout/layout.service.mjs +0 -106
- package/esm2020/app/eo-framework-core/location/location.service.mjs +0 -146
- package/esm2020/app/eo-framework-core/pending-changes/pending-changes-guard.service.mjs +0 -18
- package/esm2020/app/eo-framework-core/pending-changes/pending-changes.service.mjs +0 -112
- package/esm2020/app/eo-framework-core/pipes/filesize.pipe.mjs +0 -30
- package/esm2020/app/eo-framework-core/pipes/locale-date.pipe.mjs +0 -63
- package/esm2020/app/eo-framework-core/pipes/locale-number.pipe.mjs +0 -109
- package/esm2020/app/eo-framework-core/references/reference.service.mjs +0 -266
- package/esm2020/app/eo-framework-core/route-guards/auth/auth-guard.service.mjs +0 -29
- package/esm2020/app/eo-framework-core/route-guards/capabilities/capabilities-guard.service.mjs +0 -55
- package/esm2020/app/eo-framework-core/search/app-search.service.mjs +0 -387
- package/esm2020/app/eo-framework-core/selection/selection.service.mjs +0 -63
- package/esm2020/app/eo-framework-core/title/page-title.service.mjs +0 -42
- package/esm2020/projects/eo-sdk/core/eo-sdk-client-projects-eo-sdk-core.mjs +0 -5
- package/esm2020/projects/eo-sdk/core/lib/config/core-config.mjs +0 -23
- package/esm2020/projects/eo-sdk/core/lib/config/core-init.service.mjs +0 -71
- package/esm2020/projects/eo-sdk/core/lib/config/core-init.tokens.mjs +0 -8
- package/esm2020/projects/eo-sdk/core/lib/config/initialize-module.mjs +0 -11
- package/esm2020/projects/eo-sdk/core/lib/config/missing-translation-handler.mjs +0 -15
- package/esm2020/projects/eo-sdk/core/lib/config/translate-json-loader.mjs +0 -130
- package/esm2020/projects/eo-sdk/core/lib/environment.enaio.mjs +0 -12
- package/esm2020/projects/eo-sdk/core/lib/eo-core-shared.module.mjs +0 -24
- package/esm2020/projects/eo-sdk/core/lib/eo-core.module.mjs +0 -117
- package/esm2020/projects/eo-sdk/core/lib/interface/change-password.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/interface/event.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/interface/http-options.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/interface/logger.interface.mjs +0 -7
- package/esm2020/projects/eo-sdk/core/lib/interface/organization-objects.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/interface/tree-node.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/model/baseparams.model.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/model/bpm.model.mjs +0 -70
- package/esm2020/projects/eo-sdk/core/lib/model/custom-action.model.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/model/dms-object-history.model.mjs +0 -30
- package/esm2020/projects/eo-sdk/core/lib/model/dms-object.model.mjs +0 -140
- package/esm2020/projects/eo-sdk/core/lib/model/eo-error.model.mjs +0 -37
- package/esm2020/projects/eo-sdk/core/lib/model/eo-user.model.mjs +0 -86
- package/esm2020/projects/eo-sdk/core/lib/model/inbox-item.model.mjs +0 -36
- package/esm2020/projects/eo-sdk/core/lib/model/object-type.model.mjs +0 -39
- package/esm2020/projects/eo-sdk/core/lib/model/org.model.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/model/prepared-item.model.mjs +0 -35
- package/esm2020/projects/eo-sdk/core/lib/model/range-value.model.mjs +0 -45
- package/esm2020/projects/eo-sdk/core/lib/model/upload-file-item.model.mjs +0 -17
- package/esm2020/projects/eo-sdk/core/lib/model/upload-target.model.mjs +0 -50
- package/esm2020/projects/eo-sdk/core/lib/model/work-item-history.model.mjs +0 -54
- package/esm2020/projects/eo-sdk/core/lib/service/auth/auth-interceptor.mjs +0 -29
- package/esm2020/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/auth/auth.service.mjs +0 -215
- package/esm2020/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/backend/backend.service.mjs +0 -358
- package/esm2020/projects/eo-sdk/core/lib/service/bpm/bpm.service.mjs +0 -286
- package/esm2020/projects/eo-sdk/core/lib/service/cache/app-cache.service.mjs +0 -117
- package/esm2020/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.mjs +0 -60
- package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.mjs +0 -6
- package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.mjs +0 -100
- package/esm2020/projects/eo-sdk/core/lib/service/config/config.enum.mjs +0 -6
- package/esm2020/projects/eo-sdk/core/lib/service/config/config.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/config/config.service.mjs +0 -135
- package/esm2020/projects/eo-sdk/core/lib/service/dms/dms.service.mjs +0 -507
- package/esm2020/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/events/event.service.mjs +0 -44
- package/esm2020/projects/eo-sdk/core/lib/service/events/events.mjs +0 -27
- package/esm2020/projects/eo-sdk/core/lib/service/inbox/inbox.service.mjs +0 -111
- package/esm2020/projects/eo-sdk/core/lib/service/logger/console-log.service.mjs +0 -41
- package/esm2020/projects/eo-sdk/core/lib/service/logger/logger.mjs +0 -47
- package/esm2020/projects/eo-sdk/core/lib/service/notifications/notifications.service.mjs +0 -136
- package/esm2020/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/prepare/prepare.service.mjs +0 -305
- package/esm2020/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/search/search-query.model.mjs +0 -510
- package/esm2020/projects/eo-sdk/core/lib/service/search/search.service.mjs +0 -478
- package/esm2020/projects/eo-sdk/core/lib/service/signing/signing.service.mjs +0 -60
- package/esm2020/projects/eo-sdk/core/lib/service/storage/local-storage.service.mjs +0 -111
- package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.mjs +0 -216
- package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.mjs +0 -98
- package/esm2020/projects/eo-sdk/core/lib/service/system/system.service.mjs +0 -345
- package/esm2020/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/system-status/system-status.service.mjs +0 -104
- package/esm2020/projects/eo-sdk/core/lib/service/system-status/system.status.enum.mjs +0 -9
- package/esm2020/projects/eo-sdk/core/lib/service/system-status/system.status.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/upload/upload.service.mjs +0 -46
- package/esm2020/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.mjs +0 -83
- package/esm2020/projects/eo-sdk/core/lib/service/user/user.service.mjs +0 -399
- package/esm2020/projects/eo-sdk/core/lib/util/utils.mjs +0 -304
- package/esm2020/projects/eo-sdk/core/public_api.mjs +0 -85
- package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs +0 -6118
- package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs.map +0 -1
- package/fesm2015/eo-sdk-client.mjs +0 -27040
- package/fesm2015/eo-sdk-client.mjs.map +0 -1
- package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs +0 -6133
- package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs.map +0 -1
- package/fesm2020/eo-sdk-client.mjs.map +0 -1
- package/projects/eo-sdk/core/README.md +0 -113
- package/projects/eo-sdk/core/eo-sdk-client-projects-eo-sdk-core.d.ts.map +0 -1
- package/projects/eo-sdk/core/index.d.ts +0 -6
- package/projects/eo-sdk/core/lib/config/core-config.d.ts +0 -14
- package/projects/eo-sdk/core/lib/config/core-config.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/config/core-init.service.d.ts +0 -33
- package/projects/eo-sdk/core/lib/config/core-init.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/config/core-init.tokens.d.ts +0 -8
- package/projects/eo-sdk/core/lib/config/core-init.tokens.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/config/initialize-module.d.ts +0 -7
- package/projects/eo-sdk/core/lib/config/initialize-module.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/config/missing-translation-handler.d.ts +0 -14
- package/projects/eo-sdk/core/lib/config/missing-translation-handler.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/config/translate-json-loader.d.ts +0 -21
- package/projects/eo-sdk/core/lib/config/translate-json-loader.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/environment.enaio.d.ts +0 -6
- package/projects/eo-sdk/core/lib/environment.enaio.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/eo-core-shared.module.d.ts +0 -12
- package/projects/eo-sdk/core/lib/eo-core-shared.module.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/eo-core.module.d.ts +0 -46
- package/projects/eo-sdk/core/lib/eo-core.module.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/change-password.interface.d.ts +0 -8
- package/projects/eo-sdk/core/lib/interface/change-password.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/event.interface.d.ts +0 -14
- package/projects/eo-sdk/core/lib/interface/event.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/http-options.interface.d.ts +0 -17
- package/projects/eo-sdk/core/lib/interface/http-options.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/logger.interface.d.ts +0 -20
- package/projects/eo-sdk/core/lib/interface/logger.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/organization-objects.interface.d.ts +0 -20
- package/projects/eo-sdk/core/lib/interface/organization-objects.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/tree-node.interface.d.ts +0 -24
- package/projects/eo-sdk/core/lib/interface/tree-node.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/baseparams.model.d.ts +0 -58
- package/projects/eo-sdk/core/lib/model/baseparams.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/bpm.model.d.ts +0 -253
- package/projects/eo-sdk/core/lib/model/bpm.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/custom-action.model.d.ts +0 -34
- package/projects/eo-sdk/core/lib/model/custom-action.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/dms-object-history.model.d.ts +0 -59
- package/projects/eo-sdk/core/lib/model/dms-object-history.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/dms-object.model.d.ts +0 -137
- package/projects/eo-sdk/core/lib/model/dms-object.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/eo-error.model.d.ts +0 -19
- package/projects/eo-sdk/core/lib/model/eo-error.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/eo-user.model.d.ts +0 -107
- package/projects/eo-sdk/core/lib/model/eo-user.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/inbox-item.model.d.ts +0 -71
- package/projects/eo-sdk/core/lib/model/inbox-item.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/object-type.model.d.ts +0 -125
- package/projects/eo-sdk/core/lib/model/object-type.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/org.model.d.ts +0 -94
- package/projects/eo-sdk/core/lib/model/org.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/prepared-item.model.d.ts +0 -190
- package/projects/eo-sdk/core/lib/model/prepared-item.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/range-value.model.d.ts +0 -22
- package/projects/eo-sdk/core/lib/model/range-value.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/upload-file-item.model.d.ts +0 -30
- package/projects/eo-sdk/core/lib/model/upload-file-item.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/upload-target.model.d.ts +0 -60
- package/projects/eo-sdk/core/lib/model/upload-target.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/work-item-history.model.d.ts +0 -52
- package/projects/eo-sdk/core/lib/model/work-item-history.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/auth/auth-interceptor.d.ts +0 -12
- package/projects/eo-sdk/core/lib/service/auth/auth-interceptor.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.d.ts +0 -23
- package/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/auth/auth.service.d.ts +0 -104
- package/projects/eo-sdk/core/lib/service/auth/auth.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.d.ts +0 -18
- package/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/backend/backend.service.d.ts +0 -209
- package/projects/eo-sdk/core/lib/service/backend/backend.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/bpm/bpm.service.d.ts +0 -150
- package/projects/eo-sdk/core/lib/service/bpm/bpm.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/cache/app-cache.service.d.ts +0 -59
- package/projects/eo-sdk/core/lib/service/cache/app-cache.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.d.ts +0 -54
- package/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.d.ts +0 -35
- package/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.d.ts +0 -5
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.d.ts +0 -16
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.d.ts +0 -49
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/config/config.enum.d.ts +0 -5
- package/projects/eo-sdk/core/lib/service/config/config.enum.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/config/config.interface.d.ts +0 -55
- package/projects/eo-sdk/core/lib/service/config/config.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/config/config.service.d.ts +0 -80
- package/projects/eo-sdk/core/lib/service/config/config.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts +0 -286
- package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.d.ts +0 -13
- package/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/events/event.service.d.ts +0 -31
- package/projects/eo-sdk/core/lib/service/events/event.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/events/events.d.ts +0 -27
- package/projects/eo-sdk/core/lib/service/events/events.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/inbox/inbox.service.d.ts +0 -66
- package/projects/eo-sdk/core/lib/service/inbox/inbox.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/logger/console-log.service.d.ts +0 -20
- package/projects/eo-sdk/core/lib/service/logger/console-log.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/logger/logger.d.ts +0 -25
- package/projects/eo-sdk/core/lib/service/logger/logger.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/notifications/notifications.service.d.ts +0 -78
- package/projects/eo-sdk/core/lib/service/notifications/notifications.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.d.ts +0 -9
- package/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts +0 -189
- package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.d.ts +0 -10
- package/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/search/search-query.model.d.ts +0 -327
- package/projects/eo-sdk/core/lib/service/search/search-query.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/search/search.service.d.ts +0 -173
- package/projects/eo-sdk/core/lib/service/search/search.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/signing/signing.service.d.ts +0 -52
- package/projects/eo-sdk/core/lib/service/signing/signing.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/storage/local-storage.service.d.ts +0 -53
- package/projects/eo-sdk/core/lib/service/storage/local-storage.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.d.ts +0 -15
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.d.ts +0 -108
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.d.ts +0 -74
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/system/system.service.d.ts +0 -125
- package/projects/eo-sdk/core/lib/service/system/system.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.d.ts +0 -53
- package/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/system-status/system-status.service.d.ts +0 -26
- package/projects/eo-sdk/core/lib/service/system-status/system-status.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/system-status/system.status.enum.d.ts +0 -8
- package/projects/eo-sdk/core/lib/service/system-status/system.status.enum.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/system-status/system.status.interface.d.ts +0 -8
- package/projects/eo-sdk/core/lib/service/system-status/system.status.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/upload/upload.service.d.ts +0 -28
- package/projects/eo-sdk/core/lib/service/upload/upload.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.d.ts +0 -50
- package/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/user/user.service.d.ts +0 -216
- package/projects/eo-sdk/core/lib/service/user/user.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/util/utils.d.ts +0 -148
- package/projects/eo-sdk/core/lib/util/utils.d.ts.map +0 -1
- package/projects/eo-sdk/core/public_api.d.ts +0 -82
- package/projects/eo-sdk/core/public_api.d.ts.map +0 -1
- /package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/charts-widget/icharts.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/count-objects-widget/count-objects.model.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/hitlist-widget/IHitlist.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox.model.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/info-intray-widget/info-intray.model.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-client/inbox-state/inbox-state/inbox.types.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-client/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-client/notifications-state/notifications-state.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-client/object-state/object-state-service/object-state.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-client/settings/agent-lock-settings.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/accordion/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/actions/actions/signature-action/signature.model.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/actions/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/actions/interfaces/action-component.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/actions/interfaces/action-list-entry.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/actions/interfaces/action.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/actions/selection-range.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/animations/animations.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/app-shell/app-bar/app-search/app-search.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/app-shell/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/cta/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/error/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/form-elements/id-reference/animation/reference-finder.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/form-elements/id-reference/interface/reference-finder.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/form-elements/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/grid/extensions/filter/setFilters/set-filters.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/grid/filters/filesize-filter.component.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/grid/grid-filter.model.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/grid/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/grid/loader.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/list-container/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/media/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/object-details/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/object-details/object-history/history-filter/history-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/object-form/form-status-changed-event.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/object-form/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/form-element-table/form-element.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/object-form-control-wrapper.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/object-form-control.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/object-form-group.model.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/object-form-script/object-form-script.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/object-form.model.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/plugins/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/process/process-file/file-entry-permissions.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/quick-search/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/quick-search/quick-search/quick-search-result.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/result-list/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/settings/change-password/change-password.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/settings/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/shortcuts/global-shortcut-action.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/shortcuts/global-shortcut-component.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/shortcuts/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/stored-query/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/stored-query/stored-query-type-filter.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/stored-query/stored-query.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/tree/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/tree/tree.component.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/ui/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework/util/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework-core/agent/agent.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework-core/api/model/dms-object.api.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework-core/empty-state/empty-state.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework-core/error-handler/error-keys.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework-core/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/eo-framework-core/pending-changes/pending-changes-component.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/eo-sdk-client.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
|
@@ -1,793 +0,0 @@
|
|
|
1
|
-
import { forkJoin as observableForkJoin, from as observableFrom, of as observableOf, Subject } from 'rxjs';
|
|
2
|
-
import { pluck, switchMap } from 'rxjs/operators';
|
|
3
|
-
import { Component, EventEmitter, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
4
|
-
import { LocaleDatePipe } from '../../../../eo-framework-core/pipes/locale-date.pipe';
|
|
5
|
-
import { RangeValue, SearchFilter, SearchQuery, StoredQuery, Utils } from '@eo-sdk/core';
|
|
6
|
-
import { ContextType } from './app-search.interface';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../../../../eo-framework-core/search/app-search.service";
|
|
9
|
-
import * as i2 from "@yuuvis/components/overlay";
|
|
10
|
-
import * as i3 from "@eo-sdk/core";
|
|
11
|
-
import * as i4 from "@angular/router";
|
|
12
|
-
import * as i5 from "@angular/common";
|
|
13
|
-
import * as i6 from "@angular/forms";
|
|
14
|
-
import * as i7 from "@ngx-translate/core";
|
|
15
|
-
import * as i8 from "../../../ui/eo-icon/eo-icon.component";
|
|
16
|
-
import * as i9 from "../../../ui/rtl-aware/rtl-aware.directive";
|
|
17
|
-
import * as i10 from "../../../ui/loading-spinner/loading-spinner.component";
|
|
18
|
-
import * as i11 from "../../../ui/query-scope-select/query-scope-select.component";
|
|
19
|
-
import * as i12 from "@yuuvis/components/tabs";
|
|
20
|
-
import * as i13 from "../../../form-elements/form-input/form-input.component";
|
|
21
|
-
import * as i14 from "../../../form-elements/datetime-range/datetime-range.component";
|
|
22
|
-
import * as i15 from "../../../form-elements/organization/organization.component";
|
|
23
|
-
import * as i16 from "../../../form-elements/string/string.component";
|
|
24
|
-
import * as i17 from "../../../object-form/object-form/object-form.component";
|
|
25
|
-
import * as i18 from "@yuuvis/components/autocomplete";
|
|
26
|
-
import * as i19 from "../context-search/context-search.component";
|
|
27
|
-
import * as i20 from "../../../../eo-framework-core/pipes/locale-number.pipe";
|
|
28
|
-
export class AppSearchComponent {
|
|
29
|
-
set selected(index) {
|
|
30
|
-
this._selected = this._selected === index ? null : index;
|
|
31
|
-
}
|
|
32
|
-
get selected() {
|
|
33
|
-
return this._selected;
|
|
34
|
-
}
|
|
35
|
-
get storedQuery() {
|
|
36
|
-
return this.query;
|
|
37
|
-
}
|
|
38
|
-
constructor(appSearchService, overlay, searchService, systemService, notifications, translate, router, renderer, cd, storedQueriesService, capabilityService, userService, logger, storageService) {
|
|
39
|
-
this.appSearchService = appSearchService;
|
|
40
|
-
this.overlay = overlay;
|
|
41
|
-
this.searchService = searchService;
|
|
42
|
-
this.systemService = systemService;
|
|
43
|
-
this.notifications = notifications;
|
|
44
|
-
this.translate = translate;
|
|
45
|
-
this.router = router;
|
|
46
|
-
this.renderer = renderer;
|
|
47
|
-
this.cd = cd;
|
|
48
|
-
this.storedQueriesService = storedQueriesService;
|
|
49
|
-
this.capabilityService = capabilityService;
|
|
50
|
-
this.userService = userService;
|
|
51
|
-
this.logger = logger;
|
|
52
|
-
this.storageService = storageService;
|
|
53
|
-
this.PARAMS = SearchQuery.BASE_PARAMS;
|
|
54
|
-
this.OPERATOR = SearchFilter.OPERATOR;
|
|
55
|
-
this.isOwnQuery = false;
|
|
56
|
-
this.objectTypeGroups = [];
|
|
57
|
-
this.typeGroupTree = [];
|
|
58
|
-
this.expertModeQueryEmpty = false;
|
|
59
|
-
this.expertModeSupport = {
|
|
60
|
-
baseParams: [],
|
|
61
|
-
selectedGroup: null,
|
|
62
|
-
selectedType: null
|
|
63
|
-
};
|
|
64
|
-
this.filtersModel = {};
|
|
65
|
-
this.aggregationsModel = {};
|
|
66
|
-
this.sysRootContext = {
|
|
67
|
-
id: null,
|
|
68
|
-
name: ContextType.sysroot,
|
|
69
|
-
label: this.translate.instant('eo.add.title.location.common'),
|
|
70
|
-
situation: 'SEARCH',
|
|
71
|
-
mode: 'CONTEXT',
|
|
72
|
-
contextFormOptions: {
|
|
73
|
-
formModel: { name: ContextType.sysroot }
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
this._selected = null;
|
|
77
|
-
this.objectTypeGroupsStorageKey = 'eo.app.search.object.type.group.sortedList';
|
|
78
|
-
this.onExecuteSearch = new EventEmitter();
|
|
79
|
-
this.datePipe = new LocaleDatePipe(translate);
|
|
80
|
-
this.expertModeSupport.baseParams = Object.keys(SearchQuery.BASE_PARAMS).map(k => {
|
|
81
|
-
let data = SearchQuery.BASE_PARAMS[k];
|
|
82
|
-
return {
|
|
83
|
-
label: this.translate.instant('eo.global.baseparam.' + data),
|
|
84
|
-
data: data
|
|
85
|
-
};
|
|
86
|
-
});
|
|
87
|
-
this.aggregationsModel[SearchQuery.BASE_PARAMS.CREATED] = Object.keys(SearchQuery.TIME_PERIOD_BUCKETS).map(k => {
|
|
88
|
-
return {
|
|
89
|
-
key: SearchQuery.TIME_PERIOD_BUCKETS[k],
|
|
90
|
-
value: '',
|
|
91
|
-
label: this.translate.instant('eo.search.agg.time.' + SearchQuery.TIME_PERIOD_BUCKETS[k])
|
|
92
|
-
};
|
|
93
|
-
});
|
|
94
|
-
this.aggregationsModel[SearchQuery.BASE_PARAMS.MODIFIED] = Object.keys(SearchQuery.TIME_PERIOD_BUCKETS).map(k => {
|
|
95
|
-
return {
|
|
96
|
-
key: SearchQuery.TIME_PERIOD_BUCKETS[k],
|
|
97
|
-
value: '',
|
|
98
|
-
label: this.translate.instant('eo.search.agg.time.' + SearchQuery.TIME_PERIOD_BUCKETS[k])
|
|
99
|
-
};
|
|
100
|
-
});
|
|
101
|
-
this.aggregationsModel[SearchQuery.BASE_PARAMS.MIMETYPEGROUP] = Object.keys(SearchQuery.MIMETYPEGROUP_BUCKETS).map(k => {
|
|
102
|
-
return {
|
|
103
|
-
key: SearchQuery.MIMETYPEGROUP_BUCKETS[k],
|
|
104
|
-
value: '',
|
|
105
|
-
label: SearchQuery.MIMETYPEGROUP_BUCKETS[k]
|
|
106
|
-
};
|
|
107
|
-
});
|
|
108
|
-
this.aggregationsModel[SearchQuery.BASE_PARAMS.FILESIZE] = Object.keys(SearchQuery.FILE_SIZE_BUCKETS).map(k => {
|
|
109
|
-
return {
|
|
110
|
-
key: SearchQuery.FILE_SIZE_BUCKETS[k],
|
|
111
|
-
value: '',
|
|
112
|
-
label: this.translate.instant('eo.search.agg.filesize.' + SearchQuery.FILE_SIZE_BUCKETS[k])
|
|
113
|
-
};
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
onTabChange(tabId) {
|
|
117
|
-
this.activeTabId = tabId;
|
|
118
|
-
if (tabId === 'restrictType') {
|
|
119
|
-
this.appSearchService.setAggs({
|
|
120
|
-
type: {}
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
else if (tabId === 'restrictCreated') {
|
|
124
|
-
this.appSearchService.setAggs({
|
|
125
|
-
type: {},
|
|
126
|
-
created: {}
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
else if (tabId === 'restrictModification') {
|
|
130
|
-
this.appSearchService.setAggs({
|
|
131
|
-
type: {},
|
|
132
|
-
modified: {}
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
else if (tabId === 'restrictFile') {
|
|
136
|
-
this.appSearchService.setAggs({
|
|
137
|
-
type: {},
|
|
138
|
-
mimetypegroup: {},
|
|
139
|
-
filesize: {}
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
this.appSearchService.aggregate();
|
|
143
|
-
}
|
|
144
|
-
processQuery(query) {
|
|
145
|
-
// IMPORTANT: never change the local query directly
|
|
146
|
-
// use searchService, so every components subscribed to the query
|
|
147
|
-
// will get the new value
|
|
148
|
-
this.query = query;
|
|
149
|
-
this.currentContextFolderName = this.query.contextFolderTypes.length
|
|
150
|
-
? this.query.contextFolderTypes[0].name
|
|
151
|
-
: null;
|
|
152
|
-
this.isStoredQuery = query instanceof StoredQuery;
|
|
153
|
-
if (this.isStoredQuery) {
|
|
154
|
-
const user = this.userService.getCurrentUser();
|
|
155
|
-
this.isOwnQuery =
|
|
156
|
-
this.storedQuery.user.toLowerCase() === user.name.toLowerCase();
|
|
157
|
-
}
|
|
158
|
-
Object.keys(SearchQuery.BASE_PARAMS).forEach(k => this.processFilters(k));
|
|
159
|
-
// if we have an indexdata search using a context but the context was removed
|
|
160
|
-
if (!this.query.contextFolderTypes.length &&
|
|
161
|
-
this.idxSearch &&
|
|
162
|
-
this.idxSearch.contextFormOptions) {
|
|
163
|
-
this.idxSearch.contextFormOptions = null;
|
|
164
|
-
this.idxSearch.contextFolderType = null;
|
|
165
|
-
setTimeout(() => {
|
|
166
|
-
this.updateSearchFilterFromFormData();
|
|
167
|
-
}, 0);
|
|
168
|
-
}
|
|
169
|
-
// decide whether or not to setup an indexdata search
|
|
170
|
-
const updateCausedByTypeToggle = this.query.__updateCause === SearchQuery.UPDATE_CAUSE.TOGGLED_TYPE;
|
|
171
|
-
if (this.query.types.length === 1 && !updateCausedByTypeToggle) {
|
|
172
|
-
// having just one target type and a context type setup means, that we are using indexdata search
|
|
173
|
-
this.indexdataSearch(this.query.types[0], this.query.contextFolderTypes.length > 0 ? this.query.contextFolderTypes[0] : null);
|
|
174
|
-
}
|
|
175
|
-
else if (this.query.types.length === 1 &&
|
|
176
|
-
this.appSearchService.getIndexSearchQueryFilters(this.query).length > 0) {
|
|
177
|
-
// having just one target type and indexdata filters also means, that we are using indexdata search
|
|
178
|
-
this.indexdataSearch(this.query.types[0]);
|
|
179
|
-
}
|
|
180
|
-
else if (this.query.types.length > 1) {
|
|
181
|
-
// reset indexdata search otherwise, because the current query may be reset from out side (e.g. by a stored query)
|
|
182
|
-
this.idxSearch = null;
|
|
183
|
-
}
|
|
184
|
-
if (query.expertMode) {
|
|
185
|
-
this.typeGroupTree = this.appSearchService.buildTypeGroupTree();
|
|
186
|
-
}
|
|
187
|
-
this.queryScope = query.scope;
|
|
188
|
-
}
|
|
189
|
-
selectObjectType(type) {
|
|
190
|
-
/** set up the right type filter if not already done */
|
|
191
|
-
const queryTypesLength = this.query.types.length > 1 || this.query.types.length === 0;
|
|
192
|
-
const queryTypesLengthAndName = this.query.types.length === 1 && this.query.types[0].name !== type.name;
|
|
193
|
-
if (queryTypesLength || queryTypesLengthAndName) {
|
|
194
|
-
// setting object types will emit a new query. This will then take care of
|
|
195
|
-
// setting up the indexdata form
|
|
196
|
-
this.appSearchService.setQueryTypes([type]);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Sets up indexdata search for a given object type
|
|
201
|
-
* @param type - an object type
|
|
202
|
-
* @param contextFolderType - context folder type
|
|
203
|
-
*/
|
|
204
|
-
indexdataSearch(type, contextFolderType) {
|
|
205
|
-
if (!type || this.query.types.length > 1) {
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
if (this.query.types.length === 1 && this.query.types[0].name === type.name) {
|
|
209
|
-
/** even if we select a type that is already selected, we need to call aggregate as there may be context types involved */
|
|
210
|
-
this.appSearchService.setAggs({
|
|
211
|
-
type: {
|
|
212
|
-
sub: {
|
|
213
|
-
contextfoldertype: {}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}, true);
|
|
217
|
-
this.appSearchService.aggregate();
|
|
218
|
-
}
|
|
219
|
-
const isRootType = !!this.appSearchService.typesAllowedUnderSysroot.find(rT => rT.qname === type.qname);
|
|
220
|
-
this.idxSearch = {
|
|
221
|
-
type,
|
|
222
|
-
contextFolderType,
|
|
223
|
-
contextModels: isRootType ? [this.sysRootContext] : [],
|
|
224
|
-
formOptions: null
|
|
225
|
-
};
|
|
226
|
-
/** fetch context type models */
|
|
227
|
-
if (type.allowedcontexttypes.length) {
|
|
228
|
-
const toFetch = [];
|
|
229
|
-
type.allowedcontexttypes.forEach(contextType => {
|
|
230
|
-
const objType = this.systemService.getObjectType(contextType.name);
|
|
231
|
-
if (objType) {
|
|
232
|
-
toFetch.push(this.systemService.getObjectTypeForm(contextType.name, 'SEARCH', 'CONTEXT'));
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
if (toFetch.length) {
|
|
236
|
-
observableForkJoin(toFetch).subscribe(formModels => {
|
|
237
|
-
/** abstract context types should not be used */
|
|
238
|
-
this.addContextModel(formModels);
|
|
239
|
-
/** if there was a context type provided by the query, we'll setup the right model as well */
|
|
240
|
-
if (contextFolderType) {
|
|
241
|
-
const model = this.idxSearch.contextModels.find(m => m.name === contextFolderType.name);
|
|
242
|
-
if (model) {
|
|
243
|
-
this.selectContext(model);
|
|
244
|
-
}
|
|
245
|
-
else if (contextFolderType.name === ContextType.sysroot) {
|
|
246
|
-
this.selectContext(this.sysRootContext);
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
/** the provided context type does not exist any more, so just remove it */
|
|
250
|
-
this.idxSearch.contextFolderType = null;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
let formData;
|
|
257
|
-
let idxFilters = this.appSearchService.getIndexSearchQueryFilters();
|
|
258
|
-
if (idxFilters && idxFilters.length > 0) {
|
|
259
|
-
// set up form data from indexdata query filters
|
|
260
|
-
formData = idxFilters;
|
|
261
|
-
}
|
|
262
|
-
const objectType = this.systemService.getObjectType(type.name);
|
|
263
|
-
if (objectType) {
|
|
264
|
-
this.systemService
|
|
265
|
-
.getObjectTypeForm(type.name, 'SEARCH')
|
|
266
|
-
.subscribe(model => {
|
|
267
|
-
this.idxSearch.formOptions = {
|
|
268
|
-
formModel: model,
|
|
269
|
-
data: formData
|
|
270
|
-
};
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
processQueryState(queryState) {
|
|
275
|
-
this.loading = false;
|
|
276
|
-
this.queryState = queryState;
|
|
277
|
-
if (this.idxSearch) {
|
|
278
|
-
this.idxSearch.contextAggregations = {};
|
|
279
|
-
if (queryState.aggregations.contextType.size) {
|
|
280
|
-
this.idxSearch.contextAggregations = this.buildContextAggregations(queryState.aggregations.contextType);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
// save aggregations values
|
|
284
|
-
if (!this.aggregationsModel[SearchQuery.BASE_PARAMS.TYPE] || !this.query.types.length || queryState.lastChange !== SearchQuery.BASE_PARAMS.TYPE) {
|
|
285
|
-
this.aggregationsModel[SearchQuery.BASE_PARAMS.TYPE] = new Map(queryState.aggregations.type);
|
|
286
|
-
}
|
|
287
|
-
this.syncAggregations(SearchQuery.BASE_PARAMS.CREATED, SearchFilter.OPERATOR.RANGE);
|
|
288
|
-
this.syncAggregations(SearchQuery.BASE_PARAMS.MODIFIED, SearchFilter.OPERATOR.RANGE);
|
|
289
|
-
this.syncAggregations(SearchQuery.BASE_PARAMS.MIMETYPEGROUP, SearchFilter.OPERATOR.IN);
|
|
290
|
-
this.syncAggregations(SearchQuery.BASE_PARAMS.FILESIZE, SearchFilter.OPERATOR.RANGE);
|
|
291
|
-
}
|
|
292
|
-
buildContextAggregations(contextType) {
|
|
293
|
-
let contextAggregations = {};
|
|
294
|
-
contextType.forEach((value, key) => contextAggregations[key] = value);
|
|
295
|
-
return contextAggregations;
|
|
296
|
-
}
|
|
297
|
-
processFilters(k) {
|
|
298
|
-
let f = this.query.filters.find(ff => ff.property === SearchQuery.BASE_PARAMS[k]);
|
|
299
|
-
if (!f) {
|
|
300
|
-
this.filtersModel[SearchQuery.BASE_PARAMS[k]] = {
|
|
301
|
-
value: null,
|
|
302
|
-
multiValue: [],
|
|
303
|
-
innerValue: []
|
|
304
|
-
};
|
|
305
|
-
}
|
|
306
|
-
else if (!this.filtersModel[f.property] ||
|
|
307
|
-
this.filtersModel[f.property].filter !== f) {
|
|
308
|
-
this.filtersModel[f.property] = {};
|
|
309
|
-
this.filtersModel[f.property].filter = f;
|
|
310
|
-
let value = typeof f.firstValue === 'string' &&
|
|
311
|
-
f.operator === SearchFilter.OPERATOR.IN
|
|
312
|
-
? JSON.parse(f.firstValue)
|
|
313
|
-
: typeof f.firstValue !== 'boolean' ? [f.firstValue] : f.firstValue;
|
|
314
|
-
if (f.operator === SearchFilter.OPERATOR.RANGE) {
|
|
315
|
-
this.filtersModel[f.property].multiValue = value;
|
|
316
|
-
this.filtersModel[f.property].value = null;
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
if (f.property === SearchQuery.BASE_PARAMS.CREATED ||
|
|
320
|
-
f.property === SearchQuery.BASE_PARAMS.MODIFIED) {
|
|
321
|
-
value = new RangeValue(f.operator, f.firstValue, f.secondValue);
|
|
322
|
-
}
|
|
323
|
-
this.filtersModel[f.property].value = value;
|
|
324
|
-
this.filtersModel[f.property].multiValue = null;
|
|
325
|
-
}
|
|
326
|
-
this.filtersModel[f.property].innerValue =
|
|
327
|
-
value instanceof Array ? value : [value];
|
|
328
|
-
this.filtersModel[f.property].label = [];
|
|
329
|
-
this.filtersModel[f.property].innerValue.forEach((v, i) => {
|
|
330
|
-
if (f.property === SearchQuery.BASE_PARAMS.CREATOR ||
|
|
331
|
-
f.property === SearchQuery.BASE_PARAMS.MODIFIER) {
|
|
332
|
-
this.filtersModel[f.property].label[i] = new Subject();
|
|
333
|
-
}
|
|
334
|
-
else {
|
|
335
|
-
this.filtersModel[f.property].label[i] = observableOf(this.renderFilter(f, v));
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
syncAggregations(name, operator) {
|
|
341
|
-
this.aggregationsModel[name].forEach(agg => {
|
|
342
|
-
let a = this.queryState.aggregations[name].find(aa => aa.key === agg.key);
|
|
343
|
-
if (a && a.value !== agg.value) {
|
|
344
|
-
agg.value = a.value;
|
|
345
|
-
}
|
|
346
|
-
else if (!a && this.queryState.lastChange !== name) {
|
|
347
|
-
agg.value = '';
|
|
348
|
-
}
|
|
349
|
-
agg.selected = this.isFilterActive(name, operator, agg.key);
|
|
350
|
-
agg.saved = !a && this.queryState.lastChange === name;
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
renderFilter(filter, value) {
|
|
354
|
-
if (value instanceof RangeValue) {
|
|
355
|
-
return this.createDateRestriction(filter);
|
|
356
|
-
}
|
|
357
|
-
else if (typeof value === 'string' && this.aggregationsModel[filter.property]) {
|
|
358
|
-
let agg = this.aggregationsModel[filter.property].find(a => a.key === value);
|
|
359
|
-
return agg.label;
|
|
360
|
-
}
|
|
361
|
-
return value;
|
|
362
|
-
}
|
|
363
|
-
createDateRestriction(filter) {
|
|
364
|
-
switch (filter.operator) {
|
|
365
|
-
case SearchFilter.OPERATOR.RANGE:
|
|
366
|
-
return this.translate.instant(`eo.search.agg.time.${filter.firstValue}`);
|
|
367
|
-
case SearchFilter.OPERATOR.EQUAL:
|
|
368
|
-
return `= ${this.datePipe.transform(filter.firstValue, 'eoShortDate')}`;
|
|
369
|
-
case SearchFilter.OPERATOR.INTERVAL_INCLUDE_BOTH:
|
|
370
|
-
return `${this.datePipe.transform(filter.firstValue, 'eoShort')} - ${this.datePipe.transform(filter.secondValue, 'eoShort')}`;
|
|
371
|
-
case SearchFilter.OPERATOR.GREATER_OR_EQUAL:
|
|
372
|
-
return `${this.translate.instant('eo.search.agg.time.span.since')} ${this.datePipe.transform(filter.firstValue, 'eoShort')}`;
|
|
373
|
-
case SearchFilter.OPERATOR.LESS_OR_EQUAL:
|
|
374
|
-
return `${this.translate.instant('eo.search.agg.time.span.until')} ${this.datePipe.transform(filter.firstValue, 'eoShort')}`;
|
|
375
|
-
default:
|
|
376
|
-
return `(${filter.operator}) ${this.datePipe.transform(filter.firstValue, 'eoShort')}`;
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
resolveLabel(model, value) {
|
|
380
|
-
model.label.forEach((l, i) => l.next(value[i].title));
|
|
381
|
-
}
|
|
382
|
-
resolveSelection(aggs, key, selected) {
|
|
383
|
-
return aggs
|
|
384
|
-
.filter(a => selected ? a.key !== key && a.selected : a.key === key || a.selected)
|
|
385
|
-
.map(a => a.key);
|
|
386
|
-
}
|
|
387
|
-
resetExpertModeInput() {
|
|
388
|
-
this.query.term = '';
|
|
389
|
-
this.appSearchService.aggregate();
|
|
390
|
-
}
|
|
391
|
-
toggleExpertMode() {
|
|
392
|
-
if (this.typeGroupTree.length === 0) {
|
|
393
|
-
this.typeGroupTree = this.appSearchService.buildTypeGroupTree();
|
|
394
|
-
}
|
|
395
|
-
this.appSearchService.toggleExpertMode();
|
|
396
|
-
this.cd.detectChanges();
|
|
397
|
-
this.changeSearchInputFocus();
|
|
398
|
-
}
|
|
399
|
-
setQueryScope(scope) {
|
|
400
|
-
this.appSearchService.setQueryScope(scope);
|
|
401
|
-
}
|
|
402
|
-
xpSelectGroup(group) {
|
|
403
|
-
this.expertModeSupport.selectedGroup = group;
|
|
404
|
-
this.expertModeSupport.selectedType = null;
|
|
405
|
-
}
|
|
406
|
-
xpSelectType(type) {
|
|
407
|
-
this.expertModeSupport.selectedType = type;
|
|
408
|
-
}
|
|
409
|
-
xpAddToTerm(str) {
|
|
410
|
-
let term;
|
|
411
|
-
if (!this.query.term) {
|
|
412
|
-
term = str;
|
|
413
|
-
}
|
|
414
|
-
else {
|
|
415
|
-
term = this.query.term + ' ' + str;
|
|
416
|
-
}
|
|
417
|
-
this.query.term = term + ':';
|
|
418
|
-
this.expertInput.nativeElement.focus();
|
|
419
|
-
}
|
|
420
|
-
toggleType(_type) {
|
|
421
|
-
// do not directly toggle _type on the query, instead use the
|
|
422
|
-
// searchService to update the query store
|
|
423
|
-
this.appSearchService.toggleQueryType(_type);
|
|
424
|
-
}
|
|
425
|
-
isTypeActive(_type) {
|
|
426
|
-
return !!this.query.types.find(t => t.id === _type.id);
|
|
427
|
-
}
|
|
428
|
-
isTypeSaved(_type) {
|
|
429
|
-
return (!this.queryState.aggregations.type.get(_type.name) && this.queryState.lastChange === SearchQuery.BASE_PARAMS.TYPE);
|
|
430
|
-
}
|
|
431
|
-
getAggregationCount(_type) {
|
|
432
|
-
return ((this.isTypeSaved(_type) ? this.aggregationsModel[SearchQuery.BASE_PARAMS.TYPE].get(_type.name) : this.queryState.aggregations.type.get(_type.name)) || '');
|
|
433
|
-
}
|
|
434
|
-
buildFilter(filterType, operator, key) {
|
|
435
|
-
if (key instanceof RangeValue) {
|
|
436
|
-
return new SearchFilter(filterType, key.operator, key.firstValue, key.secondValue, { time: key.operator !== this.OPERATOR.EQUAL, timezone: false });
|
|
437
|
-
}
|
|
438
|
-
else {
|
|
439
|
-
return new SearchFilter(filterType, operator, key);
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
setFilter(filterType, operator, key, form) {
|
|
443
|
-
let filter = this.buildFilter(filterType, operator, key);
|
|
444
|
-
let empty = this.isEmpty(filter);
|
|
445
|
-
let activeFilter = this.query.filters.find(ff => ff.property === filter.property);
|
|
446
|
-
let duplicate = this.isFilterActive(filterType, operator, key);
|
|
447
|
-
if (empty && activeFilter && activeFilter.operator !== SearchFilter.OPERATOR.RANGE) {
|
|
448
|
-
this.appSearchService.removeQueryFilter(filter);
|
|
449
|
-
}
|
|
450
|
-
else if (!empty && !duplicate) {
|
|
451
|
-
this.appSearchService.addQueryFilter(filter);
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
toggleFilter(filterType, operator, key, selected) {
|
|
455
|
-
let filter = this.buildFilter(filterType, operator, key);
|
|
456
|
-
if (filterType === this.PARAMS.FILESIZE) {
|
|
457
|
-
let folderFilter = this.buildFilter('folder', 'eq', false);
|
|
458
|
-
this.appSearchService.toggleQueryFilters([filter, folderFilter], !selected);
|
|
459
|
-
}
|
|
460
|
-
else {
|
|
461
|
-
this.appSearchService.toggleQueryFilter(filter, !selected);
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
isEmpty(value) {
|
|
465
|
-
return (((value instanceof RangeValue || value instanceof SearchFilter) &&
|
|
466
|
-
this.isEmpty(value.firstValue) &&
|
|
467
|
-
this.isEmpty(value.secondValue)) ||
|
|
468
|
-
(value == null || value.length === 0));
|
|
469
|
-
}
|
|
470
|
-
isFilterActive(filterType, operator, key) {
|
|
471
|
-
let f = this.buildFilter(filterType, operator, key);
|
|
472
|
-
return !!this.query.filters.find(ff => ff.match(f.property, f.operator, f.firstValue, f.secondValue));
|
|
473
|
-
}
|
|
474
|
-
resetFilter(model, value) {
|
|
475
|
-
if (model.innerValue instanceof Array && model.innerValue.length > 1) {
|
|
476
|
-
let filter = this.buildFilter(model.filter.property, model.filter.operator, model.innerValue.filter(f => f !== value));
|
|
477
|
-
this.appSearchService.addQueryFilter(filter);
|
|
478
|
-
}
|
|
479
|
-
else {
|
|
480
|
-
this.appSearchService.removeQueryFilter(model.filter);
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
autocompleteSuggest(evt) {
|
|
484
|
-
setTimeout(() => {
|
|
485
|
-
let v = [];
|
|
486
|
-
// also trigger aggregations search
|
|
487
|
-
this.autocompleteSelect();
|
|
488
|
-
if (evt) {
|
|
489
|
-
this.appSearchService
|
|
490
|
-
.autocomplete(evt)
|
|
491
|
-
.pipe(switchMap(res => observableFrom(res).pipe(pluck('value'))))
|
|
492
|
-
.subscribe(res => v.push(res), () => { }, () => (this.autocompleteResults = v));
|
|
493
|
-
}
|
|
494
|
-
}, 1000);
|
|
495
|
-
}
|
|
496
|
-
expertTermChanged() {
|
|
497
|
-
this.expertModeQueryEmpty = false;
|
|
498
|
-
}
|
|
499
|
-
autocompleteSelect() {
|
|
500
|
-
this.loading = this.appSearchService.aggregate();
|
|
501
|
-
}
|
|
502
|
-
autocompletePaste(e) {
|
|
503
|
-
setTimeout(() => {
|
|
504
|
-
this.query.term = e.target.value;
|
|
505
|
-
this.autocompleteSelect();
|
|
506
|
-
}, 0);
|
|
507
|
-
}
|
|
508
|
-
executeSearch() {
|
|
509
|
-
this.expertModeQueryEmpty = false;
|
|
510
|
-
if (this.query.expertMode) {
|
|
511
|
-
// in expert search mode we pre-fetch results before executing the actual search
|
|
512
|
-
this.appSearchService.getSearchState({ aggs: { type: {} }, ...this.query.getQueryJson() }).subscribe((queryState) => {
|
|
513
|
-
// only execute the actual query when we've found something
|
|
514
|
-
if (!queryState.isEmpty) {
|
|
515
|
-
this.triggerSearch();
|
|
516
|
-
}
|
|
517
|
-
else {
|
|
518
|
-
this.expertModeQueryEmpty = true;
|
|
519
|
-
}
|
|
520
|
-
}, Utils.throw(() => {
|
|
521
|
-
this.logger.error('Error fetching search result');
|
|
522
|
-
this.expertModeQueryEmpty = true;
|
|
523
|
-
}));
|
|
524
|
-
}
|
|
525
|
-
else {
|
|
526
|
-
this.triggerSearch();
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
// execute the actual search by routing to the result state which then will execute the
|
|
530
|
-
// query and display the results
|
|
531
|
-
triggerSearch() {
|
|
532
|
-
this.query.resolveReference = true;
|
|
533
|
-
const uriParam = encodeURIComponent(Utils.formDataStringify(this.query.getQueryJson()));
|
|
534
|
-
this._overlayRef.close();
|
|
535
|
-
this.router.navigate([{ outlets: { modal: null } }]).then(() => {
|
|
536
|
-
const uriParamQuery = { queryParams: { query: uriParam } };
|
|
537
|
-
this.router.navigate(['/result'], uriParamQuery);
|
|
538
|
-
});
|
|
539
|
-
}
|
|
540
|
-
removeTerm() {
|
|
541
|
-
this.appSearchService.setTerm('');
|
|
542
|
-
}
|
|
543
|
-
removeType(type) {
|
|
544
|
-
if (this.idxSearch) {
|
|
545
|
-
this.exitIndexdataSearch();
|
|
546
|
-
}
|
|
547
|
-
else {
|
|
548
|
-
this.appSearchService.toggleQueryType(type);
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
removeContextType() {
|
|
552
|
-
this.appSearchService.setContextType(null);
|
|
553
|
-
}
|
|
554
|
-
removeFilter(filter) {
|
|
555
|
-
this.appSearchService.removeQueryFilter(filter);
|
|
556
|
-
// if we are in indesdata search mode, removing a filter that is no baseparam filter
|
|
557
|
-
// requires the from model to be updated
|
|
558
|
-
if (this.idxSearch && !this.appSearchService.isBaseParamFilter(filter)) {
|
|
559
|
-
// todo: update form model/data
|
|
560
|
-
let idxFilters = this.appSearchService.getIndexSearchQueryFilters();
|
|
561
|
-
if (idxFilters && idxFilters.length > 0) {
|
|
562
|
-
// set up form data from indexdata query filters
|
|
563
|
-
this.idxSearch.formOptions.data = idxFilters;
|
|
564
|
-
this.indexdataForm.setFormData(idxFilters);
|
|
565
|
-
}
|
|
566
|
-
else {
|
|
567
|
-
// if no filters are present reset the form
|
|
568
|
-
this.idxSearch.formOptions.data = {};
|
|
569
|
-
this.indexdataForm.resetForm();
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
addContextModel(formModels) {
|
|
574
|
-
let models = [...formModels];
|
|
575
|
-
this.idxSearch.contextModels.push(...models);
|
|
576
|
-
this.idxSearch.contextModels.sort(Utils.sortValues('label'));
|
|
577
|
-
}
|
|
578
|
-
exitIndexdataSearch() {
|
|
579
|
-
this.appSearchService.exitIndexdataSearch();
|
|
580
|
-
this.idxSearch = null;
|
|
581
|
-
}
|
|
582
|
-
setContext(contextFolderName) {
|
|
583
|
-
if (contextFolderName && this.currentContextFolderName !== contextFolderName) {
|
|
584
|
-
this.currentContextFolderName = contextFolderName;
|
|
585
|
-
const contextType = this.systemService.getObjectType(contextFolderName);
|
|
586
|
-
if (contextFolderName === ContextType.sysroot) {
|
|
587
|
-
this.appSearchService.setContextType({ name: ContextType.sysroot, label: ContextType.sysroot });
|
|
588
|
-
}
|
|
589
|
-
else if (contextType) {
|
|
590
|
-
this.appSearchService.setContextType(contextType);
|
|
591
|
-
}
|
|
592
|
-
else {
|
|
593
|
-
this.logger.error(`Context type '${contextFolderName}' not found.`);
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
|
-
else {
|
|
597
|
-
this.appSearchService.setContextType(null);
|
|
598
|
-
this.currentContextFolderName = null;
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
/**
|
|
602
|
-
* Selects a context type for the current search
|
|
603
|
-
* @param ctx The context form model
|
|
604
|
-
*/
|
|
605
|
-
selectContext(ctx) {
|
|
606
|
-
if (this.idxSearch.contextFormOptions && this.idxSearch.contextFormOptions.formModel.name === ctx.name) {
|
|
607
|
-
this.appSearchService.setContextType(null);
|
|
608
|
-
}
|
|
609
|
-
else {
|
|
610
|
-
let context;
|
|
611
|
-
if (ctx.name === ContextType.sysroot) {
|
|
612
|
-
context = ctx;
|
|
613
|
-
}
|
|
614
|
-
else {
|
|
615
|
-
context = this.systemService.getObjectType(ctx.name);
|
|
616
|
-
this.idxSearch.contextFolderType = context;
|
|
617
|
-
}
|
|
618
|
-
this.appSearchService.setContextType(context);
|
|
619
|
-
let formData = {};
|
|
620
|
-
let idxFilters = this.appSearchService.getIndexSearchQueryFilters();
|
|
621
|
-
if (idxFilters && idxFilters.length > 0) {
|
|
622
|
-
formData = idxFilters;
|
|
623
|
-
}
|
|
624
|
-
this.idxSearch.contextFormOptions = { formModel: ctx, data: formData };
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
onIndexDataChanged(event) {
|
|
628
|
-
// only trigger when values are changed as changes may also appear when scripts
|
|
629
|
-
// change other form element properties (eg. readonly, required flag)
|
|
630
|
-
if (event.indexdataChanged) {
|
|
631
|
-
this.updateSearchFilterFromFormData();
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
updateSearchFilterFromFormData() {
|
|
635
|
-
if (!this.indexdataForm) {
|
|
636
|
-
return;
|
|
637
|
-
}
|
|
638
|
-
// add metadata filters for each form data entry
|
|
639
|
-
let idxFilters = [];
|
|
640
|
-
let formData = this.indexdataForm.getFormData();
|
|
641
|
-
if (this.contextForm) {
|
|
642
|
-
formData = Object.assign(formData, this.contextForm.getFormData());
|
|
643
|
-
}
|
|
644
|
-
for (let key of Object.keys(formData)) {
|
|
645
|
-
const filters = this.searchService.getSearchFilter(this.query.types, key, formData[key]).map(filter => {
|
|
646
|
-
// the search service does not like newline chars in case of multiline fields
|
|
647
|
-
if (Array.isArray(filter.firstValue)) {
|
|
648
|
-
filter.firstValue = filter.firstValue.map(value => value.replace(/\n/g, ' '));
|
|
649
|
-
}
|
|
650
|
-
else if (typeof filter.firstValue === 'string') {
|
|
651
|
-
filter.firstValue = filter.firstValue.replace(/\n/g, ' ');
|
|
652
|
-
}
|
|
653
|
-
return filter;
|
|
654
|
-
});
|
|
655
|
-
filters.forEach(f => idxFilters.push(f));
|
|
656
|
-
}
|
|
657
|
-
this.appSearchService.setIndexSearchQueryFilters(idxFilters);
|
|
658
|
-
}
|
|
659
|
-
/**
|
|
660
|
-
* Gets the object type element for a filter, to be able to show the
|
|
661
|
-
* label for a filter in the search summary.
|
|
662
|
-
*
|
|
663
|
-
* @param filter - the filter to fetch object type element for
|
|
664
|
-
*/
|
|
665
|
-
getObjectTypeElementLabel(filter) {
|
|
666
|
-
let ot = this.appSearchService.getTargetTypeElementByName(filter.property);
|
|
667
|
-
return ot ? ot.label : filter.property + ' - ' + filter.firstValue;
|
|
668
|
-
}
|
|
669
|
-
saveQuery() {
|
|
670
|
-
// const queryParams: NavigationExtras = {queryParamsHandling : 'preserve'};
|
|
671
|
-
this._overlayRef.close();
|
|
672
|
-
this.router
|
|
673
|
-
.navigate([{ outlets: { modal: null } }], { replaceUrl: true })
|
|
674
|
-
.then(() => this.router.navigate(['/stored-queries'], { queryParams: { create: true } }));
|
|
675
|
-
}
|
|
676
|
-
updateStoredQuery() {
|
|
677
|
-
if (this.query instanceof StoredQuery) {
|
|
678
|
-
this.router.navigate([{ outlets: { modal: null } }], { replaceUrl: true });
|
|
679
|
-
this.storedQueriesService.saveStoredQuery(this.query).subscribe(res => {
|
|
680
|
-
this._overlayRef.close();
|
|
681
|
-
this.notifications.success(this.translate.instant('eo.search.storedquery.save.success'));
|
|
682
|
-
}, Utils.throw(null, this.translate.instant('eo.search.storedquery.save.error')));
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
resetQuery() {
|
|
686
|
-
this.appSearchService.reset();
|
|
687
|
-
this.isOwnQuery = false;
|
|
688
|
-
this.activeTabId = undefined;
|
|
689
|
-
if (this.idxSearch) {
|
|
690
|
-
this.exitIndexdataSearch();
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
closeSearchMenu() {
|
|
694
|
-
this._overlayRef.close();
|
|
695
|
-
}
|
|
696
|
-
moveObjectTypeGroup(groupLabel, direction) {
|
|
697
|
-
let index = this.objectTypeGroups.findIndex(group => groupLabel === group.label);
|
|
698
|
-
let newIndex = direction === 'left' ? index - 1 : index + 1;
|
|
699
|
-
while (index < 0) {
|
|
700
|
-
index += this.objectTypeGroups.length;
|
|
701
|
-
}
|
|
702
|
-
while (newIndex < 0) {
|
|
703
|
-
newIndex += this.objectTypeGroups.length;
|
|
704
|
-
}
|
|
705
|
-
if (newIndex >= this.objectTypeGroups.length) {
|
|
706
|
-
let k = newIndex - this.objectTypeGroups.length + 1;
|
|
707
|
-
while (k--) {
|
|
708
|
-
this.objectTypeGroups.push(undefined);
|
|
709
|
-
}
|
|
710
|
-
}
|
|
711
|
-
this.objectTypeGroups.splice(newIndex, 0, this.objectTypeGroups.splice(index, 1)[0]);
|
|
712
|
-
this.storageService.setItem(this.objectTypeGroupsStorageKey, this.objectTypeGroups.map(group => group.label));
|
|
713
|
-
}
|
|
714
|
-
focusSearchInput() {
|
|
715
|
-
if (this.searchInput) {
|
|
716
|
-
// TODO: this.searchInput.inputEL.nativeElement.focus();
|
|
717
|
-
this.cd.detectChanges();
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
changeSearchInputFocus() {
|
|
721
|
-
if (this.query.expertMode) {
|
|
722
|
-
this.renderer.selectRootElement('.expert-search__input').focus();
|
|
723
|
-
}
|
|
724
|
-
else {
|
|
725
|
-
this.focusSearchInput();
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
ngOnInit() {
|
|
729
|
-
this.capabilities = this.capabilityService.getCapabilities();
|
|
730
|
-
this.objectTypeGroups = this.appSearchService.objectTypeGroups;
|
|
731
|
-
this.objectTypeGroups[0].types = this.objectTypeGroups[0].types.filter(type => type.qname !== 'sysfolder' && type.qname !== 'sysdocument' && type.qname !== 'sysobject');
|
|
732
|
-
let sortedObjectTypeGroupLabels = this.storageService.getItem(this.objectTypeGroupsStorageKey);
|
|
733
|
-
let synced = true;
|
|
734
|
-
if (sortedObjectTypeGroupLabels && sortedObjectTypeGroupLabels.length === this.objectTypeGroups.length) {
|
|
735
|
-
for (let i = 0; i < this.objectTypeGroups.length; i++) {
|
|
736
|
-
if (!sortedObjectTypeGroupLabels.find(group => group === this.objectTypeGroups[i].label)) {
|
|
737
|
-
synced = false;
|
|
738
|
-
break;
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
if (synced) {
|
|
742
|
-
this.objectTypeGroups = [...this.objectTypeGroups].sort((a, b) => sortedObjectTypeGroupLabels.indexOf(a.label) - sortedObjectTypeGroupLabels.indexOf(b.label));
|
|
743
|
-
}
|
|
744
|
-
}
|
|
745
|
-
this.querySubscription = this.appSearchService.query$.subscribe((query) => this.processQuery(query));
|
|
746
|
-
// subscribe to query state as well to fetch result count and aggregations as they change
|
|
747
|
-
this.queryStateSubscription = this.appSearchService.queryState$.subscribe((queryState) => this.processQueryState(queryState));
|
|
748
|
-
this.appSearchService.aggregate();
|
|
749
|
-
}
|
|
750
|
-
ngAfterViewInit() {
|
|
751
|
-
setTimeout(() => {
|
|
752
|
-
this.searchInput.focusInput();
|
|
753
|
-
});
|
|
754
|
-
this._overlayRef = this.overlay.open(this.tplSearch, null, {
|
|
755
|
-
centered: false
|
|
756
|
-
});
|
|
757
|
-
this._overlayRef.afterClosed$.subscribe({
|
|
758
|
-
next: () => {
|
|
759
|
-
const queryParams = { queryParamsHandling: 'preserve' };
|
|
760
|
-
this.router.navigate([{ outlets: { modal: null } }], queryParams);
|
|
761
|
-
}
|
|
762
|
-
});
|
|
763
|
-
}
|
|
764
|
-
ngOnDestroy() {
|
|
765
|
-
this.appSearchService.resetAggs();
|
|
766
|
-
this.querySubscription.unsubscribe();
|
|
767
|
-
this.queryStateSubscription.unsubscribe();
|
|
768
|
-
}
|
|
769
|
-
}
|
|
770
|
-
AppSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AppSearchComponent, deps: [{ token: i1.AppSearchService }, { token: i2.YvcOverlayService }, { token: i3.SearchService }, { token: i3.SystemService }, { token: i3.NotificationsService }, { token: i3.TranslateService }, { token: i4.Router }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i3.StoredQueriesService }, { token: i3.CapabilitiesService }, { token: i3.UserService }, { token: i3.Logger }, { token: i3.LocalStorageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
771
|
-
AppSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: AppSearchComponent, selector: "eo-app-search", outputs: { onExecuteSearch: "onExecuteSearch" }, viewQueries: [{ propertyName: "tplSearch", first: true, predicate: ["tplSearch"], descendants: true, read: TemplateRef }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "expertInput", first: true, predicate: ["xpinput"], descendants: true }, { propertyName: "indexdataForm", first: true, predicate: ["idxform"], descendants: true }, { propertyName: "contextForm", first: true, predicate: ["ctxform"], descendants: true }], ngImport: i0, template: "<!-- <eo-dialog [visible]=\"true\" [styleClass]=\"'eo-app-search-dialog'\" [align]=\"'start'\" [minWidth]=\"'80vw'\"\n [minHeight]=\"'100vh'\" (hide)=\"closeSearchMenu($event)\"> -->\n<!-- <yvc-dialog [options]=\"{lightDismiss: true}\" [template]=\"tplSearch\" (closed)=\"closeSearchMenu()\"></yvc-dialog> -->\n<ng-template #tplSearch>\n\n <div class=\"eo-app-search\" [ngClass]=\"{expert: query.expertMode}\" eoRtlAware=\"full\" *ngIf=\"query\">\n\n <div class=\"head\">\n\n <div class=\"search\">\n <form (submit)=\"executeSearch()\">\n <div class=\"title\" translate>eo.search</div>\n\n <eo-query-scope-select [selection]=\"queryScope\" (select)=\"setQueryScope($event)\"></eo-query-scope-select>\n\n <div class=\"search-box\">\n\n <yvc-autocomplete *ngIf=\"!query.expertMode; else expertInput\" #searchInput\n [ngModelOptions]=\"{standalone: true}\" [(ngModel)]=\"query.term\"\n (autocompleteFnc)=\"autocompleteSuggest($event)\" [autocompleteValues]=\"autocompleteResults\"\n (suggestionSelect)=\"autocompleteSelect()\" [minLength]=\"3\" (keydown.enter)=\"executeSearch()\" (paste)=\"autocompletePaste($event)\">\n </yvc-autocomplete>\n\n <ng-template #expertInput>\n <input autofocus=\"autofocus\" class=\"expert-search__input\" #xpinput type=\"text\"\n (ngModelChange)=\"expertTermChanged()\" [(ngModel)]=\"query.term\" [ngModelOptions]=\"{standalone: true}\">\n </ng-template>\n\n <button class=\"btn expert-mode\" type=\"button\" (click)=\"toggleExpertMode()\">\n <!--<span translate>eo.search.mode.expert</span>-->\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\n [iconTitle]=\"('eo.search.mode.expert' | translate)\" *ngIf=\"!query?.expertMode; else close\"></eo-icon>\n <ng-template #close>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\n [iconTitle]=\"('eo.search.mode.expert.close' | translate)\"></eo-icon>\n </ng-template>\n </button>\n\n <button type=\"button\" class=\"btn expert-mode expert-mode__reset\" [ngClass]=\"{active: query.term}\"\n (click)=\"resetExpertModeInput()\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\n [iconTitle]=\"('eo.search.clear.search' | translate)\"></eo-icon>\n </button>\n\n <button class=\"btn btn-default\" type=\"submit\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </div>\n </form>\n </div>\n\n <div class=\"result\" *ngIf=\"!loading; else spinner\">{{queryState.totalCount | localeDecimal}}</div>\n <ng-template #spinner>\n <eo-loading-spinner class=\"search-aggregator__loader\" [size]=\"'medium'\" [mode]=\"'dark'\"></eo-loading-spinner>\n </ng-template>\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\n [iconTitle]=\"('eo.search.close' | translate)\" (click)=\"closeSearchMenu()\"></eo-icon>\n\n </div>\n\n <div class=\"body\" *ngIf=\"!query.expertMode; else expert\">\n\n <yvc-tabs (tabChange)=\"onTabChange($event)\">\n\n <!-- object type select -->\n <ng-template [yvcTab]=\"{id: 'restrictType', label: 'eo.search.restrict.type' | translate}\">\n\n <div class=\"object-types rest-box-container\" [ngClass]=\"{idxenabled: query.types.length < 1}\"\n *ngIf=\"objectTypeGroups && !idxSearch\">\n <div class=\"group rest-box\" *ngFor=\"let group of objectTypeGroups; let i = index\">\n <div class=\"group-header\">\n <h3 *ngIf=\"group.label !== '0'\">{{group.label}}</h3>\n <h3 *ngIf=\"group.label === '0'\" translate>{{'eo.search.group.general'}}</h3>\n <div class=\"move-icons\">\n <eo-icon *ngIf=\"i !== 0\" class=\"move-left-icon\" (click)=\"moveObjectTypeGroup(group.label, 'left')\" [iconSrc]=\"'assets/_default/svg/ic_arrow_left.svg'\"></eo-icon>\n <eo-icon *ngIf=\"i !== objectTypeGroups.length - 1\" class=\"move-right-icon\" (click)=\"moveObjectTypeGroup(group.label, 'right')\" [iconSrc]=\"'assets/_default/svg/ic_arrow_right.svg'\"></eo-icon>\n </div>\n </div>\n <div class=\"type\" *ngFor=\"let type of group.types\"\n [ngClass]=\"{context: type.isContextFolder, folder: type.isFolder, abstract: type.isAbstract, selected: isTypeActive(type), saved: isTypeSaved(type)}\">\n\n <div class=\"checkbox\" (click)=\"toggleType(type)\">\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <div class=\"item\" (click)=\"selectObjectType(type)\">\n <eo-icon [objectType]=\"type\"></eo-icon>\n <div class=\"label\">{{type.label}} {{type.isAbstract ? '('+ ('eo.search.type.abstract' | translate) +\n ')' : ''}}</div>\n <div class=\"count\">{{getAggregationCount(type) | localeDecimal}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"indexdata-search\" *ngIf=\"idxSearch\">\n <h2>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_arrow_back.svg'\"\n (click)=\"exitIndexdataSearch()\"></eo-icon>\n <span translate [translateParams]=\"{type: idxSearch.type.label}\">eo.search.objecttype.form</span>\n </h2>\n\n <div class=\"context\" *ngIf=\"idxSearch.contextModels.length\">\n\n <div class=\"context-select\">\n <div translate>eo.search.objecttype.form.context</div>\n <div class=\"spacer\"></div>\n\n <eo-context-search *ngFor=\"let ctx of idxSearch.contextModels; index as i\" [ctx]=\"ctx\" [query]=\"query\"\n [selected]=\"currentContextFolderName === ctx.name\"\n [disabled]=\"(currentContextFolderName && currentContextFolderName !== ctx.name)\"\n [idxSearch]=\"idxSearch\" (setContext)=\"setContext($event)\">\n </eo-context-search>\n </div>\n\n <section class=\"context form\">\n <eo-object-form class=\"dark\" #ctxform\n *ngIf=\"idxSearch.contextFormOptions && idxSearch.contextFormOptions?.formModel?.elements?.length\"\n [formOptions]=\"idxSearch.contextFormOptions\" (statusChanged)=\"onIndexDataChanged($event)\">\n </eo-object-form>\n </section>\n </div>\n\n\n <section class=\"object-type form\" *ngIf=\"idxSearch.formOptions\">\n <eo-object-form #idxform [formOptions]=\"idxSearch.formOptions\"\n (statusChanged)=\"onIndexDataChanged($event)\" (onFormReady)=\"idxform.focusForm()\">\n </eo-object-form>\n </section>\n </div>\n </ng-template>\n\n <!-- created tab -->\n <ng-template [yvcTab]=\"{id: 'restrictCreated', label: 'eo.search.restrict.creation' | translate }\">\n <div class=\"created rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-timespan\">\n <h3 translate>eo.search.agg.time.span</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.CREATED]\"\n (click)=\"toggleFilter(PARAMS.CREATED, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-timespan-custom\">\n <h3 translate>eo.search.agg.time.span.custom</h3>\n <form #createdForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\n <eo-datetime-range #createdField [(ngModel)]=\"filtersModel[PARAMS.CREATED].value\" name=\"range\"\n [operator]=\"filtersModel[PARAMS.CREATED].value ? filtersModel[PARAMS.CREATED].value.operator : OPERATOR.EQUAL\"\n [withTime]=\"createdField.searchOption && createdField.searchOption !== OPERATOR.EQUAL\"\n (ngModelChange)=\"setFilter(PARAMS.CREATED, OPERATOR.EQUAL, $event, createdForm)\">\n </eo-datetime-range>\n </eo-form-input>\n </form>\n </div>\n\n <div class=\"rest-box box-creator\">\n <h3 translate>eo.search.agg.creator</h3>\n <form #creatorForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.createdby' | translate\">\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.CREATOR].value\" name=\"creator\"\n (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.CREATOR], $event)\" [situation]=\"'SEARCH'\"\n (ngModelChange)=\"setFilter(PARAMS.CREATOR, OPERATOR.IN, $event, creatorForm)\"></eo-organization>\n </eo-form-input>\n </form>\n </div>\n\n </div>\n </ng-template>\n\n <ng-template [yvcTab]=\"{id: 'restrictModification', label: 'eo.search.restrict.modification' | translate}\">\n <div class=\"modified rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-timespan\">\n <h3 translate>eo.search.agg.time.span</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MODIFIED]\"\n (click)=\"toggleFilter(PARAMS.MODIFIED, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-timespan-custom\">\n <h3 translate>eo.search.agg.time.span.custom</h3>\n <form #modifiedForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\n <eo-datetime-range #modifiedField [(ngModel)]=\"filtersModel[PARAMS.MODIFIED].value\" name=\"range\"\n [operator]=\"filtersModel[PARAMS.MODIFIED].value ? filtersModel[PARAMS.MODIFIED].value.operator : OPERATOR.EQUAL\"\n [withTime]=\"modifiedField.searchOption && modifiedField.searchOption !== OPERATOR.EQUAL\"\n (ngModelChange)=\"setFilter(PARAMS.MODIFIED, OPERATOR.EQUAL, $event, modifiedForm)\">\n </eo-datetime-range>\n </eo-form-input>\n </form>\n </div>\n\n <div class=\"rest-box box-modifier\">\n <h3 translate>eo.search.agg.modifier</h3>\n <form #modifierForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.modifiedby' | translate\">\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.MODIFIER].value\"\n name=\"modifier\" (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.MODIFIER], $event)\"\n [situation]=\"'SEARCH'\"\n (ngModelChange)=\"setFilter(PARAMS.MODIFIER, OPERATOR.IN, $event, modifierForm)\"></eo-organization>\n </eo-form-input>\n </form>\n </div>\n </div>\n </ng-template>\n\n <ng-template [yvcTab]=\"{id: 'restrictFile', label: 'eo.search.restrict.file' | translate}\">\n <div class=\"file rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-mimetype-group\">\n <h3 translate>eo.search.restrict.mimetypegroup</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MIMETYPEGROUP]\"\n (click)=\"setFilter(PARAMS.MIMETYPEGROUP, OPERATOR.IN, resolveSelection(aggregationsModel[PARAMS.MIMETYPEGROUP], agg.key, agg.selected))\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"checkbox\">\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-filesize\">\n <h3 translate>eo.search.restrict.filesize</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.FILESIZE]\"\n (click)=\"toggleFilter(PARAMS.FILESIZE, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-filename\">\n <h3 translate>eo.search.restrict.filename</h3>\n <form #filenameForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.restrict.filename' | translate\">\n <eo-string [autocomplete]=\"true\" [qname]=\"'filename'\"\n [(ngModel)]=\"filtersModel[PARAMS.FILENAME].value\" name=\"filename\"\n (ngModelChange)=\"setFilter(PARAMS.FILENAME, OPERATOR.EQUAL, $event, filenameForm)\"></eo-string>\n </eo-form-input>\n </form>\n </div>\n </div>\n </ng-template>\n </yvc-tabs>\n\n <!-- summary of the current search filters -->\n <div class=\"summary-panel\">\n\n <div class=\"headline stored-query\" *ngIf=\"isStoredQuery; else reghead\">\n <div class=\"spaceInbetwen\">\n <div class=\"savedSearchIcon\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_saved_search.svg'\"></eo-icon>\n </div>\n <div class=\"store\">\n <div class=\"pre\" translate>eo.search.aside.summary.storedquery</div>\n <div class=\"stored-query-name\">{{storedQuery.name}}</div>\n </div>\n </div>\n </div>\n\n <ng-template #reghead>\n <div class=\"headline\" translate>eo.search.aside.summary</div>\n </ng-template>\n\n <section class=\"query-types\">\n <div class=\"section section-searchterm\" *ngIf=\"query.term\">\n <div class=\"title\" translate>eo.search.aside.summary.term</div>\n <div class=\"filter\">\n <div class=\"label\">{{query.term}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeTerm()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"section section-contexttype\" *ngIf=\"query.contextFolderTypes.length\">\n <div class=\"title\" translate>eo.search.aside.summary.contextfoldertypes</div>\n <div class=\"filter\" *ngFor=\"let type of query.contextFolderTypes\">\n <div class=\"label\">{{type.label}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeContextType()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"section section-objecttype\" *ngIf=\"query.types.length\">\n <div class=\"title\" translate>eo.search.aside.summary.types</div>\n <div class=\"filter\" *ngFor=\"let type of query.types\">\n <div class=\"label\">{{type.label}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeType(type)\"></eo-icon>\n </div>\n </div>\n\n <ng-template #filterTemplate let-filter let-translate>\n <ng-container *ngIf=\"filter.innerValue.length\">\n <div class=\"filter\" *ngFor=\"let val of filter.innerValue; index as i\">\n <div class=\"label\">{{filter.label[i] | async}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"resetFilter(filter, val)\"></eo-icon>\n </div>\n </ng-container>\n </ng-template>\n\n <div class=\"section section-creation\"\n *ngIf=\"filtersModel[PARAMS.CREATED].innerValue?.length || filtersModel[PARAMS.CREATOR].innerValue?.length\">\n <div class=\"title\" translate>eo.search.restrict.creation</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATED] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATOR] }\"></ng-template>\n </div>\n\n <div class=\"section section-modification\"\n *ngIf=\"filtersModel[PARAMS.MODIFIED].innerValue?.length || filtersModel[PARAMS.MODIFIER].innerValue?.length\">\n <div class=\"title\" translate>eo.search.restrict.modification</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIED] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIER] }\"></ng-template>\n </div>\n\n <div class=\"section section-mimetypegroup\"\n *ngIf=\"filtersModel[PARAMS.MIMETYPEGROUP].innerValue.length || filtersModel[PARAMS.FILESIZE].innerValue.length || filtersModel[PARAMS.FILENAME].innerValue.length\">\n <div class=\"title\" translate>eo.search.restrict.file</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MIMETYPEGROUP] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILESIZE] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILENAME] }\"></ng-template>\n </div>\n </section>\n\n <div class=\"actions\" *ngIf=\"query.term || query.filters.length || query.types.length; else emptySearch\">\n\n <ng-container *ngIf=\"isStoredQuery; else regactions\">\n <button class=\"secondary btn-reset\" (click)=\"resetQuery()\" translate>eo.search.storedquery.close</button>\n <button class=\"primary grey btn-update\" (click)=\"updateStoredQuery()\"\n *ngIf=\"capabilities.storedqueries && isOwnQuery\" translate>eo.search.storedquery.update</button>\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </ng-container>\n\n <ng-template #regactions>\n <button class=\"primary grey btn-reset\" (click)=\"resetQuery()\" translate>eo.search.reset</button>\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </ng-template>\n\n\n </div>\n\n <ng-template #emptySearch>\n <div class=\"empty-search\" translate>eo.search.summary.empty</div>\n </ng-template>\n\n </div>\n\n\n </div>\n\n <!-- expert mode body panel containing explanations -->\n <ng-template #expert>\n <div class=\"body expert\">\n\n <div class=\"empty\" *ngIf=\"expertModeQueryEmpty\"><span translate>eo.search.mode.expert.result.empty</span></div>\n\n <!--\n <h2><span translate>eo.search.mode.expert</span></h2>\n <div class=\"intro\" translate>eo.search.mode.expert.intro</div>\n\n <div class=\"base-params fields\">\n <h2 translate>eo.search.mode.expert.support.baseparams</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.baseParams\" (click)=\"xpAddToTerm(el.data)\">\n <div class=\"label\"><span>{{el.label}}</span></div>\n <div class=\"data\">{{el.data}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"system-types fields\">\n\n <div class=\"column column-group\">\n <h2 translate>eo.search.mode.expert.support.group</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let group of typeGroupTree\"\n [ngClass]=\"{selected: expertModeSupport.selectedGroup && group.id === expertModeSupport.selectedGroup.id}\"\n (click)=\"xpSelectGroup(group)\">\n <div *ngIf=\"group.label !== '0'\">{{group.label}}</div>\n <div *ngIf=\"group.label === '0'\">{{'eo.search.group.general' | translate}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"column column-type\" *ngIf=\"expertModeSupport.selectedGroup\">\n <h2 translate>eo.search.mode.expert.support.type</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let type of expertModeSupport.selectedGroup.tree\"\n [ngClass]=\"{selected: expertModeSupport.selectedType && type.id === expertModeSupport.selectedType.id}\"\n (click)=\"xpSelectType(type)\">\n <div>{{type.label}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"column section-field\" *ngIf=\"expertModeSupport.selectedType\">\n <h2 translate>eo.search.mode.expert.support.field</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.selectedType.children\" (click)=\"xpAddToTerm(el.data)\">\n <div class=\"label\"><span>{{el.label}}</span><span class=\"type\">{{el.type}}</span></div>\n <div class=\"data\">{{el.data}}</div>\n </div>\n </div>\n </div>\n\n </div>\n\n -->\n </div>\n </ng-template>\n </div>\n <!-- </eo-dialog> -->\n</ng-template>\n", styles: ["eo-app-search dialog{height:100vh;margin:0!important;max-height:100vh;max-block-size:100%!important;min-width:500px;width:80%}@media screen and (max-width: 500px){.eo-app-search-dialog{width:100%!important;min-width:inherit}}.eo-app-search-dialog .eo-dialog-content{overflow:inherit;max-height:100%}.eo-app-search-dialog .eo-dialog-header{display:none}.eo-app-search.rtl .head .close{right:auto;left:var(--app-pane-padding)}.eo-app-search.rtl .body .indexdata-search h2 eo-icon{transform:rotate(180deg)}.eo-app-search{--search-min-width: 500px;--search-box-max-width: 600px;--search-summary-width: 350px;width:80vw;height:100vh;background:var(--panel-background-grey);display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;min-width:var(--search-min-width)}.eo-app-search .head{background:var(--color-primary-2);flex:0 0 auto;color:var(--color-white);position:relative;display:flex;flex-flow:row nowrap;padding:var(--app-pane-padding) calc(var(--app-pane-padding) / 2) 0 calc(var(--app-pane-padding) / 2)}.eo-app-search .head .search{flex:1 1 auto;justify-content:space-between;margin:0 calc(var(--app-pane-padding) / 2);z-index:2}.eo-app-search .head .search .title{font-size:var(--font-display);font-weight:var(--font-weight-light);min-height:1em;line-height:1em}@media screen and (max-width: 480px){.eo-app-search .head .search .title{font-size:var(--font-title)}}.eo-app-search .head .search .query-scope{margin:calc(var(--app-pane-padding) * 2) 0 0 0;min-width:var(--search-min-width);max-width:var(--search-box-max-width)}.eo-app-search .head .search .search-box{margin-bottom:var(--app-pane-padding);display:flex;flex-flow:row nowrap;align-items:stretch;background:var(--color-white);max-width:var(--search-box-max-width);box-shadow:0 2px 2px 0 rgba(var(--color-black-rgb),.2)}@media screen and (max-width: 480px){.eo-app-search .head .search .search-box{margin-top:var(--app-pane-padding)}}.eo-app-search .head .search .search-box yvc-autocomplete{flex:1 1 auto;background:transparent;outline:0;border:0}.eo-app-search .head .search .search-box yvc-autocomplete span.ui-autocomplete{width:100%}.eo-app-search .head .search .search-box input{width:100%;border:0;box-sizing:border-box;padding:calc(var(--app-pane-padding) / 2);font-size:var(--font-title)}.eo-app-search .head .search .search-box input::-ms-clear{display:none}.eo-app-search .head .search .search-box button[type=submit]{background:var(--color-accent);color:var(--color-white);border:0;padding:0 var(--app-pane-padding);font-size:var(--font-subhead)}.eo-app-search .head .search .search-box button.expert-mode{padding:0 calc(var(--app-pane-padding) / 2);background:transparent;border:0;color:var(--text-color-hint);display:flex;align-items:center}.eo-app-search .head .search .search-box button.expert-mode:focus{color:var(--color-accent)}.eo-app-search .head .search .search-box button.expert-mode__reset{opacity:0;width:0;padding:0;transition:all .2s ease-in-out}.eo-app-search .head .search .search-box button.expert-mode__reset.active{opacity:1;width:40px;padding:0 8px}.eo-app-search .head .search .search-box button.expert-mode span{display:none;padding:calc(var(--app-pane-padding) / 4);white-space:nowrap;animation:eoFadeIn var(--app-default-transition-duration)}.eo-app-search .head .search .search-box button.expert-mode:hover{color:var(--color-accent)}.eo-app-search .head .search .search-box button.expert-mode:hover span{display:block}.eo-app-search .head .result{position:absolute;right:var(--app-pane-padding);top:calc(var(--app-pane-padding) * 2.5);z-index:1;font-size:7em;line-height:1em;opacity:.1}@media screen and (max-width: 900px){.eo-app-search .head .result{font-size:3em;right:calc(var(--app-pane-padding) * 3);top:var(--app-pane-padding)}}.eo-app-search .head .search-aggregator__loader{z-index:11;position:absolute;right:13%;top:30%;animation:eoFadeIn .5s}@media screen and (max-width: 900px){.eo-app-search .head .search-aggregator__loader{top:5%}}.eo-app-search .head .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding);z-index:2}.eo-app-search .body{background:rgba(var(--color-white-rgb),.2);flex:1 1 auto;position:relative}@media screen and (max-width: 1000px){.eo-app-search .body .summary-panel{bottom:0;right:0!important;left:0!important;top:auto!important;width:auto!important;display:flex;flex-flow:row nowrap}.eo-app-search .body .summary-panel .headline:not(.stored-query),.eo-app-search .body .summary-panel .section{display:none}.eo-app-search .body .summary-panel .headline.stored-query{margin-bottom:0;display:flex;align-items:center;padding:0 var(--app-pane-padding)}.eo-app-search .body .summary-panel .headline.stored-query .pre{display:none}.eo-app-search .body .summary-panel .headline.stored-query .stored-query-name{font-size:var(--font-subhead)!important}.eo-app-search .body .summary-panel .actions{flex:1 1 auto}.eo-app-search .body yvc-tabs>section[role=tabpanel]{padding-right:0!important;padding-left:0!important}}.eo-app-search .body>yvc-tabs{position:absolute;inset:0}.eo-app-search .body>yvc-tabs>header{--text-color-body: #fff;--text-color-hint: rgba(255,255,255,.7);background:var(--color-primary-2)}.eo-app-search .body>yvc-tabs>section[role=tabpanel]{padding:calc(var(--app-pane-padding) - var(--app-pane-padding) / 2) calc(var(--app-pane-padding) * 2 + var(--search-summary-width)) 0 calc(var(--app-pane-padding) - 2px)}.eo-app-search .body .summary-panel{background:rgba(var(--color-black-rgb),.06);width:var(--search-summary-width);position:absolute;top:calc(var(--app-pane-padding) + var(--eo-tab-nav-height));right:var(--app-pane-padding);box-sizing:border-box}.eo-app-search .body .summary-panel .query-types{overflow:auto;max-height:calc(100vh - 290px)}.eo-app-search .body .summary-panel .headline{line-height:1em;font-size:var(--font-subhead);font-weight:var(--font-weight-light);color:var(--text-color-caption);margin-bottom:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 2)}.eo-app-search .body .summary-panel .headline .spaceInbetwen{display:flex;align-items:center}.eo-app-search .body .summary-panel .headline .spaceInbetwen .savedSearchIcon{display:block;padding:calc(var(--app-pane-padding) / 4) 0}.eo-app-search .body .summary-panel .headline .spaceInbetwen .savedSearchIcon eo-icon{--eoSvgIcon-size: 44px}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store{display:block;min-height:0;min-width:0;padding-left:12px}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store .pre{padding:calc(var(--app-pane-padding) / 2) 0}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store .stored-query-name{font-size:var(--font-title);padding:calc(var(--app-pane-padding) / 2) 0;line-height:1.2em}.eo-app-search .body .summary-panel .headline.stored-query{background:var(--color-primary-3);color:var(--color-white);font-size:var(--font-body)}.eo-app-search .body .summary-panel .empty-search{padding:var(--app-pane-padding) calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2);color:var(--text-color-caption)}.eo-app-search .body .summary-panel .section{padding:calc(var(--app-pane-padding) / 2);max-height:calc(100vh - 280px);overflow-y:auto}.eo-app-search .body .summary-panel .section .title{border-bottom:1px solid rgba(var(--color-black-rgb),.1);padding-bottom:calc(var(--app-pane-padding) / 4);color:var(--text-color-caption)}.eo-app-search .body .summary-panel .filter{display:flex;flex:1;flex-direction:row;min-height:0;min-width:0;background:rgba(var(--color-white-rgb),.6);margin-top:4px;align-items:center}.eo-app-search .body .summary-panel .filter .label{display:inline-block;max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto;padding:0 0 0 calc(var(--app-pane-padding) / 4)}.eo-app-search .body .summary-panel .filter eo-icon{flex:0 0 auto;padding:calc(var(--app-pane-padding) / 4);box-sizing:border-box;cursor:pointer;color:var(--text-color-hint)}.eo-app-search .body .summary-panel .filter eo-icon:hover{color:var(--text-color-caption)}.eo-app-search .body .summary-panel .actions{display:flex;justify-content:flex-end;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2 - 2px)}.eo-app-search .body .summary-panel .actions button{margin:0 2px;line-height:1em;font-size:var(--font-hint)}.eo-app-search .body .ui-tabview .ui-tabview-panel{padding:calc(var(--app-pane-padding) / 2)}.eo-app-search .body .ui-tabview .ui-tabview-panel h2{margin:0 0 calc(var(--app-pane-padding) * 1.5) 0;padding:0;font-weight:var(--font-weight-light);font-size:var(--font-title);color:var(--text-color-caption)}.eo-app-search .body .rest-box-container{display:flex;flex-flow:row wrap;align-items:stretch}.eo-app-search .body .rest-box-container .rest-box{margin:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 2);background:var(--color-white);flex:1 1 auto}.eo-app-search .body .rest-box-container .rest-box h3{margin:0 0 var(--app-pane-padding) 0;padding:0;font-size:var(--font-caption);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}.eo-app-search .body .rest-box-container .rest-box .rest-item{display:flex;flex:1 1 auto;flex-flow:row nowrap;align-items:center;padding:calc(var(--app-pane-padding) / 2);margin:0 calc(var(--app-pane-padding) / 4);color:var(--text-color-body)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected{background:var(--color-primary-3);color:var(--color-white)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover{background:var(--list-item-hover-background)}.eo-app-search .body .rest-box-container .rest-box .label{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .rest-box-container .rest-box .count{font-size:var(--font-caption);min-width:30px;text-align:right;font-weight:var(--font-weight-bold)}.eo-app-search .body .object-types .group .group-header .move-icons{display:none}.eo-app-search .body .object-types .group .type{display:flex;flex-flow:row nowrap;align-items:center;padding:1px 0}.eo-app-search .body .object-types .group .type.context{font-weight:var(--font-weight-bold)}.eo-app-search .body .object-types .group .type.folder .item eo-icon{background:rgba(var(--color-black-rgb),.15)}.eo-app-search .body .object-types .group .type.folder .item:hover eo-icon{background:rgba(var(--color-white-rgb),.3)}.eo-app-search .body .object-types .group .type.abstract .item{color:var(--text-color-caption)}.eo-app-search .body .object-types .group .type.abstract .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .group .type .item{display:flex;flex:1 1 auto;border-radius:2px;flex-flow:row nowrap;align-items:center;padding:calc(var(--app-pane-padding) / 2);margin:0 calc(var(--app-pane-padding) / 4);cursor:default;color:var(--text-color-body)}.eo-app-search .body .object-types .group .type .item eo-icon{color:var(--text-color-caption);width:16px;height:16px;box-sizing:content-box;padding:2px;border-radius:2px;transition:none;-webkit-transition:none;-moz-transition:none;-o-transition:none}.eo-app-search .body .object-types .group:hover .group-header{display:flex;justify-content:space-between}.eo-app-search .body .object-types .group:hover .group-header .move-icons{display:flex}.eo-app-search .body .object-types .group:hover .group-header .move-left-icon,.eo-app-search .body .object-types .group:hover .group-header .move-right-icon{cursor:pointer;color:var(--text-color-caption)}.eo-app-search .body .object-types .type .item{cursor:pointer}.eo-app-search .body .object-types .type .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .type .item:hover eo-icon{color:var(--panel-background)}.eo-app-search .body .indexdata-search{padding:calc(var(--app-pane-padding) / 2) 0 0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .indexdata-search h2{display:flex;flex-flow:row;align-items:center}.eo-app-search .body .indexdata-search h2 eo-icon{margin:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .indexdata-search h2 span{padding:0 calc(var(--app-pane-padding) / 4)}.eo-app-search .body .indexdata-search .context{margin-bottom:var(--app-pane-padding)}.eo-app-search .body .indexdata-search .context .context-select{display:flex;align-items:center;flex-flow:row wrap;padding-bottom:1px}.eo-app-search .body .indexdata-search .context .context-select .spacer{width:var(--app-pane-padding)}.eo-app-search .body .indexdata-search eo-object-form{border:1px solid rgba(var(--color-black-rgb),.1)}.eo-app-search .body .indexdata-search eo-object-form.dark{display:block;background-color:var(--color-primary-2)}.eo-app-search.rtl{left:0;right:0;animation:appSearchAppearRTL var(--app-default-transition-duration)}.eo-app-search.rtl .head .result,.eo-app-search.rtl .body .summary-panel{right:auto;left:var(--app-pane-padding)}.eo-app-search.rtl .body yvc-tabs{padding-right:0;padding-left:calc(var(--app-pane-padding) * 2 + var(--search-summary-width));padding-bottom:0;padding-top:0}.eo-app-search.expert .head .result{display:none}.eo-app-search.expert .head .search .search-box{max-width:100%}.eo-app-search.expert .head .search .search-box button.expert-mode{color:var(--color-accent)}.eo-app-search.expert .body{background:var(--color-primary-2);color:var(--color-white);display:flex;flex-flow:column}.eo-app-search.expert .body h2{flex:0 0 auto;padding:0;margin:var(--app-pane-padding) 0;font-size:var(--font-title);font-weight:var(--font-weight-light)}.eo-app-search.expert .body h2 span{padding:calc(var(--app-pane-padding) / 2) 0 calc(var(--app-pane-padding) / 2) var(--app-pane-padding);border-bottom:4px solid var(--color-accent)}.eo-app-search.expert .body .intro{flex:0 0 auto;padding:var(--app-pane-padding)}.eo-app-search.expert .body .empty{flex:0 0 auto;padding:0 var(--app-pane-padding)}.eo-app-search.expert .body .empty span{padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);border-radius:2px;background:var(--color-error);color:var(--color-white)}.eo-app-search.expert .body .fields h2{margin:calc(var(--app-pane-padding) / 2);flex:0 0 auto;padding:calc(var(--app-pane-padding) / 2);border-bottom:1px solid rgba(var(--color-white-rgb),.3)}.eo-app-search.expert .body .fields .item{padding:calc(var(--app-pane-padding) / 2);cursor:pointer;border-radius:2px;background:rgba(var(--color-white-rgb),.06);margin-bottom:4px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}.eo-app-search.expert .body .fields .item:hover,.eo-app-search.expert .body .fields .item.selected{background:rgba(var(--color-white-rgb),.2)}.eo-app-search.expert .body .fields .item .label{font-weight:var(--font-weight-bold);display:flex;justify-content:space-between}.eo-app-search.expert .body .fields .item .label .type{font-size:var(--font-hint);opacity:.5}.eo-app-search.expert .body .fields .item .data{opacity:.75}.eo-app-search.expert .body .base-params{padding:calc(var(--app-pane-padding) / 2)}.eo-app-search.expert .body .base-params .items{display:flex;flex-flow:row wrap;padding:calc(var(--app-pane-padding) / 4)}.eo-app-search.expert .body .base-params .items .item{margin:calc(var(--app-pane-padding) / 4)}.eo-app-search.expert .body .system-types{flex:1 1 auto;display:flex;flex-flow:row;justify-content:flex-start;align-items:stretch;padding:calc(var(--app-pane-padding) / 2)}.eo-app-search.expert .body .system-types .column{flex:0 0 33%;box-sizing:border-box;display:flex;flex-flow:column}.eo-app-search.expert .body .system-types .column .items{padding:calc(var(--app-pane-padding) / 2);flex:1 1 auto;overflow-y:auto}.eo-app-search.expert .body .system-types .column .items::-webkit-scrollbar-thumb{background-color:rgba(var(--color-white-rgb),.1)}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox,.eo-app-search .body .rest-box-container .rest-box .type .checkbox{width:20px;height:20px;cursor:pointer;border:1px solid var(--text-color-hint);border-radius:2px;margin:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type .checkbox svg{opacity:0}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover{border-color:var(--text-color-caption)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover svg,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover svg{fill:var(--text-color-body);opacity:.3}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox{background:var(--color-primary-3);border-color:var(--color-primary-3)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox svg{fill:var(--color-white)!important;opacity:1}.eo-app-search .body .rest-box-container .rest-box .rest-item.saved .count,.eo-app-search .body .rest-box-container .rest-box .type.saved .count{font-weight:var(--font-weight-normal)}@keyframes appSearchAppear{0%{opacity:0;transform:translate(-30px)}to{opacity:1;transform:translate(0)}}@keyframes appSearchAppearRTL{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i8.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i9.RtlAwareDirective, selector: "[eoRtlAware]", inputs: ["eoRtlAware"] }, { kind: "component", type: i10.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i11.QueryScopeSelectComponent, selector: "eo-query-scope-select", inputs: ["selection"], outputs: ["select"] }, { kind: "component", type: i12.Tabs, selector: "yvc-tabs", inputs: ["tabs", "layoutSettingsID", "panelOrder", "panelOrderIncludeUnmentioned", "cacheViews", "tabSplitEnabled", "tabRemoveEnabled"], outputs: ["tabSplit", "tabRemove", "tabChange"] }, { kind: "directive", type: i12.YvcTabDirective, selector: "[yvcTab]", inputs: ["yvcTab"] }, { kind: "component", type: i13.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i14.DatetimeRangeComponent, selector: "eo-datetime-range", inputs: ["withTime", "pickerTitle", "operator"] }, { kind: "component", type: i15.OrganizationComponent, selector: "eo-organization", inputs: ["removeCurrentUser", "situation", "multiselect", "readonly", "dataMeta", "placeholder", "exceptions", "filterObject"], outputs: ["onValueResolved", "onDataMetaChanged"] }, { kind: "component", type: i16.StringComponent, selector: "eo-string", inputs: ["autocomplete", "multiselect", "multiline", "readonly", "autofocus", "classification", "situation", "regex", "qname", "size", "minLength", "maxLength"] }, { kind: "component", type: i17.ObjectFormComponent, selector: "eo-object-form", inputs: ["isInnerTableForm", "formOptions"], outputs: ["statusChanged", "onFormReady"] }, { kind: "component", type: i18.AutoComplete, selector: "yvc-autocomplete", inputs: ["field", "placeholder", "minLength", "multiple", "typeahead", "distinctValues", "forceSelection", "autocompleteValues", "disabled"], outputs: ["autocompleteFnc", "blur", "focus", "suggestionUnselect", "suggestionSelect"] }, { kind: "component", type: i19.ContextSearchComponent, selector: "eo-context-search", inputs: ["ctx", "query", "idxSearch", "selected", "disabled"], outputs: ["setContext"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i20.LocaleDecimalPipe, name: "localeDecimal" }], encapsulation: i0.ViewEncapsulation.None });
|
|
772
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AppSearchComponent, decorators: [{
|
|
773
|
-
type: Component,
|
|
774
|
-
args: [{ selector: 'eo-app-search', encapsulation: ViewEncapsulation.None, template: "<!-- <eo-dialog [visible]=\"true\" [styleClass]=\"'eo-app-search-dialog'\" [align]=\"'start'\" [minWidth]=\"'80vw'\"\n [minHeight]=\"'100vh'\" (hide)=\"closeSearchMenu($event)\"> -->\n<!-- <yvc-dialog [options]=\"{lightDismiss: true}\" [template]=\"tplSearch\" (closed)=\"closeSearchMenu()\"></yvc-dialog> -->\n<ng-template #tplSearch>\n\n <div class=\"eo-app-search\" [ngClass]=\"{expert: query.expertMode}\" eoRtlAware=\"full\" *ngIf=\"query\">\n\n <div class=\"head\">\n\n <div class=\"search\">\n <form (submit)=\"executeSearch()\">\n <div class=\"title\" translate>eo.search</div>\n\n <eo-query-scope-select [selection]=\"queryScope\" (select)=\"setQueryScope($event)\"></eo-query-scope-select>\n\n <div class=\"search-box\">\n\n <yvc-autocomplete *ngIf=\"!query.expertMode; else expertInput\" #searchInput\n [ngModelOptions]=\"{standalone: true}\" [(ngModel)]=\"query.term\"\n (autocompleteFnc)=\"autocompleteSuggest($event)\" [autocompleteValues]=\"autocompleteResults\"\n (suggestionSelect)=\"autocompleteSelect()\" [minLength]=\"3\" (keydown.enter)=\"executeSearch()\" (paste)=\"autocompletePaste($event)\">\n </yvc-autocomplete>\n\n <ng-template #expertInput>\n <input autofocus=\"autofocus\" class=\"expert-search__input\" #xpinput type=\"text\"\n (ngModelChange)=\"expertTermChanged()\" [(ngModel)]=\"query.term\" [ngModelOptions]=\"{standalone: true}\">\n </ng-template>\n\n <button class=\"btn expert-mode\" type=\"button\" (click)=\"toggleExpertMode()\">\n <!--<span translate>eo.search.mode.expert</span>-->\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\n [iconTitle]=\"('eo.search.mode.expert' | translate)\" *ngIf=\"!query?.expertMode; else close\"></eo-icon>\n <ng-template #close>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\n [iconTitle]=\"('eo.search.mode.expert.close' | translate)\"></eo-icon>\n </ng-template>\n </button>\n\n <button type=\"button\" class=\"btn expert-mode expert-mode__reset\" [ngClass]=\"{active: query.term}\"\n (click)=\"resetExpertModeInput()\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\n [iconTitle]=\"('eo.search.clear.search' | translate)\"></eo-icon>\n </button>\n\n <button class=\"btn btn-default\" type=\"submit\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </div>\n </form>\n </div>\n\n <div class=\"result\" *ngIf=\"!loading; else spinner\">{{queryState.totalCount | localeDecimal}}</div>\n <ng-template #spinner>\n <eo-loading-spinner class=\"search-aggregator__loader\" [size]=\"'medium'\" [mode]=\"'dark'\"></eo-loading-spinner>\n </ng-template>\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\n [iconTitle]=\"('eo.search.close' | translate)\" (click)=\"closeSearchMenu()\"></eo-icon>\n\n </div>\n\n <div class=\"body\" *ngIf=\"!query.expertMode; else expert\">\n\n <yvc-tabs (tabChange)=\"onTabChange($event)\">\n\n <!-- object type select -->\n <ng-template [yvcTab]=\"{id: 'restrictType', label: 'eo.search.restrict.type' | translate}\">\n\n <div class=\"object-types rest-box-container\" [ngClass]=\"{idxenabled: query.types.length < 1}\"\n *ngIf=\"objectTypeGroups && !idxSearch\">\n <div class=\"group rest-box\" *ngFor=\"let group of objectTypeGroups; let i = index\">\n <div class=\"group-header\">\n <h3 *ngIf=\"group.label !== '0'\">{{group.label}}</h3>\n <h3 *ngIf=\"group.label === '0'\" translate>{{'eo.search.group.general'}}</h3>\n <div class=\"move-icons\">\n <eo-icon *ngIf=\"i !== 0\" class=\"move-left-icon\" (click)=\"moveObjectTypeGroup(group.label, 'left')\" [iconSrc]=\"'assets/_default/svg/ic_arrow_left.svg'\"></eo-icon>\n <eo-icon *ngIf=\"i !== objectTypeGroups.length - 1\" class=\"move-right-icon\" (click)=\"moveObjectTypeGroup(group.label, 'right')\" [iconSrc]=\"'assets/_default/svg/ic_arrow_right.svg'\"></eo-icon>\n </div>\n </div>\n <div class=\"type\" *ngFor=\"let type of group.types\"\n [ngClass]=\"{context: type.isContextFolder, folder: type.isFolder, abstract: type.isAbstract, selected: isTypeActive(type), saved: isTypeSaved(type)}\">\n\n <div class=\"checkbox\" (click)=\"toggleType(type)\">\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <div class=\"item\" (click)=\"selectObjectType(type)\">\n <eo-icon [objectType]=\"type\"></eo-icon>\n <div class=\"label\">{{type.label}} {{type.isAbstract ? '('+ ('eo.search.type.abstract' | translate) +\n ')' : ''}}</div>\n <div class=\"count\">{{getAggregationCount(type) | localeDecimal}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"indexdata-search\" *ngIf=\"idxSearch\">\n <h2>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_arrow_back.svg'\"\n (click)=\"exitIndexdataSearch()\"></eo-icon>\n <span translate [translateParams]=\"{type: idxSearch.type.label}\">eo.search.objecttype.form</span>\n </h2>\n\n <div class=\"context\" *ngIf=\"idxSearch.contextModels.length\">\n\n <div class=\"context-select\">\n <div translate>eo.search.objecttype.form.context</div>\n <div class=\"spacer\"></div>\n\n <eo-context-search *ngFor=\"let ctx of idxSearch.contextModels; index as i\" [ctx]=\"ctx\" [query]=\"query\"\n [selected]=\"currentContextFolderName === ctx.name\"\n [disabled]=\"(currentContextFolderName && currentContextFolderName !== ctx.name)\"\n [idxSearch]=\"idxSearch\" (setContext)=\"setContext($event)\">\n </eo-context-search>\n </div>\n\n <section class=\"context form\">\n <eo-object-form class=\"dark\" #ctxform\n *ngIf=\"idxSearch.contextFormOptions && idxSearch.contextFormOptions?.formModel?.elements?.length\"\n [formOptions]=\"idxSearch.contextFormOptions\" (statusChanged)=\"onIndexDataChanged($event)\">\n </eo-object-form>\n </section>\n </div>\n\n\n <section class=\"object-type form\" *ngIf=\"idxSearch.formOptions\">\n <eo-object-form #idxform [formOptions]=\"idxSearch.formOptions\"\n (statusChanged)=\"onIndexDataChanged($event)\" (onFormReady)=\"idxform.focusForm()\">\n </eo-object-form>\n </section>\n </div>\n </ng-template>\n\n <!-- created tab -->\n <ng-template [yvcTab]=\"{id: 'restrictCreated', label: 'eo.search.restrict.creation' | translate }\">\n <div class=\"created rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-timespan\">\n <h3 translate>eo.search.agg.time.span</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.CREATED]\"\n (click)=\"toggleFilter(PARAMS.CREATED, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-timespan-custom\">\n <h3 translate>eo.search.agg.time.span.custom</h3>\n <form #createdForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\n <eo-datetime-range #createdField [(ngModel)]=\"filtersModel[PARAMS.CREATED].value\" name=\"range\"\n [operator]=\"filtersModel[PARAMS.CREATED].value ? filtersModel[PARAMS.CREATED].value.operator : OPERATOR.EQUAL\"\n [withTime]=\"createdField.searchOption && createdField.searchOption !== OPERATOR.EQUAL\"\n (ngModelChange)=\"setFilter(PARAMS.CREATED, OPERATOR.EQUAL, $event, createdForm)\">\n </eo-datetime-range>\n </eo-form-input>\n </form>\n </div>\n\n <div class=\"rest-box box-creator\">\n <h3 translate>eo.search.agg.creator</h3>\n <form #creatorForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.createdby' | translate\">\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.CREATOR].value\" name=\"creator\"\n (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.CREATOR], $event)\" [situation]=\"'SEARCH'\"\n (ngModelChange)=\"setFilter(PARAMS.CREATOR, OPERATOR.IN, $event, creatorForm)\"></eo-organization>\n </eo-form-input>\n </form>\n </div>\n\n </div>\n </ng-template>\n\n <ng-template [yvcTab]=\"{id: 'restrictModification', label: 'eo.search.restrict.modification' | translate}\">\n <div class=\"modified rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-timespan\">\n <h3 translate>eo.search.agg.time.span</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MODIFIED]\"\n (click)=\"toggleFilter(PARAMS.MODIFIED, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-timespan-custom\">\n <h3 translate>eo.search.agg.time.span.custom</h3>\n <form #modifiedForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\n <eo-datetime-range #modifiedField [(ngModel)]=\"filtersModel[PARAMS.MODIFIED].value\" name=\"range\"\n [operator]=\"filtersModel[PARAMS.MODIFIED].value ? filtersModel[PARAMS.MODIFIED].value.operator : OPERATOR.EQUAL\"\n [withTime]=\"modifiedField.searchOption && modifiedField.searchOption !== OPERATOR.EQUAL\"\n (ngModelChange)=\"setFilter(PARAMS.MODIFIED, OPERATOR.EQUAL, $event, modifiedForm)\">\n </eo-datetime-range>\n </eo-form-input>\n </form>\n </div>\n\n <div class=\"rest-box box-modifier\">\n <h3 translate>eo.search.agg.modifier</h3>\n <form #modifierForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.modifiedby' | translate\">\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.MODIFIER].value\"\n name=\"modifier\" (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.MODIFIER], $event)\"\n [situation]=\"'SEARCH'\"\n (ngModelChange)=\"setFilter(PARAMS.MODIFIER, OPERATOR.IN, $event, modifierForm)\"></eo-organization>\n </eo-form-input>\n </form>\n </div>\n </div>\n </ng-template>\n\n <ng-template [yvcTab]=\"{id: 'restrictFile', label: 'eo.search.restrict.file' | translate}\">\n <div class=\"file rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-mimetype-group\">\n <h3 translate>eo.search.restrict.mimetypegroup</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MIMETYPEGROUP]\"\n (click)=\"setFilter(PARAMS.MIMETYPEGROUP, OPERATOR.IN, resolveSelection(aggregationsModel[PARAMS.MIMETYPEGROUP], agg.key, agg.selected))\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"checkbox\">\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-filesize\">\n <h3 translate>eo.search.restrict.filesize</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.FILESIZE]\"\n (click)=\"toggleFilter(PARAMS.FILESIZE, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-filename\">\n <h3 translate>eo.search.restrict.filename</h3>\n <form #filenameForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.restrict.filename' | translate\">\n <eo-string [autocomplete]=\"true\" [qname]=\"'filename'\"\n [(ngModel)]=\"filtersModel[PARAMS.FILENAME].value\" name=\"filename\"\n (ngModelChange)=\"setFilter(PARAMS.FILENAME, OPERATOR.EQUAL, $event, filenameForm)\"></eo-string>\n </eo-form-input>\n </form>\n </div>\n </div>\n </ng-template>\n </yvc-tabs>\n\n <!-- summary of the current search filters -->\n <div class=\"summary-panel\">\n\n <div class=\"headline stored-query\" *ngIf=\"isStoredQuery; else reghead\">\n <div class=\"spaceInbetwen\">\n <div class=\"savedSearchIcon\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_saved_search.svg'\"></eo-icon>\n </div>\n <div class=\"store\">\n <div class=\"pre\" translate>eo.search.aside.summary.storedquery</div>\n <div class=\"stored-query-name\">{{storedQuery.name}}</div>\n </div>\n </div>\n </div>\n\n <ng-template #reghead>\n <div class=\"headline\" translate>eo.search.aside.summary</div>\n </ng-template>\n\n <section class=\"query-types\">\n <div class=\"section section-searchterm\" *ngIf=\"query.term\">\n <div class=\"title\" translate>eo.search.aside.summary.term</div>\n <div class=\"filter\">\n <div class=\"label\">{{query.term}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeTerm()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"section section-contexttype\" *ngIf=\"query.contextFolderTypes.length\">\n <div class=\"title\" translate>eo.search.aside.summary.contextfoldertypes</div>\n <div class=\"filter\" *ngFor=\"let type of query.contextFolderTypes\">\n <div class=\"label\">{{type.label}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeContextType()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"section section-objecttype\" *ngIf=\"query.types.length\">\n <div class=\"title\" translate>eo.search.aside.summary.types</div>\n <div class=\"filter\" *ngFor=\"let type of query.types\">\n <div class=\"label\">{{type.label}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeType(type)\"></eo-icon>\n </div>\n </div>\n\n <ng-template #filterTemplate let-filter let-translate>\n <ng-container *ngIf=\"filter.innerValue.length\">\n <div class=\"filter\" *ngFor=\"let val of filter.innerValue; index as i\">\n <div class=\"label\">{{filter.label[i] | async}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"resetFilter(filter, val)\"></eo-icon>\n </div>\n </ng-container>\n </ng-template>\n\n <div class=\"section section-creation\"\n *ngIf=\"filtersModel[PARAMS.CREATED].innerValue?.length || filtersModel[PARAMS.CREATOR].innerValue?.length\">\n <div class=\"title\" translate>eo.search.restrict.creation</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATED] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATOR] }\"></ng-template>\n </div>\n\n <div class=\"section section-modification\"\n *ngIf=\"filtersModel[PARAMS.MODIFIED].innerValue?.length || filtersModel[PARAMS.MODIFIER].innerValue?.length\">\n <div class=\"title\" translate>eo.search.restrict.modification</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIED] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIER] }\"></ng-template>\n </div>\n\n <div class=\"section section-mimetypegroup\"\n *ngIf=\"filtersModel[PARAMS.MIMETYPEGROUP].innerValue.length || filtersModel[PARAMS.FILESIZE].innerValue.length || filtersModel[PARAMS.FILENAME].innerValue.length\">\n <div class=\"title\" translate>eo.search.restrict.file</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MIMETYPEGROUP] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILESIZE] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILENAME] }\"></ng-template>\n </div>\n </section>\n\n <div class=\"actions\" *ngIf=\"query.term || query.filters.length || query.types.length; else emptySearch\">\n\n <ng-container *ngIf=\"isStoredQuery; else regactions\">\n <button class=\"secondary btn-reset\" (click)=\"resetQuery()\" translate>eo.search.storedquery.close</button>\n <button class=\"primary grey btn-update\" (click)=\"updateStoredQuery()\"\n *ngIf=\"capabilities.storedqueries && isOwnQuery\" translate>eo.search.storedquery.update</button>\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </ng-container>\n\n <ng-template #regactions>\n <button class=\"primary grey btn-reset\" (click)=\"resetQuery()\" translate>eo.search.reset</button>\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </ng-template>\n\n\n </div>\n\n <ng-template #emptySearch>\n <div class=\"empty-search\" translate>eo.search.summary.empty</div>\n </ng-template>\n\n </div>\n\n\n </div>\n\n <!-- expert mode body panel containing explanations -->\n <ng-template #expert>\n <div class=\"body expert\">\n\n <div class=\"empty\" *ngIf=\"expertModeQueryEmpty\"><span translate>eo.search.mode.expert.result.empty</span></div>\n\n <!--\n <h2><span translate>eo.search.mode.expert</span></h2>\n <div class=\"intro\" translate>eo.search.mode.expert.intro</div>\n\n <div class=\"base-params fields\">\n <h2 translate>eo.search.mode.expert.support.baseparams</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.baseParams\" (click)=\"xpAddToTerm(el.data)\">\n <div class=\"label\"><span>{{el.label}}</span></div>\n <div class=\"data\">{{el.data}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"system-types fields\">\n\n <div class=\"column column-group\">\n <h2 translate>eo.search.mode.expert.support.group</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let group of typeGroupTree\"\n [ngClass]=\"{selected: expertModeSupport.selectedGroup && group.id === expertModeSupport.selectedGroup.id}\"\n (click)=\"xpSelectGroup(group)\">\n <div *ngIf=\"group.label !== '0'\">{{group.label}}</div>\n <div *ngIf=\"group.label === '0'\">{{'eo.search.group.general' | translate}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"column column-type\" *ngIf=\"expertModeSupport.selectedGroup\">\n <h2 translate>eo.search.mode.expert.support.type</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let type of expertModeSupport.selectedGroup.tree\"\n [ngClass]=\"{selected: expertModeSupport.selectedType && type.id === expertModeSupport.selectedType.id}\"\n (click)=\"xpSelectType(type)\">\n <div>{{type.label}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"column section-field\" *ngIf=\"expertModeSupport.selectedType\">\n <h2 translate>eo.search.mode.expert.support.field</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.selectedType.children\" (click)=\"xpAddToTerm(el.data)\">\n <div class=\"label\"><span>{{el.label}}</span><span class=\"type\">{{el.type}}</span></div>\n <div class=\"data\">{{el.data}}</div>\n </div>\n </div>\n </div>\n\n </div>\n\n -->\n </div>\n </ng-template>\n </div>\n <!-- </eo-dialog> -->\n</ng-template>\n", styles: ["eo-app-search dialog{height:100vh;margin:0!important;max-height:100vh;max-block-size:100%!important;min-width:500px;width:80%}@media screen and (max-width: 500px){.eo-app-search-dialog{width:100%!important;min-width:inherit}}.eo-app-search-dialog .eo-dialog-content{overflow:inherit;max-height:100%}.eo-app-search-dialog .eo-dialog-header{display:none}.eo-app-search.rtl .head .close{right:auto;left:var(--app-pane-padding)}.eo-app-search.rtl .body .indexdata-search h2 eo-icon{transform:rotate(180deg)}.eo-app-search{--search-min-width: 500px;--search-box-max-width: 600px;--search-summary-width: 350px;width:80vw;height:100vh;background:var(--panel-background-grey);display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;min-width:var(--search-min-width)}.eo-app-search .head{background:var(--color-primary-2);flex:0 0 auto;color:var(--color-white);position:relative;display:flex;flex-flow:row nowrap;padding:var(--app-pane-padding) calc(var(--app-pane-padding) / 2) 0 calc(var(--app-pane-padding) / 2)}.eo-app-search .head .search{flex:1 1 auto;justify-content:space-between;margin:0 calc(var(--app-pane-padding) / 2);z-index:2}.eo-app-search .head .search .title{font-size:var(--font-display);font-weight:var(--font-weight-light);min-height:1em;line-height:1em}@media screen and (max-width: 480px){.eo-app-search .head .search .title{font-size:var(--font-title)}}.eo-app-search .head .search .query-scope{margin:calc(var(--app-pane-padding) * 2) 0 0 0;min-width:var(--search-min-width);max-width:var(--search-box-max-width)}.eo-app-search .head .search .search-box{margin-bottom:var(--app-pane-padding);display:flex;flex-flow:row nowrap;align-items:stretch;background:var(--color-white);max-width:var(--search-box-max-width);box-shadow:0 2px 2px 0 rgba(var(--color-black-rgb),.2)}@media screen and (max-width: 480px){.eo-app-search .head .search .search-box{margin-top:var(--app-pane-padding)}}.eo-app-search .head .search .search-box yvc-autocomplete{flex:1 1 auto;background:transparent;outline:0;border:0}.eo-app-search .head .search .search-box yvc-autocomplete span.ui-autocomplete{width:100%}.eo-app-search .head .search .search-box input{width:100%;border:0;box-sizing:border-box;padding:calc(var(--app-pane-padding) / 2);font-size:var(--font-title)}.eo-app-search .head .search .search-box input::-ms-clear{display:none}.eo-app-search .head .search .search-box button[type=submit]{background:var(--color-accent);color:var(--color-white);border:0;padding:0 var(--app-pane-padding);font-size:var(--font-subhead)}.eo-app-search .head .search .search-box button.expert-mode{padding:0 calc(var(--app-pane-padding) / 2);background:transparent;border:0;color:var(--text-color-hint);display:flex;align-items:center}.eo-app-search .head .search .search-box button.expert-mode:focus{color:var(--color-accent)}.eo-app-search .head .search .search-box button.expert-mode__reset{opacity:0;width:0;padding:0;transition:all .2s ease-in-out}.eo-app-search .head .search .search-box button.expert-mode__reset.active{opacity:1;width:40px;padding:0 8px}.eo-app-search .head .search .search-box button.expert-mode span{display:none;padding:calc(var(--app-pane-padding) / 4);white-space:nowrap;animation:eoFadeIn var(--app-default-transition-duration)}.eo-app-search .head .search .search-box button.expert-mode:hover{color:var(--color-accent)}.eo-app-search .head .search .search-box button.expert-mode:hover span{display:block}.eo-app-search .head .result{position:absolute;right:var(--app-pane-padding);top:calc(var(--app-pane-padding) * 2.5);z-index:1;font-size:7em;line-height:1em;opacity:.1}@media screen and (max-width: 900px){.eo-app-search .head .result{font-size:3em;right:calc(var(--app-pane-padding) * 3);top:var(--app-pane-padding)}}.eo-app-search .head .search-aggregator__loader{z-index:11;position:absolute;right:13%;top:30%;animation:eoFadeIn .5s}@media screen and (max-width: 900px){.eo-app-search .head .search-aggregator__loader{top:5%}}.eo-app-search .head .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding);z-index:2}.eo-app-search .body{background:rgba(var(--color-white-rgb),.2);flex:1 1 auto;position:relative}@media screen and (max-width: 1000px){.eo-app-search .body .summary-panel{bottom:0;right:0!important;left:0!important;top:auto!important;width:auto!important;display:flex;flex-flow:row nowrap}.eo-app-search .body .summary-panel .headline:not(.stored-query),.eo-app-search .body .summary-panel .section{display:none}.eo-app-search .body .summary-panel .headline.stored-query{margin-bottom:0;display:flex;align-items:center;padding:0 var(--app-pane-padding)}.eo-app-search .body .summary-panel .headline.stored-query .pre{display:none}.eo-app-search .body .summary-panel .headline.stored-query .stored-query-name{font-size:var(--font-subhead)!important}.eo-app-search .body .summary-panel .actions{flex:1 1 auto}.eo-app-search .body yvc-tabs>section[role=tabpanel]{padding-right:0!important;padding-left:0!important}}.eo-app-search .body>yvc-tabs{position:absolute;inset:0}.eo-app-search .body>yvc-tabs>header{--text-color-body: #fff;--text-color-hint: rgba(255,255,255,.7);background:var(--color-primary-2)}.eo-app-search .body>yvc-tabs>section[role=tabpanel]{padding:calc(var(--app-pane-padding) - var(--app-pane-padding) / 2) calc(var(--app-pane-padding) * 2 + var(--search-summary-width)) 0 calc(var(--app-pane-padding) - 2px)}.eo-app-search .body .summary-panel{background:rgba(var(--color-black-rgb),.06);width:var(--search-summary-width);position:absolute;top:calc(var(--app-pane-padding) + var(--eo-tab-nav-height));right:var(--app-pane-padding);box-sizing:border-box}.eo-app-search .body .summary-panel .query-types{overflow:auto;max-height:calc(100vh - 290px)}.eo-app-search .body .summary-panel .headline{line-height:1em;font-size:var(--font-subhead);font-weight:var(--font-weight-light);color:var(--text-color-caption);margin-bottom:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 2)}.eo-app-search .body .summary-panel .headline .spaceInbetwen{display:flex;align-items:center}.eo-app-search .body .summary-panel .headline .spaceInbetwen .savedSearchIcon{display:block;padding:calc(var(--app-pane-padding) / 4) 0}.eo-app-search .body .summary-panel .headline .spaceInbetwen .savedSearchIcon eo-icon{--eoSvgIcon-size: 44px}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store{display:block;min-height:0;min-width:0;padding-left:12px}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store .pre{padding:calc(var(--app-pane-padding) / 2) 0}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store .stored-query-name{font-size:var(--font-title);padding:calc(var(--app-pane-padding) / 2) 0;line-height:1.2em}.eo-app-search .body .summary-panel .headline.stored-query{background:var(--color-primary-3);color:var(--color-white);font-size:var(--font-body)}.eo-app-search .body .summary-panel .empty-search{padding:var(--app-pane-padding) calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2);color:var(--text-color-caption)}.eo-app-search .body .summary-panel .section{padding:calc(var(--app-pane-padding) / 2);max-height:calc(100vh - 280px);overflow-y:auto}.eo-app-search .body .summary-panel .section .title{border-bottom:1px solid rgba(var(--color-black-rgb),.1);padding-bottom:calc(var(--app-pane-padding) / 4);color:var(--text-color-caption)}.eo-app-search .body .summary-panel .filter{display:flex;flex:1;flex-direction:row;min-height:0;min-width:0;background:rgba(var(--color-white-rgb),.6);margin-top:4px;align-items:center}.eo-app-search .body .summary-panel .filter .label{display:inline-block;max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto;padding:0 0 0 calc(var(--app-pane-padding) / 4)}.eo-app-search .body .summary-panel .filter eo-icon{flex:0 0 auto;padding:calc(var(--app-pane-padding) / 4);box-sizing:border-box;cursor:pointer;color:var(--text-color-hint)}.eo-app-search .body .summary-panel .filter eo-icon:hover{color:var(--text-color-caption)}.eo-app-search .body .summary-panel .actions{display:flex;justify-content:flex-end;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2 - 2px)}.eo-app-search .body .summary-panel .actions button{margin:0 2px;line-height:1em;font-size:var(--font-hint)}.eo-app-search .body .ui-tabview .ui-tabview-panel{padding:calc(var(--app-pane-padding) / 2)}.eo-app-search .body .ui-tabview .ui-tabview-panel h2{margin:0 0 calc(var(--app-pane-padding) * 1.5) 0;padding:0;font-weight:var(--font-weight-light);font-size:var(--font-title);color:var(--text-color-caption)}.eo-app-search .body .rest-box-container{display:flex;flex-flow:row wrap;align-items:stretch}.eo-app-search .body .rest-box-container .rest-box{margin:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 2);background:var(--color-white);flex:1 1 auto}.eo-app-search .body .rest-box-container .rest-box h3{margin:0 0 var(--app-pane-padding) 0;padding:0;font-size:var(--font-caption);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}.eo-app-search .body .rest-box-container .rest-box .rest-item{display:flex;flex:1 1 auto;flex-flow:row nowrap;align-items:center;padding:calc(var(--app-pane-padding) / 2);margin:0 calc(var(--app-pane-padding) / 4);color:var(--text-color-body)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected{background:var(--color-primary-3);color:var(--color-white)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover{background:var(--list-item-hover-background)}.eo-app-search .body .rest-box-container .rest-box .label{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .rest-box-container .rest-box .count{font-size:var(--font-caption);min-width:30px;text-align:right;font-weight:var(--font-weight-bold)}.eo-app-search .body .object-types .group .group-header .move-icons{display:none}.eo-app-search .body .object-types .group .type{display:flex;flex-flow:row nowrap;align-items:center;padding:1px 0}.eo-app-search .body .object-types .group .type.context{font-weight:var(--font-weight-bold)}.eo-app-search .body .object-types .group .type.folder .item eo-icon{background:rgba(var(--color-black-rgb),.15)}.eo-app-search .body .object-types .group .type.folder .item:hover eo-icon{background:rgba(var(--color-white-rgb),.3)}.eo-app-search .body .object-types .group .type.abstract .item{color:var(--text-color-caption)}.eo-app-search .body .object-types .group .type.abstract .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .group .type .item{display:flex;flex:1 1 auto;border-radius:2px;flex-flow:row nowrap;align-items:center;padding:calc(var(--app-pane-padding) / 2);margin:0 calc(var(--app-pane-padding) / 4);cursor:default;color:var(--text-color-body)}.eo-app-search .body .object-types .group .type .item eo-icon{color:var(--text-color-caption);width:16px;height:16px;box-sizing:content-box;padding:2px;border-radius:2px;transition:none;-webkit-transition:none;-moz-transition:none;-o-transition:none}.eo-app-search .body .object-types .group:hover .group-header{display:flex;justify-content:space-between}.eo-app-search .body .object-types .group:hover .group-header .move-icons{display:flex}.eo-app-search .body .object-types .group:hover .group-header .move-left-icon,.eo-app-search .body .object-types .group:hover .group-header .move-right-icon{cursor:pointer;color:var(--text-color-caption)}.eo-app-search .body .object-types .type .item{cursor:pointer}.eo-app-search .body .object-types .type .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .type .item:hover eo-icon{color:var(--panel-background)}.eo-app-search .body .indexdata-search{padding:calc(var(--app-pane-padding) / 2) 0 0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .indexdata-search h2{display:flex;flex-flow:row;align-items:center}.eo-app-search .body .indexdata-search h2 eo-icon{margin:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .indexdata-search h2 span{padding:0 calc(var(--app-pane-padding) / 4)}.eo-app-search .body .indexdata-search .context{margin-bottom:var(--app-pane-padding)}.eo-app-search .body .indexdata-search .context .context-select{display:flex;align-items:center;flex-flow:row wrap;padding-bottom:1px}.eo-app-search .body .indexdata-search .context .context-select .spacer{width:var(--app-pane-padding)}.eo-app-search .body .indexdata-search eo-object-form{border:1px solid rgba(var(--color-black-rgb),.1)}.eo-app-search .body .indexdata-search eo-object-form.dark{display:block;background-color:var(--color-primary-2)}.eo-app-search.rtl{left:0;right:0;animation:appSearchAppearRTL var(--app-default-transition-duration)}.eo-app-search.rtl .head .result,.eo-app-search.rtl .body .summary-panel{right:auto;left:var(--app-pane-padding)}.eo-app-search.rtl .body yvc-tabs{padding-right:0;padding-left:calc(var(--app-pane-padding) * 2 + var(--search-summary-width));padding-bottom:0;padding-top:0}.eo-app-search.expert .head .result{display:none}.eo-app-search.expert .head .search .search-box{max-width:100%}.eo-app-search.expert .head .search .search-box button.expert-mode{color:var(--color-accent)}.eo-app-search.expert .body{background:var(--color-primary-2);color:var(--color-white);display:flex;flex-flow:column}.eo-app-search.expert .body h2{flex:0 0 auto;padding:0;margin:var(--app-pane-padding) 0;font-size:var(--font-title);font-weight:var(--font-weight-light)}.eo-app-search.expert .body h2 span{padding:calc(var(--app-pane-padding) / 2) 0 calc(var(--app-pane-padding) / 2) var(--app-pane-padding);border-bottom:4px solid var(--color-accent)}.eo-app-search.expert .body .intro{flex:0 0 auto;padding:var(--app-pane-padding)}.eo-app-search.expert .body .empty{flex:0 0 auto;padding:0 var(--app-pane-padding)}.eo-app-search.expert .body .empty span{padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);border-radius:2px;background:var(--color-error);color:var(--color-white)}.eo-app-search.expert .body .fields h2{margin:calc(var(--app-pane-padding) / 2);flex:0 0 auto;padding:calc(var(--app-pane-padding) / 2);border-bottom:1px solid rgba(var(--color-white-rgb),.3)}.eo-app-search.expert .body .fields .item{padding:calc(var(--app-pane-padding) / 2);cursor:pointer;border-radius:2px;background:rgba(var(--color-white-rgb),.06);margin-bottom:4px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}.eo-app-search.expert .body .fields .item:hover,.eo-app-search.expert .body .fields .item.selected{background:rgba(var(--color-white-rgb),.2)}.eo-app-search.expert .body .fields .item .label{font-weight:var(--font-weight-bold);display:flex;justify-content:space-between}.eo-app-search.expert .body .fields .item .label .type{font-size:var(--font-hint);opacity:.5}.eo-app-search.expert .body .fields .item .data{opacity:.75}.eo-app-search.expert .body .base-params{padding:calc(var(--app-pane-padding) / 2)}.eo-app-search.expert .body .base-params .items{display:flex;flex-flow:row wrap;padding:calc(var(--app-pane-padding) / 4)}.eo-app-search.expert .body .base-params .items .item{margin:calc(var(--app-pane-padding) / 4)}.eo-app-search.expert .body .system-types{flex:1 1 auto;display:flex;flex-flow:row;justify-content:flex-start;align-items:stretch;padding:calc(var(--app-pane-padding) / 2)}.eo-app-search.expert .body .system-types .column{flex:0 0 33%;box-sizing:border-box;display:flex;flex-flow:column}.eo-app-search.expert .body .system-types .column .items{padding:calc(var(--app-pane-padding) / 2);flex:1 1 auto;overflow-y:auto}.eo-app-search.expert .body .system-types .column .items::-webkit-scrollbar-thumb{background-color:rgba(var(--color-white-rgb),.1)}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox,.eo-app-search .body .rest-box-container .rest-box .type .checkbox{width:20px;height:20px;cursor:pointer;border:1px solid var(--text-color-hint);border-radius:2px;margin:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type .checkbox svg{opacity:0}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover{border-color:var(--text-color-caption)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover svg,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover svg{fill:var(--text-color-body);opacity:.3}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox{background:var(--color-primary-3);border-color:var(--color-primary-3)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox svg{fill:var(--color-white)!important;opacity:1}.eo-app-search .body .rest-box-container .rest-box .rest-item.saved .count,.eo-app-search .body .rest-box-container .rest-box .type.saved .count{font-weight:var(--font-weight-normal)}@keyframes appSearchAppear{0%{opacity:0;transform:translate(-30px)}to{opacity:1;transform:translate(0)}}@keyframes appSearchAppearRTL{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}\n"] }]
|
|
775
|
-
}], ctorParameters: function () { return [{ type: i1.AppSearchService }, { type: i2.YvcOverlayService }, { type: i3.SearchService }, { type: i3.SystemService }, { type: i3.NotificationsService }, { type: i3.TranslateService }, { type: i4.Router }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i3.StoredQueriesService }, { type: i3.CapabilitiesService }, { type: i3.UserService }, { type: i3.Logger }, { type: i3.LocalStorageService }]; }, propDecorators: { tplSearch: [{
|
|
776
|
-
type: ViewChild,
|
|
777
|
-
args: ['tplSearch', { read: TemplateRef }]
|
|
778
|
-
}], searchInput: [{
|
|
779
|
-
type: ViewChild,
|
|
780
|
-
args: ['searchInput']
|
|
781
|
-
}], expertInput: [{
|
|
782
|
-
type: ViewChild,
|
|
783
|
-
args: ['xpinput']
|
|
784
|
-
}], indexdataForm: [{
|
|
785
|
-
type: ViewChild,
|
|
786
|
-
args: ['idxform']
|
|
787
|
-
}], contextForm: [{
|
|
788
|
-
type: ViewChild,
|
|
789
|
-
args: ['ctxform']
|
|
790
|
-
}], onExecuteSearch: [{
|
|
791
|
-
type: Output
|
|
792
|
-
}] } });
|
|
793
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hcHAtc2hlbGwvYXBwLWJhci9hcHAtc2VhcmNoL2FwcC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYXBwLXNoZWxsL2FwcC1iYXIvYXBwLXNlYXJjaC9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLElBQUksa0JBQWtCLEVBQUUsSUFBSSxJQUFJLGNBQWMsRUFBRSxFQUFFLElBQUksWUFBWSxFQUFFLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUN2SCxPQUFPLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUdaLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQU92QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0RBQXNELENBQUM7QUFFcEYsT0FBTyxFQVFMLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUlYLFdBQVcsRUFJWCxLQUFLLEVBQ04sTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFDLFdBQVcsRUFBWSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVzlELE1BQU0sT0FBTyxrQkFBa0I7SUF3RDdCLElBQUksUUFBUSxDQUFDLEtBQUs7UUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0QsQ0FBQztJ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SSxFQUFFLFdBQVcsRUFBQztnQkFDakIsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNGLFdBQVc7c0JBQWhDLFNBQVM7dUJBQUMsU0FBUztnQkFDRSxhQUFhO3NCQUFsQyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ0UsV0FBVztzQkFBaEMsU0FBUzt1QkFBQyxTQUFTO2dCQThDYixlQUFlO3NCQURyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtmb3JrSm9pbiBhcyBvYnNlcnZhYmxlRm9ya0pvaW4sIGZyb20gYXMgb2JzZXJ2YWJsZUZyb20sIG9mIGFzIG9ic2VydmFibGVPZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7cGx1Y2ssIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge09iamVjdEZvcm1Db21wb25lbnR9IGZyb20gJy4uLy4uLy4uL29iamVjdC1mb3JtL29iamVjdC1mb3JtL29iamVjdC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBGb3JtU3RhdHVzQ2hhbmdlZEV2ZW50XG59IGZyb20gJy4uLy4uLy4uL29iamVjdC1mb3JtL2luZGV4JztcbmltcG9ydCB7TmdGb3JtfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0xvY2FsZURhdGVQaXBlfSBmcm9tICcuLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9waXBlcy9sb2NhbGUtZGF0ZS5waXBlJztcbmltcG9ydCB7QXBwU2VhcmNoU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvc2VhcmNoL2FwcC1zZWFyY2guc2VydmljZSc7XG5pbXBvcnQge1xuICBDYXBhYmlsaXRpZXMsXG4gIENhcGFiaWxpdGllc1NlcnZpY2UsXG4gIExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gIExvZ2dlcixcbiAgTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gIE9iamVjdFR5cGUsXG4gIFF1ZXJ5U2NvcGUsXG4gIFJhbmdlVmFsdWUsXG4gIFNlYXJjaEZpbHRlcixcbiAgU2VhcmNoUXVlcnksXG4gIFNlYXJjaFNlcnZpY2UsXG4gIFNlYXJjaFN0YXRlLFxuICBTdG9yZWRRdWVyaWVzU2VydmljZSxcbiAgU3RvcmVkUXVlcnksXG4gIFN5c3RlbVNlcnZpY2UsXG4gIFRyYW5zbGF0ZVNlcnZpY2UsXG4gIFVzZXJTZXJ2aWNlLFxuICBVdGlsc1xufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtBdXRvQ29tcGxldGV9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtDb250ZXh0VHlwZSwgSWR4U2VhcmNofSBmcm9tICcuL2FwcC1zZWFyY2guaW50ZXJmYWNlJztcbmltcG9ydCB7IFl2Y092ZXJsYXlSZWYsIFl2Y092ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL292ZXJsYXknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1hcHAtc2VhcmNoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcC1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHAtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbiAgLy8gdG9kbzogYXBwbHkgb25QdXNoIGNoYW5nZSBkZXRlY3Rpb24gKGFnZyBzZWFyY2ggcmVzdWx0IHJpZ2h0IG5vdyBkb2Vzbid0IHVwZGF0ZSlcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXBwU2VhcmNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBQQVJBTVMgPSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUztcbiAgT1BFUkFUT1IgPSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1I7XG4gIHF1ZXJ5U2NvcGU6IFF1ZXJ5U2NvcGU7XG5cbiAgQFZpZXdDaGlsZCgndHBsU2VhcmNoJywge3JlYWQ6IFRlbXBsYXRlUmVmfSkgdHBsU2VhcmNoOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcpIHNlYXJjaElucHV0OiBBdXRvQ29tcGxldGU7XG4gIEBWaWV3Q2hpbGQoJ3hwaW5wdXQnKSBleHBlcnRJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaWR4Zm9ybScpIGluZGV4ZGF0YUZvcm06IE9iamVjdEZvcm1Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2N0eGZvcm0nKSBjb250ZXh0Rm9ybTogT2JqZWN0Rm9ybUNvbXBvbmVudDtcblxuICBwcml2YXRlIF9vdmVybGF5UmVmPzogWXZjT3ZlcmxheVJlZjtcbiAgcHJpdmF0ZSBxdWVyeVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHF1ZXJ5U3RhdGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcXVlcnk6IFNlYXJjaFF1ZXJ5O1xuICBxdWVyeVN0YXRlOiBTZWFyY2hTdGF0ZTtcbiAgY2FwYWJpbGl0aWVzOiBDYXBhYmlsaXRpZXM7XG4gIGFjdGl2ZVRhYklkPzogc3RyaW5nO1xuICBsb2FkaW5nOiBib29sZWFuO1xuXG4gIGlzU3RvcmVkUXVlcnk6IGJvb2xlYW47XG4gIGlzT3duUXVlcnkgPSBmYWxzZTtcbiAgb2JqZWN0VHlwZUdyb3VwcyA9IFtdO1xuICB0eXBlR3JvdXBUcmVlID0gW107XG4gIGF1dG9jb21wbGV0ZVJlc3VsdHM6IHN0cmluZ1tdO1xuXG4gIGlkeFNlYXJjaDogSWR4U2VhcmNoO1xuICBjdXJyZW50Q29udGV4dEZvbGRlck5hbWU7XG5cbiAgZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSBmYWxzZTtcbiAgZXhwZXJ0TW9kZVN1cHBvcnQgPSB7XG4gICAgYmFzZVBhcmFtczogW10sXG4gICAgc2VsZWN0ZWRHcm91cDogbnVsbCxcbiAgICBzZWxlY3RlZFR5cGU6IG51bGxcbiAgfTtcblxuICBmaWx0ZXJzTW9kZWwgPSB7fTtcbiAgYWdncmVnYXRpb25zTW9kZWwgPSB7fTtcbiAgZGF0ZVBpcGU6IExvY2FsZURhdGVQaXBlO1xuICBzeXNSb290Q29udGV4dCA9IHtcbiAgICBpZDogbnVsbCxcbiAgICBuYW1lOiBDb250ZXh0VHlwZS5zeXNyb290LFxuICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5hZGQudGl0bGUubG9jYXRpb24uY29tbW9uJyksXG4gICAgc2l0dWF0aW9uOiAnU0VBUkNIJyxcbiAgICBtb2RlOiAnQ09OVEVYVCcsXG4gICAgY29udGV4dEZvcm1PcHRpb25zOiB7XG4gICAgICBmb3JtTW9kZWw6IHtuYW1lOiBDb250ZXh0VHlwZS5zeXNyb290fVxuICAgIH1cbiAgfTtcblxuICBfc2VsZWN0ZWQ6IG51bWJlciA9IG51bGw7XG5cbiAgb2JqZWN0VHlwZUdyb3Vwc1N0b3JhZ2VLZXkgPSAnZW8uYXBwLnNlYXJjaC5vYmplY3QudHlwZS5ncm91cC5zb3J0ZWRMaXN0JztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIG9uRXhlY3V0ZVNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgc2V0IHNlbGVjdGVkKGluZGV4KSB7XG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZCA9PT0gaW5kZXggPyBudWxsIDogaW5kZXg7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICB9XG5cbiAgZ2V0IHN0b3JlZFF1ZXJ5KCk6IFN0b3JlZFF1ZXJ5IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSBhcyBTdG9yZWRRdWVyeTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwU2VhcmNoU2VydmljZTogQXBwU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJsYXk6IFl2Y092ZXJsYXlTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIHN5c3RlbVNlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc3RvcmVkUXVlcmllc1NlcnZpY2U6IFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FwYWJpbGl0eVNlcnZpY2U6IENhcGFiaWxpdGllc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlcixcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlXG4gICkge1xuXG4gICAgdGhpcy5kYXRlUGlwZSA9IG5ldyBMb2NhbGVEYXRlUGlwZSh0cmFuc2xhdGUpO1xuXG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5iYXNlUGFyYW1zID0gT2JqZWN0LmtleXMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMpLm1hcChrID0+IHtcbiAgICAgIGxldCBkYXRhID0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVNba107XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uZ2xvYmFsLmJhc2VwYXJhbS4nICsgZGF0YSksXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkNSRUFURURdID0gT2JqZWN0LmtleXMoXG4gICAgICBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS4nICsgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1trXVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NT0RJRklFRF0gPSBPYmplY3Qua2V5cyhcbiAgICAgIFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNcbiAgICApLm1hcChrID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1trXSxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLicgKyBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTW2tdXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1JTUVUWVBFR1JPVVBdID0gT2JqZWN0LmtleXMoXG4gICAgICBTZWFyY2hRdWVyeS5NSU1FVFlQRUdST1VQX0JVQ0tFVFNcbiAgICApLm1hcChrID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogU2VhcmNoUXVlcnkuTUlNRVRZUEVHUk9VUF9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiBTZWFyY2hRdWVyeS5NSU1FVFlQRUdST1VQX0JVQ0tFVFNba11cbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkZJTEVTSVpFXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuRklMRV9TSVpFX0JVQ0tFVFNcbiAgICApLm1hcChrID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogU2VhcmNoUXVlcnkuRklMRV9TSVpFX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cuZmlsZXNpemUuJyArIFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTW2tdXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBvblRhYkNoYW5nZSh0YWJJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRhYklkO1xuICAgIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0VHlwZScpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge31cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGFiSWQgPT09ICdyZXN0cmljdENyZWF0ZWQnKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHt9LFxuICAgICAgICBjcmVhdGVkOiB7fVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0TW9kaWZpY2F0aW9uJykge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEFnZ3Moe1xuICAgICAgICB0eXBlOiB7fSxcbiAgICAgICAgbW9kaWZpZWQ6IHt9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRhYklkID09PSAncmVzdHJpY3RGaWxlJykge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEFnZ3Moe1xuICAgICAgICB0eXBlOiB7fSxcbiAgICAgICAgbWltZXR5cGVncm91cDoge30sXG4gICAgICAgIGZpbGVzaXplOiB7fVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1F1ZXJ5KHF1ZXJ5OiBTZWFyY2hRdWVyeSkge1xuICAgIC8vIElNUE9SVEFOVDogbmV2ZXIgY2hhbmdlIHRoZSBsb2NhbCBxdWVyeSBkaXJlY3RseVxuICAgIC8vIHVzZSBzZWFyY2hTZXJ2aWNlLCBzbyBldmVyeSBjb21wb25lbnRzIHN1YnNjcmliZWQgdG8gdGhlIHF1ZXJ5XG4gICAgLy8gd2lsbCBnZXQgdGhlIG5ldyB2YWx1ZVxuICAgIHRoaXMucXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLmN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSA9IHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aFxuICAgICAgPyB0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlc1swXS5uYW1lXG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5pc1N0b3JlZFF1ZXJ5ID0gcXVlcnkgaW5zdGFuY2VvZiBTdG9yZWRRdWVyeTtcblxuICAgIGlmICh0aGlzLmlzU3RvcmVkUXVlcnkpIHtcbiAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICB0aGlzLmlzT3duUXVlcnkgPVxuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5LnVzZXIudG9Mb3dlckNhc2UoKSA9PT0gdXNlci5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMpLmZvckVhY2goayA9PiB0aGlzLnByb2Nlc3NGaWx0ZXJzKGspKTtcbiAgICAvLyBpZiB3ZSBoYXZlIGFuIGluZGV4ZGF0YSBzZWFyY2ggdXNpbmcgYSBjb250ZXh0IGJ1dCB0aGUgY29udGV4dCB3YXMgcmVtb3ZlZFxuICAgIGlmIChcbiAgICAgICF0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGggJiZcbiAgICAgIHRoaXMuaWR4U2VhcmNoICYmXG4gICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnNcbiAgICApIHtcbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucyA9IG51bGw7XG4gICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9sZGVyVHlwZSA9IG51bGw7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hGaWx0ZXJGcm9tRm9ybURhdGEoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIC8vIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBzZXR1cCBhbiBpbmRleGRhdGEgc2VhcmNoXG4gICAgY29uc3QgdXBkYXRlQ2F1c2VkQnlUeXBlVG9nZ2xlID0gdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID09PSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuVE9HR0xFRF9UWVBFO1xuICAgIGlmICh0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMSAmJiAhdXBkYXRlQ2F1c2VkQnlUeXBlVG9nZ2xlKSB7XG4gICAgICAvLyBoYXZpbmcganVzdCBvbmUgdGFyZ2V0IHR5cGUgYW5kIGEgY29udGV4dCB0eXBlIHNldHVwIG1lYW5zLCB0aGF0IHdlIGFyZSB1c2luZyBpbmRleGRhdGEgc2VhcmNoXG4gICAgICB0aGlzLmluZGV4ZGF0YVNlYXJjaChcbiAgICAgICAgdGhpcy5xdWVyeS50eXBlc1swXSxcbiAgICAgICAgdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoID4gMCA/IHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzWzBdIDogbnVsbFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycyh0aGlzLnF1ZXJ5KS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAvLyBoYXZpbmcganVzdCBvbmUgdGFyZ2V0IHR5cGUgYW5kIGluZGV4ZGF0YSBmaWx0ZXJzIGFsc28gbWVhbnMsIHRoYXQgd2UgYXJlIHVzaW5nIGluZGV4ZGF0YSBzZWFyY2hcbiAgICAgIHRoaXMuaW5kZXhkYXRhU2VhcmNoKHRoaXMucXVlcnkudHlwZXNbMF0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPiAxKSB7XG4gICAgICAvLyByZXNldCBpbmRleGRhdGEgc2VhcmNoIG90aGVyd2lzZSwgYmVjYXVzZSB0aGUgY3VycmVudCBxdWVyeSBtYXkgYmUgcmVzZXQgZnJvbSBvdXQgc2lkZSAoZS5nLiBieSBhIHN0b3JlZCBxdWVyeSlcbiAgICAgIHRoaXMuaWR4U2VhcmNoID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocXVlcnkuZXhwZXJ0TW9kZSkge1xuICAgICAgdGhpcy50eXBlR3JvdXBUcmVlID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmJ1aWxkVHlwZUdyb3VwVHJlZSgpO1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5U2NvcGUgPSBxdWVyeS5zY29wZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RPYmplY3RUeXBlKHR5cGU6IE9iamVjdFR5cGUpIHtcbiAgICAvKiogc2V0IHVwIHRoZSByaWdodCB0eXBlIGZpbHRlciBpZiBub3QgYWxyZWFkeSBkb25lICovXG4gICAgY29uc3QgcXVlcnlUeXBlc0xlbmd0aCA9XG4gICAgICB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA+IDEgfHwgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDA7XG4gICAgY29uc3QgcXVlcnlUeXBlc0xlbmd0aEFuZE5hbWUgPVxuICAgICAgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5xdWVyeS50eXBlc1swXS5uYW1lICE9PSB0eXBlLm5hbWU7XG4gICAgaWYgKHF1ZXJ5VHlwZXNMZW5ndGggfHwgcXVlcnlUeXBlc0xlbmd0aEFuZE5hbWUpIHtcbiAgICAgIC8vIHNldHRpbmcgb2JqZWN0IHR5cGVzIHdpbGwgZW1pdCBhIG5ldyBxdWVyeS4gVGhpcyB3aWxsIHRoZW4gdGFrZSBjYXJlIG9mXG4gICAgICAvLyBzZXR0aW5nIHVwIHRoZSBpbmRleGRhdGEgZm9ybVxuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldFF1ZXJ5VHlwZXMoW3R5cGVdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBpbmRleGRhdGEgc2VhcmNoIGZvciBhIGdpdmVuIG9iamVjdCB0eXBlXG4gICAqIEBwYXJhbSB0eXBlIC0gYW4gb2JqZWN0IHR5cGVcbiAgICogQHBhcmFtIGNvbnRleHRGb2xkZXJUeXBlIC0gY29udGV4dCBmb2xkZXIgdHlwZVxuICAgKi9cbiAgcHVibGljIGluZGV4ZGF0YVNlYXJjaCh0eXBlOiBPYmplY3RUeXBlLCBjb250ZXh0Rm9sZGVyVHlwZT86IE9iamVjdFR5cGUpIHtcbiAgICBpZiAoIXR5cGUgfHwgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnF1ZXJ5LnR5cGVzWzBdLm5hbWUgPT09IHR5cGUubmFtZSkge1xuICAgICAgLyoqIGV2ZW4gaWYgd2Ugc2VsZWN0IGEgdHlwZSB0aGF0IGlzIGFscmVhZHkgc2VsZWN0ZWQsIHdlIG5lZWQgdG8gY2FsbCBhZ2dyZWdhdGUgYXMgdGhlcmUgbWF5IGJlIGNvbnRleHQgdHlwZXMgaW52b2x2ZWQgKi9cbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgIHN1Yjoge1xuICAgICAgICAgICAgY29udGV4dGZvbGRlcnR5cGU6IHt9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCB0cnVlKTtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1Jvb3RUeXBlID0gISF0aGlzLmFwcFNlYXJjaFNlcnZpY2UudHlwZXNBbGxvd2VkVW5kZXJTeXNyb290LmZpbmQoclQgPT4gclQucW5hbWUgPT09IHR5cGUucW5hbWUpO1xuXG4gICAgdGhpcy5pZHhTZWFyY2ggPSB7XG4gICAgICB0eXBlLFxuICAgICAgY29udGV4dEZvbGRlclR5cGUsXG4gICAgICBjb250ZXh0TW9kZWxzOiBpc1Jvb3RUeXBlID8gW3RoaXMuc3lzUm9vdENvbnRleHRdIDogW10sXG4gICAgICBmb3JtT3B0aW9uczogbnVsbFxuICAgIH07XG5cbiAgICAvKiogZmV0Y2ggY29udGV4dCB0eXBlIG1vZGVscyAqL1xuICAgIGlmICh0eXBlLmFsbG93ZWRjb250ZXh0dHlwZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0b0ZldGNoID0gW107XG4gICAgICB0eXBlLmFsbG93ZWRjb250ZXh0dHlwZXMuZm9yRWFjaChjb250ZXh0VHlwZSA9PiB7XG4gICAgICAgIGNvbnN0IG9ialR5cGUgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZShjb250ZXh0VHlwZS5uYW1lKTtcbiAgICAgICAgaWYgKG9ialR5cGUpIHtcbiAgICAgICAgICB0b0ZldGNoLnB1c2goXG4gICAgICAgICAgICB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZUZvcm0oXG4gICAgICAgICAgICAgIGNvbnRleHRUeXBlLm5hbWUsXG4gICAgICAgICAgICAgICdTRUFSQ0gnLFxuICAgICAgICAgICAgICAnQ09OVEVYVCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh0b0ZldGNoLmxlbmd0aCkge1xuICAgICAgICBvYnNlcnZhYmxlRm9ya0pvaW4odG9GZXRjaCkuc3Vic2NyaWJlKGZvcm1Nb2RlbHMgPT4ge1xuICAgICAgICAgIC8qKiBhYnN0cmFjdCBjb250ZXh0IHR5cGVzIHNob3VsZCBub3QgYmUgdXNlZCAqL1xuICAgICAgICAgIHRoaXMuYWRkQ29udGV4dE1vZGVsKGZvcm1Nb2RlbHMpO1xuICAgICAgICAgIC8qKiBpZiB0aGVyZSB3YXMgYSBjb250ZXh0IHR5cGUgcHJvdmlkZWQgYnkgdGhlIHF1ZXJ5LCB3ZSdsbCBzZXR1cCB0aGUgcmlnaHQgbW9kZWwgYXMgd2VsbCAqL1xuICAgICAgICAgIGlmIChjb250ZXh0Rm9sZGVyVHlwZSkge1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmlkeFNlYXJjaC5jb250ZXh0TW9kZWxzLmZpbmQoXG4gICAgICAgICAgICAgIG0gPT4gbS5uYW1lID09PSBjb250ZXh0Rm9sZGVyVHlwZS5uYW1lXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAobW9kZWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb250ZXh0KG1vZGVsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dEZvbGRlclR5cGUubmFtZSA9PT0gQ29udGV4dFR5cGUuc3lzcm9vdCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbnRleHQodGhpcy5zeXNSb290Q29udGV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvKiogdGhlIHByb3ZpZGVkIGNvbnRleHQgdHlwZSBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgc28ganVzdCByZW1vdmUgaXQgKi9cbiAgICAgICAgICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvbGRlclR5cGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZvcm1EYXRhO1xuICAgIGxldCBpZHhGaWx0ZXJzID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKCk7XG4gICAgaWYgKGlkeEZpbHRlcnMgJiYgaWR4RmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBzZXQgdXAgZm9ybSBkYXRhIGZyb20gaW5kZXhkYXRhIHF1ZXJ5IGZpbHRlcnNcbiAgICAgIGZvcm1EYXRhID0gaWR4RmlsdGVycztcbiAgICB9XG5cbiAgICBjb25zdCBvYmplY3RUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUodHlwZS5uYW1lKTtcbiAgICBpZiAob2JqZWN0VHlwZSkge1xuICAgICAgdGhpcy5zeXN0ZW1TZXJ2aWNlXG4gICAgICAgIC5nZXRPYmplY3RUeXBlRm9ybSh0eXBlLm5hbWUsICdTRUFSQ0gnKVxuICAgICAgICAuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgICAgICB0aGlzLmlkeFNlYXJjaC5mb3JtT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGZvcm1Nb2RlbDogbW9kZWwsXG4gICAgICAgICAgICBkYXRhOiBmb3JtRGF0YVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1F1ZXJ5U3RhdGUocXVlcnlTdGF0ZTogU2VhcmNoU3RhdGUpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnF1ZXJ5U3RhdGUgPSBxdWVyeVN0YXRlO1xuICAgIGlmICh0aGlzLmlkeFNlYXJjaCkge1xuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEFnZ3JlZ2F0aW9ucyA9IHt9O1xuICAgICAgaWYgKHF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLmNvbnRleHRUeXBlLnNpemUpIHtcbiAgICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEFnZ3JlZ2F0aW9ucyA9IHRoaXMuYnVpbGRDb250ZXh0QWdncmVnYXRpb25zKHF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLmNvbnRleHRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzYXZlIGFnZ3JlZ2F0aW9ucyB2YWx1ZXNcbiAgICBpZiAoIXRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRV0gfHwgIXRoaXMucXVlcnkudHlwZXMubGVuZ3RoIHx8IHF1ZXJ5U3RhdGUubGFzdENoYW5nZSAhPT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRSkge1xuICAgICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5UWVBFXSA9IG5ldyBNYXAocXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnMudHlwZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zeW5jQWdncmVnYXRpb25zKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkNSRUFURUQsIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSk7XG4gICAgdGhpcy5zeW5jQWdncmVnYXRpb25zKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVELCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpO1xuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NSU1FVFlQRUdST1VQLCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU4pO1xuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5GSUxFU0laRSwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKTtcbiAgfVxuXG4gIGJ1aWxkQ29udGV4dEFnZ3JlZ2F0aW9ucyhjb250ZXh0VHlwZSkge1xuICAgIGxldCBjb250ZXh0QWdncmVnYXRpb25zID0ge307XG4gICAgY29udGV4dFR5cGUuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4gY29udGV4dEFnZ3JlZ2F0aW9uc1trZXldID0gdmFsdWUpO1xuICAgIHJldHVybiBjb250ZXh0QWdncmVnYXRpb25zO1xuICB9XG5cbiAgcHJvY2Vzc0ZpbHRlcnMoazogc3RyaW5nKSB7XG4gICAgbGV0IGY6IFNlYXJjaEZpbHRlciA9IHRoaXMucXVlcnkuZmlsdGVycy5maW5kKGZmID0+IGZmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1trXSk7XG4gICAgaWYgKCFmKSB7XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1trXV0gPSB7XG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICBtdWx0aVZhbHVlOiBbXSxcbiAgICAgICAgaW5uZXJWYWx1ZTogW11cbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICF0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XSB8fFxuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uZmlsdGVyICE9PSBmXG4gICAgKSB7XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XSA9IHt9O1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uZmlsdGVyID0gZjtcbiAgICAgIGxldCB2YWx1ZTogYW55ID1cbiAgICAgICAgdHlwZW9mIGYuZmlyc3RWYWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBmLm9wZXJhdG9yID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU5cbiAgICAgICAgICA/IEpTT04ucGFyc2UoZi5maXJzdFZhbHVlKVxuICAgICAgICAgIDogdHlwZW9mIGYuZmlyc3RWYWx1ZSAhPT0gJ2Jvb2xlYW4nID8gW2YuZmlyc3RWYWx1ZV0gOiBmLmZpcnN0VmFsdWU7XG4gICAgICBpZiAoZi5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLm11bHRpVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0udmFsdWUgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkNSRUFURUQgfHxcbiAgICAgICAgICBmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NT0RJRklFRFxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBSYW5nZVZhbHVlKGYub3BlcmF0b3IsIGYuZmlyc3RWYWx1ZSwgZi5zZWNvbmRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0ubXVsdGlWYWx1ZSA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5pbm5lclZhbHVlID1cbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBBcnJheSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmxhYmVsID0gW107XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5pbm5lclZhbHVlLmZvckVhY2goKHY6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVE9SIHx8XG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRVJcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0ubGFiZWxbaV0gPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmxhYmVsW2ldID0gb2JzZXJ2YWJsZU9mKFxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGaWx0ZXIoZiwgdilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzeW5jQWdncmVnYXRpb25zKG5hbWUsIG9wZXJhdG9yKSB7XG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtuYW1lXS5mb3JFYWNoKGFnZyA9PiB7XG4gICAgICBsZXQgYSA9IHRoaXMucXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNbbmFtZV0uZmluZChhYSA9PiBhYS5rZXkgPT09IGFnZy5rZXkpO1xuICAgICAgaWYgKGEgJiYgYS52YWx1ZSAhPT0gYWdnLnZhbHVlKSB7XG4gICAgICAgIGFnZy52YWx1ZSA9IGEudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKCFhICYmIHRoaXMucXVlcnlTdGF0ZS5sYXN0Q2hhbmdlICE9PSBuYW1lKSB7XG4gICAgICAgIGFnZy52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgYWdnLnNlbGVjdGVkID0gdGhpcy5pc0ZpbHRlckFjdGl2ZShuYW1lLCBvcGVyYXRvciwgYWdnLmtleSk7XG4gICAgICBhZ2cuc2F2ZWQgPSAhYSAmJiB0aGlzLnF1ZXJ5U3RhdGUubGFzdENoYW5nZSA9PT0gbmFtZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlckZpbHRlcihmaWx0ZXI6IFNlYXJjaEZpbHRlciwgdmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZURhdGVSZXN0cmljdGlvbihmaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW2ZpbHRlci5wcm9wZXJ0eV0pIHtcbiAgICAgIGxldCBhZ2cgPSB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW2ZpbHRlci5wcm9wZXJ0eV0uZmluZChhID0+IGEua2V5ID09PSB2YWx1ZSk7XG4gICAgICByZXR1cm4gYWdnLmxhYmVsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBjcmVhdGVEYXRlUmVzdHJpY3Rpb24oZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcbiAgICBzd2l0Y2ggKGZpbHRlci5vcGVyYXRvcikge1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0U6XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGBlby5zZWFyY2guYWdnLnRpbWUuJHtmaWx0ZXIuZmlyc3RWYWx1ZX1gKTtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMOlxuICAgICAgICByZXR1cm4gYD0gJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnREYXRlJyl9YDtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOVEVSVkFMX0lOQ0xVREVfQk9USDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydCcpfSAtICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLnNlY29uZFZhbHVlLCAnZW9TaG9ydCcpfWA7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5HUkVBVEVSX09SX0VRVUFMOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4uc2luY2UnKX0gJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnQnKX1gO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTEVTU19PUl9FUVVBTDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuLnVudGlsJyl9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgKCR7ZmlsdGVyLm9wZXJhdG9yfSkgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnQnKX1gO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVMYWJlbChtb2RlbDogYW55LCB2YWx1ZTogYW55W10pIHtcbiAgICBtb2RlbC5sYWJlbC5mb3JFYWNoKChsLCBpKSA9PiBsLm5leHQodmFsdWVbaV0udGl0bGUpKTtcbiAgfVxuXG4gIHJlc29sdmVTZWxlY3Rpb24oYWdnczogYW55W10sIGtleTogc3RyaW5nLCBzZWxlY3RlZDogYm9vbGVhbikge1xuICAgIHJldHVybiBhZ2dzXG4gICAgICAuZmlsdGVyKGEgPT4gc2VsZWN0ZWQgPyBhLmtleSAhPT0ga2V5ICYmIGEuc2VsZWN0ZWQgOiBhLmtleSA9PT0ga2V5IHx8IGEuc2VsZWN0ZWQpXG4gICAgICAubWFwKGEgPT4gYS5rZXkpO1xuICB9XG5cbiAgcmVzZXRFeHBlcnRNb2RlSW5wdXQoKSB7XG4gICAgdGhpcy5xdWVyeS50ZXJtID0gJyc7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUV4cGVydE1vZGUoKSB7XG4gICAgaWYgKHRoaXMudHlwZUdyb3VwVHJlZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudHlwZUdyb3VwVHJlZSA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5idWlsZFR5cGVHcm91cFRyZWUoKTtcbiAgICB9XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZUV4cGVydE1vZGUoKTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmNoYW5nZVNlYXJjaElucHV0Rm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRRdWVyeVNjb3BlKHNjb3BlOiBRdWVyeVNjb3BlKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldFF1ZXJ5U2NvcGUoc2NvcGUpO1xuICB9XG5cbiAgcHVibGljIHhwU2VsZWN0R3JvdXAoZ3JvdXApIHtcbiAgICB0aGlzLmV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkR3JvdXAgPSBncm91cDtcbiAgICB0aGlzLmV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZSA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgeHBTZWxlY3RUeXBlKHR5cGUpIHtcbiAgICB0aGlzLmV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZSA9IHR5cGU7XG4gIH1cblxuICBwdWJsaWMgeHBBZGRUb1Rlcm0oc3RyKSB7XG4gICAgbGV0IHRlcm07XG4gICAgaWYgKCF0aGlzLnF1ZXJ5LnRlcm0pIHtcbiAgICAgIHRlcm0gPSBzdHI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlcm0gPSB0aGlzLnF1ZXJ5LnRlcm0gKyAnICcgKyBzdHI7XG4gICAgfVxuICAgIHRoaXMucXVlcnkudGVybSA9IHRlcm0gKyAnOic7XG4gICAgdGhpcy5leHBlcnRJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlVHlwZShfdHlwZTogT2JqZWN0VHlwZSkge1xuICAgIC8vIGRvIG5vdCBkaXJlY3RseSB0b2dnbGUgX3R5cGUgb24gdGhlIHF1ZXJ5LCBpbnN0ZWFkIHVzZSB0aGVcbiAgICAvLyBzZWFyY2hTZXJ2aWNlIHRvIHVwZGF0ZSB0aGUgcXVlcnkgc3RvcmVcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlUeXBlKF90eXBlKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1R5cGVBY3RpdmUoX3R5cGU6IE9iamVjdFR5cGUpIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXJ5LnR5cGVzLmZpbmQodCA9PiB0LmlkID09PSBfdHlwZS5pZCk7XG4gIH1cblxuICBwdWJsaWMgaXNUeXBlU2F2ZWQoX3R5cGU6IE9iamVjdFR5cGUpIHtcbiAgICByZXR1cm4gKCF0aGlzLnF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLnR5cGUuZ2V0KF90eXBlLm5hbWUpICYmIHRoaXMucXVlcnlTdGF0ZS5sYXN0Q2hhbmdlID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5UWVBFKTtcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0aW9uQ291bnQoX3R5cGU6IE9iamVjdFR5cGUpIHtcbiAgICByZXR1cm4gKCh0aGlzLmlzVHlwZVNhdmVkKF90eXBlKSA/IHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRV0uZ2V0KF90eXBlLm5hbWUpIDogdGhpcy5xdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy50eXBlLmdldChfdHlwZS5uYW1lKSkgfHwgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KSB7XG4gICAgaWYgKGtleSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgU2VhcmNoRmlsdGVyKGZpbHRlclR5cGUsIGtleS5vcGVyYXRvciwga2V5LmZpcnN0VmFsdWUsIGtleS5zZWNvbmRWYWx1ZSwge3RpbWU6IGtleS5vcGVyYXRvciAhPT0gdGhpcy5PUEVSQVRPUi5FUVVBTCwgdGltZXpvbmU6IGZhbHNlfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgU2VhcmNoRmlsdGVyKGZpbHRlclR5cGUsIG9wZXJhdG9yLCBrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRGaWx0ZXIoZmlsdGVyVHlwZTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCBrZXk6IGFueSwgZm9ybT86IE5nRm9ybSkge1xuICAgIGxldCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKGZpbHRlclR5cGUsIG9wZXJhdG9yLCBrZXkpO1xuICAgIGxldCBlbXB0eSA9IHRoaXMuaXNFbXB0eShmaWx0ZXIpO1xuICAgIGxldCBhY3RpdmVGaWx0ZXIgPSB0aGlzLnF1ZXJ5LmZpbHRlcnMuZmluZChmZiA9PiBmZi5wcm9wZXJ0eSA9PT0gZmlsdGVyLnByb3BlcnR5KTtcbiAgICBsZXQgZHVwbGljYXRlID0gdGhpcy5pc0ZpbHRlckFjdGl2ZShmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcblxuICAgIGlmIChlbXB0eSAmJiBhY3RpdmVGaWx0ZXIgJiYgYWN0aXZlRmlsdGVyLm9wZXJhdG9yICE9PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5yZW1vdmVRdWVyeUZpbHRlcihmaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAoIWVtcHR5ICYmICFkdXBsaWNhdGUpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZGRRdWVyeUZpbHRlcihmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVGaWx0ZXIoZmlsdGVyVHlwZTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCBrZXk6IGFueSwgc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICBsZXQgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICBpZiAoZmlsdGVyVHlwZSA9PT0gdGhpcy5QQVJBTVMuRklMRVNJWkUpIHtcbiAgICAgIGxldCBmb2xkZXJGaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKCdmb2xkZXInLCAnZXEnLCBmYWxzZSk7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlGaWx0ZXJzKFtmaWx0ZXIsIGZvbGRlckZpbHRlcl0sICFzZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVRdWVyeUZpbHRlcihmaWx0ZXIsICFzZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRW1wdHkodmFsdWU6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICAoKHZhbHVlIGluc3RhbmNlb2YgUmFuZ2VWYWx1ZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNlYXJjaEZpbHRlcikgJiZcbiAgICAgICAgdGhpcy5pc0VtcHR5KHZhbHVlLmZpcnN0VmFsdWUpICYmXG4gICAgICAgIHRoaXMuaXNFbXB0eSh2YWx1ZS5zZWNvbmRWYWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPT09IDApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0ZpbHRlckFjdGl2ZShmaWx0ZXJUeXBlOiBzdHJpbmcsIG9wZXJhdG9yOiBzdHJpbmcsIGtleTogYW55KSB7XG4gICAgbGV0IGYgPSB0aGlzLmJ1aWxkRmlsdGVyKGZpbHRlclR5cGUsIG9wZXJhdG9yLCBrZXkpO1xuICAgIHJldHVybiAhIXRoaXMucXVlcnkuZmlsdGVycy5maW5kKGZmID0+IGZmLm1hdGNoKGYucHJvcGVydHksIGYub3BlcmF0b3IsIGYuZmlyc3RWYWx1ZSwgZi5zZWNvbmRWYWx1ZSkpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0RmlsdGVyKG1vZGVsOiBhbnksIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobW9kZWwuaW5uZXJWYWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIG1vZGVsLmlubmVyVmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgbGV0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIobW9kZWwuZmlsdGVyLnByb3BlcnR5LCBtb2RlbC5maWx0ZXIub3BlcmF0b3IsIG1vZGVsLmlubmVyVmFsdWUuZmlsdGVyKGYgPT4gZiAhPT0gdmFsdWUpKTtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZGRRdWVyeUZpbHRlcihmaWx0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVtb3ZlUXVlcnlGaWx0ZXIobW9kZWwuZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXV0b2NvbXBsZXRlU3VnZ2VzdChldnQ/KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsZXQgdiA9IFtdO1xuICAgICAgLy8gYWxzbyB0cmlnZ2VyIGFnZ3JlZ2F0aW9ucyBzZWFyY2hcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU2VsZWN0KCk7XG4gICAgICBpZiAoZXZ0KSB7XG4gICAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZVxuICAgICAgICAgIC5hdXRvY29tcGxldGUoZXZ0KVxuICAgICAgICAgIC5waXBlKHN3aXRjaE1hcChyZXMgPT4gb2JzZXJ2YWJsZUZyb20ocmVzKS5waXBlKHBsdWNrKCd2YWx1ZScpKSkpXG4gICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4gdi5wdXNoKHJlcyksICgpID0+IHsgfSwgKCkgPT4gKHRoaXMuYXV0b2NvbXBsZXRlUmVzdWx0cyA9IHYpXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIGV4cGVydFRlcm1DaGFuZ2VkKCkge1xuICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhdXRvY29tcGxldGVTZWxlY3QoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgYXV0b2NvbXBsZXRlUGFzdGUoZSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5xdWVyeS50ZXJtID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVNlbGVjdCgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGVTZWFyY2goKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnF1ZXJ5LmV4cGVydE1vZGUpIHtcbiAgICAgIC8vIGluIGV4cGVydCBzZWFyY2ggbW9kZSB3ZSBwcmUtZmV0Y2ggcmVzdWx0cyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3R1YWwgc2VhcmNoXG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0U2VhcmNoU3RhdGUoe2FnZ3M6IHt0eXBlOiB7fX0sIC4uLnRoaXMucXVlcnkuZ2V0UXVlcnlKc29uKCl9KS5zdWJzY3JpYmUoKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB7XG4gICAgICAgIC8vIG9ubHkgZXhlY3V0ZSB0aGUgYWN0dWFsIHF1ZXJ5IHdoZW4gd2UndmUgZm91bmQgc29tZXRoaW5nXG4gICAgICAgIGlmICghcXVlcnlTdGF0ZS5pc0VtcHR5KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyU2VhcmNoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sIFV0aWxzLnRocm93KCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHNlYXJjaCByZXN1bHQnKTtcbiAgICAgICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IHRydWU7XG4gICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmlnZ2VyU2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXhlY3V0ZSB0aGUgYWN0dWFsIHNlYXJjaCBieSByb3V0aW5nIHRvIHRoZSByZXN1bHQgc3RhdGUgd2hpY2ggdGhlbiB3aWxsIGV4ZWN1dGUgdGhlXG4gIC8vIHF1ZXJ5IGFuZCBkaXNwbGF5IHRoZSByZXN1bHRzXG4gIHByaXZhdGUgdHJpZ2dlclNlYXJjaCgpIHtcbiAgICB0aGlzLnF1ZXJ5LnJlc29sdmVSZWZlcmVuY2UgPSB0cnVlO1xuICAgIGNvbnN0IHVyaVBhcmFtID0gZW5jb2RlVVJJQ29tcG9uZW50KFV0aWxzLmZvcm1EYXRhU3RyaW5naWZ5KHRoaXMucXVlcnkuZ2V0UXVlcnlKc29uKCkpKTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmNsb3NlKCk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0pLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgdXJpUGFyYW1RdWVyeTogTmF2aWdhdGlvbkV4dHJhcyA9IHtxdWVyeVBhcmFtczoge3F1ZXJ5OiB1cmlQYXJhbX19O1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcmVzdWx0J10sIHVyaVBhcmFtUXVlcnkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVRlcm0oKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldFRlcm0oJycpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVR5cGUodHlwZTogT2JqZWN0VHlwZSkge1xuICAgIGlmICh0aGlzLmlkeFNlYXJjaCkge1xuICAgICAgdGhpcy5leGl0SW5kZXhkYXRhU2VhcmNoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVRdWVyeVR5cGUodHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZUNvbnRleHRUeXBlKCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVtb3ZlUXVlcnlGaWx0ZXIoZmlsdGVyKTtcblxuICAgIC8vIGlmIHdlIGFyZSBpbiBpbmRlc2RhdGEgc2VhcmNoIG1vZGUsIHJlbW92aW5nIGEgZmlsdGVyIHRoYXQgaXMgbm8gYmFzZXBhcmFtIGZpbHRlclxuICAgIC8vIHJlcXVpcmVzIHRoZSBmcm9tIG1vZGVsIHRvIGJlIHVwZGF0ZWRcbiAgICBpZiAodGhpcy5pZHhTZWFyY2ggJiYgIXRoaXMuYXBwU2VhcmNoU2VydmljZS5pc0Jhc2VQYXJhbUZpbHRlcihmaWx0ZXIpKSB7XG4gICAgICAvLyB0b2RvOiB1cGRhdGUgZm9ybSBtb2RlbC9kYXRhXG4gICAgICBsZXQgaWR4RmlsdGVycyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycygpO1xuICAgICAgaWYgKGlkeEZpbHRlcnMgJiYgaWR4RmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIHNldCB1cCBmb3JtIGRhdGEgZnJvbSBpbmRleGRhdGEgcXVlcnkgZmlsdGVyc1xuICAgICAgICB0aGlzLmlkeFNlYXJjaC5mb3JtT3B0aW9ucy5kYXRhID0gaWR4RmlsdGVycztcbiAgICAgICAgdGhpcy5pbmRleGRhdGFGb3JtLnNldEZvcm1EYXRhKGlkeEZpbHRlcnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgbm8gZmlsdGVycyBhcmUgcHJlc2VudCByZXNldCB0aGUgZm9ybVxuICAgICAgICB0aGlzLmlkeFNlYXJjaC5mb3JtT3B0aW9ucy5kYXRhID0ge307XG4gICAgICAgIHRoaXMuaW5kZXhkYXRhRm9ybS5yZXNldEZvcm0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRDb250ZXh0TW9kZWwoZm9ybU1vZGVscyk6IHZvaWQge1xuICAgIGxldCBtb2RlbHMgPSBbLi4uZm9ybU1vZGVsc107XG4gICAgdGhpcy5pZHhTZWFyY2guY29udGV4dE1vZGVscy5wdXNoKC4uLm1vZGVscyk7XG4gICAgdGhpcy5pZHhTZWFyY2guY29udGV4dE1vZGVscy5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpO1xuICB9XG5cbiAgcHVibGljIGV4aXRJbmRleGRhdGFTZWFyY2goKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmV4aXRJbmRleGRhdGFTZWFyY2goKTtcbiAgICB0aGlzLmlkeFNlYXJjaCA9IG51bGw7XG4gIH1cblxuICBzZXRDb250ZXh0KGNvbnRleHRGb2xkZXJOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoY29udGV4dEZvbGRlck5hbWUgJiYgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgIT09IGNvbnRleHRGb2xkZXJOYW1lKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSA9IGNvbnRleHRGb2xkZXJOYW1lO1xuICAgICAgY29uc3QgY29udGV4dFR5cGUgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZShjb250ZXh0Rm9sZGVyTmFtZSk7XG4gICAgICBpZiAoY29udGV4dEZvbGRlck5hbWUgPT09IENvbnRleHRUeXBlLnN5c3Jvb3QpIHtcbiAgICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldENvbnRleHRUeXBlKHtuYW1lOiBDb250ZXh0VHlwZS5zeXNyb290LCBsYWJlbDogQ29udGV4dFR5cGUuc3lzcm9vdH0gYXMgT2JqZWN0VHlwZSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlKSB7XG4gICAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShjb250ZXh0VHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQ29udGV4dCB0eXBlICcke2NvbnRleHRGb2xkZXJOYW1lfScgbm90IGZvdW5kLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUobnVsbCk7XG4gICAgICB0aGlzLmN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYSBjb250ZXh0IHR5cGUgZm9yIHRoZSBjdXJyZW50IHNlYXJjaFxuICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IGZvcm0gbW9kZWxcbiAgICovXG4gIHByaXZhdGUgc2VsZWN0Q29udGV4dChjdHgpIHtcbiAgICBpZiAodGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zICYmIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucy5mb3JtTW9kZWwubmFtZSA9PT0gY3R4Lm5hbWUpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvbnRleHQ7XG4gICAgICBpZiAoY3R4Lm5hbWUgPT09IENvbnRleHRUeXBlLnN5c3Jvb3QpIHtcbiAgICAgICAgY29udGV4dCA9IGN0eDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZShjdHgubmFtZSk7XG4gICAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb2xkZXJUeXBlID0gY29udGV4dDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShjb250ZXh0KTtcblxuICAgICAgbGV0IGZvcm1EYXRhID0ge307XG4gICAgICBsZXQgaWR4RmlsdGVycyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycygpO1xuICAgICAgaWYgKGlkeEZpbHRlcnMgJiYgaWR4RmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvcm1EYXRhID0gaWR4RmlsdGVycztcbiAgICAgIH1cblxuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zID0ge2Zvcm1Nb2RlbDogY3R4LCBkYXRhOiBmb3JtRGF0YX07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSW5kZXhEYXRhQ2hhbmdlZChldmVudDogRm9ybVN0YXR1c0NoYW5nZWRFdmVudCkge1xuICAgIC8vIG9ubHkgdHJpZ2dlciB3aGVuIHZhbHVlcyBhcmUgY2hhbmdlZCBhcyBjaGFuZ2VzIG1heSBhbHNvIGFwcGVhciB3aGVuIHNjcmlwdHNcbiAgICAvLyBjaGFuZ2Ugb3RoZXIgZm9ybSBlbGVtZW50IHByb3BlcnRpZXMgKGVnLiByZWFkb25seSwgcmVxdWlyZWQgZmxhZylcbiAgICBpZiAoZXZlbnQuaW5kZXhkYXRhQ2hhbmdlZCkge1xuICAgICAgdGhpcy51cGRhdGVTZWFyY2hGaWx0ZXJGcm9tRm9ybURhdGEoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlYXJjaEZpbHRlckZyb21Gb3JtRGF0YSgpIHtcbiAgICBpZiAoIXRoaXMuaW5kZXhkYXRhRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZCBtZXRhZGF0YSBmaWx0ZXJzIGZvciBlYWNoIGZvcm0gZGF0YSBlbnRyeVxuICAgIGxldCBpZHhGaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSA9IFtdO1xuICAgIGxldCBmb3JtRGF0YSA9IHRoaXMuaW5kZXhkYXRhRm9ybS5nZXRGb3JtRGF0YSgpO1xuICAgIGlmICh0aGlzLmNvbnRleHRGb3JtKSB7XG4gICAgICBmb3JtRGF0YSA9IE9iamVjdC5hc3NpZ24oZm9ybURhdGEsIHRoaXMuY29udGV4dEZvcm0uZ2V0Rm9ybURhdGEoKSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKGZvcm1EYXRhKSkge1xuICAgICAgY29uc3QgZmlsdGVyczogU2VhcmNoRmlsdGVyW10gPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0U2VhcmNoRmlsdGVyKHRoaXMucXVlcnkudHlwZXMsIGtleSwgZm9ybURhdGFba2V5XSkubWFwKGZpbHRlciA9PiB7XG4gICAgICAgIC8vIHRoZSBzZWFyY2ggc2VydmljZSBkb2VzIG5vdCBsaWtlIG5ld2xpbmUgY2hhcnMgaW4gY2FzZSBvZiBtdWx0aWxpbmUgZmllbGRzXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlci5maXJzdFZhbHVlKSkge1xuICAgICAgICAgIGZpbHRlci5maXJzdFZhbHVlID0gZmlsdGVyLmZpcnN0VmFsdWUubWFwKHZhbHVlID0+IHZhbHVlLnJlcGxhY2UoL1xcbi9nLCAnICcpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyLmZpcnN0VmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgZmlsdGVyLmZpcnN0VmFsdWUgPSBmaWx0ZXIuZmlyc3RWYWx1ZS5yZXBsYWNlKC9cXG4vZywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfSk7XG4gICAgICBmaWx0ZXJzLmZvckVhY2goZiA9PiBpZHhGaWx0ZXJzLnB1c2goZikpO1xuICAgIH1cbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoaWR4RmlsdGVycyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgb2JqZWN0IHR5cGUgZWxlbWVudCBmb3IgYSBmaWx0ZXIsIHRvIGJlIGFibGUgdG8gc2hvdyB0aGVcbiAgICogbGFiZWwgZm9yIGEgZmlsdGVyIGluIHRoZSBzZWFyY2ggc3VtbWFyeS5cbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciAtIHRoZSBmaWx0ZXIgdG8gZmV0Y2ggb2JqZWN0IHR5cGUgZWxlbWVudCBmb3JcbiAgICovXG4gIHB1YmxpYyBnZXRPYmplY3RUeXBlRWxlbWVudExhYmVsKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgbGV0IG90ID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldFRhcmdldFR5cGVFbGVtZW50QnlOYW1lKGZpbHRlci5wcm9wZXJ0eSk7XG4gICAgcmV0dXJuIG90ID8gb3QubGFiZWwgOiBmaWx0ZXIucHJvcGVydHkgKyAnIC0gJyArIGZpbHRlci5maXJzdFZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNhdmVRdWVyeSgpIHtcbiAgICAvLyBjb25zdCBxdWVyeVBhcmFtczogTmF2aWdhdGlvbkV4dHJhcyA9IHtxdWVyeVBhcmFtc0hhbmRsaW5nIDogJ3ByZXNlcnZlJ307XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICAgIHRoaXMucm91dGVyXG4gICAgICAubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0sIHtyZXBsYWNlVXJsOiB0cnVlfSlcbiAgICAgIC50aGVuKCgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3N0b3JlZC1xdWVyaWVzJ10sIHtxdWVyeVBhcmFtczoge2NyZWF0ZTogdHJ1ZX19KSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3RvcmVkUXVlcnkoKSB7XG4gICAgaWYgKHRoaXMucXVlcnkgaW5zdGFuY2VvZiBTdG9yZWRRdWVyeSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0sIHtyZXBsYWNlVXJsOiB0cnVlfSk7XG4gICAgICB0aGlzLnN0b3JlZFF1ZXJpZXNTZXJ2aWNlLnNhdmVTdG9yZWRRdWVyeSh0aGlzLnF1ZXJ5KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuc3VjY2Vzcyh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guc3RvcmVkcXVlcnkuc2F2ZS5zdWNjZXNzJykpO1xuICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LnNhdmUuZXJyb3InKSkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldFF1ZXJ5KCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuaXNPd25RdWVyeSA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5pZHhTZWFyY2gpIHtcbiAgICAgIHRoaXMuZXhpdEluZGV4ZGF0YVNlYXJjaCgpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlU2VhcmNoTWVudSgpIHtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmNsb3NlKCk7XG4gIH1cblxuICBtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwTGFiZWwsIGRpcmVjdGlvbjogc3RyaW5nKSB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmZpbmRJbmRleChncm91cCA9PiBncm91cExhYmVsID09PSBncm91cC5sYWJlbCk7XG4gICAgbGV0IG5ld0luZGV4ID0gZGlyZWN0aW9uID09PSAnbGVmdCcgPyBpbmRleCAtIDEgOiBpbmRleCArIDE7XG4gICAgd2hpbGUgKGluZGV4IDwgMCkge1xuICAgICAgaW5kZXggKz0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aDtcbiAgICB9XG4gICAgd2hpbGUgKG5ld0luZGV4IDwgMCkge1xuICAgICAgbmV3SW5kZXggKz0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKG5ld0luZGV4ID49IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIGxldCBrID0gbmV3SW5kZXggLSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoICsgMTtcbiAgICAgIHdoaWxlIChrLS0pIHtcbiAgICAgICAgdGhpcy5vYmplY3RUeXBlR3JvdXBzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vYmplY3RUeXBlR3JvdXBzLnNwbGljZShuZXdJbmRleCwgMCwgdGhpcy5vYmplY3RUeXBlR3JvdXBzLnNwbGljZShpbmRleCwgMSlbMF0pO1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSh0aGlzLm9iamVjdFR5cGVHcm91cHNTdG9yYWdlS2V5LCB0aGlzLm9iamVjdFR5cGVHcm91cHMubWFwKGdyb3VwID0+IGdyb3VwLmxhYmVsKSk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzU2VhcmNoSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQpIHtcbiAgICAgIC8vIFRPRE86IHRoaXMuc2VhcmNoSW5wdXQuaW5wdXRFTC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVNlYXJjaElucHV0Rm9jdXMoKSB7XG4gICAgaWYgKHRoaXMucXVlcnkuZXhwZXJ0TW9kZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZWxlY3RSb290RWxlbWVudCgnLmV4cGVydC1zZWFyY2hfX2lucHV0JykuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c1NlYXJjaElucHV0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0aGlzLmNhcGFiaWxpdHlTZXJ2aWNlLmdldENhcGFiaWxpdGllcygpO1xuICAgIHRoaXMub2JqZWN0VHlwZUdyb3VwcyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5vYmplY3RUeXBlR3JvdXBzO1xuICAgIHRoaXMub2JqZWN0VHlwZUdyb3Vwc1swXS50eXBlcyA9IHRoaXMub2JqZWN0VHlwZUdyb3Vwc1swXS50eXBlcy5maWx0ZXIodHlwZSA9PiB0eXBlLnFuYW1lICE9PSAnc3lzZm9sZGVyJyAmJiB0eXBlLnFuYW1lICE9PSAnc3lzZG9jdW1lbnQnICYmIHR5cGUucW5hbWUgIT09ICdzeXNvYmplY3QnKTtcbiAgICBsZXQgc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMub2JqZWN0VHlwZUdyb3Vwc1N0b3JhZ2VLZXkpO1xuICAgIGxldCBzeW5jZWQgPSB0cnVlO1xuICAgIGlmIChzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMgJiYgc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmxlbmd0aCA9PT0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMuZmluZChncm91cCA9PiBncm91cCA9PT0gdGhpcy5vYmplY3RUeXBlR3JvdXBzW2ldLmxhYmVsKSkge1xuICAgICAgICAgIHN5bmNlZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3luY2VkKSB7XG4gICAgICAgIHRoaXMub2JqZWN0VHlwZUdyb3VwcyA9IFsuLi50aGlzLm9iamVjdFR5cGVHcm91cHNdLnNvcnQoXG4gICAgICAgICAgKGEsIGIpID0+IHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscy5pbmRleE9mKGEubGFiZWwpIC0gc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmluZGV4T2YoYi5sYWJlbClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5xdWVyeSQuc3Vic2NyaWJlKFxuICAgICAgKHF1ZXJ5OiBTZWFyY2hRdWVyeSkgPT4gdGhpcy5wcm9jZXNzUXVlcnkocXVlcnkpKTtcbiAgICAvLyBzdWJzY3JpYmUgdG8gcXVlcnkgc3RhdGUgYXMgd2VsbCB0byBmZXRjaCByZXN1bHQgY291bnQgYW5kIGFnZ3JlZ2F0aW9ucyBhcyB0aGV5IGNoYW5nZVxuICAgIHRoaXMucXVlcnlTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5xdWVyeVN0YXRlJC5zdWJzY3JpYmUoKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB0aGlzLnByb2Nlc3NRdWVyeVN0YXRlKHF1ZXJ5U3RhdGUpKTtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0LmZvY3VzSW5wdXQoKTtcbiAgICB9KTtcbiAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5Lm9wZW4odGhpcy50cGxTZWFyY2gsIG51bGwsIHtcbiAgICAgIGNlbnRlcmVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuX292ZXJsYXlSZWYuYWZ0ZXJDbG9zZWQkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBOYXZpZ2F0aW9uRXh0cmFzID0ge3F1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdwcmVzZXJ2ZSd9O1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbe291dGxldHM6IHttb2RhbDogbnVsbH19XSwgcXVlcnlQYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlc2V0QWdncygpO1xuICAgIHRoaXMucXVlcnlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnF1ZXJ5U3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPCEtLSA8ZW8tZGlhbG9nIFt2aXNpYmxlXT1cInRydWVcIiBbc3R5bGVDbGFzc109XCInZW8tYXBwLXNlYXJjaC1kaWFsb2cnXCIgW2FsaWduXT1cIidzdGFydCdcIiBbbWluV2lkdGhdPVwiJzgwdncnXCJcbiAgW21pbkhlaWdodF09XCInMTAwdmgnXCIgKGhpZGUpPVwiY2xvc2VTZWFyY2hNZW51KCRldmVudClcIj4gLS0+XG48IS0tIDx5dmMtZGlhbG9nIFtvcHRpb25zXT1cIntsaWdodERpc21pc3M6IHRydWV9XCIgW3RlbXBsYXRlXT1cInRwbFNlYXJjaFwiIChjbG9zZWQpPVwiY2xvc2VTZWFyY2hNZW51KClcIj48L3l2Yy1kaWFsb2c+IC0tPlxuPG5nLXRlbXBsYXRlICN0cGxTZWFyY2g+XG5cbiAgPGRpdiBjbGFzcz1cImVvLWFwcC1zZWFyY2hcIiBbbmdDbGFzc109XCJ7ZXhwZXJ0OiBxdWVyeS5leHBlcnRNb2RlfVwiIGVvUnRsQXdhcmU9XCJmdWxsXCIgKm5nSWY9XCJxdWVyeVwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImhlYWRcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaFwiPlxuICAgICAgICA8Zm9ybSAoc3VibWl0KT1cImV4ZWN1dGVTZWFyY2goKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2g8L2Rpdj5cblxuICAgICAgICAgIDxlby1xdWVyeS1zY29wZS1zZWxlY3QgW3NlbGVjdGlvbl09XCJxdWVyeVNjb3BlXCIgKHNlbGVjdCk9XCJzZXRRdWVyeVNjb3BlKCRldmVudClcIj48L2VvLXF1ZXJ5LXNjb3BlLXNlbGVjdD5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYm94XCI+XG5cbiAgICAgICAgICAgIDx5dmMtYXV0b2NvbXBsZXRlICpuZ0lmPVwiIXF1ZXJ5LmV4cGVydE1vZGU7IGVsc2UgZXhwZXJ0SW5wdXRcIiAjc2VhcmNoSW5wdXRcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiIFsobmdNb2RlbCldPVwicXVlcnkudGVybVwiXG4gICAgICAgICAgICAgIChhdXRvY29tcGxldGVGbmMpPVwiYXV0b2NvbXBsZXRlU3VnZ2VzdCgkZXZlbnQpXCIgW2F1dG9jb21wbGV0ZVZhbHVlc109XCJhdXRvY29tcGxldGVSZXN1bHRzXCJcbiAgICAgICAgICAgICAgKHN1Z2dlc3Rpb25TZWxlY3QpPVwiYXV0b2NvbXBsZXRlU2VsZWN0KClcIiBbbWluTGVuZ3RoXT1cIjNcIiAoa2V5ZG93bi5lbnRlcik9XCJleGVjdXRlU2VhcmNoKClcIiAocGFzdGUpPVwiYXV0b2NvbXBsZXRlUGFzdGUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC95dmMtYXV0b2NvbXBsZXRlPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2V4cGVydElucHV0PlxuICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCIgY2xhc3M9XCJleHBlcnQtc2VhcmNoX19pbnB1dFwiICN4cGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJleHBlcnRUZXJtQ2hhbmdlZCgpXCIgWyhuZ01vZGVsKV09XCJxdWVyeS50ZXJtXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBleHBlcnQtbW9kZVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlRXhwZXJ0TW9kZSgpXCI+XG4gICAgICAgICAgICAgIDwhLS08c3BhbiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0PC9zcGFuPi0tPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19leHBlcnQtc2VhcmNoLnN2ZydcIlxuICAgICAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiKCdlby5zZWFyY2gubW9kZS5leHBlcnQnIHwgdHJhbnNsYXRlKVwiICpuZ0lmPVwiIXF1ZXJ5Py5leHBlcnRNb2RlOyBlbHNlIGNsb3NlXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Nsb3NlPlxuICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2V4cGVydC1zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LmNsb3NlJyB8IHRyYW5zbGF0ZSlcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gZXhwZXJ0LW1vZGUgZXhwZXJ0LW1vZGVfX3Jlc2V0XCIgW25nQ2xhc3NdPVwie2FjdGl2ZTogcXVlcnkudGVybX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRFeHBlcnRNb2RlSW5wdXQoKVwiPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCJcbiAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLmNsZWFyLnNlYXJjaCcgfCB0cmFuc2xhdGUpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cInF1ZXJ5U3RhdGUuaXNFbXB0eVwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5zZWFyY2guc3VibWl0PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0XCIgKm5nSWY9XCIhbG9hZGluZzsgZWxzZSBzcGlubmVyXCI+e3txdWVyeVN0YXRlLnRvdGFsQ291bnQgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc3Bpbm5lcj5cbiAgICAgICAgPGVvLWxvYWRpbmctc3Bpbm5lciBjbGFzcz1cInNlYXJjaC1hZ2dyZWdhdG9yX19sb2FkZXJcIiBbc2l6ZV09XCInbWVkaXVtJ1wiIFttb2RlXT1cIidkYXJrJ1wiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxlby1pY29uIGNsYXNzPVwiYnV0dG9uIHdoaXRlIGNsb3NlXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiXG4gICAgICAgIFtpY29uVGl0bGVdPVwiKCdlby5zZWFyY2guY2xvc2UnIHwgdHJhbnNsYXRlKVwiIChjbGljayk9XCJjbG9zZVNlYXJjaE1lbnUoKVwiPjwvZW8taWNvbj5cblxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImJvZHlcIiAqbmdJZj1cIiFxdWVyeS5leHBlcnRNb2RlOyBlbHNlIGV4cGVydFwiPlxuXG4gICAgICA8eXZjLXRhYnMgKHRhYkNoYW5nZSk9XCJvblRhYkNoYW5nZSgkZXZlbnQpXCI+XG5cbiAgICAgICAgPCEtLSBvYmplY3QgdHlwZSBzZWxlY3QgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0VHlwZScsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0LnR5cGUnIHwgdHJhbnNsYXRlfVwiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC10eXBlcyByZXN0LWJveC1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7aWR4ZW5hYmxlZDogcXVlcnkudHlwZXMubGVuZ3RoIDwgMX1cIlxuICAgICAgICAgICAgKm5nSWY9XCJvYmplY3RUeXBlR3JvdXBzICYmICFpZHhTZWFyY2hcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cCByZXN0LWJveFwiICpuZ0Zvcj1cImxldCBncm91cCBvZiBvYmplY3RUeXBlR3JvdXBzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDMgKm5nSWY9XCJncm91cC5sYWJlbCAhPT0gJzAnXCI+e3tncm91cC5sYWJlbH19PC9oMz5cbiAgICAgICAgICAgICAgICA8aDMgKm5nSWY9XCJncm91cC5sYWJlbCA9PT0gJzAnXCIgdHJhbnNsYXRlPnt7J2VvLnNlYXJjaC5ncm91cC5nZW5lcmFsJ319PC9oMz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW92ZS1pY29uc1wiPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gKm5nSWY9XCJpICE9PSAwXCIgY2xhc3M9XCJtb3ZlLWxlZnQtaWNvblwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAnbGVmdCcpXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfYXJyb3dfbGVmdC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gKm5nSWY9XCJpICE9PSBvYmplY3RUeXBlR3JvdXBzLmxlbmd0aCAtIDFcIiBjbGFzcz1cIm1vdmUtcmlnaHQtaWNvblwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAncmlnaHQnKVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X3JpZ2h0LnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHlwZVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIGdyb3VwLnR5cGVzXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7Y29udGV4dDogdHlwZS5pc0NvbnRleHRGb2xkZXIsIGZvbGRlcjogdHlwZS5pc0ZvbGRlciwgYWJzdHJhY3Q6IHR5cGUuaXNBYnN0cmFjdCwgc2VsZWN0ZWQ6IGlzVHlwZUFjdGl2ZSh0eXBlKSwgc2F2ZWQ6IGlzVHlwZVNhdmVkKHR5cGUpfVwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCIgKGNsaWNrKT1cInRvZ2dsZVR5cGUodHlwZSlcIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgZmlsbD1cIiNmZmZmZmZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiIChjbGljayk9XCJzZWxlY3RPYmplY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiBbb2JqZWN0VHlwZV09XCJ0eXBlXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3t0eXBlLmxhYmVsfX0ge3t0eXBlLmlzQWJzdHJhY3QgPyAnKCcrICgnZW8uc2VhcmNoLnR5cGUuYWJzdHJhY3QnIHwgdHJhbnNsYXRlKSArXG4gICAgICAgICAgICAgICAgICAgICcpJyA6ICcnfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7Z2V0QWdncmVnYXRpb25Db3VudCh0eXBlKSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZGV4ZGF0YS1zZWFyY2hcIiAqbmdJZj1cImlkeFNlYXJjaFwiPlxuICAgICAgICAgICAgPGgyPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvblwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X2JhY2suc3ZnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4aXRJbmRleGRhdGFTZWFyY2goKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlIFt0cmFuc2xhdGVQYXJhbXNdPVwie3R5cGU6IGlkeFNlYXJjaC50eXBlLmxhYmVsfVwiPmVvLnNlYXJjaC5vYmplY3R0eXBlLmZvcm08L3NwYW4+XG4gICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGV4dFwiICpuZ0lmPVwiaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMubGVuZ3RoXCI+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm9iamVjdHR5cGUuZm9ybS5jb250ZXh0PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGVvLWNvbnRleHQtc2VhcmNoICpuZ0Zvcj1cImxldCBjdHggb2YgaWR4U2VhcmNoLmNvbnRleHRNb2RlbHM7IGluZGV4IGFzIGlcIiBbY3R4XT1cImN0eFwiIFtxdWVyeV09XCJxdWVyeVwiXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiY3VycmVudENvbnRleHRGb2xkZXJOYW1lID09PSBjdHgubmFtZVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSAmJiBjdXJyZW50Q29udGV4dEZvbGRlck5hbWUgIT09IGN0eC5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICBbaWR4U2VhcmNoXT1cImlkeFNlYXJjaFwiIChzZXRDb250ZXh0KT1cInNldENvbnRleHQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvZW8tY29udGV4dC1zZWFyY2g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY29udGV4dCBmb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLW9iamVjdC1mb3JtIGNsYXNzPVwiZGFya1wiICNjdHhmb3JtXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMgJiYgaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucz8uZm9ybU1vZGVsPy5lbGVtZW50cz8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgIFtmb3JtT3B0aW9uc109XCJpZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zXCIgKHN0YXR1c0NoYW5nZWQpPVwib25JbmRleERhdGFDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2VvLW9iamVjdC1mb3JtPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cIm9iamVjdC10eXBlIGZvcm1cIiAqbmdJZj1cImlkeFNlYXJjaC5mb3JtT3B0aW9uc1wiPlxuICAgICAgICAgICAgICA8ZW8tb2JqZWN0LWZvcm0gI2lkeGZvcm0gW2Zvcm1PcHRpb25zXT1cImlkeFNlYXJjaC5mb3JtT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgKHN0YXR1c0NoYW5nZWQpPVwib25JbmRleERhdGFDaGFuZ2VkKCRldmVudClcIiAob25Gb3JtUmVhZHkpPVwiaWR4Zm9ybS5mb2N1c0Zvcm0oKVwiPlxuICAgICAgICAgICAgICA8L2VvLW9iamVjdC1mb3JtPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gY3JlYXRlZCB0YWIgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0Q3JlYXRlZCcsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0LmNyZWF0aW9uJyB8IHRyYW5zbGF0ZSB9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNyZWF0ZWQgcmVzdC1ib3gtY29udGFpbmVyXCIgKm5nSWY9XCJxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9uc1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW48L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGFnZyBvZiBhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIoUEFSQU1TLkNSRUFURUQsIE9QRVJBVE9SLlJBTkdFLCBhZ2cua2V5LCBhZ2cuc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGFnZy5zZWxlY3RlZCwgc2F2ZWQ6IGFnZy5zYXZlZH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2FnZy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3thZ2cudmFsdWUgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3Bhbi1jdXN0b21cIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLnRpbWUuc3Bhbi5jdXN0b208L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjY3JlYXRlZEZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbbGFiZWxdPVwiJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWRhdGV0aW1lLXJhbmdlICNjcmVhdGVkRmllbGQgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLnZhbHVlXCIgbmFtZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdG9yXT1cImZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0udmFsdWUgPyBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLnZhbHVlLm9wZXJhdG9yIDogT1BFUkFUT1IuRVFVQUxcIlxuICAgICAgICAgICAgICAgICAgICBbd2l0aFRpbWVdPVwiY3JlYXRlZEZpZWxkLnNlYXJjaE9wdGlvbiAmJiBjcmVhdGVkRmllbGQuc2VhcmNoT3B0aW9uICE9PSBPUEVSQVRPUi5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuQ1JFQVRFRCwgT1BFUkFUT1IuRVFVQUwsICRldmVudCwgY3JlYXRlZEZvcm0pXCI+XG4gICAgICAgICAgICAgICAgICA8L2VvLWRhdGV0aW1lLXJhbmdlPlxuICAgICAgICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtY3JlYXRvclwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cuY3JlYXRvcjwvaDM+XG4gICAgICAgICAgICAgIDxmb3JtICNjcmVhdG9yRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLmFnZy5jcmVhdGVkYnknIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tb3JnYW5pemF0aW9uIFttdWx0aXNlbGVjdF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLnZhbHVlXCIgbmFtZT1cImNyZWF0b3JcIlxuICAgICAgICAgICAgICAgICAgICAob25WYWx1ZVJlc29sdmVkKT1cInJlc29sdmVMYWJlbChmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLCAkZXZlbnQpXCIgW3NpdHVhdGlvbl09XCInU0VBUkNIJ1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuQ1JFQVRPUiwgT1BFUkFUT1IuSU4sICRldmVudCwgY3JlYXRvckZvcm0pXCI+PC9lby1vcmdhbml6YXRpb24+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0TW9kaWZpY2F0aW9uJywgbGFiZWw6ICdlby5zZWFyY2gucmVzdHJpY3QubW9kaWZpY2F0aW9uJyB8IHRyYW5zbGF0ZX1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kaWZpZWQgcmVzdC1ib3gtY29udGFpbmVyXCIgKm5nSWY9XCJxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9uc1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW48L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGFnZyBvZiBhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5NT0RJRklFRCwgT1BFUkFUT1IuUkFOR0UsIGFnZy5rZXksIGFnZy5zZWxlY3RlZClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogYWdnLnNlbGVjdGVkLCBzYXZlZDogYWdnLnNhdmVkfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7YWdnLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2FnZy52YWx1ZSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuLWN1c3RvbVwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuLmN1c3RvbTwvaDM+XG4gICAgICAgICAgICAgIDxmb3JtICNtb2RpZmllZEZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbbGFiZWxdPVwiJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWRhdGV0aW1lLXJhbmdlICNtb2RpZmllZEZpZWxkIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFRF0udmFsdWVcIiBuYW1lPVwicmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICBbb3BlcmF0b3JdPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFRF0udmFsdWUgPyBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXS52YWx1ZS5vcGVyYXRvciA6IE9QRVJBVE9SLkVRVUFMXCJcbiAgICAgICAgICAgICAgICAgICAgW3dpdGhUaW1lXT1cIm1vZGlmaWVkRmllbGQuc2VhcmNoT3B0aW9uICYmIG1vZGlmaWVkRmllbGQuc2VhcmNoT3B0aW9uICE9PSBPUEVSQVRPUi5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuTU9ESUZJRUQsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIG1vZGlmaWVkRm9ybSlcIj5cbiAgICAgICAgICAgICAgICAgIDwvZW8tZGF0ZXRpbWUtcmFuZ2U+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1tb2RpZmllclwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cubW9kaWZpZXI8L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjbW9kaWZpZXJGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLm1vZGlmaWVkYnknIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tb3JnYW5pemF0aW9uIFttdWx0aXNlbGVjdF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtb2RpZmllclwiIChvblZhbHVlUmVzb2x2ZWQpPVwicmVzb2x2ZUxhYmVsKGZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRVJdLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3NpdHVhdGlvbl09XCInU0VBUkNIJ1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuTU9ESUZJRVIsIE9QRVJBVE9SLklOLCAkZXZlbnQsIG1vZGlmaWVyRm9ybSlcIj48L2VvLW9yZ2FuaXphdGlvbj5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0RmlsZScsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGUnIHwgdHJhbnNsYXRlfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlIHJlc3QtYm94LWNvbnRhaW5lclwiICpuZ0lmPVwicXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1taW1ldHlwZS1ncm91cFwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5taW1ldHlwZWdyb3VwPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBhZ2cgb2YgYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RmlsdGVyKFBBUkFNUy5NSU1FVFlQRUdST1VQLCBPUEVSQVRPUi5JTiwgcmVzb2x2ZVNlbGVjdGlvbihhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuTUlNRVRZUEVHUk9VUF0sIGFnZy5rZXksIGFnZy5zZWxlY3RlZCkpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGFnZy5zZWxlY3RlZCwgc2F2ZWQ6IGFnZy5zYXZlZH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgZmlsbD1cIiNmZmZmZmZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2FnZy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3thZ2cudmFsdWUgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1maWxlc2l6ZVwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5maWxlc2l6ZTwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYWdnIG9mIGFnZ3JlZ2F0aW9uc01vZGVsW1BBUkFNUy5GSUxFU0laRV1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIoUEFSQU1TLkZJTEVTSVpFLCBPUEVSQVRPUi5SQU5HRSwgYWdnLmtleSwgYWdnLnNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZW5hbWU8L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjZmlsZW5hbWVGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2gucmVzdHJpY3QuZmlsZW5hbWUnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tc3RyaW5nIFthdXRvY29tcGxldGVdPVwidHJ1ZVwiIFtxbmFtZV09XCInZmlsZW5hbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkZJTEVOQU1FXS52YWx1ZVwiIG5hbWU9XCJmaWxlbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuRklMRU5BTUUsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIGZpbGVuYW1lRm9ybSlcIj48L2VvLXN0cmluZz5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC95dmMtdGFicz5cblxuICAgICAgPCEtLSBzdW1tYXJ5IG9mIHRoZSBjdXJyZW50IHNlYXJjaCBmaWx0ZXJzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktcGFuZWxcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGxpbmUgc3RvcmVkLXF1ZXJ5XCIgKm5nSWY9XCJpc1N0b3JlZFF1ZXJ5OyBlbHNlIHJlZ2hlYWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VJbmJldHdlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVkU2VhcmNoSWNvblwiPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19zYXZlZF9zZWFyY2guc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFzaWRlLnN1bW1hcnkuc3RvcmVkcXVlcnk8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlZC1xdWVyeS1uYW1lXCI+e3tzdG9yZWRRdWVyeS5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ2hlYWQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRsaW5lXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5PC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJxdWVyeS10eXBlc1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tc2VhcmNodGVybVwiICpuZ0lmPVwicXVlcnkudGVybVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnRlcm08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3txdWVyeS50ZXJtfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVUZXJtKClcIj48L2VvLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tY29udGV4dHR5cGVcIiAqbmdJZj1cInF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS5jb250ZXh0Zm9sZGVydHlwZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBxdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVDb250ZXh0VHlwZSgpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW9iamVjdHR5cGVcIiAqbmdJZj1cInF1ZXJ5LnR5cGVzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnR5cGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcXVlcnkudHlwZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVUeXBlKHR5cGUpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbHRlclRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LXRyYW5zbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIuaW5uZXJWYWx1ZS5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlclwiICpuZ0Zvcj1cImxldCB2YWwgb2YgZmlsdGVyLmlubmVyVmFsdWU7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2ZpbHRlci5sYWJlbFtpXSB8IGFzeW5jfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCIgKGNsaWNrKT1cInJlc2V0RmlsdGVyKGZpbHRlciwgdmFsKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1jcmVhdGlvblwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0uaW5uZXJWYWx1ZT8ubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRPUl0uaW5uZXJWYWx1ZT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmNyZWF0aW9uPC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRPUl0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW1vZGlmaWNhdGlvblwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdLmlubmVyVmFsdWU/Lmxlbmd0aCB8fCBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXS5pbm5lclZhbHVlPy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QubW9kaWZpY2F0aW9uPC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tbWltZXR5cGVncm91cFwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTUlNRVRZUEVHUk9VUF0uaW5uZXJWYWx1ZS5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFU0laRV0uaW5uZXJWYWx1ZS5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0uaW5uZXJWYWx1ZS5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZTwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkZJTEVTSVpFXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiICpuZ0lmPVwicXVlcnkudGVybSB8fCBxdWVyeS5maWx0ZXJzLmxlbmd0aCB8fCBxdWVyeS50eXBlcy5sZW5ndGg7IGVsc2UgZW1wdHlTZWFyY2hcIj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1N0b3JlZFF1ZXJ5OyBlbHNlIHJlZ2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnkgYnRuLXJlc2V0XCIgKGNsaWNrKT1cInJlc2V0UXVlcnkoKVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3RvcmVkcXVlcnkuY2xvc2U8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXVwZGF0ZVwiIChjbGljayk9XCJ1cGRhdGVTdG9yZWRRdWVyeSgpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYXBhYmlsaXRpZXMuc3RvcmVkcXVlcmllcyAmJiBpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zdG9yZWRxdWVyeS51cGRhdGU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXNhdmVcIiAoY2xpY2spPVwic2F2ZVF1ZXJ5KClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhcGFiaWxpdGllcy5zdG9yZWRxdWVyaWVzICYmICFpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tc3VibWl0XCIgKGNsaWNrKT1cImV4ZWN1dGVTZWFyY2goKVwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWdhY3Rpb25zPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgZ3JleSBidG4tcmVzZXRcIiAoY2xpY2spPVwicmVzZXRRdWVyeSgpXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXNldDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgZ3JleSBidG4tc2F2ZVwiIChjbGljayk9XCJzYXZlUXVlcnkoKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FwYWJpbGl0aWVzLnN0b3JlZHF1ZXJpZXMgJiYgIWlzT3duUXVlcnlcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1zdWJtaXRcIiAoY2xpY2spPVwiZXhlY3V0ZVNlYXJjaCgpXCIgW2Rpc2FibGVkXT1cInF1ZXJ5U3RhdGUuaXNFbXB0eVwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5zZWFyY2guc3VibWl0PC9idXR0b24+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlTZWFyY2g+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXNlYXJjaFwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3VtbWFyeS5lbXB0eTwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2Rpdj5cblxuXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGV4cGVydCBtb2RlIGJvZHkgcGFuZWwgY29udGFpbmluZyBleHBsYW5hdGlvbnMgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNleHBlcnQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiYm9keSBleHBlcnRcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHlcIiAqbmdJZj1cImV4cGVydE1vZGVRdWVyeUVtcHR5XCI+PHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5yZXN1bHQuZW1wdHk8L3NwYW4+PC9kaXY+XG5cbiAgICAgICAgPCEtLVxuICAgICAgICA8aDI+PHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydDwvc3Bhbj48L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW50cm9cIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LmludHJvPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJhc2UtcGFyYW1zIGZpZWxkc1wiPlxuICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuYmFzZXBhcmFtczwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBlbCBvZiBleHBlcnRNb2RlU3VwcG9ydC5iYXNlUGFyYW1zXCIgKGNsaWNrKT1cInhwQWRkVG9UZXJtKGVsLmRhdGEpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPnt7ZWwubGFiZWx9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGFcIj57e2VsLmRhdGF9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzeXN0ZW0tdHlwZXMgZmllbGRzXCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbi1ncm91cFwiPlxuICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQuc3VwcG9ydC5ncm91cDwvaDI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgdHlwZUdyb3VwVHJlZVwiXG4gICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwICYmIGdyb3VwLmlkID09PSBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwLmlkfVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInhwU2VsZWN0R3JvdXAoZ3JvdXApXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLmxhYmVsICE9PSAnMCdcIj57e2dyb3VwLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXAubGFiZWwgPT09ICcwJ1wiPnt7J2VvLnNlYXJjaC5ncm91cC5nZW5lcmFsJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbi10eXBlXCIgKm5nSWY9XCJleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwXCI+XG4gICAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LnR5cGU8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cC50cmVlXCJcbiAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZSAmJiB0eXBlLmlkID09PSBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUuaWR9XCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwieHBTZWxlY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgPGRpdj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBzZWN0aW9uLWZpZWxkXCIgKm5nSWY9XCJleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGVcIj5cbiAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuZmllbGQ8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IGVsIG9mIGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZS5jaGlsZHJlblwiIChjbGljayk9XCJ4cEFkZFRvVGVybShlbC5kYXRhKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPnt7ZWwubGFiZWx9fTwvc3Bhbj48c3BhbiBjbGFzcz1cInR5cGVcIj57e2VsLnR5cGV9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YVwiPnt7ZWwuZGF0YX19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPCEtLSA8L2VvLWRpYWxvZz4gLS0+XG48L25nLXRlbXBsYXRlPlxuIl19
|