@alfresco/adf-content-services 8.1.0-16121703802 → 8.1.0-16144344582
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/bundles/assets/adf-content-services/i18n/en.json +3 -1
- package/fesm2022/adf-content-services.mjs +866 -823
- package/fesm2022/adf-content-services.mjs.map +1 -1
- package/lib/aspect-list/aspect-list.component.d.ts +4 -0
- package/lib/aspect-list/interfaces/custom-aspect-paging.interface.d.ts +21 -0
- package/lib/aspect-list/public-api.d.ts +1 -0
- package/lib/aspect-list/services/aspect-list.service.d.ts +6 -4
- package/lib/category/categories-management/categories-management.component.d.ts +4 -0
- package/lib/content.module.d.ts +2 -2
- package/lib/dialogs/dialog.module.d.ts +6 -5
- package/lib/dialogs/download-zip/download-zip.dialog.d.ts +1 -1
- package/lib/dialogs/download-zip/download-zip.dialog.module.d.ts +2 -6
- package/lib/new-version-uploader/new-version-uploader.dialog.scss +1 -1
- package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
- package/package.json +3 -5
- package/esm2022/adf-content-services.mjs +0 -5
- package/esm2022/lib/agent/index.mjs +0 -18
- package/esm2022/lib/agent/public-api.mjs +0 -18
- package/esm2022/lib/agent/services/agent.service.mjs +0 -60
- package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +0 -27
- package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +0 -42
- package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +0 -77
- package/esm2022/lib/api-factories/index.mjs +0 -18
- package/esm2022/lib/api-factories/public-api.mjs +0 -19
- package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +0 -18
- package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +0 -77
- package/esm2022/lib/aspect-list/aspect-list.component.mjs +0 -139
- package/esm2022/lib/aspect-list/aspect-list.module.mjs +0 -35
- package/esm2022/lib/aspect-list/index.mjs +0 -18
- package/esm2022/lib/aspect-list/public-api.mjs +0 -24
- package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +0 -83
- package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +0 -86
- package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +0 -52
- package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +0 -26
- package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +0 -42
- package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +0 -166
- package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +0 -35
- package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +0 -65
- package/esm2022/lib/breadcrumb/index.mjs +0 -18
- package/esm2022/lib/breadcrumb/public-api.mjs +0 -20
- package/esm2022/lib/category/categories-management/categories-management-mode.mjs +0 -22
- package/esm2022/lib/category/categories-management/categories-management.component.mjs +0 -308
- package/esm2022/lib/category/category.module.mjs +0 -33
- package/esm2022/lib/category/index.mjs +0 -18
- package/esm2022/lib/category/models/category-node.interface.mjs +0 -18
- package/esm2022/lib/category/public-api.mjs +0 -23
- package/esm2022/lib/category/services/category-tree-datasource.service.mjs +0 -80
- package/esm2022/lib/category/services/category.service.mjs +0 -159
- package/esm2022/lib/common/events/file.event.mjs +0 -46
- package/esm2022/lib/common/index.mjs +0 -18
- package/esm2022/lib/common/interfaces/saved-search.interface.mjs +0 -18
- package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +0 -18
- package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +0 -37
- package/esm2022/lib/common/models/allowable-operations.enum.mjs +0 -30
- package/esm2022/lib/common/models/ecm-company.model.mjs +0 -19
- package/esm2022/lib/common/models/ecm-user.model.mjs +0 -45
- package/esm2022/lib/common/models/file.model.mjs +0 -53
- package/esm2022/lib/common/models/node-metadata.model.mjs +0 -23
- package/esm2022/lib/common/models/permissions.enum.mjs +0 -32
- package/esm2022/lib/common/public-api.mjs +0 -37
- package/esm2022/lib/common/services/card-view-content-update.service.mjs +0 -55
- package/esm2022/lib/common/services/content.service.mjs +0 -180
- package/esm2022/lib/common/services/discovery-api.service.mjs +0 -79
- package/esm2022/lib/common/services/favorites-api.service.mjs +0 -84
- package/esm2022/lib/common/services/nodes-api.service.mjs +0 -251
- package/esm2022/lib/common/services/people-content.service.mjs +0 -138
- package/esm2022/lib/common/services/rendition.service.mjs +0 -270
- package/esm2022/lib/common/services/saved-searches.service.mjs +0 -206
- package/esm2022/lib/common/services/sites.service.mjs +0 -243
- package/esm2022/lib/common/services/upload.service.mjs +0 -391
- package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +0 -54
- package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +0 -490
- package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +0 -128
- package/esm2022/lib/content-metadata/content-metadata.module.mjs +0 -36
- package/esm2022/lib/content-metadata/index.mjs +0 -18
- package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +0 -18
- package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +0 -18
- package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +0 -18
- package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +0 -18
- package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +0 -18
- package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +0 -28
- package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +0 -18
- package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +0 -18
- package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +0 -18
- package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +0 -18
- package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +0 -18
- package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +0 -18
- package/esm2022/lib/content-metadata/public-api.mjs +0 -31
- package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +0 -107
- package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +0 -106
- package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +0 -76
- package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +0 -40
- package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +0 -108
- package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +0 -33
- package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +0 -99
- package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +0 -134
- package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +0 -52
- package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +0 -169
- package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +0 -256
- package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +0 -617
- package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +0 -66
- package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +0 -18
- package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +0 -205
- package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +0 -50
- package/esm2022/lib/content-node-selector/index.mjs +0 -18
- package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +0 -48
- package/esm2022/lib/content-node-selector/public-api.mjs +0 -25
- package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +0 -168
- package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +0 -287
- package/esm2022/lib/content-node-share/content-node-share.directive.mjs +0 -102
- package/esm2022/lib/content-node-share/content-node-share.module.mjs +0 -35
- package/esm2022/lib/content-node-share/content-node-share.settings.mjs +0 -18
- package/esm2022/lib/content-node-share/index.mjs +0 -18
- package/esm2022/lib/content-node-share/public-api.mjs +0 -22
- package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +0 -83
- package/esm2022/lib/content-type/content-type-dialog.component.mjs +0 -57
- package/esm2022/lib/content-type/content-type-metadata.interface.mjs +0 -18
- package/esm2022/lib/content-type/content-type.service.mjs +0 -52
- package/esm2022/lib/content-type/index.mjs +0 -20
- package/esm2022/lib/content.module.mjs +0 -277
- package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +0 -51
- package/esm2022/lib/dialogs/dialog.module.mjs +0 -52
- package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +0 -111
- package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +0 -38
- package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +0 -66
- package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +0 -44
- package/esm2022/lib/dialogs/folder/folder.dialog.mjs +0 -146
- package/esm2022/lib/dialogs/index.mjs +0 -18
- package/esm2022/lib/dialogs/library/library.dialog.mjs +0 -224
- package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +0 -115
- package/esm2022/lib/dialogs/public-api.mjs +0 -25
- package/esm2022/lib/directives/auto-focus.directive.mjs +0 -38
- package/esm2022/lib/directives/check-allowable-operation.directive.mjs +0 -126
- package/esm2022/lib/directives/content-directive.module.mjs +0 -75
- package/esm2022/lib/directives/index.mjs +0 -18
- package/esm2022/lib/directives/library-favorite.directive.mjs +0 -119
- package/esm2022/lib/directives/library-membership.directive.mjs +0 -202
- package/esm2022/lib/directives/node-counter.directive.mjs +0 -59
- package/esm2022/lib/directives/node-delete.directive.mjs +0 -177
- package/esm2022/lib/directives/node-download.directive.mjs +0 -138
- package/esm2022/lib/directives/node-favorite.directive.mjs +0 -193
- package/esm2022/lib/directives/node-lock.directive.mjs +0 -57
- package/esm2022/lib/directives/node-restore.directive.mjs +0 -218
- package/esm2022/lib/directives/public-api.mjs +0 -28
- package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +0 -60
- package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +0 -196
- package/esm2022/lib/document-list/components/document-list.component.mjs +0 -965
- package/esm2022/lib/document-list/components/document-list.token.mjs +0 -21
- package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +0 -42
- package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +0 -107
- package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +0 -131
- package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +0 -91
- package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +0 -86
- package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +0 -118
- package/esm2022/lib/document-list/components/node.event.mjs +0 -30
- package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +0 -83
- package/esm2022/lib/document-list/data/image-resolver.model.mjs +0 -18
- package/esm2022/lib/document-list/data/row-filter.model.mjs +0 -18
- package/esm2022/lib/document-list/data/share-data-row.model.mjs +0 -102
- package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +0 -258
- package/esm2022/lib/document-list/document-list.module.mjs +0 -75
- package/esm2022/lib/document-list/index.mjs +0 -18
- package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +0 -18
- package/esm2022/lib/document-list/models/content-action.model.mjs +0 -59
- package/esm2022/lib/document-list/models/document-folder.model.mjs +0 -23
- package/esm2022/lib/document-list/models/node-action.enum.mjs +0 -27
- package/esm2022/lib/document-list/models/permissions-style.model.mjs +0 -27
- package/esm2022/lib/document-list/models/permissions.model.mjs +0 -26
- package/esm2022/lib/document-list/models/preset.model.mjs +0 -257
- package/esm2022/lib/document-list/public-api.mjs +0 -47
- package/esm2022/lib/document-list/services/custom-resources.service.mjs +0 -378
- package/esm2022/lib/document-list/services/document-actions.service.mjs +0 -142
- package/esm2022/lib/document-list/services/document-list.service.mjs +0 -175
- package/esm2022/lib/document-list/services/folder-actions.service.mjs +0 -137
- package/esm2022/lib/document-list/services/lock.service.mjs +0 -72
- package/esm2022/lib/document-list/services/node-actions.service.mjs +0 -122
- package/esm2022/lib/group/index.mjs +0 -18
- package/esm2022/lib/group/public-api.mjs +0 -18
- package/esm2022/lib/group/services/group.service.mjs +0 -84
- package/esm2022/lib/infinite-scroll-datasource/index.mjs +0 -18
- package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +0 -69
- package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +0 -18
- package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +0 -18
- package/esm2022/lib/interfaces/index.mjs +0 -18
- package/esm2022/lib/interfaces/library-entity.interface.mjs +0 -18
- package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +0 -18
- package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +0 -18
- package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +0 -18
- package/esm2022/lib/interfaces/public-api.mjs +0 -23
- package/esm2022/lib/interfaces/restore-message-model.interface.mjs +0 -19
- package/esm2022/lib/legal-hold/index.mjs +0 -18
- package/esm2022/lib/legal-hold/public-api.mjs +0 -18
- package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +0 -136
- package/esm2022/lib/material.module.mjs +0 -183
- package/esm2022/lib/mock/alfresco-api.service.mock.mjs +0 -43
- package/esm2022/lib/mock/date-range-search-filter.mock.mjs +0 -65
- package/esm2022/lib/mock/document-library.model.mock.mjs +0 -84
- package/esm2022/lib/mock/document-list.component.mock.mjs +0 -364
- package/esm2022/lib/mock/index.mjs +0 -18
- package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +0 -161
- package/esm2022/lib/mock/public-api.mjs +0 -27
- package/esm2022/lib/mock/search-filter-mock.mjs +0 -637
- package/esm2022/lib/mock/search-query.mock.mjs +0 -40
- package/esm2022/lib/mock/search.component.mock.mjs +0 -165
- package/esm2022/lib/mock/search.service.mock.mjs +0 -61
- package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +0 -281
- package/esm2022/lib/new-version-uploader/index.mjs +0 -18
- package/esm2022/lib/new-version-uploader/models/index.mjs +0 -18
- package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +0 -24
- package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +0 -74
- package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +0 -33
- package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +0 -103
- package/esm2022/lib/new-version-uploader/public-api.mjs +0 -21
- package/esm2022/lib/node-comments/index.mjs +0 -18
- package/esm2022/lib/node-comments/node-comments.component.mjs +0 -50
- package/esm2022/lib/node-comments/node-comments.module.mjs +0 -33
- package/esm2022/lib/node-comments/public-api.mjs +0 -20
- package/esm2022/lib/node-comments/services/node-comments.service.mjs +0 -85
- package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +0 -18
- package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +0 -123
- package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +0 -102
- package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +0 -69
- package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +0 -45
- package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +0 -67
- package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +0 -56
- package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +0 -102
- package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +0 -87
- package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +0 -219
- package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +0 -134
- package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +0 -88
- package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +0 -82
- package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +0 -111
- package/esm2022/lib/permission-manager/index.mjs +0 -18
- package/esm2022/lib/permission-manager/models/member.model.mjs +0 -59
- package/esm2022/lib/permission-manager/models/permission.model.mjs +0 -29
- package/esm2022/lib/permission-manager/models/role.model.mjs +0 -18
- package/esm2022/lib/permission-manager/permission-manager.module.mjs +0 -84
- package/esm2022/lib/permission-manager/public-api.mjs +0 -36
- package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +0 -78
- package/esm2022/lib/permission-manager/services/node-permission.service.mjs +0 -299
- package/esm2022/lib/pipes/content-pipe.module.mjs +0 -37
- package/esm2022/lib/pipes/index.mjs +0 -18
- package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +0 -69
- package/esm2022/lib/pipes/public-api.mjs +0 -19
- package/esm2022/lib/prediction/index.mjs +0 -18
- package/esm2022/lib/prediction/public-api.mjs +0 -18
- package/esm2022/lib/prediction/services/index.mjs +0 -18
- package/esm2022/lib/prediction/services/prediction.service.mjs +0 -57
- package/esm2022/lib/search/components/empty-search-result.component.mjs +0 -27
- package/esm2022/lib/search/components/index.mjs +0 -43
- package/esm2022/lib/search/components/reset-search.directive.mjs +0 -41
- package/esm2022/lib/search/components/search-check-list/index.mjs +0 -18
- package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +0 -158
- package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +0 -18
- package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +0 -169
- package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +0 -46
- package/esm2022/lib/search/components/search-control.component.mjs +0 -180
- package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +0 -22
- package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +0 -23
- package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +0 -23
- package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +0 -196
- package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +0 -18
- package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +0 -201
- package/esm2022/lib/search/components/search-datetime-range/index.mjs +0 -18
- package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +0 -223
- package/esm2022/lib/search/components/search-facet-field/index.mjs +0 -18
- package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +0 -132
- package/esm2022/lib/search/components/search-filter/index.mjs +0 -19
- package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +0 -45
- package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +0 -80
- package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +0 -18
- package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +0 -154
- package/esm2022/lib/search/components/search-filter-chips/index.mjs +0 -23
- package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +0 -104
- package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +0 -109
- package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +0 -129
- package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +0 -63
- package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +0 -43
- package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +0 -109
- package/esm2022/lib/search/components/search-filter-container/index.mjs +0 -18
- package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +0 -122
- package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +0 -19
- package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +0 -36
- package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +0 -63
- package/esm2022/lib/search/components/search-form/index.mjs +0 -18
- package/esm2022/lib/search/components/search-form/search-form.component.mjs +0 -52
- package/esm2022/lib/search/components/search-input/index.mjs +0 -18
- package/esm2022/lib/search/components/search-input/search-input.component.mjs +0 -108
- package/esm2022/lib/search/components/search-logical-filter/index.mjs +0 -18
- package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +0 -163
- package/esm2022/lib/search/components/search-number-range/index.mjs +0 -18
- package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +0 -154
- package/esm2022/lib/search/components/search-panel/index.mjs +0 -18
- package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +0 -44
- package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +0 -18
- package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +0 -23
- package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +0 -26
- package/esm2022/lib/search/components/search-properties/index.mjs +0 -22
- package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +0 -244
- package/esm2022/lib/search/components/search-properties/search-properties.mjs +0 -18
- package/esm2022/lib/search/components/search-radio/index.mjs +0 -18
- package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +0 -145
- package/esm2022/lib/search/components/search-slider/index.mjs +0 -18
- package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +0 -119
- package/esm2022/lib/search/components/search-sorting-picker/index.mjs +0 -18
- package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +0 -77
- package/esm2022/lib/search/components/search-text/index.mjs +0 -18
- package/esm2022/lib/search/components/search-text/search-text.component.mjs +0 -134
- package/esm2022/lib/search/components/search-widget-container/index.mjs +0 -18
- package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +0 -113
- package/esm2022/lib/search/components/search.component.mjs +0 -152
- package/esm2022/lib/search/forms/index.mjs +0 -19
- package/esm2022/lib/search/forms/live-error-state-matcher.mjs +0 -23
- package/esm2022/lib/search/forms/search-term-validator.mjs +0 -26
- package/esm2022/lib/search/index.mjs +0 -18
- package/esm2022/lib/search/mocks/index.mjs +0 -18
- package/esm2022/lib/search/mocks/search.service.mock.mjs +0 -56
- package/esm2022/lib/search/models/autocomplete-option.interface.mjs +0 -22
- package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +0 -18
- package/esm2022/lib/search/models/facet-field.interface.mjs +0 -29
- package/esm2022/lib/search/models/facet-query.interface.mjs +0 -18
- package/esm2022/lib/search/models/facet-widget.interface.mjs +0 -18
- package/esm2022/lib/search/models/filter-query.interface.mjs +0 -18
- package/esm2022/lib/search/models/filter-search.interface.mjs +0 -18
- package/esm2022/lib/search/models/index.mjs +0 -34
- package/esm2022/lib/search/models/response-facet-query-list.model.mjs +0 -31
- package/esm2022/lib/search/models/search-category.interface.mjs +0 -18
- package/esm2022/lib/search/models/search-configuration.interface.mjs +0 -18
- package/esm2022/lib/search/models/search-filter-list.model.mjs +0 -148
- package/esm2022/lib/search/models/search-form.interface.mjs +0 -18
- package/esm2022/lib/search/models/search-range.interface.mjs +0 -18
- package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +0 -18
- package/esm2022/lib/search/models/search-widget-settings.interface.mjs +0 -18
- package/esm2022/lib/search/models/search-widget.interface.mjs +0 -18
- package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +0 -18
- package/esm2022/lib/search/public-api.mjs +0 -24
- package/esm2022/lib/search/search-configuration.token.mjs +0 -19
- package/esm2022/lib/search/search.module.mjs +0 -192
- package/esm2022/lib/search/services/base-query-builder.service.mjs +0 -509
- package/esm2022/lib/search/services/index.mjs +0 -24
- package/esm2022/lib/search/services/search-configuration.service.mjs +0 -50
- package/esm2022/lib/search/services/search-facet-filters.service.mjs +0 -374
- package/esm2022/lib/search/services/search-filter.service.mjs +0 -56
- package/esm2022/lib/search/services/search-header-query-builder.service.mjs +0 -136
- package/esm2022/lib/search/services/search-query-builder.service.mjs +0 -48
- package/esm2022/lib/search/services/search.service.mjs +0 -89
- package/esm2022/lib/search-ai/index.mjs +0 -18
- package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +0 -18
- package/esm2022/lib/search-ai/public-api.mjs +0 -19
- package/esm2022/lib/search-ai/services/search-ai.service.mjs +0 -103
- package/esm2022/lib/security/index.mjs +0 -18
- package/esm2022/lib/security/public-api.mjs +0 -18
- package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +0 -18
- package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +0 -18
- package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +0 -274
- package/esm2022/lib/security-options-loader/security-options-loader.service.mjs +0 -43
- package/esm2022/lib/services/alfresco-api.interface.mjs +0 -18
- package/esm2022/lib/services/alfresco-api.service.mjs +0 -120
- package/esm2022/lib/services/index.mjs +0 -18
- package/esm2022/lib/services/public-api.mjs +0 -18
- package/esm2022/lib/tag/index.mjs +0 -18
- package/esm2022/lib/tag/public-api.mjs +0 -24
- package/esm2022/lib/tag/services/tag.service.mjs +0 -171
- package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +0 -114
- package/esm2022/lib/tag/tag-list/tag-list.component.mjs +0 -98
- package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +0 -80
- package/esm2022/lib/tag/tag.module.mjs +0 -37
- package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +0 -27
- package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +0 -370
- package/esm2022/lib/testing/content.testing.module.mjs +0 -56
- package/esm2022/lib/tree/components/tree.component.mjs +0 -312
- package/esm2022/lib/tree/index.mjs +0 -18
- package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +0 -18
- package/esm2022/lib/tree/models/tree-node.interface.mjs +0 -22
- package/esm2022/lib/tree/models/tree-response.interface.mjs +0 -18
- package/esm2022/lib/tree/public-api.mjs +0 -23
- package/esm2022/lib/tree/services/tree.service.mjs +0 -134
- package/esm2022/lib/tree/tree.module.mjs +0 -33
- package/esm2022/lib/tree-view/components/tree-view.component.mjs +0 -75
- package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +0 -99
- package/esm2022/lib/tree-view/index.mjs +0 -18
- package/esm2022/lib/tree-view/models/tree-view.model.mjs +0 -28
- package/esm2022/lib/tree-view/public-api.mjs +0 -22
- package/esm2022/lib/tree-view/services/tree-view.service.mjs +0 -38
- package/esm2022/lib/tree-view/tree-view.module.mjs +0 -33
- package/esm2022/lib/upload/components/base-upload/upload-base.mjs +0 -176
- package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +0 -190
- package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +0 -92
- package/esm2022/lib/upload/components/file-uploading-list.component.mjs +0 -124
- package/esm2022/lib/upload/components/upload-button.component.mjs +0 -133
- package/esm2022/lib/upload/components/upload-drag-area.component.mjs +0 -112
- package/esm2022/lib/upload/components/upload-files.event.mjs +0 -41
- package/esm2022/lib/upload/components/upload-version-button.component.mjs +0 -54
- package/esm2022/lib/upload/directives/file-draggable.directive.mjs +0 -154
- package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +0 -75
- package/esm2022/lib/upload/index.mjs +0 -18
- package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +0 -39
- package/esm2022/lib/upload/public-api.mjs +0 -29
- package/esm2022/lib/upload/upload.module.mjs +0 -72
- package/esm2022/lib/version-compatibility/index.mjs +0 -18
- package/esm2022/lib/version-compatibility/public-api.mjs +0 -20
- package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +0 -26
- package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +0 -53
- package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +0 -33
- package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +0 -76
- package/esm2022/lib/version-manager/content-version.service.mjs +0 -53
- package/esm2022/lib/version-manager/index.mjs +0 -18
- package/esm2022/lib/version-manager/public-api.mjs +0 -23
- package/esm2022/lib/version-manager/version-comparison.component.mjs +0 -42
- package/esm2022/lib/version-manager/version-list.component.mjs +0 -215
- package/esm2022/lib/version-manager/version-manager.component.mjs +0 -145
- package/esm2022/lib/version-manager/version-manager.module.mjs +0 -48
- package/esm2022/lib/version-manager/version-upload.component.mjs +0 -154
- package/esm2022/lib/viewer/alfresco-viewer.module.mjs +0 -33
- package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +0 -408
- package/esm2022/lib/viewer/index.mjs +0 -18
- package/esm2022/lib/viewer/public-api.mjs +0 -19
- package/esm2022/public-api.mjs +0 -56
package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs
DELETED
|
@@ -1,490 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
import { Component, DestroyRef, inject, Input, ViewEncapsulation } from '@angular/core';
|
|
18
|
-
import { CategoryLinkBody, Node, TagBody } from '@alfresco/js-api';
|
|
19
|
-
import { forkJoin, of, Subject, zip } from 'rxjs';
|
|
20
|
-
import { AppConfigService, CardViewComponent, DynamicChipListComponent, NotificationService, TranslationService } from '@alfresco/adf-core';
|
|
21
|
-
import { ContentMetadataService } from '../../services/content-metadata.service';
|
|
22
|
-
import { catchError, debounceTime, map } from 'rxjs/operators';
|
|
23
|
-
import { CardViewContentUpdateService } from '../../../common/services/card-view-content-update.service';
|
|
24
|
-
import { NodesApiService } from '../../../common/services/nodes-api.service';
|
|
25
|
-
import { TagsCreatorMode } from '../../../tag/tags-creator/tags-creator-mode';
|
|
26
|
-
import { TagService } from '../../../tag/services/tag.service';
|
|
27
|
-
import { CategoryService } from '../../../category/services/category.service';
|
|
28
|
-
import { CategoriesManagementMode } from '../../../category/categories-management/categories-management-mode';
|
|
29
|
-
import { AllowableOperationsEnum } from '../../../common/models/allowable-operations.enum';
|
|
30
|
-
import { ContentService } from '../../../common/services/content.service';
|
|
31
|
-
import { CommonModule } from '@angular/common';
|
|
32
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
33
|
-
import { MatChipsModule } from '@angular/material/chips';
|
|
34
|
-
import { MatExpansionModule } from '@angular/material/expansion';
|
|
35
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
36
|
-
import { DynamicExtensionComponent } from '@alfresco/adf-extensions';
|
|
37
|
-
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
38
|
-
import { TagsCreatorComponent } from '../../../tag';
|
|
39
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
40
|
-
import { TranslatePipe } from '@ngx-translate/core';
|
|
41
|
-
import { ContentMetadataHeaderComponent } from './content-metadata-header.component';
|
|
42
|
-
import { CategoriesManagementComponent } from '../../../category/categories-management/categories-management.component';
|
|
43
|
-
import * as i0 from "@angular/core";
|
|
44
|
-
import * as i1 from "../../services/content-metadata.service";
|
|
45
|
-
import * as i2 from "../../../common/services/card-view-content-update.service";
|
|
46
|
-
import * as i3 from "../../../common/services/nodes-api.service";
|
|
47
|
-
import * as i4 from "@alfresco/adf-core";
|
|
48
|
-
import * as i5 from "../../../tag/services/tag.service";
|
|
49
|
-
import * as i6 from "../../../category/services/category.service";
|
|
50
|
-
import * as i7 from "../../../common/services/content.service";
|
|
51
|
-
import * as i8 from "@angular/common";
|
|
52
|
-
import * as i9 from "@angular/material/expansion";
|
|
53
|
-
import * as i10 from "@angular/material/button";
|
|
54
|
-
import * as i11 from "@angular/material/icon";
|
|
55
|
-
import * as i12 from "@angular/material/progress-bar";
|
|
56
|
-
const DEFAULT_SEPARATOR = ', ';
|
|
57
|
-
var DefaultPanels;
|
|
58
|
-
(function (DefaultPanels) {
|
|
59
|
-
DefaultPanels["PROPERTIES"] = "Properties";
|
|
60
|
-
DefaultPanels["TAGS"] = "Tags";
|
|
61
|
-
DefaultPanels["CATEGORIES"] = "Categories";
|
|
62
|
-
})(DefaultPanels || (DefaultPanels = {}));
|
|
63
|
-
export class ContentMetadataComponent {
|
|
64
|
-
constructor(contentMetadataService, cardViewContentUpdateService, nodesApiService, translationService, appConfig, tagService, categoryService, contentService, notificationService) {
|
|
65
|
-
this.contentMetadataService = contentMetadataService;
|
|
66
|
-
this.cardViewContentUpdateService = cardViewContentUpdateService;
|
|
67
|
-
this.nodesApiService = nodesApiService;
|
|
68
|
-
this.translationService = translationService;
|
|
69
|
-
this.appConfig = appConfig;
|
|
70
|
-
this.tagService = tagService;
|
|
71
|
-
this.categoryService = categoryService;
|
|
72
|
-
this.contentService = contentService;
|
|
73
|
-
this.notificationService = notificationService;
|
|
74
|
-
/** Toggles whether to display empty values in the card view */
|
|
75
|
-
this.displayEmpty = false;
|
|
76
|
-
/**
|
|
77
|
-
* Toggles between expanded (ie, full information) and collapsed
|
|
78
|
-
* (ie, reduced information) in the display
|
|
79
|
-
*/
|
|
80
|
-
this.expanded = false;
|
|
81
|
-
/** The multi parameter of the underlying material expansion panel, set to true to allow multi accordion to be expanded at the same time */
|
|
82
|
-
this.multi = false;
|
|
83
|
-
/** Toggles whether the metadata properties should be shown */
|
|
84
|
-
this.displayDefaultProperties = true;
|
|
85
|
-
/** (optional) shows the given aspect in the expanded card */
|
|
86
|
-
this.displayAspect = null;
|
|
87
|
-
/** Toggles whether or not to enable copy to clipboard action. */
|
|
88
|
-
this.copyToClipboardAction = true;
|
|
89
|
-
/** Toggles whether or not to enable chips for multivalued properties. */
|
|
90
|
-
this.useChipsForMultiValueProperty = true;
|
|
91
|
-
/** True if tags should be displayed, false otherwise */
|
|
92
|
-
this.displayTags = false;
|
|
93
|
-
/** True if categories should be displayed, false otherwise */
|
|
94
|
-
this.displayCategories = false;
|
|
95
|
-
/** List of custom metadata panels to be displayed with registered custom components */
|
|
96
|
-
this.customPanels = [];
|
|
97
|
-
/**
|
|
98
|
-
* (optional) This flag sets the metadata in read-only mode,
|
|
99
|
-
* preventing changes.
|
|
100
|
-
*/
|
|
101
|
-
this.readOnly = false;
|
|
102
|
-
this._assignedTags = [];
|
|
103
|
-
this.assignedTagsEntries = [];
|
|
104
|
-
this._tagsCreatorMode = TagsCreatorMode.CREATE_AND_ASSIGN;
|
|
105
|
-
this._tags = [];
|
|
106
|
-
this.classifiableChangedSubject = new Subject();
|
|
107
|
-
this._saving = false;
|
|
108
|
-
this.DefaultPanels = DefaultPanels;
|
|
109
|
-
this.changedProperties = {};
|
|
110
|
-
this.hasMetadataChanged = false;
|
|
111
|
-
this.assignedCategories = [];
|
|
112
|
-
this.categories = [];
|
|
113
|
-
this.categoriesManagementMode = CategoriesManagementMode.ASSIGN;
|
|
114
|
-
this.classifiableChanged = this.classifiableChangedSubject.asObservable();
|
|
115
|
-
this.editing = false;
|
|
116
|
-
this.invalidProperties = new Set();
|
|
117
|
-
this.editedPanelTitle = '';
|
|
118
|
-
this.currentPanel = {
|
|
119
|
-
expanded: false,
|
|
120
|
-
panelTitle: ''
|
|
121
|
-
};
|
|
122
|
-
this.destroyRef = inject(DestroyRef);
|
|
123
|
-
this.copyToClipboardAction = this.appConfig.get('content-metadata.copy-to-clipboard-action');
|
|
124
|
-
this.multiValueSeparator = this.appConfig.get('content-metadata.multi-value-pipe-separator') || DEFAULT_SEPARATOR;
|
|
125
|
-
this.useChipsForMultiValueProperty = this.appConfig.get('content-metadata.multi-value-chips');
|
|
126
|
-
}
|
|
127
|
-
ngOnInit() {
|
|
128
|
-
this.cardViewContentUpdateService.itemUpdated$
|
|
129
|
-
.pipe(debounceTime(500), takeUntilDestroyed(this.destroyRef))
|
|
130
|
-
.subscribe((updatedNode) => {
|
|
131
|
-
this.hasMetadataChanged = true;
|
|
132
|
-
this.targetProperty = updatedNode.target;
|
|
133
|
-
this.updateInvalidProperties();
|
|
134
|
-
this.updateChanges(updatedNode.changed);
|
|
135
|
-
});
|
|
136
|
-
this.cardViewContentUpdateService.updatedAspect$.pipe(debounceTime(500), takeUntilDestroyed(this.destroyRef)).subscribe((node) => {
|
|
137
|
-
this.node.aspectNames = node?.aspectNames;
|
|
138
|
-
this.loadProperties(node);
|
|
139
|
-
});
|
|
140
|
-
this.loadProperties(this.node);
|
|
141
|
-
this.verifyAllowableOperations();
|
|
142
|
-
this.currentPanel.panelTitle = this.displayAspect ?? this.DefaultPanels.PROPERTIES;
|
|
143
|
-
this.currentPanel.expanded = true;
|
|
144
|
-
}
|
|
145
|
-
verifyAllowableOperations() {
|
|
146
|
-
if (!this.node?.allowableOperations || !this.contentService.hasAllowableOperations(this.node, AllowableOperationsEnum.UPDATE)) {
|
|
147
|
-
this.readOnly = true;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
get assignedTags() {
|
|
151
|
-
return this._assignedTags;
|
|
152
|
-
}
|
|
153
|
-
set tags(tags) {
|
|
154
|
-
this._tags = tags;
|
|
155
|
-
this.tagsToDisplay = this.tags.map((tag) => ({ id: tag, name: tag }));
|
|
156
|
-
}
|
|
157
|
-
get tags() {
|
|
158
|
-
return this._tags;
|
|
159
|
-
}
|
|
160
|
-
get tagsCreatorMode() {
|
|
161
|
-
return this._tagsCreatorMode;
|
|
162
|
-
}
|
|
163
|
-
get saving() {
|
|
164
|
-
return this._saving;
|
|
165
|
-
}
|
|
166
|
-
isPanelEditing(panelTitle) {
|
|
167
|
-
return (this.editing &&
|
|
168
|
-
((this.currentPanel.panelTitle === panelTitle && this.editedPanelTitle === panelTitle) || this.editedPanelTitle === panelTitle));
|
|
169
|
-
}
|
|
170
|
-
handleUpdateError(error) {
|
|
171
|
-
let statusCode = 0;
|
|
172
|
-
try {
|
|
173
|
-
statusCode = JSON.parse(error.message).error.statusCode;
|
|
174
|
-
}
|
|
175
|
-
catch {
|
|
176
|
-
/* empty */
|
|
177
|
-
}
|
|
178
|
-
let message = `METADATA.ERRORS.${statusCode}`;
|
|
179
|
-
if (this.translationService.instant(message) === message) {
|
|
180
|
-
message = 'METADATA.ERRORS.GENERIC';
|
|
181
|
-
}
|
|
182
|
-
this.contentMetadataService.error.next({
|
|
183
|
-
statusCode,
|
|
184
|
-
message
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
ngOnChanges(changes) {
|
|
188
|
-
if (changes.node && !changes.node.firstChange) {
|
|
189
|
-
this.loadProperties(changes.node.currentValue);
|
|
190
|
-
}
|
|
191
|
-
if (changes.readOnly?.currentValue) {
|
|
192
|
-
this.resetEditing();
|
|
193
|
-
this.loadProperties(this.node);
|
|
194
|
-
}
|
|
195
|
-
if (changes.displayAspect?.currentValue) {
|
|
196
|
-
this.currentPanel.panelTitle = changes.displayAspect.currentValue;
|
|
197
|
-
this.currentPanel.expanded = true;
|
|
198
|
-
}
|
|
199
|
-
if (changes.displayDefaultProperties?.currentValue) {
|
|
200
|
-
this.expandPanel(this.DefaultPanels.PROPERTIES);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
updateChanges(updatedNodeChanges) {
|
|
204
|
-
Object.keys(updatedNodeChanges).map((propertyGroup) => {
|
|
205
|
-
if (typeof updatedNodeChanges[propertyGroup] === 'object') {
|
|
206
|
-
this.changedProperties[propertyGroup] = {
|
|
207
|
-
...this.changedProperties[propertyGroup],
|
|
208
|
-
...updatedNodeChanges[propertyGroup]
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
this.changedProperties[propertyGroup] = updatedNodeChanges[propertyGroup];
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
saveChanges(event) {
|
|
217
|
-
event?.stopPropagation();
|
|
218
|
-
this.resetEditing();
|
|
219
|
-
this._saving = true;
|
|
220
|
-
if (this.hasContentTypeChanged(this.changedProperties)) {
|
|
221
|
-
this.contentMetadataService.openConfirmDialog(this.changedProperties).subscribe(() => {
|
|
222
|
-
this.updateNode();
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
this.updateNode();
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Register all tags which should be assigned to node. Please note that they are just in "register" state and are not yet saved
|
|
231
|
-
* until button for saving data is clicked. Calling that function causes that save button is enabled.
|
|
232
|
-
*
|
|
233
|
-
* @param tags array of tags to register, they are not saved yet until we click save button.
|
|
234
|
-
*/
|
|
235
|
-
storeTagsToAssign(tags) {
|
|
236
|
-
this.tags = tags;
|
|
237
|
-
this._assignedTags = tags;
|
|
238
|
-
this.hasMetadataChanged = true;
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Store all categories that node should be assigned to. Please note that they are just in "stored" state and are not yet saved
|
|
242
|
-
* until button for saving data is clicked. Calling that function causes that save button is enabled.
|
|
243
|
-
*
|
|
244
|
-
* @param categoriesToAssign array of categories to store.
|
|
245
|
-
*/
|
|
246
|
-
storeCategoriesToAssign(categoriesToAssign) {
|
|
247
|
-
this.categories = categoriesToAssign;
|
|
248
|
-
this.hasMetadataChanged = true;
|
|
249
|
-
}
|
|
250
|
-
revertChanges() {
|
|
251
|
-
this.changedProperties = {};
|
|
252
|
-
this.hasMetadataChanged = false;
|
|
253
|
-
}
|
|
254
|
-
get showEmptyTagMessage() {
|
|
255
|
-
return this.tags?.length === 0 && this.currentPanel.panelTitle === 'Tags' && !this.editing;
|
|
256
|
-
}
|
|
257
|
-
get showEmptyCategoryMessage() {
|
|
258
|
-
return this.categories?.length === 0 && this.currentPanel.panelTitle === 'Categories' && !this.editing;
|
|
259
|
-
}
|
|
260
|
-
toggleGroupEditing(panelTitle, event) {
|
|
261
|
-
event?.stopPropagation();
|
|
262
|
-
if (this.editing && this.hasMetadataChanged) {
|
|
263
|
-
this.notificationService.showError('METADATA.BASIC.SAVE_OR_DISCARD_CHANGES');
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
this.editing = true;
|
|
267
|
-
this.editedPanelTitle = panelTitle;
|
|
268
|
-
this.expandPanel(panelTitle);
|
|
269
|
-
}
|
|
270
|
-
cancelGroupEditing(panelTitle, event) {
|
|
271
|
-
event?.stopPropagation();
|
|
272
|
-
this.resetEditing();
|
|
273
|
-
this.revertChanges();
|
|
274
|
-
const loadBasicProps = panelTitle === this.DefaultPanels.PROPERTIES;
|
|
275
|
-
const loadTags = panelTitle === this.DefaultPanels.TAGS;
|
|
276
|
-
const loadCategories = panelTitle === this.DefaultPanels.CATEGORIES;
|
|
277
|
-
const loadGroupedProps = !loadBasicProps && !loadTags && !loadCategories;
|
|
278
|
-
this.loadProperties(this.node, loadBasicProps, loadGroupedProps, loadTags, loadCategories);
|
|
279
|
-
}
|
|
280
|
-
expandPanel(panelTitle) {
|
|
281
|
-
this.currentPanel.panelTitle = panelTitle;
|
|
282
|
-
this.currentPanel.expanded = true;
|
|
283
|
-
}
|
|
284
|
-
closePanel(panelTitle) {
|
|
285
|
-
if (this.currentPanel.panelTitle === panelTitle) {
|
|
286
|
-
this.currentPanel.expanded = false;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
resetEditing() {
|
|
290
|
-
this.editing = false;
|
|
291
|
-
this.editedPanelTitle = '';
|
|
292
|
-
}
|
|
293
|
-
showGroup(group) {
|
|
294
|
-
const properties = group.properties.filter((property) => !this.isEmpty(property.displayValue));
|
|
295
|
-
return properties.length > 0;
|
|
296
|
-
}
|
|
297
|
-
keyDown(event) {
|
|
298
|
-
if (event.keyCode === 37 || event.keyCode === 39) {
|
|
299
|
-
// ArrowLeft && ArrowRight
|
|
300
|
-
event.stopPropagation();
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
updateNode() {
|
|
304
|
-
forkJoin({
|
|
305
|
-
updatedNode: this.nodesApiService.updateNode(this.node.id, this.changedProperties),
|
|
306
|
-
...(this.displayTags ? this.saveTags() : {}),
|
|
307
|
-
...(this.displayCategories ? this.saveCategories() : {})
|
|
308
|
-
})
|
|
309
|
-
.pipe(catchError((err) => {
|
|
310
|
-
this.cardViewContentUpdateService.updateElement(this.targetProperty);
|
|
311
|
-
this.handleUpdateError(err);
|
|
312
|
-
this._saving = false;
|
|
313
|
-
this.revertChanges();
|
|
314
|
-
this.loadProperties(this.node);
|
|
315
|
-
return of(null);
|
|
316
|
-
}))
|
|
317
|
-
.subscribe((result) => {
|
|
318
|
-
if (result) {
|
|
319
|
-
this.updateUndefinedNodeProperties(result.updatedNode);
|
|
320
|
-
if (this.hasContentTypeChanged(this.changedProperties)) {
|
|
321
|
-
this.cardViewContentUpdateService.updateNodeAspect(this.node);
|
|
322
|
-
}
|
|
323
|
-
this.revertChanges();
|
|
324
|
-
Object.assign(this.node, result.updatedNode);
|
|
325
|
-
this.nodesApiService.nodeUpdated.next(this.node);
|
|
326
|
-
if (Object.keys(result).length > 1 && this.displayTags) {
|
|
327
|
-
this.loadTagsForNode(this.node.id);
|
|
328
|
-
}
|
|
329
|
-
if (this.displayCategories && !!result.LinkingCategories) {
|
|
330
|
-
this.assignedCategories = result.LinkingCategories.list
|
|
331
|
-
? result.LinkingCategories.list.entries.map((entry) => entry.entry)
|
|
332
|
-
: [result.LinkingCategories.entry];
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
this._saving = false;
|
|
336
|
-
});
|
|
337
|
-
}
|
|
338
|
-
hasContentTypeChanged(changedProperties) {
|
|
339
|
-
return !!changedProperties?.nodeType;
|
|
340
|
-
}
|
|
341
|
-
updateUndefinedNodeProperties(node) {
|
|
342
|
-
if (!node.properties) {
|
|
343
|
-
node.properties = {};
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
loadProperties(node, loadBasicProps = true, loadGroupedProps = true, loadTags = true, loadCategories = true) {
|
|
347
|
-
if (node) {
|
|
348
|
-
if (loadBasicProps) {
|
|
349
|
-
this.basicProperties$ = this.getProperties(node);
|
|
350
|
-
}
|
|
351
|
-
if (loadGroupedProps) {
|
|
352
|
-
this.groupedProperties$ = this.contentMetadataService.getGroupedProperties(node, this.preset);
|
|
353
|
-
}
|
|
354
|
-
if (this.displayTags && loadTags) {
|
|
355
|
-
this.loadTagsForNode(node.id);
|
|
356
|
-
}
|
|
357
|
-
if (this.displayCategories && loadCategories) {
|
|
358
|
-
this.loadCategoriesForNode(node.id);
|
|
359
|
-
const aspectNames = node.aspectNames || [];
|
|
360
|
-
if (!aspectNames.includes('generalclassifiable')) {
|
|
361
|
-
this.categories = [];
|
|
362
|
-
this.classifiableChangedSubject.next();
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
getProperties(node) {
|
|
368
|
-
const properties$ = this.contentMetadataService.getBasicProperties(node);
|
|
369
|
-
const contentTypeProperty$ = this.contentMetadataService.getContentTypeProperty(node);
|
|
370
|
-
return zip(properties$, contentTypeProperty$).pipe(map(([properties, contentTypeProperty]) => {
|
|
371
|
-
const filteredProperties = contentTypeProperty.filter((property) => properties.findIndex((baseProperty) => baseProperty.key === property.key) === -1);
|
|
372
|
-
return [...properties, ...filteredProperties];
|
|
373
|
-
}));
|
|
374
|
-
}
|
|
375
|
-
isEmpty(value) {
|
|
376
|
-
return value === undefined || value === null || value === '';
|
|
377
|
-
}
|
|
378
|
-
loadCategoriesForNode(nodeId) {
|
|
379
|
-
this.assignedCategories = [];
|
|
380
|
-
this.categoryService.getCategoryLinksForNode(nodeId).subscribe((categoryPaging) => {
|
|
381
|
-
this.categories = categoryPaging.list.entries.map((categoryEntry) => {
|
|
382
|
-
const path = categoryEntry.entry.path ? categoryEntry.entry.path.split('/').splice(3).join('/') : null;
|
|
383
|
-
categoryEntry.entry.name = path ? `${path}/${categoryEntry.entry.name}` : categoryEntry.entry.name;
|
|
384
|
-
return categoryEntry.entry;
|
|
385
|
-
});
|
|
386
|
-
this.assignedCategories = [...this.categories];
|
|
387
|
-
});
|
|
388
|
-
}
|
|
389
|
-
saveCategories() {
|
|
390
|
-
const observables = {};
|
|
391
|
-
if (this.categories) {
|
|
392
|
-
this.assignedCategories.forEach((assignedCategory) => {
|
|
393
|
-
if (this.categories.every((category) => category.name !== assignedCategory.name)) {
|
|
394
|
-
observables[`Removing ${assignedCategory.id}`] = this.categoryService.unlinkNodeFromCategory(this.node.id, assignedCategory.id);
|
|
395
|
-
}
|
|
396
|
-
});
|
|
397
|
-
const categoryLinkBodies = this.categories.map((category) => {
|
|
398
|
-
const categoryLinkBody = new CategoryLinkBody();
|
|
399
|
-
categoryLinkBody.categoryId = category.id;
|
|
400
|
-
return categoryLinkBody;
|
|
401
|
-
});
|
|
402
|
-
if (categoryLinkBodies.length > 0) {
|
|
403
|
-
observables['LinkingCategories'] = this.categoryService.linkNodeToCategory(this.node.id, categoryLinkBodies);
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
return observables;
|
|
407
|
-
}
|
|
408
|
-
loadTagsForNode(id) {
|
|
409
|
-
this.tagService.getTagsByNodeId(id).subscribe((tagPaging) => {
|
|
410
|
-
this.assignedTagsEntries = tagPaging.list.entries;
|
|
411
|
-
this.tags = tagPaging.list.entries.map((tagEntry) => tagEntry.entry.tag);
|
|
412
|
-
this._assignedTags = [...this.tags];
|
|
413
|
-
});
|
|
414
|
-
}
|
|
415
|
-
saveTags() {
|
|
416
|
-
const observables = {};
|
|
417
|
-
if (this.tags) {
|
|
418
|
-
this.assignedTagsEntries.forEach((tagEntry) => {
|
|
419
|
-
if (!this.tags.some((tag) => tagEntry.entry.tag === tag)) {
|
|
420
|
-
observables[`${tagEntry.entry.id}Removing`] = this.tagService.removeTag(this.node.id, tagEntry.entry.id);
|
|
421
|
-
}
|
|
422
|
-
});
|
|
423
|
-
if (this.tags.length) {
|
|
424
|
-
observables.tagsAssigning = this.tagService.assignTagsToNode(this.node.id, this.tags.map((tag) => {
|
|
425
|
-
const tagBody = new TagBody();
|
|
426
|
-
tagBody.tag = tag;
|
|
427
|
-
return tagBody;
|
|
428
|
-
}));
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
return observables;
|
|
432
|
-
}
|
|
433
|
-
updateInvalidProperties() {
|
|
434
|
-
if (this.targetProperty?.isValidValue === false) {
|
|
435
|
-
this.invalidProperties.add(this.targetProperty.key);
|
|
436
|
-
}
|
|
437
|
-
else if (this.targetProperty?.isValidValue === true) {
|
|
438
|
-
this.invalidProperties.delete(this.targetProperty.key);
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentMetadataComponent, deps: [{ token: i1.ContentMetadataService }, { token: i2.CardViewContentUpdateService }, { token: i3.NodesApiService }, { token: i4.TranslationService }, { token: i4.AppConfigService }, { token: i5.TagService }, { token: i6.CategoryService }, { token: i7.ContentService }, { token: i4.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
442
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ContentMetadataComponent, isStandalone: true, selector: "adf-content-metadata", inputs: { node: "node", displayEmpty: "displayEmpty", expanded: "expanded", multi: "multi", preset: "preset", displayDefaultProperties: "displayDefaultProperties", displayAspect: "displayAspect", copyToClipboardAction: "copyToClipboardAction", useChipsForMultiValueProperty: "useChipsForMultiValueProperty", displayTags: "displayTags", displayCategories: "displayCategories", customPanels: "customPanels", readOnly: "readOnly" }, host: { classAttribute: "adf-content-metadata" }, usesOnChanges: true, ngImport: i0, template: "<mat-accordion displayMode=\"flat\" [multi]=\"multi\" class=\"adf-metadata-properties\">\n <mat-expansion-panel\n *ngIf=\"displayDefaultProperties\"\n class=\"adf-content-metadata-panel\"\n [expanded]=\"currentPanel.panelTitle === DefaultPanels.PROPERTIES && currentPanel.expanded\"\n (opened)=\"expandPanel(DefaultPanels.PROPERTIES)\"\n (closed)=\"closePanel(DefaultPanels.PROPERTIES)\"\n [attr.data-automation-id]=\"'adf-metadata-group-properties'\"\n hideToggle>\n <mat-expansion-panel-header\n class=\"adf-metadata-properties-header\"\n [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === DefaultPanels.PROPERTIES && currentPanel.expanded\">\n <adf-content-metadata-header\n [title]=\"'CORE.METADATA.BASIC.HEADER'\"\n [expanded]=\"currentPanel.panelTitle === DefaultPanels.PROPERTIES && currentPanel.expanded\">\n <button\n *ngIf=\"!readOnly && !isPanelEditing(DefaultPanels.PROPERTIES)\"\n mat-icon-button\n (click)=\"toggleGroupEditing(DefaultPanels.PROPERTIES, $event)\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate\"\n data-automation-id=\"meta-data-general-info-edit\"\n class=\"adf-edit-icon-buttons\">\n <mat-icon>mode_edit</mat-icon>\n </button>\n <div *ngIf=\"isPanelEditing(DefaultPanels.PROPERTIES)\" class=\"adf-metadata-action-buttons\">\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n (click)=\"cancelGroupEditing(DefaultPanels.PROPERTIES, $event)\"\n data-automation-id=\"reset-metadata\"\n class=\"adf-metadata-action-buttons-clear\">\n <mat-icon>clear</mat-icon>\n </button>\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n (click)=\"saveChanges($event)\"\n color=\"primary\"\n data-automation-id=\"save-general-info-metadata\"\n [disabled]=\"!hasMetadataChanged || invalidProperties.size > 0\">\n <mat-icon>check</mat-icon>\n </button>\n </div>\n </adf-content-metadata-header>\n </mat-expansion-panel-header>\n <adf-card-view\n class=\"adf-metadata-properties-expansion-panel\"\n (keydown)=\"keyDown($event)\"\n [properties]=\"basicProperties$ | async\"\n [editable]=\"!readOnly && isPanelEditing(DefaultPanels.PROPERTIES)\"\n [displayEmpty]=\"displayEmpty\"\n [copyToClipboardAction]=\"copyToClipboardAction\"\n [useChipsForMultiValueProperty]=\"useChipsForMultiValueProperty\"\n [multiValueSeparator]=\"multiValueSeparator\" />\n </mat-expansion-panel>\n\n <ng-container *ngIf=\"displayTags\">\n <mat-expansion-panel\n hideToggle\n [expanded]=\"currentPanel.panelTitle === DefaultPanels.TAGS && currentPanel.expanded\"\n (opened)=\"expandPanel(DefaultPanels.TAGS)\"\n (closed)=\"closePanel(DefaultPanels.TAGS)\"\n class=\"adf-content-metadata-panel\"\n data-automation-id=\"adf-content-metadata-tags-panel\">\n <mat-expansion-panel-header\n class=\"adf-metadata-properties-header\"\n [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === DefaultPanels.TAGS && currentPanel.expanded\">\n <adf-content-metadata-header [title]=\"'METADATA.BASIC.TAGS'\" [expanded]=\"currentPanel.panelTitle === DefaultPanels.TAGS && currentPanel.expanded\">\n <button\n *ngIf=\"!readOnly && !isPanelEditing(DefaultPanels.TAGS)\"\n mat-icon-button\n (click)=\"toggleGroupEditing(DefaultPanels.TAGS, $event)\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate\"\n data-automation-id=\"showing-tag-input-button\"\n class=\"adf-edit-icon-buttons\">\n <mat-icon>mode_edit</mat-icon>\n </button>\n <div *ngIf=\"isPanelEditing(DefaultPanels.TAGS)\" class=\"adf-metadata-action-buttons\">\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n (click)=\"cancelGroupEditing(DefaultPanels.TAGS, $event)\"\n data-automation-id=\"reset-tags-metadata\"\n class=\"adf-metadata-action-buttons-clear\">\n <mat-icon>clear</mat-icon>\n </button>\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n (click)=\"saveChanges($event)\"\n color=\"primary\"\n data-automation-id=\"save-tags-metadata\"\n [disabled]=\"!hasMetadataChanged\">\n <mat-icon>check</mat-icon>\n </button>\n </div>\n </adf-content-metadata-header>\n </mat-expansion-panel-header>\n <div *ngIf=\"currentPanel.panelTitle === DefaultPanels.TAGS && !editing\"\n class=\"adf-metadata-properties-tags\">\n <adf-dynamic-chip-list [chips]=\"tagsToDisplay\" [showDelete]=\"false\" />\n </div>\n <div *ngIf=\"showEmptyTagMessage\" class=\"adf-metadata-no-item-added\">\n {{ 'METADATA.BASIC.NO_TAGS_ADDED' | translate }}\n </div>\n <adf-tags-creator\n *ngIf=\"!readOnly && isPanelEditing(DefaultPanels.TAGS)\"\n class=\"adf-metadata-properties-tags\"\n [tagNameControlVisible]=\"editing\"\n (tagsChange)=\"storeTagsToAssign($event)\"\n [mode]=\"tagsCreatorMode\"\n [tags]=\"assignedTags\"\n [disabledTagsRemoving]=\"saving\" />\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"displayCategories\">\n <mat-expansion-panel\n hideToggle\n [expanded]=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && currentPanel.expanded\"\n (opened)=\"expandPanel(DefaultPanels.CATEGORIES)\"\n (closed)=\"closePanel(DefaultPanels.CATEGORIES)\"\n class=\"adf-content-metadata-panel\"\n data-automation-id=\"adf-content-metadata-categories-panel\">\n <mat-expansion-panel-header\n class=\"adf-metadata-properties-header\"\n [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && currentPanel.expanded\">\n <adf-content-metadata-header\n [title]=\"'CATEGORIES_MANAGEMENT.CATEGORIES_TITLE'\"\n [expanded]=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && currentPanel.expanded\">\n <button\n *ngIf=\"!readOnly && !isPanelEditing(DefaultPanels.CATEGORIES)\"\n mat-icon-button\n (click)=\"toggleGroupEditing(DefaultPanels.CATEGORIES, $event)\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate\"\n data-automation-id=\"meta-data-categories-edit\"\n class=\"adf-categories-button adf-edit-icon-buttons\">\n <mat-icon>mode_edit</mat-icon>\n </button>\n <div *ngIf=\"isPanelEditing(DefaultPanels.CATEGORIES)\" class=\"adf-metadata-action-buttons\">\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n (click)=\"cancelGroupEditing(DefaultPanels.CATEGORIES, $event)\"\n data-automation-id=\"reset-metadata\"\n class=\"adf-metadata-action-buttons-clear\">\n <mat-icon>clear</mat-icon>\n </button>\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n (click)=\"saveChanges($event)\"\n color=\"primary\"\n data-automation-id=\"save-categories-metadata\"\n [disabled]=\"!hasMetadataChanged\">\n <mat-icon>check</mat-icon>\n </button>\n </div>\n </adf-content-metadata-header>\n </mat-expansion-panel-header>\n <div *ngIf=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && !editing\">\n <p *ngFor=\"let category of categories\" class=\"adf-metadata-categories\">{{ category.name }}</p>\n </div>\n <div *ngIf=\"showEmptyCategoryMessage\" class=\"adf-metadata-no-item-added\">\n {{ 'CATEGORIES_MANAGEMENT.NO_CATEGORIES_ADDED' | translate }}\n </div>\n <adf-categories-management\n *ngIf=\"!readOnly && isPanelEditing(DefaultPanels.CATEGORIES)\"\n class=\"adf-metadata-categories-header\"\n [categoryNameControlVisible]=\"editing\"\n [disableRemoval]=\"saving\"\n [categories]=\"categories\"\n [managementMode]=\"categoriesManagementMode\"\n [classifiableChanged]=\"classifiableChanged\"\n (categoriesChange)=\"storeCategoriesToAssign($event)\" />\n </mat-expansion-panel>\n </ng-container>\n\n <mat-expansion-panel\n *ngFor=\"let customPanel of customPanels\"\n [expanded]=\"currentPanel.panelTitle === customPanel.panelTitle && currentPanel.expanded\"\n (opened)=\"expandPanel(customPanel.panelTitle)\"\n (closed)=\"closePanel(customPanel.panelTitle)\"\n class=\"adf-content-metadata-panel\"\n hideToggle>\n <mat-expansion-panel-header\n class=\"adf-metadata-properties-header\"\n [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === customPanel.panelTitle && currentPanel.expanded\">\n <adf-content-metadata-header\n class=\"adf-metadata-custom-panel-title\"\n [title]=\"customPanel.panelTitle\"\n [expanded]=\"currentPanel.panelTitle === customPanel.panelTitle && currentPanel.expanded\" />\n </mat-expansion-panel-header>\n <adf-dynamic-component [id]=\"customPanel.component\" [data]=\"{ node }\" />\n </mat-expansion-panel>\n\n <ng-container *ngIf=\"groupedProperties$ | async; else loading; let groupedProperties\">\n <div *ngFor=\"let group of groupedProperties; let first = first\" class=\"adf-metadata-grouped-properties-container\">\n <mat-expansion-panel\n [attr.data-automation-id]=\"'adf-metadata-group-' + group.title\"\n [expanded]=\"multi ? !displayDefaultProperties && first || group.expanded : !displayDefaultProperties && first || currentPanel.panelTitle === group.title && currentPanel.expanded\"\n (opened)=\"expandPanel(group.title); group.expanded = true\"\n (closed)=\"closePanel(group.title); group.expanded = false\"\n class=\"adf-content-metadata-panel\"\n hideToggle>\n <mat-expansion-panel-header\n class=\"adf-metadata-properties-header\"\n [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === group.title && currentPanel.expanded\">\n <adf-content-metadata-header [title]=\"group.title\" [expanded]=\"currentPanel.panelTitle === group.title && currentPanel.expanded\">\n <button\n *ngIf=\"group.editable && !this.readOnly && !isPanelEditing(group.title)\"\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate\"\n data-automation-id=\"meta-data-card-toggle-edit\"\n class=\"adf-edit-icon-buttons\"\n (click)=\"toggleGroupEditing(group.title, $event)\">\n <mat-icon>mode_edit</mat-icon>\n </button>\n <div class=\"adf-metadata-action-buttons\" *ngIf=\"group.editable && isPanelEditing(group.title)\">\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n (click)=\"cancelGroupEditing(group.title, $event)\"\n data-automation-id=\"reset-metadata\"\n class=\"adf-metadata-action-buttons-clear\">\n <mat-icon>clear</mat-icon>\n </button>\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n (click)=\"saveChanges($event)\"\n color=\"primary\"\n data-automation-id=\"save-metadata\"\n [disabled]=\"!hasMetadataChanged || invalidProperties.size > 0\">\n <mat-icon>check</mat-icon>\n </button>\n </div>\n </adf-content-metadata-header>\n </mat-expansion-panel-header>\n <div *ngIf=\"!showGroup(group) && group.editable && !editing\" class=\"adf-metadata-no-item-added\">\n {{ 'METADATA.BASIC.NO_ITEMS_MESSAGE' | translate : { groupTitle: group.title | translate } }}\n </div>\n <adf-card-view\n (keydown)=\"keyDown($event)\"\n [properties]=\"group.properties\"\n [editable]=\"!readOnly && group.editable && isPanelEditing(group.title)\"\n [displayEmpty]=\"displayEmpty\"\n [copyToClipboardAction]=\"copyToClipboardAction\"\n [useChipsForMultiValueProperty]=\"useChipsForMultiValueProperty\"\n [multiValueSeparator]=\"multiValueSeparator\"\n [displayLabelForChips]=\"true\" />\n </mat-expansion-panel>\n </div>\n </ng-container>\n\n <ng-template #loading>\n <mat-progress-bar mode=\"indeterminate\" [attr.aria-label]=\"'DATA_LOADING' | translate\" />\n </ng-template>\n</mat-accordion>\n", styles: [".adf-metadata-properties .adf-content-metadata-panel{box-shadow:none;border:1px solid var(--adf-metadata-property-panel-border-color);border-radius:12px;margin:12px}.adf-metadata-properties .adf-content-metadata-panel adf-card-view-textitem .mat-mdc-form-field-subscript-wrapper{display:none}.adf-metadata-properties .adf-content-metadata-panel adf-card-view-textitem .mat-mdc-form-field-infix{padding-bottom:0}.adf-metadata-properties .adf-content-metadata-panel .adf-property-list .adf-property .adf-property-field .adf-property-value:not(.adf-card-view-selectitem .adf-property-value){margin-top:10px;height:32px}.adf-metadata-properties .adf-content-metadata-panel .adf-property-list .adf-property .adf-property-field .adf-property-value:not(.adf-card-view-selectitem .adf-property-value):is(textarea){padding-top:6px}.adf-metadata-properties .adf-content-metadata-panel .adf-property-list .adf-property .adf-property-field label{font-size:19px;line-height:20px}.adf-metadata-properties .adf-metadata-properties-header{height:56px;padding:0 12px;border-radius:12px 12px 0 0}.adf-metadata-properties .adf-metadata-properties-header.adf-metadata-properties-header-expanded{border-bottom:1px solid var(--adf-metadata-property-panel-border-color)}.adf-metadata-properties .mat-expansion-panel-body{padding-top:16px}.adf-metadata-properties .mat-expansion-panel-body input{border-color:transparent;width:100%}.adf-metadata-properties .mat-expansion-panel-body input:focus-visible{outline:none}.adf-metadata-properties .adf-edit-icon-buttons{color:var(--adf-theme-foreground-text-color-054)}.adf-metadata-properties .mat-mdc-chip.metadata-properties-tag-chip .mdc-evolution-chip__cell--primary,.adf-metadata-properties .mat-mdc-chip.metadata-properties-tag-chip .mdc-evolution-chip__action--primary,.adf-metadata-properties .mat-mdc-chip.metadata-properties-tag-chip .mat-mdc-chip-action-label{overflow:hidden}.adf-metadata-properties .adf-metadata-no-item-added{word-break:break-all;font-size:15px;padding:0 0 0 12px}.adf-metadata-properties-tags .adf-dynamic-chip-list-chip{padding:0}.adf-metadata-action-buttons{display:flex;justify-content:space-evenly}.adf-metadata-action-buttons-clear{color:var(--adf-metadata-action-button-clear-color)}.adf-metadata-categories-header .adf-categories-button{display:flex;justify-content:space-between;align-items:center;font-size:15px;height:56px}.adf-metadata-categories-header .adf-categories-button [hidden]{visibility:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i9.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i9.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i9.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "component", type: ContentMetadataHeaderComponent, selector: "adf-content-metadata-header", inputs: ["title", "expanded"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: CategoriesManagementComponent, selector: "adf-categories-management", inputs: ["categories", "categoryNameControlVisible", "classifiableChanged", "disableRemoval", "managementMode", "parentId", "multiSelect"], outputs: ["categoriesChange", "categoryNameControlVisibleChange"] }, { kind: "component", type: DynamicExtensionComponent, selector: "adf-dynamic-component", inputs: ["id", "data"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i12.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: TagsCreatorComponent, selector: "adf-tags-creator", inputs: ["mode", "disabledTagsRemoving", "tags", "tagNameControlVisible"], outputs: ["existingTagsPanelVisibilityChange", "tagsChange"] }, { kind: "component", type: CardViewComponent, selector: "adf-card-view", inputs: ["properties", "editable", "displayEmpty", "displayNoneOption", "displayClearAction", "copyToClipboardAction", "useChipsForMultiValueProperty", "multiValueSeparator", "displayLabelForChips"] }, { kind: "component", type: DynamicChipListComponent, selector: "adf-dynamic-chip-list", inputs: ["pagination", "chips", "showDelete", "disableDelete", "limitChipsDisplayed", "roundUpChips"], outputs: ["displayNext", "removedChip"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
443
|
-
}
|
|
444
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentMetadataComponent, decorators: [{
|
|
445
|
-
type: Component,
|
|
446
|
-
args: [{ selector: 'adf-content-metadata', standalone: true, imports: [
|
|
447
|
-
CommonModule,
|
|
448
|
-
MatExpansionModule,
|
|
449
|
-
ContentMetadataHeaderComponent,
|
|
450
|
-
MatButtonModule,
|
|
451
|
-
TranslatePipe,
|
|
452
|
-
MatIconModule,
|
|
453
|
-
MatChipsModule,
|
|
454
|
-
CategoriesManagementComponent,
|
|
455
|
-
DynamicExtensionComponent,
|
|
456
|
-
MatProgressBarModule,
|
|
457
|
-
TagsCreatorComponent,
|
|
458
|
-
CardViewComponent,
|
|
459
|
-
DynamicChipListComponent
|
|
460
|
-
], host: { class: 'adf-content-metadata' }, encapsulation: ViewEncapsulation.None, template: "<mat-accordion displayMode=\"flat\" [multi]=\"multi\" class=\"adf-metadata-properties\">\n <mat-expansion-panel\n *ngIf=\"displayDefaultProperties\"\n class=\"adf-content-metadata-panel\"\n [expanded]=\"currentPanel.panelTitle === DefaultPanels.PROPERTIES && currentPanel.expanded\"\n (opened)=\"expandPanel(DefaultPanels.PROPERTIES)\"\n (closed)=\"closePanel(DefaultPanels.PROPERTIES)\"\n [attr.data-automation-id]=\"'adf-metadata-group-properties'\"\n hideToggle>\n <mat-expansion-panel-header\n class=\"adf-metadata-properties-header\"\n [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === DefaultPanels.PROPERTIES && currentPanel.expanded\">\n <adf-content-metadata-header\n [title]=\"'CORE.METADATA.BASIC.HEADER'\"\n [expanded]=\"currentPanel.panelTitle === DefaultPanels.PROPERTIES && currentPanel.expanded\">\n <button\n *ngIf=\"!readOnly && !isPanelEditing(DefaultPanels.PROPERTIES)\"\n mat-icon-button\n (click)=\"toggleGroupEditing(DefaultPanels.PROPERTIES, $event)\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate\"\n data-automation-id=\"meta-data-general-info-edit\"\n class=\"adf-edit-icon-buttons\">\n <mat-icon>mode_edit</mat-icon>\n </button>\n <div *ngIf=\"isPanelEditing(DefaultPanels.PROPERTIES)\" class=\"adf-metadata-action-buttons\">\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n (click)=\"cancelGroupEditing(DefaultPanels.PROPERTIES, $event)\"\n data-automation-id=\"reset-metadata\"\n class=\"adf-metadata-action-buttons-clear\">\n <mat-icon>clear</mat-icon>\n </button>\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n (click)=\"saveChanges($event)\"\n color=\"primary\"\n data-automation-id=\"save-general-info-metadata\"\n [disabled]=\"!hasMetadataChanged || invalidProperties.size > 0\">\n <mat-icon>check</mat-icon>\n </button>\n </div>\n </adf-content-metadata-header>\n </mat-expansion-panel-header>\n <adf-card-view\n class=\"adf-metadata-properties-expansion-panel\"\n (keydown)=\"keyDown($event)\"\n [properties]=\"basicProperties$ | async\"\n [editable]=\"!readOnly && isPanelEditing(DefaultPanels.PROPERTIES)\"\n [displayEmpty]=\"displayEmpty\"\n [copyToClipboardAction]=\"copyToClipboardAction\"\n [useChipsForMultiValueProperty]=\"useChipsForMultiValueProperty\"\n [multiValueSeparator]=\"multiValueSeparator\" />\n </mat-expansion-panel>\n\n <ng-container *ngIf=\"displayTags\">\n <mat-expansion-panel\n hideToggle\n [expanded]=\"currentPanel.panelTitle === DefaultPanels.TAGS && currentPanel.expanded\"\n (opened)=\"expandPanel(DefaultPanels.TAGS)\"\n (closed)=\"closePanel(DefaultPanels.TAGS)\"\n class=\"adf-content-metadata-panel\"\n data-automation-id=\"adf-content-metadata-tags-panel\">\n <mat-expansion-panel-header\n class=\"adf-metadata-properties-header\"\n [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === DefaultPanels.TAGS && currentPanel.expanded\">\n <adf-content-metadata-header [title]=\"'METADATA.BASIC.TAGS'\" [expanded]=\"currentPanel.panelTitle === DefaultPanels.TAGS && currentPanel.expanded\">\n <button\n *ngIf=\"!readOnly && !isPanelEditing(DefaultPanels.TAGS)\"\n mat-icon-button\n (click)=\"toggleGroupEditing(DefaultPanels.TAGS, $event)\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate\"\n data-automation-id=\"showing-tag-input-button\"\n class=\"adf-edit-icon-buttons\">\n <mat-icon>mode_edit</mat-icon>\n </button>\n <div *ngIf=\"isPanelEditing(DefaultPanels.TAGS)\" class=\"adf-metadata-action-buttons\">\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n (click)=\"cancelGroupEditing(DefaultPanels.TAGS, $event)\"\n data-automation-id=\"reset-tags-metadata\"\n class=\"adf-metadata-action-buttons-clear\">\n <mat-icon>clear</mat-icon>\n </button>\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n (click)=\"saveChanges($event)\"\n color=\"primary\"\n data-automation-id=\"save-tags-metadata\"\n [disabled]=\"!hasMetadataChanged\">\n <mat-icon>check</mat-icon>\n </button>\n </div>\n </adf-content-metadata-header>\n </mat-expansion-panel-header>\n <div *ngIf=\"currentPanel.panelTitle === DefaultPanels.TAGS && !editing\"\n class=\"adf-metadata-properties-tags\">\n <adf-dynamic-chip-list [chips]=\"tagsToDisplay\" [showDelete]=\"false\" />\n </div>\n <div *ngIf=\"showEmptyTagMessage\" class=\"adf-metadata-no-item-added\">\n {{ 'METADATA.BASIC.NO_TAGS_ADDED' | translate }}\n </div>\n <adf-tags-creator\n *ngIf=\"!readOnly && isPanelEditing(DefaultPanels.TAGS)\"\n class=\"adf-metadata-properties-tags\"\n [tagNameControlVisible]=\"editing\"\n (tagsChange)=\"storeTagsToAssign($event)\"\n [mode]=\"tagsCreatorMode\"\n [tags]=\"assignedTags\"\n [disabledTagsRemoving]=\"saving\" />\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"displayCategories\">\n <mat-expansion-panel\n hideToggle\n [expanded]=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && currentPanel.expanded\"\n (opened)=\"expandPanel(DefaultPanels.CATEGORIES)\"\n (closed)=\"closePanel(DefaultPanels.CATEGORIES)\"\n class=\"adf-content-metadata-panel\"\n data-automation-id=\"adf-content-metadata-categories-panel\">\n <mat-expansion-panel-header\n class=\"adf-metadata-properties-header\"\n [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && currentPanel.expanded\">\n <adf-content-metadata-header\n [title]=\"'CATEGORIES_MANAGEMENT.CATEGORIES_TITLE'\"\n [expanded]=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && currentPanel.expanded\">\n <button\n *ngIf=\"!readOnly && !isPanelEditing(DefaultPanels.CATEGORIES)\"\n mat-icon-button\n (click)=\"toggleGroupEditing(DefaultPanels.CATEGORIES, $event)\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate\"\n data-automation-id=\"meta-data-categories-edit\"\n class=\"adf-categories-button adf-edit-icon-buttons\">\n <mat-icon>mode_edit</mat-icon>\n </button>\n <div *ngIf=\"isPanelEditing(DefaultPanels.CATEGORIES)\" class=\"adf-metadata-action-buttons\">\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n (click)=\"cancelGroupEditing(DefaultPanels.CATEGORIES, $event)\"\n data-automation-id=\"reset-metadata\"\n class=\"adf-metadata-action-buttons-clear\">\n <mat-icon>clear</mat-icon>\n </button>\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n (click)=\"saveChanges($event)\"\n color=\"primary\"\n data-automation-id=\"save-categories-metadata\"\n [disabled]=\"!hasMetadataChanged\">\n <mat-icon>check</mat-icon>\n </button>\n </div>\n </adf-content-metadata-header>\n </mat-expansion-panel-header>\n <div *ngIf=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && !editing\">\n <p *ngFor=\"let category of categories\" class=\"adf-metadata-categories\">{{ category.name }}</p>\n </div>\n <div *ngIf=\"showEmptyCategoryMessage\" class=\"adf-metadata-no-item-added\">\n {{ 'CATEGORIES_MANAGEMENT.NO_CATEGORIES_ADDED' | translate }}\n </div>\n <adf-categories-management\n *ngIf=\"!readOnly && isPanelEditing(DefaultPanels.CATEGORIES)\"\n class=\"adf-metadata-categories-header\"\n [categoryNameControlVisible]=\"editing\"\n [disableRemoval]=\"saving\"\n [categories]=\"categories\"\n [managementMode]=\"categoriesManagementMode\"\n [classifiableChanged]=\"classifiableChanged\"\n (categoriesChange)=\"storeCategoriesToAssign($event)\" />\n </mat-expansion-panel>\n </ng-container>\n\n <mat-expansion-panel\n *ngFor=\"let customPanel of customPanels\"\n [expanded]=\"currentPanel.panelTitle === customPanel.panelTitle && currentPanel.expanded\"\n (opened)=\"expandPanel(customPanel.panelTitle)\"\n (closed)=\"closePanel(customPanel.panelTitle)\"\n class=\"adf-content-metadata-panel\"\n hideToggle>\n <mat-expansion-panel-header\n class=\"adf-metadata-properties-header\"\n [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === customPanel.panelTitle && currentPanel.expanded\">\n <adf-content-metadata-header\n class=\"adf-metadata-custom-panel-title\"\n [title]=\"customPanel.panelTitle\"\n [expanded]=\"currentPanel.panelTitle === customPanel.panelTitle && currentPanel.expanded\" />\n </mat-expansion-panel-header>\n <adf-dynamic-component [id]=\"customPanel.component\" [data]=\"{ node }\" />\n </mat-expansion-panel>\n\n <ng-container *ngIf=\"groupedProperties$ | async; else loading; let groupedProperties\">\n <div *ngFor=\"let group of groupedProperties; let first = first\" class=\"adf-metadata-grouped-properties-container\">\n <mat-expansion-panel\n [attr.data-automation-id]=\"'adf-metadata-group-' + group.title\"\n [expanded]=\"multi ? !displayDefaultProperties && first || group.expanded : !displayDefaultProperties && first || currentPanel.panelTitle === group.title && currentPanel.expanded\"\n (opened)=\"expandPanel(group.title); group.expanded = true\"\n (closed)=\"closePanel(group.title); group.expanded = false\"\n class=\"adf-content-metadata-panel\"\n hideToggle>\n <mat-expansion-panel-header\n class=\"adf-metadata-properties-header\"\n [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === group.title && currentPanel.expanded\">\n <adf-content-metadata-header [title]=\"group.title\" [expanded]=\"currentPanel.panelTitle === group.title && currentPanel.expanded\">\n <button\n *ngIf=\"group.editable && !this.readOnly && !isPanelEditing(group.title)\"\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate\"\n data-automation-id=\"meta-data-card-toggle-edit\"\n class=\"adf-edit-icon-buttons\"\n (click)=\"toggleGroupEditing(group.title, $event)\">\n <mat-icon>mode_edit</mat-icon>\n </button>\n <div class=\"adf-metadata-action-buttons\" *ngIf=\"group.editable && isPanelEditing(group.title)\">\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n (click)=\"cancelGroupEditing(group.title, $event)\"\n data-automation-id=\"reset-metadata\"\n class=\"adf-metadata-action-buttons-clear\">\n <mat-icon>clear</mat-icon>\n </button>\n <button\n mat-icon-button\n [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n (click)=\"saveChanges($event)\"\n color=\"primary\"\n data-automation-id=\"save-metadata\"\n [disabled]=\"!hasMetadataChanged || invalidProperties.size > 0\">\n <mat-icon>check</mat-icon>\n </button>\n </div>\n </adf-content-metadata-header>\n </mat-expansion-panel-header>\n <div *ngIf=\"!showGroup(group) && group.editable && !editing\" class=\"adf-metadata-no-item-added\">\n {{ 'METADATA.BASIC.NO_ITEMS_MESSAGE' | translate : { groupTitle: group.title | translate } }}\n </div>\n <adf-card-view\n (keydown)=\"keyDown($event)\"\n [properties]=\"group.properties\"\n [editable]=\"!readOnly && group.editable && isPanelEditing(group.title)\"\n [displayEmpty]=\"displayEmpty\"\n [copyToClipboardAction]=\"copyToClipboardAction\"\n [useChipsForMultiValueProperty]=\"useChipsForMultiValueProperty\"\n [multiValueSeparator]=\"multiValueSeparator\"\n [displayLabelForChips]=\"true\" />\n </mat-expansion-panel>\n </div>\n </ng-container>\n\n <ng-template #loading>\n <mat-progress-bar mode=\"indeterminate\" [attr.aria-label]=\"'DATA_LOADING' | translate\" />\n </ng-template>\n</mat-accordion>\n", styles: [".adf-metadata-properties .adf-content-metadata-panel{box-shadow:none;border:1px solid var(--adf-metadata-property-panel-border-color);border-radius:12px;margin:12px}.adf-metadata-properties .adf-content-metadata-panel adf-card-view-textitem .mat-mdc-form-field-subscript-wrapper{display:none}.adf-metadata-properties .adf-content-metadata-panel adf-card-view-textitem .mat-mdc-form-field-infix{padding-bottom:0}.adf-metadata-properties .adf-content-metadata-panel .adf-property-list .adf-property .adf-property-field .adf-property-value:not(.adf-card-view-selectitem .adf-property-value){margin-top:10px;height:32px}.adf-metadata-properties .adf-content-metadata-panel .adf-property-list .adf-property .adf-property-field .adf-property-value:not(.adf-card-view-selectitem .adf-property-value):is(textarea){padding-top:6px}.adf-metadata-properties .adf-content-metadata-panel .adf-property-list .adf-property .adf-property-field label{font-size:19px;line-height:20px}.adf-metadata-properties .adf-metadata-properties-header{height:56px;padding:0 12px;border-radius:12px 12px 0 0}.adf-metadata-properties .adf-metadata-properties-header.adf-metadata-properties-header-expanded{border-bottom:1px solid var(--adf-metadata-property-panel-border-color)}.adf-metadata-properties .mat-expansion-panel-body{padding-top:16px}.adf-metadata-properties .mat-expansion-panel-body input{border-color:transparent;width:100%}.adf-metadata-properties .mat-expansion-panel-body input:focus-visible{outline:none}.adf-metadata-properties .adf-edit-icon-buttons{color:var(--adf-theme-foreground-text-color-054)}.adf-metadata-properties .mat-mdc-chip.metadata-properties-tag-chip .mdc-evolution-chip__cell--primary,.adf-metadata-properties .mat-mdc-chip.metadata-properties-tag-chip .mdc-evolution-chip__action--primary,.adf-metadata-properties .mat-mdc-chip.metadata-properties-tag-chip .mat-mdc-chip-action-label{overflow:hidden}.adf-metadata-properties .adf-metadata-no-item-added{word-break:break-all;font-size:15px;padding:0 0 0 12px}.adf-metadata-properties-tags .adf-dynamic-chip-list-chip{padding:0}.adf-metadata-action-buttons{display:flex;justify-content:space-evenly}.adf-metadata-action-buttons-clear{color:var(--adf-metadata-action-button-clear-color)}.adf-metadata-categories-header .adf-categories-button{display:flex;justify-content:space-between;align-items:center;font-size:15px;height:56px}.adf-metadata-categories-header .adf-categories-button [hidden]{visibility:hidden}\n"] }]
|
|
461
|
-
}], ctorParameters: () => [{ type: i1.ContentMetadataService }, { type: i2.CardViewContentUpdateService }, { type: i3.NodesApiService }, { type: i4.TranslationService }, { type: i4.AppConfigService }, { type: i5.TagService }, { type: i6.CategoryService }, { type: i7.ContentService }, { type: i4.NotificationService }], propDecorators: { node: [{
|
|
462
|
-
type: Input,
|
|
463
|
-
args: [{ required: true }]
|
|
464
|
-
}], displayEmpty: [{
|
|
465
|
-
type: Input
|
|
466
|
-
}], expanded: [{
|
|
467
|
-
type: Input
|
|
468
|
-
}], multi: [{
|
|
469
|
-
type: Input
|
|
470
|
-
}], preset: [{
|
|
471
|
-
type: Input,
|
|
472
|
-
args: [{ required: true }]
|
|
473
|
-
}], displayDefaultProperties: [{
|
|
474
|
-
type: Input
|
|
475
|
-
}], displayAspect: [{
|
|
476
|
-
type: Input
|
|
477
|
-
}], copyToClipboardAction: [{
|
|
478
|
-
type: Input
|
|
479
|
-
}], useChipsForMultiValueProperty: [{
|
|
480
|
-
type: Input
|
|
481
|
-
}], displayTags: [{
|
|
482
|
-
type: Input
|
|
483
|
-
}], displayCategories: [{
|
|
484
|
-
type: Input
|
|
485
|
-
}], customPanels: [{
|
|
486
|
-
type: Input
|
|
487
|
-
}], readOnly: [{
|
|
488
|
-
type: Input
|
|
489
|
-
}] } });
|
|
490
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1tZXRhZGF0YS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2NvbnRlbnQtbWV0YWRhdGEvY29tcG9uZW50cy9jb250ZW50LW1ldGFkYXRhL2NvbnRlbnQtbWV0YWRhdGEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9jb250ZW50LW1ldGFkYXRhL2NvbXBvbmVudHMvY29udGVudC1tZXRhZGF0YS9jb250ZW50LW1ldGFkYXRhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQW9DLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBMkIsZ0JBQWdCLEVBQWtCLElBQUksRUFBRSxPQUFPLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFDakksT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQ0gsZ0JBQWdCLEVBRWhCLGlCQUFpQixFQUdqQix3QkFBd0IsRUFDeEIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUVyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0Q0FBNEMs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LFlBQVk7c0JBRFgsS0FBSztnQkFRTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBS3pCLHdCQUF3QjtzQkFEdkIsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04scUJBQXFCO3NCQURwQixLQUFLO2dCQUtOLDZCQUE2QjtzQkFENUIsS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFRTixRQUFRO3NCQURQLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXRlZ29yeSwgQ2F0ZWdvcnlFbnRyeSwgQ2F0ZWdvcnlMaW5rQm9keSwgQ2F0ZWdvcnlQYWdpbmcsIE5vZGUsIFRhZ0JvZHksIFRhZ0VudHJ5LCBUYWdQYWdpbmcgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgemlwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgQ2FyZFZpZXdCYXNlSXRlbU1vZGVsLFxuICAgIENhcmRWaWV3Q29tcG9uZW50LFxuICAgIENhcmRWaWV3SXRlbSxcbiAgICBDaGlwLFxuICAgIER5bmFtaWNDaGlwTGlzdENvbXBvbmVudCxcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBVcGRhdGVOb3RpZmljYXRpb25cbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IENvbnRlbnRNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb250ZW50LW1ldGFkYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FyZFZpZXdHcm91cCwgQ29udGVudE1ldGFkYXRhQ3VzdG9tUGFuZWwsIENvbnRlbnRNZXRhZGF0YVBhbmVsLCBQcmVzZXRDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NvbnRlbnQtbWV0YWRhdGEuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENhcmRWaWV3Q29udGVudFVwZGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vc2VydmljZXMvY2FyZC12aWV3LWNvbnRlbnQtdXBkYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZXNBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3NlcnZpY2VzL25vZGVzLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFRhZ3NDcmVhdG9yTW9kZSB9IGZyb20gJy4uLy4uLy4uL3RhZy90YWdzLWNyZWF0b3IvdGFncy1jcmVhdG9yLW1vZGUnO1xuaW1wb3J0IHsgVGFnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RhZy9zZXJ2aWNlcy90YWcuc2VydmljZSc7XG5pbXBvcnQgeyBDYXRlZ29yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jYXRlZ29yeS9zZXJ2aWNlcy9jYXRlZ29yeS5zZXJ2aWNlJztcbmltcG9ydCB7IENhdGVnb3JpZXNNYW5hZ2VtZW50TW9kZSB9IGZyb20gJy4uLy4uLy4uL2NhdGVnb3J5L2NhdGVnb3JpZXMtbWFuYWdlbWVudC9jYXRlZ29yaWVzLW1hbmFnZW1lbnQtbW9kZSc7XG5pbXBvcnQgeyBBbGxvd2FibGVPcGVyYXRpb25zRW51bSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9tb2RlbHMvYWxsb3dhYmxlLW9wZXJhdGlvbnMuZW51bSc7XG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9zZXJ2aWNlcy9jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEeW5hbWljRXh0ZW5zaW9uQ29tcG9uZW50IH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1leHRlbnNpb25zJztcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7IFRhZ3NDcmVhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdGFnJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IENvbnRlbnRNZXRhZGF0YUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29udGVudC1tZXRhZGF0YS1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhdGVnb3JpZXNNYW5hZ2VtZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY2F0ZWdvcnkvY2F0ZWdvcmllcy1tYW5hZ2VtZW50L2NhdGVnb3JpZXMtbWFuYWdlbWVudC5jb21wb25lbnQnO1xuXG5jb25zdCBERUZBVUxUX1NFUEFSQVRPUiA9ICcsICc7XG5cbmVudW0gRGVmYXVsdFBhbmVscyB7XG4gICAgUFJPUEVSVElFUyA9ICdQcm9wZXJ0aWVzJyxcbiAgICBUQUdTID0gJ1RhZ3MnLFxuICAgIENBVEVHT1JJRVMgPSAnQ2F0ZWdvcmllcydcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtY29udGVudC1tZXRhZGF0YScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgICAgICBDb250ZW50TWV0YWRhdGFIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgICAgIENhdGVnb3JpZXNNYW5hZ2VtZW50Q29tcG9uZW50LFxuICAgICAgICBEeW5hbWljRXh0ZW5zaW9uQ29tcG9uZW50LFxuICAgICAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICAgICAgVGFnc0NyZWF0b3JDb21wb25lbnQsXG4gICAgICAgIENhcmRWaWV3Q29tcG9uZW50LFxuICAgICAgICBEeW5hbWljQ2hpcExpc3RDb21wb25lbnRcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LW1ldGFkYXRhLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jb250ZW50LW1ldGFkYXRhLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi1jb250ZW50LW1ldGFkYXRhJyB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudE1ldGFkYXRhQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIC8qKiAocmVxdWlyZWQpIFRoZSBub2RlIGVudGl0eSB0byBmZXRjaCBtZXRhZGF0YSBhYm91dCAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgbm9kZTogTm9kZTtcblxuICAgIC8qKiBUb2dnbGVzIHdoZXRoZXIgdG8gZGlzcGxheSBlbXB0eSB2YWx1ZXMgaW4gdGhlIGNhcmQgdmlldyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIGJldHdlZW4gZXhwYW5kZWQgKGllLCBmdWxsIGluZm9ybWF0aW9uKSBhbmQgY29sbGFwc2VkXG4gICAgICogKGllLCByZWR1Y2VkIGluZm9ybWF0aW9uKSBpbiB0aGUgZGlzcGxheVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUaGUgbXVsdGkgcGFyYW1ldGVyIG9mIHRoZSB1bmRlcmx5aW5nIG1hdGVyaWFsIGV4cGFuc2lvbiBwYW5lbCwgc2V0IHRvIHRydWUgdG8gYWxsb3cgbXVsdGkgYWNjb3JkaW9uIHRvIGJlIGV4cGFuZGVkIGF0IHRoZSBzYW1lIHRpbWUgKi9cbiAgICBASW5wdXQoKVxuICAgIG11bHRpID0gZmFsc2U7XG5cbiAgICAvKiogTmFtZSBvciBjb25maWd1cmF0aW9uIG9mIHRoZSBtZXRhZGF0YSBwcmVzZXQsIHdoaWNoIGRlZmluZXMgYXNwZWN0cyBhbmQgdGhlaXIgcHJvcGVydGllcyAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHJlc2V0OiBzdHJpbmcgfCBQcmVzZXRDb25maWc7XG5cbiAgICAvKiogVG9nZ2xlcyB3aGV0aGVyIHRoZSBtZXRhZGF0YSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBzaG93biAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheURlZmF1bHRQcm9wZXJ0aWVzOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKiAob3B0aW9uYWwpIHNob3dzIHRoZSBnaXZlbiBhc3BlY3QgaW4gdGhlIGV4cGFuZGVkICBjYXJkICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5QXNwZWN0OiBzdHJpbmcgPSBudWxsO1xuXG4gICAgLyoqIFRvZ2dsZXMgd2hldGhlciBvciBub3QgdG8gZW5hYmxlIGNvcHkgdG8gY2xpcGJvYXJkIGFjdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvcHlUb0NsaXBib2FyZEFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogVG9nZ2xlcyB3aGV0aGVyIG9yIG5vdCB0byBlbmFibGUgY2hpcHMgZm9yIG11bHRpdmFsdWVkIHByb3BlcnRpZXMuICovXG4gICAgQElucHV0KClcbiAgICB1c2VDaGlwc0Zvck11bHRpVmFsdWVQcm9wZXJ0eTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogVHJ1ZSBpZiB0YWdzIHNob3VsZCBiZSBkaXNwbGF5ZWQsIGZhbHNlIG90aGVyd2lzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheVRhZ3MgPSBmYWxzZTtcblxuICAgIC8qKiBUcnVlIGlmIGNhdGVnb3JpZXMgc2hvdWxkIGJlIGRpc3BsYXllZCwgZmFsc2Ugb3RoZXJ3aXNlICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5Q2F0ZWdvcmllcyA9IGZhbHNlO1xuXG4gICAgLyoqIExpc3Qgb2YgY3VzdG9tIG1ldGFkYXRhIHBhbmVscyB0byBiZSBkaXNwbGF5ZWQgd2l0aCByZWdpc3RlcmVkIGN1c3RvbSBjb21wb25lbnRzICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21QYW5lbHM6IENvbnRlbnRNZXRhZGF0YUN1c3RvbVBhbmVsW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIChvcHRpb25hbCkgVGhpcyBmbGFnIHNldHMgdGhlIG1ldGFkYXRhIGluIHJlYWQtb25seSBtb2RlLFxuICAgICAqIHByZXZlbnRpbmcgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9hc3NpZ25lZFRhZ3M6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBhc3NpZ25lZFRhZ3NFbnRyaWVzOiBUYWdFbnRyeVtdID0gW107XG4gICAgcHJpdmF0ZSBfdGFnc0NyZWF0b3JNb2RlID0gVGFnc0NyZWF0b3JNb2RlLkNSRUFURV9BTkRfQVNTSUdOO1xuICAgIHByaXZhdGUgX3RhZ3M6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSB0YXJnZXRQcm9wZXJ0eTogQ2FyZFZpZXdCYXNlSXRlbU1vZGVsO1xuICAgIHByaXZhdGUgY2xhc3NpZmlhYmxlQ2hhbmdlZFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX3NhdmluZyA9IGZhbHNlO1xuXG4gICAgRGVmYXVsdFBhbmVscyA9IERlZmF1bHRQYW5lbHM7XG4gICAgbXVsdGlWYWx1ZVNlcGFyYXRvcjogc3RyaW5nO1xuICAgIGJhc2ljUHJvcGVydGllcyQ6IE9ic2VydmFibGU8Q2FyZFZpZXdJdGVtW10+O1xuICAgIGdyb3VwZWRQcm9wZXJ0aWVzJDogT2JzZXJ2YWJsZTxDYXJkVmlld0dyb3VwW10+O1xuXG4gICAgdGFnc1RvRGlzcGxheTogQ2hpcFtdO1xuICAgIGNoYW5nZWRQcm9wZXJ0aWVzID0ge307XG4gICAgaGFzTWV0YWRhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgYXNzaWduZWRDYXRlZ29yaWVzOiBDYXRlZ29yeVtdID0gW107XG4gICAgY2F0ZWdvcmllczogQ2F0ZWdvcnlbXSA9IFtdO1xuICAgIGNhdGVnb3JpZXNNYW5hZ2VtZW50TW9kZSA9IENhdGVnb3JpZXNNYW5hZ2VtZW50TW9kZS5BU1NJR047XG4gICAgY2xhc3NpZmlhYmxlQ2hhbmdlZCA9IHRoaXMuY2xhc3NpZmlhYmxlQ2hhbmdlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgZWRpdGluZyA9IGZhbHNlO1xuICAgIGludmFsaWRQcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZWRpdGVkUGFuZWxUaXRsZSA9ICcnO1xuICAgIGN1cnJlbnRQYW5lbDogQ29udGVudE1ldGFkYXRhUGFuZWwgPSB7XG4gICAgICAgIGV4cGFuZGVkOiBmYWxzZSxcbiAgICAgICAgcGFuZWxUaXRsZTogJydcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY29udGVudE1ldGFkYXRhU2VydmljZTogQ29udGVudE1ldGFkYXRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjYXJkVmlld0NvbnRlbnRVcGRhdGVTZXJ2aWNlOiBDYXJkVmlld0NvbnRlbnRVcGRhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5vZGVzQXBpU2VydmljZTogTm9kZXNBcGlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNhdGVnb3J5U2VydmljZTogQ2F0ZWdvcnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlOiBDb250ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29weVRvQ2xpcGJvYXJkQWN0aW9uID0gdGhpcy5hcHBDb25maWcuZ2V0PGJvb2xlYW4+KCdjb250ZW50LW1ldGFkYXRhLmNvcHktdG8tY2xpcGJvYXJkLWFjdGlvbicpO1xuICAgICAgICB0aGlzLm11bHRpVmFsdWVTZXBhcmF0b3IgPSB0aGlzLmFwcENvbmZpZy5nZXQ8c3RyaW5nPignY29udGVudC1tZXRhZGF0YS5tdWx0aS12YWx1ZS1waXBlLXNlcGFyYXRvcicpIHx8IERFRkFVTFRfU0VQQVJBVE9SO1xuICAgICAgICB0aGlzLnVzZUNoaXBzRm9yTXVsdGlWYWx1ZVByb3BlcnR5ID0gdGhpcy5hcHBDb25maWcuZ2V0PGJvb2xlYW4+KCdjb250ZW50LW1ldGFkYXRhLm11bHRpLXZhbHVlLWNoaXBzJyk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY2FyZFZpZXdDb250ZW50VXBkYXRlU2VydmljZS5pdGVtVXBkYXRlZCRcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHVwZGF0ZWROb2RlOiBVcGRhdGVOb3RpZmljYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc01ldGFkYXRhQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXRQcm9wZXJ0eSA9IHVwZGF0ZWROb2RlLnRhcmdldDtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUludmFsaWRQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDaGFuZ2VzKHVwZGF0ZWROb2RlLmNoYW5nZWQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYXJkVmlld0NvbnRlbnRVcGRhdGVTZXJ2aWNlLnVwZGF0ZWRBc3BlY3QkLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubm9kZS5hc3BlY3ROYW1lcyA9IG5vZGU/LmFzcGVjdE5hbWVzO1xuICAgICAgICAgICAgdGhpcy5sb2FkUHJvcGVydGllcyhub2RlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5sb2FkUHJvcGVydGllcyh0aGlzLm5vZGUpO1xuICAgICAgICB0aGlzLnZlcmlmeUFsbG93YWJsZU9wZXJhdGlvbnMoKTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID0gdGhpcy5kaXNwbGF5QXNwZWN0ID8/IHRoaXMuRGVmYXVsdFBhbmVscy5QUk9QRVJUSUVTO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbC5leHBhbmRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJpZnlBbGxvd2FibGVPcGVyYXRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMubm9kZT8uYWxsb3dhYmxlT3BlcmF0aW9ucyB8fCAhdGhpcy5jb250ZW50U2VydmljZS5oYXNBbGxvd2FibGVPcGVyYXRpb25zKHRoaXMubm9kZSwgQWxsb3dhYmxlT3BlcmF0aW9uc0VudW0uVVBEQVRFKSkge1xuICAgICAgICAgICAgdGhpcy5yZWFkT25seSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgYXNzaWduZWRUYWdzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Fzc2lnbmVkVGFncztcbiAgICB9XG5cbiAgICBzZXQgdGFncyh0YWdzOiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLl90YWdzID0gdGFncztcbiAgICAgICAgdGhpcy50YWdzVG9EaXNwbGF5ID0gdGhpcy50YWdzLm1hcCgodGFnKSA9PiAoeyBpZDogdGFnLCBuYW1lOiB0YWcgfSkpO1xuICAgIH1cblxuICAgIGdldCB0YWdzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ3M7XG4gICAgfVxuXG4gICAgZ2V0IHRhZ3NDcmVhdG9yTW9kZSgpOiBUYWdzQ3JlYXRvck1vZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnc0NyZWF0b3JNb2RlO1xuICAgIH1cblxuICAgIGdldCBzYXZpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zYXZpbmc7XG4gICAgfVxuXG4gICAgaXNQYW5lbEVkaXRpbmcocGFuZWxUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmVkaXRpbmcgJiZcbiAgICAgICAgICAgICgodGhpcy5jdXJyZW50UGFuZWwucGFuZWxUaXRsZSA9PT0gcGFuZWxUaXRsZSAmJiB0aGlzLmVkaXRlZFBhbmVsVGl0bGUgPT09IHBhbmVsVGl0bGUpIHx8IHRoaXMuZWRpdGVkUGFuZWxUaXRsZSA9PT0gcGFuZWxUaXRsZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlVXBkYXRlRXJyb3IoZXJyb3I6IEVycm9yKSB7XG4gICAgICAgIGxldCBzdGF0dXNDb2RlID0gMDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RhdHVzQ29kZSA9IEpTT04ucGFyc2UoZXJyb3IubWVzc2FnZSkuZXJyb3Iuc3RhdHVzQ29kZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvKiBlbXB0eSAqL1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBgTUVUQURBVEEuRVJST1JTLiR7c3RhdHVzQ29kZX1gO1xuXG4gICAgICAgIGlmICh0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5pbnN0YW50KG1lc3NhZ2UpID09PSBtZXNzYWdlKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gJ01FVEFEQVRBLkVSUk9SUy5HRU5FUklDJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udGVudE1ldGFkYXRhU2VydmljZS5lcnJvci5uZXh0KHtcbiAgICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMubm9kZSAmJiAhY2hhbmdlcy5ub2RlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRQcm9wZXJ0aWVzKGNoYW5nZXMubm9kZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMucmVhZE9ubHk/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEVkaXRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFByb3BlcnRpZXModGhpcy5ub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmRpc3BsYXlBc3BlY3Q/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFuZWwucGFuZWxUaXRsZSA9IGNoYW5nZXMuZGlzcGxheUFzcGVjdC5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbC5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5kaXNwbGF5RGVmYXVsdFByb3BlcnRpZXM/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRQYW5lbCh0aGlzLkRlZmF1bHRQYW5lbHMuUFJPUEVSVElFUyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVDaGFuZ2VzKHVwZGF0ZWROb2RlQ2hhbmdlcykge1xuICAgICAgICBPYmplY3Qua2V5cyh1cGRhdGVkTm9kZUNoYW5nZXMpLm1hcCgocHJvcGVydHlHcm91cDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVwZGF0ZWROb2RlQ2hhbmdlc1twcm9wZXJ0eUdyb3VwXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRQcm9wZXJ0aWVzW3Byb3BlcnR5R3JvdXBdID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNoYW5nZWRQcm9wZXJ0aWVzW3Byb3BlcnR5R3JvdXBdLFxuICAgICAgICAgICAgICAgICAgICAuLi51cGRhdGVkTm9kZUNoYW5nZXNbcHJvcGVydHlHcm91cF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRQcm9wZXJ0aWVzW3Byb3BlcnR5R3JvdXBdID0gdXBkYXRlZE5vZGVDaGFuZ2VzW3Byb3BlcnR5R3JvdXBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzYXZlQ2hhbmdlcyhldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnJlc2V0RWRpdGluZygpO1xuICAgICAgICB0aGlzLl9zYXZpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0NvbnRlbnRUeXBlQ2hhbmdlZCh0aGlzLmNoYW5nZWRQcm9wZXJ0aWVzKSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50TWV0YWRhdGFTZXJ2aWNlLm9wZW5Db25maXJtRGlhbG9nKHRoaXMuY2hhbmdlZFByb3BlcnRpZXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVOb2RlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTm9kZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYWxsIHRhZ3Mgd2hpY2ggc2hvdWxkIGJlIGFzc2lnbmVkIHRvIG5vZGUuIFBsZWFzZSBub3RlIHRoYXQgdGhleSBhcmUganVzdCBpbiBcInJlZ2lzdGVyXCIgc3RhdGUgYW5kIGFyZSBub3QgeWV0IHNhdmVkXG4gICAgICogdW50aWwgYnV0dG9uIGZvciBzYXZpbmcgZGF0YSBpcyBjbGlja2VkLiBDYWxsaW5nIHRoYXQgZnVuY3Rpb24gY2F1c2VzIHRoYXQgc2F2ZSBidXR0b24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdzIGFycmF5IG9mIHRhZ3MgdG8gcmVnaXN0ZXIsIHRoZXkgYXJlIG5vdCBzYXZlZCB5ZXQgdW50aWwgd2UgY2xpY2sgc2F2ZSBidXR0b24uXG4gICAgICovXG4gICAgc3RvcmVUYWdzVG9Bc3NpZ24odGFnczogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy50YWdzID0gdGFncztcbiAgICAgICAgdGhpcy5fYXNzaWduZWRUYWdzID0gdGFncztcbiAgICAgICAgdGhpcy5oYXNNZXRhZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGFsbCBjYXRlZ29yaWVzIHRoYXQgbm9kZSBzaG91bGQgYmUgYXNzaWduZWQgdG8uIFBsZWFzZSBub3RlIHRoYXQgdGhleSBhcmUganVzdCBpbiBcInN0b3JlZFwiIHN0YXRlIGFuZCBhcmUgbm90IHlldCBzYXZlZFxuICAgICAqIHVudGlsIGJ1dHRvbiBmb3Igc2F2aW5nIGRhdGEgaXMgY2xpY2tlZC4gQ2FsbGluZyB0aGF0IGZ1bmN0aW9uIGNhdXNlcyB0aGF0IHNhdmUgYnV0dG9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcmllc1RvQXNzaWduIGFycmF5IG9mIGNhdGVnb3JpZXMgdG8gc3RvcmUuXG4gICAgICovXG4gICAgc3RvcmVDYXRlZ29yaWVzVG9Bc3NpZ24oY2F0ZWdvcmllc1RvQXNzaWduOiBDYXRlZ29yeVtdKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXNUb0Fzc2lnbjtcbiAgICAgICAgdGhpcy5oYXNNZXRhZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldmVydENoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZFByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5oYXNNZXRhZGF0YUNoYW5nZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd0VtcHR5VGFnTWVzc2FnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFncz8ubGVuZ3RoID09PSAwICYmIHRoaXMuY3VycmVudFBhbmVsLnBhbmVsVGl0bGUgPT09ICdUYWdzJyAmJiAhdGhpcy5lZGl0aW5nO1xuICAgIH1cblxuICAgIGdldCBzaG93RW1wdHlDYXRlZ29yeU1lc3NhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhdGVnb3JpZXM/Lmxlbmd0aCA9PT0gMCAmJiB0aGlzLmN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSAnQ2F0ZWdvcmllcycgJiYgIXRoaXMuZWRpdGluZztcbiAgICB9XG5cbiAgICB0b2dnbGVHcm91cEVkaXRpbmcocGFuZWxUaXRsZTogc3RyaW5nLCBldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5lZGl0aW5nICYmIHRoaXMuaGFzTWV0YWRhdGFDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0Vycm9yKCdNRVRBREFUQS5CQVNJQy5TQVZFX09SX0RJU0NBUkRfQ0hBTkdFUycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZWRpdGVkUGFuZWxUaXRsZSA9IHBhbmVsVGl0bGU7XG4gICAgICAgIHRoaXMuZXhwYW5kUGFuZWwocGFuZWxUaXRsZSk7XG4gICAgfVxuXG4gICAgY2FuY2VsR3JvdXBFZGl0aW5nKHBhbmVsVGl0bGU6IHN0cmluZywgZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5yZXNldEVkaXRpbmcoKTtcbiAgICAgICAgdGhpcy5yZXZlcnRDaGFuZ2VzKCk7XG4gICAgICAgIGNvbnN0IGxvYWRCYXNpY1Byb3BzID0gcGFuZWxUaXRsZSA9PT0gdGhpcy5EZWZhdWx0UGFuZWxzLlBST1BFUlRJRVM7XG4gICAgICAgIGNvbnN0IGxvYWRUYWdzID0gcGFuZWxUaXRsZSA9PT0gdGhpcy5EZWZhdWx0UGFuZWxzLlRBR1M7XG4gICAgICAgIGNvbnN0IGxvYWRDYXRlZ29yaWVzID0gcGFuZWxUaXRsZSA9PT0gdGhpcy5EZWZhdWx0UGFuZWxzLkNBVEVHT1JJRVM7XG4gICAgICAgIGNvbnN0IGxvYWRHcm91cGVkUHJvcHMgPSAhbG9hZEJhc2ljUHJvcHMgJiYgIWxvYWRUYWdzICYmICFsb2FkQ2F0ZWdvcmllcztcbiAgICAgICAgdGhpcy5sb2FkUHJvcGVydGllcyh0aGlzLm5vZGUsIGxvYWRCYXNpY1Byb3BzLCBsb2FkR3JvdXBlZFByb3BzLCBsb2FkVGFncywgbG9hZENhdGVnb3JpZXMpO1xuICAgIH1cblxuICAgIGV4cGFuZFBhbmVsKHBhbmVsVGl0bGU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID0gcGFuZWxUaXRsZTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFuZWwuZXhwYW5kZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGNsb3NlUGFuZWwocGFuZWxUaXRsZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSBwYW5lbFRpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbC5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRFZGl0aW5nKCkge1xuICAgICAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0ZWRQYW5lbFRpdGxlID0gJyc7XG4gICAgfVxuXG4gICAgc2hvd0dyb3VwKGdyb3VwOiBDYXJkVmlld0dyb3VwKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBncm91cC5wcm9wZXJ0aWVzLmZpbHRlcigocHJvcGVydHkpID0+ICF0aGlzLmlzRW1wdHkocHJvcGVydHkuZGlzcGxheVZhbHVlKSk7XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBrZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAzNyB8fCBldmVudC5rZXlDb2RlID09PSAzOSkge1xuICAgICAgICAgICAgLy8gQXJyb3dMZWZ0ICYmIEFycm93UmlnaHRcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVOb2RlKCkge1xuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICB1cGRhdGVkTm9kZTogdGhpcy5ub2Rlc0FwaVNlcnZpY2UudXBkYXRlTm9kZSh0aGlzLm5vZGUuaWQsIHRoaXMuY2hhbmdlZFByb3BlcnRpZXMpLFxuICAgICAgICAgICAgLi4uKHRoaXMuZGlzcGxheVRhZ3MgPyB0aGlzLnNhdmVUYWdzKCkgOiB7fSksXG4gICAgICAgICAgICAuLi4odGhpcy5kaXNwbGF5Q2F0ZWdvcmllcyA/IHRoaXMuc2F2ZUNhdGVnb3JpZXMoKSA6IHt9KVxuICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FyZFZpZXdDb250ZW50VXBkYXRlU2VydmljZS51cGRhdGVFbGVtZW50KHRoaXMudGFyZ2V0UHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVwZGF0ZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NhdmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJldmVydENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJvcGVydGllcyh0aGlzLm5vZGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVVuZGVmaW5lZE5vZGVQcm9wZXJ0aWVzKHJlc3VsdC51cGRhdGVkTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0NvbnRlbnRUeXBlQ2hhbmdlZCh0aGlzLmNoYW5nZWRQcm9wZXJ0aWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJkVmlld0NvbnRlbnRVcGRhdGVTZXJ2aWNlLnVwZGF0ZU5vZGVBc3BlY3QodGhpcy5ub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJldmVydENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm5vZGUsIHJlc3VsdC51cGRhdGVkTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZXNBcGlTZXJ2aWNlLm5vZGVVcGRhdGVkLm5leHQodGhpcy5ub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3VsdCkubGVuZ3RoID4gMSAmJiB0aGlzLmRpc3BsYXlUYWdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRUYWdzRm9yTm9kZSh0aGlzLm5vZGUuaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlDYXRlZ29yaWVzICYmICEhcmVzdWx0LkxpbmtpbmdDYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2lnbmVkQ2F0ZWdvcmllcyA9IHJlc3VsdC5MaW5raW5nQ2F0ZWdvcmllcy5saXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQuTGlua2luZ0NhdGVnb3JpZXMubGlzdC5lbnRyaWVzLm1hcCgoZW50cnk6IENhdGVnb3J5RW50cnkpID0+IGVudHJ5LmVudHJ5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW3Jlc3VsdC5MaW5raW5nQ2F0ZWdvcmllcy5lbnRyeV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fc2F2aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0NvbnRlbnRUeXBlQ2hhbmdlZChjaGFuZ2VkUHJvcGVydGllcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISFjaGFuZ2VkUHJvcGVydGllcz8ubm9kZVR5cGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVVbmRlZmluZWROb2RlUHJvcGVydGllcyhub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICghbm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBub2RlLnByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFByb3BlcnRpZXMobm9kZTogTm9kZSwgbG9hZEJhc2ljUHJvcHMgPSB0cnVlLCBsb2FkR3JvdXBlZFByb3BzID0gdHJ1ZSwgbG9hZFRhZ3MgPSB0cnVlLCBsb2FkQ2F0ZWdvcmllcyA9IHRydWUpIHtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChsb2FkQmFzaWNQcm9wcykge1xuICAgICAgICAgICAgICAgIHRoaXMuYmFzaWNQcm9wZXJ0aWVzJCA9IHRoaXMuZ2V0UHJvcGVydGllcyhub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsb2FkR3JvdXBlZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cGVkUHJvcGVydGllcyQgPSB0aGlzLmNvbnRlbnRNZXRhZGF0YVNlcnZpY2UuZ2V0R3JvdXBlZFByb3BlcnRpZXMobm9kZSwgdGhpcy5wcmVzZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5VGFncyAmJiBsb2FkVGFncykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFRhZ3NGb3JOb2RlKG5vZGUuaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5Q2F0ZWdvcmllcyAmJiBsb2FkQ2F0ZWdvcmllcykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZENhdGVnb3JpZXNGb3JOb2RlKG5vZGUuaWQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYXNwZWN0TmFtZXMgPSBub2RlLmFzcGVjdE5hbWVzIHx8IFtdO1xuICAgICAgICAgICAgICAgIGlmICghYXNwZWN0TmFtZXMuaW5jbHVkZXMoJ2dlbmVyYWxjbGFzc2lmaWFibGUnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWFibGVDaGFuZ2VkU3ViamVjdC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9wZXJ0aWVzKG5vZGU6IE5vZGUpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyQgPSB0aGlzLmNvbnRlbnRNZXRhZGF0YVNlcnZpY2UuZ2V0QmFzaWNQcm9wZXJ0aWVzKG5vZGUpO1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZVByb3BlcnR5JCA9IHRoaXMuY29udGVudE1ldGFkYXRhU2VydmljZS5nZXRDb250ZW50VHlwZVByb3BlcnR5KG5vZGUpO1xuICAgICAgICByZXR1cm4gemlwKHByb3BlcnRpZXMkLCBjb250ZW50VHlwZVByb3BlcnR5JCkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW3Byb3BlcnRpZXMsIGNvbnRlbnRUeXBlUHJvcGVydHldKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQcm9wZXJ0aWVzID0gY29udGVudFR5cGVQcm9wZXJ0eS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChwcm9wZXJ0eSkgPT4gcHJvcGVydGllcy5maW5kSW5kZXgoKGJhc2VQcm9wZXJ0eSkgPT4gYmFzZVByb3BlcnR5LmtleSA9PT0gcHJvcGVydHkua2V5KSA9PT0gLTFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBbLi4ucHJvcGVydGllcywgLi4uZmlsdGVyZWRQcm9wZXJ0aWVzXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0VtcHR5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZENhdGVnb3JpZXNGb3JOb2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYXNzaWduZWRDYXRlZ29yaWVzID0gW107XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlTZXJ2aWNlLmdldENhdGVnb3J5TGlua3NGb3JOb2RlKG5vZGVJZCkuc3Vic2NyaWJlKChjYXRlZ29yeVBhZ2luZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzID0gY2F0ZWdvcnlQYWdpbmcubGlzdC5lbnRyaWVzLm1hcCgoY2F0ZWdvcnlFbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBjYXRlZ29yeUVudHJ5LmVudHJ5LnBhdGggPyBjYXRlZ29yeUVudHJ5LmVudHJ5LnBhdGguc3BsaXQoJy8nKS5zcGxpY2UoMykuam9pbignLycpIDogbnVsbDtcbiAgICAgICAgICAgICAgICBjYXRlZ29yeUVudHJ5LmVudHJ5Lm5hbWUgPSBwYXRoID8gYCR7cGF0aH0vJHtjYXRlZ29yeUVudHJ5LmVudHJ5Lm5hbWV9YCA6IGNhdGVnb3J5RW50cnkuZW50cnkubmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2F0ZWdvcnlFbnRyeS5lbnRyeTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hc3NpZ25lZENhdGVnb3JpZXMgPSBbLi4udGhpcy5jYXRlZ29yaWVzXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlQ2F0ZWdvcmllcygpOiB7IFtrZXk6IHN0cmluZ106IE9ic2VydmFibGU8Q2F0ZWdvcnlQYWdpbmcgfCBDYXRlZ29yeUVudHJ5IHwgdm9pZD4gfSB7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzOiB7IFtrZXk6IHN0cmluZ106IE9ic2VydmFibGU8Q2F0ZWdvcnlQYWdpbmcgfCBDYXRlZ29yeUVudHJ5IHwgdm9pZD4gfSA9IHt9O1xuICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2lnbmVkQ2F0ZWdvcmllcy5mb3JFYWNoKChhc3NpZ25lZENhdGVnb3J5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllcy5ldmVyeSgoY2F0ZWdvcnkpID0+IGNhdGVnb3J5Lm5hbWUgIT09IGFzc2lnbmVkQ2F0ZWdvcnkubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2YWJsZXNbYFJlbW92aW5nICR7YXNzaWduZWRDYXRlZ29yeS5pZH1gXSA9IHRoaXMuY2F0ZWdvcnlTZXJ2aWNlLnVubGlua05vZGVGcm9tQ2F0ZWdvcnkodGhpcy5ub2RlLmlkLCBhc3NpZ25lZENhdGVnb3J5LmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5TGlua0JvZGllcyA9IHRoaXMuY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlMaW5rQm9keSA9IG5ldyBDYXRlZ29yeUxpbmtCb2R5KCk7XG4gICAgICAgICAgICAgICAgY2F0ZWdvcnlMaW5rQm9keS5jYXRlZ29yeUlkID0gY2F0ZWdvcnkuaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5TGlua0JvZHk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjYXRlZ29yeUxpbmtCb2RpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG9ic2VydmFibGVzWydMaW5raW5nQ2F0ZWdvcmllcyddID0gdGhpcy5jYXRlZ29yeVNlcnZpY2UubGlua05vZGVUb0NhdGVnb3J5KHRoaXMubm9kZS5pZCwgY2F0ZWdvcnlMaW5rQm9kaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFnc0Zvck5vZGUoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRhZ1NlcnZpY2UuZ2V0VGFnc0J5Tm9kZUlkKGlkKS5zdWJzY3JpYmUoKHRhZ1BhZ2luZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NpZ25lZFRhZ3NFbnRyaWVzID0gdGFnUGFnaW5nLmxpc3QuZW50cmllcztcbiAgICAgICAgICAgIHRoaXMudGFncyA9IHRhZ1BhZ2luZy5saXN0LmVudHJpZXMubWFwKCh0YWdFbnRyeSkgPT4gdGFnRW50cnkuZW50cnkudGFnKTtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnbmVkVGFncyA9IFsuLi50aGlzLnRhZ3NdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVUYWdzKCk6IHsgW2tleTogc3RyaW5nXTogT2JzZXJ2YWJsZTxUYWdQYWdpbmcgfCBUYWdFbnRyeSB8IHZvaWQ+IH0ge1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlczogeyBba2V5OiBzdHJpbmddOiBPYnNlcnZhYmxlPFRhZ1BhZ2luZyB8IFRhZ0VudHJ5IHwgdm9pZD4gfSA9IHt9O1xuICAgICAgICBpZiAodGhpcy50YWdzKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2lnbmVkVGFnc0VudHJpZXMuZm9yRWFjaCgodGFnRW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGFncy5zb21lKCh0YWcpID0+IHRhZ0VudHJ5LmVudHJ5LnRhZyA9PT0gdGFnKSkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZhYmxlc1tgJHt0YWdFbnRyeS5lbnRyeS5pZH1SZW1vdmluZ2BdID0gdGhpcy50YWdTZXJ2aWNlLnJlbW92ZVRhZyh0aGlzLm5vZGUuaWQsIHRhZ0VudHJ5LmVudHJ5LmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRhZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZXMudGFnc0Fzc2lnbmluZyA9IHRoaXMudGFnU2VydmljZS5hc3NpZ25UYWdzVG9Ob2RlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGUuaWQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFncy5tYXAoKHRhZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnQm9keSA9IG5ldyBUYWdCb2R5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdCb2R5LnRhZyA9IHRhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWdCb2R5O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW52YWxpZFByb3BlcnRpZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldFByb3BlcnR5Py5pc1ZhbGlkVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRQcm9wZXJ0aWVzLmFkZCh0aGlzLnRhcmdldFByb3BlcnR5LmtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50YXJnZXRQcm9wZXJ0eT8uaXNWYWxpZFZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRQcm9wZXJ0aWVzLmRlbGV0ZSh0aGlzLnRhcmdldFByb3BlcnR5LmtleSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bWF0LWFjY29yZGlvbiBkaXNwbGF5TW9kZT1cImZsYXRcIiBbbXVsdGldPVwibXVsdGlcIiBjbGFzcz1cImFkZi1tZXRhZGF0YS1wcm9wZXJ0aWVzXCI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWxcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5RGVmYXVsdFByb3BlcnRpZXNcIlxuICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW1ldGFkYXRhLXBhbmVsXCJcbiAgICAgICAgW2V4cGFuZGVkXT1cImN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSBEZWZhdWx0UGFuZWxzLlBST1BFUlRJRVMgJiYgY3VycmVudFBhbmVsLmV4cGFuZGVkXCJcbiAgICAgICAgKG9wZW5lZCk9XCJleHBhbmRQYW5lbChEZWZhdWx0UGFuZWxzLlBST1BFUlRJRVMpXCJcbiAgICAgICAgKGNsb3NlZCk9XCJjbG9zZVBhbmVsKERlZmF1bHRQYW5lbHMuUFJPUEVSVElFUylcIlxuICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1tZXRhZGF0YS1ncm91cC1wcm9wZXJ0aWVzJ1wiXG4gICAgICAgIGhpZGVUb2dnbGU+XG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtbWV0YWRhdGEtcHJvcGVydGllcy1oZWFkZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmFkZi1tZXRhZGF0YS1wcm9wZXJ0aWVzLWhlYWRlci1leHBhbmRlZF09XCJjdXJyZW50UGFuZWwucGFuZWxUaXRsZSA9PT0gRGVmYXVsdFBhbmVscy5QUk9QRVJUSUVTICYmIGN1cnJlbnRQYW5lbC5leHBhbmRlZFwiPlxuICAgICAgICAgICAgPGFkZi1jb250ZW50LW1ldGFkYXRhLWhlYWRlclxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQ09SRS5NRVRBREFUQS5CQVNJQy5IRUFERVInXCJcbiAgICAgICAgICAgICAgICBbZXhwYW5kZWRdPVwiY3VycmVudFBhbmVsLnBhbmVsVGl0bGUgPT09IERlZmF1bHRQYW5lbHMuUFJPUEVSVElFUyAmJiBjdXJyZW50UGFuZWwuZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJlYWRPbmx5ICYmICFpc1BhbmVsRWRpdGluZyhEZWZhdWx0UGFuZWxzLlBST1BFUlRJRVMpXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVHcm91cEVkaXRpbmcoRGVmYXVsdFBhbmVscy5QUk9QRVJUSUVTLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ0NPUkUuTUVUQURBVEEuQUNUSU9OUy5FRElUJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0NPUkUuTUVUQURBVEEuQUNDRVNTSUJJTElUWS5FRElUJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cIm1ldGEtZGF0YS1nZW5lcmFsLWluZm8tZWRpdFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWVkaXQtaWNvbi1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb2RlX2VkaXQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1BhbmVsRWRpdGluZyhEZWZhdWx0UGFuZWxzLlBST1BFUlRJRVMpXCIgY2xhc3M9XCJhZGYtbWV0YWRhdGEtYWN0aW9uLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCInQ09SRS5NRVRBREFUQS5BQ1RJT05TLkNBTkNFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEdyb3VwRWRpdGluZyhEZWZhdWx0UGFuZWxzLlBST1BFUlRJRVMsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwicmVzZXQtbWV0YWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtbWV0YWRhdGEtYWN0aW9uLWJ1dHRvbnMtY2xlYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIidDT1JFLk1FVEFEQVRBLkFDVElPTlMuU0FWRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVDaGFuZ2VzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cInNhdmUtZ2VuZXJhbC1pbmZvLW1ldGFkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzTWV0YWRhdGFDaGFuZ2VkIHx8IGludmFsaWRQcm9wZXJ0aWVzLnNpemUgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYWRmLWNvbnRlbnQtbWV0YWRhdGEtaGVhZGVyPlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8YWRmLWNhcmQtdmlld1xuICAgICAgICAgICAgY2xhc3M9XCJhZGYtbWV0YWRhdGEtcHJvcGVydGllcy1leHBhbnNpb24tcGFuZWxcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwia2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImJhc2ljUHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbZWRpdGFibGVdPVwiIXJlYWRPbmx5ICYmIGlzUGFuZWxFZGl0aW5nKERlZmF1bHRQYW5lbHMuUFJPUEVSVElFUylcIlxuICAgICAgICAgICAgW2Rpc3BsYXlFbXB0eV09XCJkaXNwbGF5RW1wdHlcIlxuICAgICAgICAgICAgW2NvcHlUb0NsaXBib2FyZEFjdGlvbl09XCJjb3B5VG9DbGlwYm9hcmRBY3Rpb25cIlxuICAgICAgICAgICAgW3VzZUNoaXBzRm9yTXVsdGlWYWx1ZVByb3BlcnR5XT1cInVzZUNoaXBzRm9yTXVsdGlWYWx1ZVByb3BlcnR5XCJcbiAgICAgICAgICAgIFttdWx0aVZhbHVlU2VwYXJhdG9yXT1cIm11bHRpVmFsdWVTZXBhcmF0b3JcIiAvPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5VGFnc1wiPlxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbFxuICAgICAgICAgICAgaGlkZVRvZ2dsZVxuICAgICAgICAgICAgW2V4cGFuZGVkXT1cImN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSBEZWZhdWx0UGFuZWxzLlRBR1MgJiYgY3VycmVudFBhbmVsLmV4cGFuZGVkXCJcbiAgICAgICAgICAgIChvcGVuZWQpPVwiZXhwYW5kUGFuZWwoRGVmYXVsdFBhbmVscy5UQUdTKVwiXG4gICAgICAgICAgICAoY2xvc2VkKT1cImNsb3NlUGFuZWwoRGVmYXVsdFBhbmVscy5UQUdTKVwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW1ldGFkYXRhLXBhbmVsXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1jb250ZW50LW1ldGFkYXRhLXRhZ3MtcGFuZWxcIj5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLW1ldGFkYXRhLXByb3BlcnRpZXMtaGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLW1ldGFkYXRhLXByb3BlcnRpZXMtaGVhZGVyLWV4cGFuZGVkXT1cImN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSBEZWZhdWx0UGFuZWxzLlRBR1MgJiYgY3VycmVudFBhbmVsLmV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgPGFkZi1jb250ZW50LW1ldGFkYXRhLWhlYWRlciBbdGl0bGVdPVwiJ01FVEFEQVRBLkJBU0lDLlRBR1MnXCIgW2V4cGFuZGVkXT1cImN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSBEZWZhdWx0UGFuZWxzLlRBR1MgJiYgY3VycmVudFBhbmVsLmV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJlYWRPbmx5ICYmICFpc1BhbmVsRWRpdGluZyhEZWZhdWx0UGFuZWxzLlRBR1MpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUdyb3VwRWRpdGluZyhEZWZhdWx0UGFuZWxzLlRBR1MsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ0NPUkUuTUVUQURBVEEuQUNUSU9OUy5FRElUJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidDT1JFLk1FVEFEQVRBLkFDQ0VTU0lCSUxJVFkuRURJVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwic2hvd2luZy10YWctaW5wdXQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWVkaXQtaWNvbi1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9kZV9lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1BhbmVsRWRpdGluZyhEZWZhdWx0UGFuZWxzLlRBR1MpXCIgY2xhc3M9XCJhZGYtbWV0YWRhdGEtYWN0aW9uLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCInQ09SRS5NRVRBREFUQS5BQ1RJT05TLkNBTkNFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxHcm91cEVkaXRpbmcoRGVmYXVsdFBhbmVscy5UQUdTLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJyZXNldC10YWdzLW1ldGFkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1tZXRhZGF0YS1hY3Rpb24tYnV0dG9ucy1jbGVhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCInQ09SRS5NRVRBREFUQS5BQ1RJT05TLlNBVkUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUNoYW5nZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJzYXZlLXRhZ3MtbWV0YWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzTWV0YWRhdGFDaGFuZ2VkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2FkZi1jb250ZW50LW1ldGFkYXRhLWhlYWRlcj5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFBhbmVsLnBhbmVsVGl0bGUgPT09IERlZmF1bHRQYW5lbHMuVEFHUyAmJiAhZWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLW1ldGFkYXRhLXByb3BlcnRpZXMtdGFnc1wiPlxuICAgICAgICAgICAgICAgIDxhZGYtZHluYW1pYy1jaGlwLWxpc3QgW2NoaXBzXT1cInRhZ3NUb0Rpc3BsYXlcIiBbc2hvd0RlbGV0ZV09XCJmYWxzZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RW1wdHlUYWdNZXNzYWdlXCIgY2xhc3M9XCJhZGYtbWV0YWRhdGEtbm8taXRlbS1hZGRlZFwiPlxuICAgICAgICAgICAgICAgIHt7ICdNRVRBREFUQS5CQVNJQy5OT19UQUdTX0FEREVEJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YWRmLXRhZ3MtY3JlYXRvclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJlYWRPbmx5ICYmIGlzUGFuZWxFZGl0aW5nKERlZmF1bHRQYW5lbHMuVEFHUylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLW1ldGFkYXRhLXByb3BlcnRpZXMtdGFnc1wiXG4gICAgICAgICAgICAgICAgW3RhZ05hbWVDb250cm9sVmlzaWJsZV09XCJlZGl0aW5nXCJcbiAgICAgICAgICAgICAgICAodGFnc0NoYW5nZSk9XCJzdG9yZVRhZ3NUb0Fzc2lnbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbbW9kZV09XCJ0YWdzQ3JlYXRvck1vZGVcIlxuICAgICAgICAgICAgICAgIFt0YWdzXT1cImFzc2lnbmVkVGFnc1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkVGFnc1JlbW92aW5nXT1cInNhdmluZ1wiIC8+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5Q2F0ZWdvcmllc1wiPlxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbFxuICAgICAgICAgICAgaGlkZVRvZ2dsZVxuICAgICAgICAgICAgW2V4cGFuZGVkXT1cImN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSBEZWZhdWx0UGFuZWxzLkNBVEVHT1JJRVMgJiYgY3VycmVudFBhbmVsLmV4cGFuZGVkXCJcbiAgICAgICAgICAgIChvcGVuZWQpPVwiZXhwYW5kUGFuZWwoRGVmYXVsdFBhbmVscy5DQVRFR09SSUVTKVwiXG4gICAgICAgICAgICAoY2xvc2VkKT1cImNsb3NlUGFuZWwoRGVmYXVsdFBhbmVscy5DQVRFR09SSUVTKVwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW1ldGFkYXRhLXBhbmVsXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1jb250ZW50LW1ldGFkYXRhLWNhdGVnb3JpZXMtcGFuZWxcIj5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLW1ldGFkYXRhLXByb3BlcnRpZXMtaGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLW1ldGFkYXRhLXByb3BlcnRpZXMtaGVhZGVyLWV4cGFuZGVkXT1cImN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSBEZWZhdWx0UGFuZWxzLkNBVEVHT1JJRVMgJiYgY3VycmVudFBhbmVsLmV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgPGFkZi1jb250ZW50LW1ldGFkYXRhLWhlYWRlclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0NBVEVHT1JJRVNfTUFOQUdFTUVOVC5DQVRFR09SSUVTX1RJVExFJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtleHBhbmRlZF09XCJjdXJyZW50UGFuZWwucGFuZWxUaXRsZSA9PT0gRGVmYXVsdFBhbmVscy5DQVRFR09SSUVTICYmIGN1cnJlbnRQYW5lbC5leHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFyZWFkT25seSAmJiAhaXNQYW5lbEVkaXRpbmcoRGVmYXVsdFBhbmVscy5DQVRFR09SSUVTKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVHcm91cEVkaXRpbmcoRGVmYXVsdFBhbmVscy5DQVRFR09SSUVTLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIidDT1JFLk1FVEFEQVRBLkFDVElPTlMuRURJVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQ09SRS5NRVRBREFUQS5BQ0NFU1NJQklMSVRZLkVESVQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cIm1ldGEtZGF0YS1jYXRlZ29yaWVzLWVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2F0ZWdvcmllcy1idXR0b24gYWRmLWVkaXQtaWNvbi1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9kZV9lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1BhbmVsRWRpdGluZyhEZWZhdWx0UGFuZWxzLkNBVEVHT1JJRVMpXCIgY2xhc3M9XCJhZGYtbWV0YWRhdGEtYWN0aW9uLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCInQ09SRS5NRVRBREFUQS5BQ1RJT05TLkNBTkNFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxHcm91cEVkaXRpbmcoRGVmYXVsdFBhbmVscy5DQVRFR09SSUVTLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJyZXNldC1tZXRhZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtbWV0YWRhdGEtYWN0aW9uLWJ1dHRvbnMtY2xlYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ0NPUkUuTUVUQURBVEEuQUNUSU9OUy5TQVZFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVDaGFuZ2VzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwic2F2ZS1jYXRlZ29yaWVzLW1ldGFkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc01ldGFkYXRhQ2hhbmdlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVjazwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9hZGYtY29udGVudC1tZXRhZGF0YS1oZWFkZXI+XG4gICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSBEZWZhdWx0UGFuZWxzLkNBVEVHT1JJRVMgJiYgIWVkaXRpbmdcIj5cbiAgICAgICAgICAgICAgICA8cCAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllc1wiIGNsYXNzPVwiYWRmLW1ldGFkYXRhLWNhdGVnb3JpZXNcIj57eyBjYXRlZ29yeS5uYW1lIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0VtcHR5Q2F0ZWdvcnlNZXNzYWdlXCIgY2xhc3M9XCJhZGYtbWV0YWRhdGEtbm8taXRlbS1hZGRlZFwiPlxuICAgICAgICAgICAgICAgIHt7ICdDQVRFR09SSUVTX01BTkFHRU1FTlQuTk9fQ0FURUdPUklFU19BRERFRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGFkZi1jYXRlZ29yaWVzLW1hbmFnZW1lbnRcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFyZWFkT25seSAmJiBpc1BhbmVsRWRpdGluZyhEZWZhdWx0UGFuZWxzLkNBVEVHT1JJRVMpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1tZXRhZGF0YS1jYXRlZ29yaWVzLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgW2NhdGVnb3J5TmFtZUNvbnRyb2xWaXNpYmxlXT1cImVkaXRpbmdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlUmVtb3ZhbF09XCJzYXZpbmdcIlxuICAgICAgICAgICAgICAgIFtjYXRlZ29yaWVzXT1cImNhdGVnb3JpZXNcIlxuICAgICAgICAgICAgICAgIFttYW5hZ2VtZW50TW9kZV09XCJjYXRlZ29yaWVzTWFuYWdlbWVudE1vZGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzc2lmaWFibGVDaGFuZ2VkXT1cImNsYXNzaWZpYWJsZUNoYW5nZWRcIlxuICAgICAgICAgICAgICAgIChjYXRlZ29yaWVzQ2hhbmdlKT1cInN0b3JlQ2F0ZWdvcmllc1RvQXNzaWduKCRldmVudClcIiAvPlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbFxuICAgICAgICAqbmdGb3I9XCJsZXQgY3VzdG9tUGFuZWwgb2YgY3VzdG9tUGFuZWxzXCJcbiAgICAgICAgW2V4cGFuZGVkXT1cImN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSBjdXN0b21QYW5lbC5wYW5lbFRpdGxlICYmIGN1cnJlbnRQYW5lbC5leHBhbmRlZFwiXG4gICAgICAgIChvcGVuZWQpPVwiZXhwYW5kUGFuZWwoY3VzdG9tUGFuZWwucGFuZWxUaXRsZSlcIlxuICAgICAgICAoY2xvc2VkKT1cImNsb3NlUGFuZWwoY3VzdG9tUGFuZWwucGFuZWxUaXRsZSlcIlxuICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW1ldGFkYXRhLXBhbmVsXCJcbiAgICAgICAgaGlkZVRvZ2dsZT5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1tZXRhZGF0YS1wcm9wZXJ0aWVzLWhlYWRlclwiXG4gICAgICAgICAgICBbY2xhc3MuYWRmLW1ldGFkYXRhLXByb3BlcnRpZXMtaGVhZGVyLWV4cGFuZGVkXT1cImN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSBjdXN0b21QYW5lbC5wYW5lbFRpdGxlICYmIGN1cnJlbnRQYW5lbC5leHBhbmRlZFwiPlxuICAgICAgICAgICAgPGFkZi1jb250ZW50LW1ldGFkYXRhLWhlYWRlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLW1ldGFkYXRhLWN1c3RvbS1wYW5lbC10aXRsZVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImN1c3RvbVBhbmVsLnBhbmVsVGl0bGVcIlxuICAgICAgICAgICAgICAgIFtleHBhbmRlZF09XCJjdXJyZW50UGFuZWwucGFuZWxUaXRsZSA9PT0gY3VzdG9tUGFuZWwucGFuZWxUaXRsZSAmJiBjdXJyZW50UGFuZWwuZXhwYW5kZWRcIiAvPlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8YWRmLWR5bmFtaWMtY29tcG9uZW50IFtpZF09XCJjdXN0b21QYW5lbC5jb21wb25lbnRcIiBbZGF0YV09XCJ7IG5vZGUgfVwiIC8+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwZWRQcm9wZXJ0aWVzJCB8IGFzeW5jOyBlbHNlIGxvYWRpbmc7IGxldCBncm91cGVkUHJvcGVydGllc1wiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cGVkUHJvcGVydGllczsgbGV0IGZpcnN0ID0gZmlyc3RcIiBjbGFzcz1cImFkZi1tZXRhZGF0YS1ncm91cGVkLXByb3BlcnRpZXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbFxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLW1ldGFkYXRhLWdyb3VwLScgKyBncm91cC50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2V4cGFuZGVkXT1cIm11bHRpID8gIWRpc3BsYXlEZWZhdWx0UHJvcGVydGllcyAmJiBmaXJzdCB8fCBncm91cC5leHBhbmRlZCA6ICFkaXNwbGF5RGVmYXVsdFByb3BlcnRpZXMgJiYgZmlyc3QgfHwgY3VycmVudFBhbmVsLnBhbmVsVGl0bGUgPT09IGdyb3VwLnRpdGxlICYmIGN1cnJlbnRQYW5lbC5leHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgKG9wZW5lZCk9XCJleHBhbmRQYW5lbChncm91cC50aXRsZSk7IGdyb3VwLmV4cGFuZGVkID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgKGNsb3NlZCk9XCJjbG9zZVBhbmVsKGdyb3VwLnRpdGxlKTsgZ3JvdXAuZXhwYW5kZWQgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY29udGVudC1tZXRhZGF0YS1wYW5lbFwiXG4gICAgICAgICAgICAgICAgaGlkZVRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtbWV0YWRhdGEtcHJvcGVydGllcy1oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLW1ldGFkYXRhLXByb3BlcnRpZXMtaGVhZGVyLWV4cGFuZGVkXT1cImN1cnJlbnRQYW5lbC5wYW5lbFRpdGxlID09PSBncm91cC50aXRsZSAmJiBjdXJyZW50UGFuZWwuZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFkZi1jb250ZW50LW1ldGFkYXRhLWhlYWRlciBbdGl0bGVdPVwiZ3JvdXAudGl0bGVcIiBbZXhwYW5kZWRdPVwiY3VycmVudFBhbmVsLnBhbmVsVGl0bGUgPT09IGdyb3VwLnRpdGxlICYmIGN1cnJlbnRQYW5lbC5leHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXAuZWRpdGFibGUgJiYgIXRoaXMucmVhZE9ubHkgJiYgIWlzUGFuZWxFZGl0aW5nKGdyb3VwLnRpdGxlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ0NPUkUuTUVUQURBVEEuQUNUSU9OUy5FRElUJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQ09SRS5NRVRBREFUQS5BQ0NFU1NJQklMSVRZLkVESVQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJtZXRhLWRhdGEtY2FyZC10b2dnbGUtZWRpdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZWRpdC1pY29uLWJ1dHRvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVHcm91cEVkaXRpbmcoZ3JvdXAudGl0bGUsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9kZV9lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1tZXRhZGF0YS1hY3Rpb24tYnV0dG9uc1wiICpuZ0lmPVwiZ3JvdXAuZWRpdGFibGUgJiYgaXNQYW5lbEVkaXRpbmcoZ3JvdXAudGl0bGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ0NPUkUuTUVUQURBVEEuQUNUSU9OUy5DQU5DRUwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEdyb3VwRWRpdGluZyhncm91cC50aXRsZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cInJlc2V0LW1ldGFkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtbWV0YWRhdGEtYWN0aW9uLWJ1dHRvbnMtY2xlYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCInQ09SRS5NRVRBREFUQS5BQ1RJT05TLlNBVkUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVDaGFuZ2VzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJzYXZlLW1ldGFkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNNZXRhZGF0YUNoYW5nZWQgfHwgaW52YWxpZFByb3BlcnRpZXMuc2l6ZSA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2FkZi1jb250ZW50LW1ldGFkYXRhLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd0dyb3VwKGdyb3VwKSAmJiBncm91cC5lZGl0YWJsZSAmJiAhZWRpdGluZ1wiIGNsYXNzPVwiYWRmLW1ldGFkYXRhLW5vLWl0ZW0tYWRkZWRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ01FVEFEQVRBLkJBU0lDLk5PX0lURU1TX01FU1NBR0UnIHwgdHJhbnNsYXRlIDogeyBncm91cFRpdGxlOiBncm91cC50aXRsZSB8IHRyYW5zbGF0ZSB9IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGFkZi1jYXJkLXZpZXdcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwia2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZ3JvdXAucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCIhcmVhZE9ubHkgJiYgZ3JvdXAuZWRpdGFibGUgJiYgaXNQYW5lbEVkaXRpbmcoZ3JvdXAudGl0bGUpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlFbXB0eV09XCJkaXNwbGF5RW1wdHlcIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRvQ2xpcGJvYXJkQWN0aW9uXT1cImNvcHlUb0NsaXBib2FyZEFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFt1c2VDaGlwc0Zvck11bHRpVmFsdWVQcm9wZXJ0eV09XCJ1c2VDaGlwc0Zvck11bHRpVmFsdWVQcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgIFttdWx0aVZhbHVlU2VwYXJhdG9yXT1cIm11bHRpVmFsdWVTZXBhcmF0b3JcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheUxhYmVsRm9yQ2hpcHNdPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0RBVEFfTE9BRElORycgfCB0cmFuc2xhdGVcIiAvPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L21hdC1hY2NvcmRpb24+XG4iXX0=
|