nuxeo-development-framework 4.3.0 → 4.3.2
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/nuxeo-development-framework.umd.js +4364 -3036
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/components/charts/chart.const.js +3 -0
- package/esm2015/lib/components/charts/chart.token.js +3 -0
- package/esm2015/lib/components/charts/charts.module.js +19 -0
- package/esm2015/lib/components/charts/components/base-chart.component.js +44 -0
- package/esm2015/lib/components/charts/components/chart.component.js +135 -0
- package/esm2015/lib/components/charts/components/data-chart.component.js +169 -0
- package/esm2015/lib/components/charts/components/index.js +4 -0
- package/esm2015/lib/components/charts/defaults/bar.js +18 -0
- package/esm2015/lib/components/charts/defaults/doughnut.js +18 -0
- package/esm2015/lib/components/charts/defaults/index.js +5 -0
- package/esm2015/lib/components/charts/defaults/line.js +36 -0
- package/esm2015/lib/components/charts/defaults/pie.js +20 -0
- package/esm2015/lib/components/charts/index.js +10 -0
- package/esm2015/lib/components/charts/models/index.js +5 -0
- package/esm2015/lib/components/charts/models/options.js +2 -0
- package/esm2015/lib/components/charts/models/plugins-options.js +2 -0
- package/esm2015/lib/components/charts/models/response.js +2 -0
- package/esm2015/lib/components/charts/models/statistic-request-config.js +2 -0
- package/esm2015/lib/components/charts/plugins/doughnut-center-text.js +25 -0
- package/esm2015/lib/components/charts/plugins/doughnut-empty-state.js +34 -0
- package/esm2015/lib/components/charts/plugins/index.js +4 -0
- package/esm2015/lib/components/charts/plugins/legend-margin.js +16 -0
- package/esm2015/lib/components/charts/services/index.js +2 -0
- package/esm2015/lib/components/charts/services/statistic.service.js +75 -0
- package/esm2015/lib/components/charts/utility/colors.js +79 -0
- package/esm2015/lib/components/charts/utility/common.js +7 -0
- package/esm2015/lib/components/charts/utility/index.js +3 -0
- package/esm2015/lib/components/comments/comments.module.js +9 -5
- package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +30 -23
- package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +28 -34
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +22 -22
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +16 -18
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +6 -6
- package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +3 -2
- package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +33 -29
- package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +32 -24
- package/esm2015/lib/components/diagrams/components/connection-label.component.js +1 -1
- package/esm2015/lib/components/diagrams/directive/diagram.directive.js +2 -3
- package/esm2015/lib/components/diagrams/editor/customize.js +11 -14
- package/esm2015/lib/components/diagrams/editor/overrides/connection-path.transformers.js +21 -34
- package/esm2015/lib/components/diagrams/editor/path-plugin.js +11 -10
- package/esm2015/lib/components/diagrams/models/base-node.model.js +2 -1
- package/esm2015/lib/components/diagrams/models/connection.model.js +1 -1
- package/esm2015/lib/components/diagrams/types/common.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/diagram-config.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/node-definition.js +1 -1
- package/esm2015/lib/components/diagrams/utilities/random.js +9 -3
- package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +9 -11
- package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +45 -40
- package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +21 -17
- package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +98 -92
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +22 -10
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +8 -4
- package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +28 -29
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.js +16 -3
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.js +26 -18
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.js +2 -2
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.js +4 -2
- package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +13 -10
- package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +3 -3
- package/esm2015/lib/components/dynamic-table/dynamic-table/dynamic-table.component.js +68 -29
- package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +60 -42
- package/esm2015/lib/components/file-manger/components/copy/copy.component.js +66 -36
- package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +40 -13
- package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +238 -200
- package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +14 -12
- package/esm2015/lib/components/file-manger/components/delete/delete.component.js +49 -20
- package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +45 -43
- package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +63 -36
- package/esm2015/lib/components/file-manger/components/move/move.component.js +61 -31
- package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +81 -81
- package/esm2015/lib/components/file-manger/components/rename/rename.component.js +58 -30
- package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +99 -66
- package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +95 -75
- package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +15 -11
- package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +54 -23
- package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +24 -24
- package/esm2015/lib/components/file-manger/file-manager.abstract.js +266 -264
- package/esm2015/lib/components/file-manger/file-manger.module.js +39 -35
- package/esm2015/lib/components/filter/filter/filter.component.js +1 -1
- package/esm2015/lib/components/notifications/components/base-notifications.component.js +2 -16
- package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +3 -3
- package/esm2015/lib/components/notifications/components/notifications-button/notifications-button.component.js +24 -4
- package/esm2015/lib/components/notifications/containers/notifications-settings-container/notifications-settings-container.component.js +3 -2
- package/esm2015/lib/components/notifications/models/notification-message.mode.js +1 -1
- package/esm2015/lib/components/notifications/models/notifications-list-options.js +1 -1
- package/esm2015/lib/components/notifications/services/notifications.service.js +23 -17
- package/esm2015/lib/components/notifications/services/socket.service.js +13 -5
- package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +107 -90
- package/esm2015/lib/components/permissions/permissions/permissions.component.js +100 -57
- package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +36 -52
- package/esm2015/lib/components/permissions/permissions.module.js +23 -7
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +1 -1
- package/esm2015/lib/components/spell-checker-field/spell-checker-field.module.js +37 -0
- package/esm2015/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.js +88 -0
- package/esm2015/lib/components/table/dynamic-component.js +59 -0
- package/esm2015/lib/components/table/page-sizes-list/page-sizes-list.component.js +38 -0
- package/esm2015/lib/components/table/table/table.component.js +39 -21
- package/esm2015/lib/components/table/table.module.js +22 -18
- package/esm2015/lib/components/vocabulary/services/vocabulary-api.service.js +11 -6
- package/esm2015/lib/configuration/app-config.service.js +7 -6
- package/esm2015/lib/core/core.module.js +4 -2
- package/esm2015/lib/core/env/env-manager.js +9 -1
- package/esm2015/lib/core/services/callApi/call-api.service.js +23 -6
- package/esm2015/lib/shared/components/base/base-selector.component.js +1 -1
- package/esm2015/lib/shared/components/base/base.component.js +5 -5
- package/esm2015/lib/shared/components/nuxeo-dialog/confirmation/ndf-confirmation-dialog.component.js +1 -1
- package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.js +8 -4
- package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +11 -7
- package/esm2015/lib/shared/services/base/http-base.service.js +10 -19
- package/esm2015/lib/shared-services/dialog-mangment.service.js +66 -21
- package/esm2015/lib/shared-services/shared-docs.service.js +20 -26
- package/esm2015/public-api.js +8 -2
- package/fesm2015/nuxeo-development-framework.js +3560 -2282
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/components/charts/chart.const.d.ts +2 -0
- package/lib/components/charts/chart.token.d.ts +8 -0
- package/lib/components/charts/charts.module.d.ts +9 -0
- package/lib/components/charts/components/base-chart.component.d.ts +21 -0
- package/lib/components/charts/components/chart.component.d.ts +28 -0
- package/lib/components/charts/components/data-chart.component.d.ts +39 -0
- package/lib/components/charts/components/index.d.ts +3 -0
- package/lib/components/charts/defaults/bar.d.ts +2 -0
- package/lib/components/charts/defaults/doughnut.d.ts +2 -0
- package/lib/components/charts/defaults/index.d.ts +4 -0
- package/lib/components/charts/defaults/line.d.ts +2 -0
- package/lib/components/charts/defaults/pie.d.ts +2 -0
- package/lib/components/charts/index.d.ts +9 -0
- package/lib/components/charts/models/index.d.ts +4 -0
- package/lib/components/charts/models/options.d.ts +12 -0
- package/lib/components/charts/models/plugins-options.d.ts +18 -0
- package/lib/components/charts/models/response.d.ts +5 -0
- package/lib/components/charts/models/statistic-request-config.d.ts +30 -0
- package/lib/components/charts/plugins/doughnut-center-text.d.ts +2 -0
- package/lib/components/charts/plugins/doughnut-empty-state.d.ts +2 -0
- package/lib/components/charts/plugins/index.d.ts +3 -0
- package/lib/components/charts/plugins/legend-margin.d.ts +2 -0
- package/lib/components/charts/services/index.d.ts +1 -0
- package/lib/components/charts/services/statistic.service.d.ts +23 -0
- package/lib/components/charts/utility/colors.d.ts +11 -0
- package/lib/components/charts/utility/common.d.ts +4 -0
- package/lib/components/charts/utility/index.d.ts +2 -0
- package/lib/components/comments/comments.module.d.ts +2 -1
- package/lib/components/comments/components/comment-item/comment-item.component.d.ts +3 -1
- package/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.d.ts +8 -5
- package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +8 -8
- package/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.d.ts +5 -5
- package/lib/components/correspondence-relation/correspondence-relation.module.d.ts +3 -2
- package/lib/components/diagrams/editor/customize.d.ts +7 -7
- package/lib/components/diagrams/editor/overrides/connection-path.transformers.d.ts +2 -5
- package/lib/components/diagrams/models/base-node.model.d.ts +1 -1
- package/lib/components/diagrams/models/connection.model.d.ts +2 -1
- package/lib/components/diagrams/types/common.type.d.ts +4 -0
- package/lib/components/diagrams/types/diagram-config.type.d.ts +7 -7
- package/lib/components/diagrams/types/node-definition.d.ts +1 -0
- package/lib/components/diagrams/utilities/random.d.ts +1 -1
- package/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.d.ts +11 -10
- package/lib/components/dynamic-chart/dynamic-chart.module.d.ts +5 -6
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +6 -2
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.d.ts +2 -1
- package/lib/components/dynamic-form/components/department-form/department-form.component.d.ts +4 -4
- package/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.d.ts +5 -1
- package/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.d.ts +3 -1
- package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.d.ts +5 -1
- package/lib/components/dynamic-form/dynamic-form.module.d.ts +2 -1
- package/lib/components/dynamic-table/dynamic-table/dynamic-table.component.d.ts +29 -11
- package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +11 -5
- package/lib/components/file-manger/components/copy/copy.component.d.ts +11 -4
- package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +9 -4
- package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +13 -19
- package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +6 -4
- package/lib/components/file-manger/components/delete/delete.component.d.ts +11 -4
- package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +9 -11
- package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +11 -5
- package/lib/components/file-manger/components/move/move.component.d.ts +11 -4
- package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +12 -10
- package/lib/components/file-manger/components/rename/rename.component.d.ts +11 -5
- package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +9 -8
- package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +6 -7
- package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +4 -3
- package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +11 -4
- package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +9 -8
- package/lib/components/file-manger/file-manager.abstract.d.ts +24 -22
- package/lib/components/file-manger/file-manger.module.d.ts +2 -1
- package/lib/components/notifications/components/base-notifications.component.d.ts +2 -8
- package/lib/components/notifications/components/notification-item/notification-item.component.d.ts +1 -1
- package/lib/components/notifications/components/notifications-button/notifications-button.component.d.ts +4 -1
- package/lib/components/notifications/models/notification-message.mode.d.ts +1 -0
- package/lib/components/notifications/models/notifications-list-options.d.ts +4 -0
- package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +8 -6
- package/lib/components/permissions/permissions/permissions.component.d.ts +3 -1
- package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +3 -3
- package/lib/components/permissions/permissions.module.d.ts +2 -1
- package/lib/components/spell-checker-field/spell-checker-field.module.d.ts +10 -0
- package/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.d.ts +24 -0
- package/lib/components/table/dynamic-component.d.ts +20 -0
- package/lib/components/table/page-sizes-list/page-sizes-list.component.d.ts +15 -0
- package/lib/components/table/table/table.component.d.ts +15 -6
- package/lib/components/table/table.module.d.ts +14 -10
- package/lib/components/vocabulary/services/vocabulary-api.service.d.ts +2 -2
- package/lib/core/core.module.d.ts +1 -1
- package/lib/core/env/env-manager.d.ts +2 -0
- package/lib/core/services/callApi/call-api.service.d.ts +8 -1
- package/lib/shared/components/base/base-selector.component.d.ts +4 -4
- package/lib/shared/components/base/base.component.d.ts +5 -5
- package/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.d.ts +2 -1
- package/lib/shared/components/nuxeo-dialog/nuxeo.dialog.d.ts +2 -1
- package/lib/shared/services/base/http-base.service.d.ts +3 -1
- package/lib/shared-services/dialog-mangment.service.d.ts +5 -1
- package/lib/shared-services/shared-docs.service.d.ts +3 -1
- package/package.json +3 -4
- package/public-api.d.ts +7 -1
- package/esm2015/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.js +0 -164
- package/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.d.ts +0 -33
|
@@ -155,7 +155,6 @@ export class DynamicSearchComponent {
|
|
|
155
155
|
}
|
|
156
156
|
paginationChange(event) { }
|
|
157
157
|
getTableData(data) {
|
|
158
|
-
this.loading = false;
|
|
159
158
|
this.aggregations = Object.entries(data.aggregations || {}).map((item) => {
|
|
160
159
|
return item[1];
|
|
161
160
|
});
|
|
@@ -187,6 +186,7 @@ export class DynamicSearchComponent {
|
|
|
187
186
|
});
|
|
188
187
|
console.log('aggregations', this.aggregations);
|
|
189
188
|
this.totalRecords = data.totalSize;
|
|
189
|
+
this.loading = false;
|
|
190
190
|
}
|
|
191
191
|
submitForm() {
|
|
192
192
|
let params = {};
|
|
@@ -272,7 +272,7 @@ export class DynamicSearchComponent {
|
|
|
272
272
|
}
|
|
273
273
|
}
|
|
274
274
|
DynamicSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicSearchComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.EvaluatorsService }, { token: i3.NuxeoService }, { token: i4.GlobalAdminService }, { token: 'environment' }, { token: i5.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
|
|
275
|
-
DynamicSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DynamicSearchComponent, selector: "cts-dynamic-search", inputs: { columns: "columns", responsiveColumns: "responsiveColumns", entityType: "entityType", prefix: "prefix", headers: "headers", fields: "fields", pageProvider: "pageProvider", pageSize: "pageSize", sortingBy: "sortingBy", fullTextParamName: "fullTextParamName", filter: "filter", suggesterApi: "suggesterApi", onRowSelected: "onRowSelected", sortingArray: "sortingArray", customResponsiveStyle: "customResponsiveStyle", openCloseFilterFromOutside: "openCloseFilterFromOutside", theme: "theme" }, outputs: { actionOnRow: "actionOnRow" }, viewQueries: [{ propertyName: "dynamicTable", first: true, predicate: ["dynamicTable"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!customResponsiveStyle\">\r\n <div class=\"search-toolbar d-md-flex d-xl-none mx-3\">\r\n <button (click)=\"onOpenFilter()\" class=\"my-button\">\r\n <span> {{ \"FILTER\" | translate }}</span>\r\n <i class=\"bi bi-filter\" *ngIf=\"!openFilter\"></i>\r\n <i class=\"bi bi-x\" *ngIf=\"openFilter\"></i>\r\n </button>\r\n <div *ngIf=\"openFilter\">\r\n <i class=\"bi bi-caret-up-fill arrow-up\"></i>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"customResponsiveStyle\">\r\n <div class=\"customStyle -mt-12 px-8 flex flex-col\"\r\n [ngClass]=\"{'bg-accent-200': theme === 'dgda','bg-accent-100': theme === 'ksreleif' || theme === 'comptechco'}\"\r\n [@collapse]=\"!openFilter\">\r\n <!-- <form\r\n [formGroup]=\"searchForm\"\r\n class=\"search-form\"\r\n (ngSubmit)=\"submitForm()\"\r\n >\r\n <input\r\n class=\"search-input\"\r\n type=\"text\"\r\n formControlName=\"text\"\r\n [placeholder]=\"'search.search' | translate\"\r\n />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form> -->\r\n <div class=\"flex gap-x-18 flex-row mt-5 pb-3 overflow-x-auto\">\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <ng-container *ngIf=\"aggregations.length; else noAggregations\">\r\n <ng-container *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<div class=\"row wrapper\">\r\n <ng-container *ngIf=\"!customResponsiveStyle\">\r\n <div class=\"popup-filter px-3 d-flex d-xl-none\" *ngIf=\"openFilter\">\r\n <form [formGroup]=\"searchForm\" class=\"search-form\" (ngSubmit)=\"submitForm()\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete1\" [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form>\r\n <mat-autocomplete\r\n class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \"\r\n [disableRipple]=\"true\"\r\n #matAutocomplete1=\"matAutocomplete\"\r\n >\r\n <mat-option\r\n class=\"no-text\"\r\n *ngIf=\"resultSets && !resultSets.length\"\r\n >\r\n {{'no_result_found' | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span\r\n class=\"option-iner-text\"\r\n >{{ resultSet.label }}</span\r\n >\r\n </mat-option >\r\n </ng-container>\r\n </mat-autocomplete>\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <ng-container *ngIf=\"aggregations.length; else noAggregations\">\r\n <div *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"col-xl-3 search-sideMenu d-none d-xl-block\">\r\n <form [formGroup]=\"searchForm\" class=\"search-form\" (ngSubmit)=\"submitForm()\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete2\"\r\n [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form>\r\n <mat-autocomplete class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \" [disableRipple]=\"true\" #matAutocomplete2=\"matAutocomplete\">\r\n <mat-option class=\"no-text\" *ngIf=\"resultSets && !resultSets.length\">\r\n {{'no_result_found' | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span class=\"option-iner-text\">{{ resultSet.label }}</span>\r\n </mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <div *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"col-12 col-xl-9\">\r\n <app-card>\r\n <div class=\"title\">\r\n <h3>\r\n {{ \"search.header\" | translate }}\r\n </h3>\r\n </div>\r\n <div class=\"body\">\r\n <div *ngIf=\"aggregations\" class=\"table-toolbar\">\r\n <div class=\"result-count\">\r\n <span>\r\n {{\r\n \"search.\" + \"resultsNumber\"\r\n | translate: { value: totalRecords ? totalRecords : 0 }\r\n }}\r\n </span>\r\n </div>\r\n <div>\r\n <form class=\"d-flex justify-between\" [formGroup]=\"searchForm\" (ngSubmit)=\"submitForm()\">\r\n <div *ngIf=\"useToggleFilters && !customResponsiveStyle\"></div>\r\n <div *ngIf=\"customResponsiveStyle\">\r\n <div class=\"search-form custom-responsive-search\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete\"\r\n [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </div>\r\n <mat-autocomplete\r\n class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \"\r\n [disableRipple]=\"true\"\r\n #matAutocomplete=\"matAutocomplete\"\r\n >\r\n <mat-option\r\n class=\"no-text\"\r\n *ngIf=\"resultSets && !resultSets.length\"\r\n >\r\n {{no_result_found | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span\r\n class=\"option-iner-text\"\r\n >{{ resultSet.label }}</span\r\n >\r\n </mat-option >\r\n </ng-container>\r\n </mat-autocomplete>\r\n </div>\r\n <div class=\"d-flex\" *ngIf=\"useToggleFilters\">\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.PERSONAL_FILES'\"\r\n (onToggle)=\"submitForm()\" formControlName=\"personalFiles\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.DEP_FILES'\"\r\n formControlName=\"depFiles\" (onToggle)=\"submitForm()\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.WORKSPACE_FILES'\"\r\n formControlName=\"workSpaceFiles\" (onToggle)=\"submitForm()\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <cts-dynamic-table #dynamicTable [pageSize]=\"pageSize\" [columns]=\"columns\" [responsiveColumns]=\"responsiveColumns\"\r\n [pageProvider]=\"pageProvider\" [quickFilter]=\"filter\" [entityType]=\"entityType\" [fields]=\"fields\"\r\n [queryParam]=\"queryParams\" [headers]=\"headers\" [prefix]=\"prefix\" [sortingBy]=\"sortingBy\" [isSearchPage]=\"true\"\r\n (onRowSelected)=\"onRowSelected($event)\" (actionOnRow)=\"performAction($event)\"\r\n (onGettingData)=\"getTableData($event)\"></cts-dynamic-table>\r\n </div>\r\n </app-card>\r\n </div>\r\n\r\n <ng-template #progressSpinner>\r\n <div class=\"progress-spinner\">\r\n <mat-spinner color=\"warn\" [diameter]=\"25\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n <ng-template #noAggregations>\r\n <div class=\"progress-spinner\">\r\n {{ \"search.noAggregations\" | translate }}\r\n </div>\r\n </ng-template>\r\n</div>", styles: [".bi{margin:0!important}.memo-sorting-wrapper{width:265px;margin:0 10px;height:100%;display:flex}.memo-sorting-wrapper .sorting-direction{width:65px;height:40px;background-color:#465573;color:#fff;font-size:20px;display:flex;justify-content:center;align-items:center;cursor:pointer}.memo-sorting-wrapper .memo-sorting-trigger{width:calc(100% - 65px);height:100%;background-color:transparent;border:1px solid lightgrey;display:flex;justify-content:space-between;align-items:center;padding:0 15px;font-size:14px}.memo-sorting-wrapper .memo-sorting-trigger i{font-size:16px;color:gray}.memo-sorting-menu{width:200px}.my-button{border:1px solid #465573;color:#465573;border-radius:5px;background-color:transparent;font-weight:bold;min-width:80px;height:40px}.my-button.reset{border:none}.my-button:hover{color:#fff;background-color:#465573}.my-button:hover.reset{color:#465573;border:1px solid #465573;background-color:#fff}.app-property-value .app-input-wrapper label{color:#646f85;font-size:13px;margin-bottom:5px}.app-property-value .app-input-wrapper label .text-danger{font-size:16px;line-height:14px;margin:0 5px!important}.app-property-value .app-input-wrapper .form-control{border:1px solid #ccc;border-radius:5px;background-color:#8f98aa1a;height:40px}.app-property-value .app-input-wrapper .form-control:disabled{background-color:#e9ecef!important}.app-property-value .app-input-wrapper .form-control:focus{border:1px solid #1a96c6;box-shadow:0 0 4px #79c3c26b!important}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers{list-style:none;padding:0;margin:0;font-size:14px}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers .error{margin-top:5px}.autocomplete-container .input-container input:focus,hijri-gregorian-datepicker .form-group .input-group .form-control:focus,.ng-select.ng-select-focused .ng-select-container{border:1px solid #1a96c6!important;box-shadow:0 0 4px #79c3c26b!important}input::placeholder{font-size:12px}.form-control:focus{box-shadow:none!important}.mat-stepper-horizontal{margin-top:-25px}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header.cdk-program-focused{background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-icon-selected{background-color:transparent;color:#fff;background-image:linear-gradient(to right,#0dbab5,#1a96c6)}@media only screen and (max-width: 576px){.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-label .mat-step-text-label{white-space:pre-wrap;overflow:visible}}.mat-stepper-horizontal .mat-horizontal-content-container{overflow:visible}@media only screen and (max-width: 768px){.mat-stepper-horizontal .mat-horizontal-content-container{padding:0 0 24px}}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:after,.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:before{display:none}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:before{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);left:0}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);right:0}.form-wrapper{padding:30px 15px;border:1px solid #dde0e2}.form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.form-wrapper .buttons-wrapper button:hover{opacity:.7}.form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.form-wrapper .upload-wrapper button span{margin:0 10px}.renameFileComponent .form-wrapper{padding:30px 15px;border:none!important}.renameFileComponent .form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.renameFileComponent .form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.renameFileComponent .form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.renameFileComponent .form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.renameFileComponent .form-wrapper .buttons-wrapper button:hover{opacity:.7}.renameFileComponent .form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.renameFileComponent .form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.renameFileComponent .form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.renameFileComponent .form-wrapper .upload-wrapper button span{margin:0 10px}.my-dynamic-viewer{display:flex;align-items:center;font-size:12px;min-height:30px}.my-dynamic-viewer .my-label{font-size:12px;font-weight:500;width:150px;word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-label{width:50%}}.my-dynamic-viewer .my-value{width:calc(100% - 150px);word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-value{width:50%}}.my-dynamic-viewer .direction-img{font-size:14px}.my-dynamic-viewer .direction-img .incoming{display:none}.my-dynamic-viewer .direction-img .outgoing{display:none}.my-dynamic-viewer .direction-img .internal{display:none}.my-dynamic-viewer.draft .my-value{color:#596973}.my-dynamic-viewer.inProgress .my-value{color:#3c3cf0}.my-dynamic-viewer.registered .my-value{color:#4f008c}.my-dynamic-viewer.archived .my-value{color:#fbb62c}.my-dynamic-viewer.closed .my-value{color:#00dca5}.my-dynamic-viewer.approved .my-value{color:#06a57e}.my-dynamic-viewer.assigned .my-value{color:#fd6670}.my-dynamic-viewer.sent .my-value{color:#3c3cf0}.my-dynamic-viewer.published .my-value{color:#00dca5}.my-dynamic-viewer.Outgoing .my-value{display:flex}.my-dynamic-viewer.Outgoing .my-value .direction-img .outgoing{color:#fbb62c;margin:1px 5px;display:flex}.my-dynamic-viewer.Outgoing .my-value .text{margin:0 5px}.my-dynamic-viewer.Internal .my-value{display:flex}.my-dynamic-viewer.Internal .my-value .direction-img .internal{color:#3c3cf0;margin:1px 5px;display:flex}.my-dynamic-viewer.Internal .my-value .text{margin:0 5px}.my-dynamic-viewer.Incoming .my-value{display:flex}.my-dynamic-viewer.Incoming .my-value .direction-img .incoming{color:#00dca5;display:flex}.my-dynamic-viewer.Incoming .my-value .text{margin:-3px 5px 0}.my-dynamic-viewer.vertical{display:block}.my-dynamic-viewer.vertical .my-label{width:auto}.my-dynamic-viewer.vertical .my-value{width:auto}.my-dynamic-viewer.with-out-label{width:100%!important}.result-count{color:#8f98aa;font-size:14px}.search-sideMenu{background-color:#fff;padding-top:22px;padding-bottom:22px;border-radius:5px}.auto-complete-iner-wrapper{max-height:350px;border-radius:4px}.auto-complete-iner-wrapper .no-text{font-size:14px;color:#465573}.auto-complete-iner-wrapper .mat-option{text-align:start;color:#465573;font-weight:bold;font-size:14px}.auto-complete-iner-wrapper .mat-option .mat-option-text{text-align:flex-start}.search-form{display:flex;color:#6a768e;width:100%}.search-form .search-input{width:100%;border:1px solid #d9dce2;border-inline-end:0;border-start-start-radius:5px;border-end-start-radius:5px;border:1px solid #ccc;height:32px;font-size:16px;padding-inline-start:4px}.search-form .search-input::-webkit-input-placeholder{font-size:14px}.search-form .search-input:focus-visible{border:2px solid #465573;outline:transparent}.search-form .search-icon{background:#465573;color:#fff;width:12%;display:flex;align-items:center;justify-content:center;border-radius:0;cursor:pointer;border:1px solid #d9dce2;border-start-end-radius:6px;border-end-end-radius:6px;border-inline-start:0}.small-font{font-size:14px}.custom-responsive-search{width:300px!important;margin:0 35px}.search-toolbar{position:relative;display:flex;justify-content:flex-end;margin-bottom:16px}.search-toolbar .my-button{width:90px}.search-toolbar .arrow-up{position:absolute;top:26px;right:28px;font-size:25px;color:#8f98aab3}.wrapper{position:relative}.wrapper .popup-filter{flex-direction:column;position:absolute;right:0;z-index:9999;max-height:70vh;max-width:400px;background-color:#fff;overflow:scroll;box-shadow:0 1px 10px 2px #00000054;top:-4px;border-radius:5px}.wrapper .popup-filter .search-form{margin-top:10px!important}.wrapper .popup-filter .search-input{width:100%!important}.wrapper .search-container{background-color:#fff;border-radius:5px;border:0px;padding:16px;height:max-content}.wrapper .search-container .table-toolbar{display:flex;align-items:center;margin-bottom:8px;justify-content:space-between}.progress-spinner{margin-top:10px;margin-block-end:0;display:grid;place-items:center;width:100%}.rtl .popup-filter{left:0px;right:unset!important}.rtl .arrow-up{position:absolute;top:33px;left:28px;right:unset!important}@media (width: 1180px),(width: 820px){.customStyle cts-dynamic-filter .aggregation-container{width:176px!important}}.customStyle .search-form{display:flex;color:#6a768e;width:100%}.customStyle .search-form .search-input{width:288px;border:1px solid #d9dce2;border-inline-end:0;border-start-start-radius:5px;border-end-start-radius:5px;border:1px solid #ccc;height:32px;font-size:16px;padding-inline-start:4px}.customStyle .search-form .search-input::-webkit-input-placeholder{font-size:14px}.customStyle .search-form .search-input:focus-visible{border:2px solid #465573;outline:transparent}.customStyle .search-form .search-icon{background:#465573;color:#fff;width:40px;display:flex;align-items:center;justify-content:center;border-radius:0;cursor:pointer;border:1px solid #d9dce2;border-start-end-radius:6px;border-end-end-radius:6px;border-inline-start:0}\n"], components: [{ type: i6.DynamicFilterComponent, selector: "cts-dynamic-filter", inputs: ["title", "filters", "selections", "id", "entityType", "prefix", "department", "componentType", "customPageProvider", "config"], outputs: ["onFilterSelected"] }, { type: i7.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i9.CardComponent, selector: "app-card", inputs: ["noBody", "dark"] }, { type: i10.DynamicFormSlideToggleitemComponent, selector: "cts-dynamic-form-slide-toggleitem", inputs: ["label", "disabled", "checked", "theme"], outputs: ["onToggle"] }, { type: i11.DynamicTableComponent, selector: "cts-dynamic-table", inputs: ["columns", "responsiveColumns", "entityType", "prefix", "headers", "fields", "pageProvider", "pageSize", "sortingBy", "queryParam", "quickFilter", "report", "rowCursor", "fullWidth", "tableMode", "tableActions", "defultSort", "range", "isSearchPage", "multiSelectRows", "customFirstRow", "highlightSelectedCard", "showActionsAsMenu", "filterParams", "format"], outputs: ["onRowSelected", "onRowIndexSelected", "actionOnRow", "onGettingData", "onMultiRowSelected", "onLoading"] }, { type: i12.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i14.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i14.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i15.TranslatePipe }, animations: [
|
|
275
|
+
DynamicSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DynamicSearchComponent, selector: "cts-dynamic-search", inputs: { columns: "columns", responsiveColumns: "responsiveColumns", entityType: "entityType", prefix: "prefix", headers: "headers", fields: "fields", pageProvider: "pageProvider", pageSize: "pageSize", sortingBy: "sortingBy", fullTextParamName: "fullTextParamName", filter: "filter", suggesterApi: "suggesterApi", onRowSelected: "onRowSelected", sortingArray: "sortingArray", customResponsiveStyle: "customResponsiveStyle", openCloseFilterFromOutside: "openCloseFilterFromOutside", theme: "theme" }, outputs: { actionOnRow: "actionOnRow" }, viewQueries: [{ propertyName: "dynamicTable", first: true, predicate: ["dynamicTable"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!customResponsiveStyle\">\r\n <div class=\"search-toolbar d-md-flex d-xl-none mx-3\">\r\n <button (click)=\"onOpenFilter()\" class=\"my-button\">\r\n <span> {{ \"FILTER\" | translate }}</span>\r\n <i class=\"bi bi-filter\" *ngIf=\"!openFilter\"></i>\r\n <i class=\"bi bi-x\" *ngIf=\"openFilter\"></i>\r\n </button>\r\n <div *ngIf=\"openFilter\">\r\n <i class=\"bi bi-caret-up-fill arrow-up\"></i>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"customResponsiveStyle\">\r\n <div class=\"customStyle -mt-12 px-8 flex flex-col\"\r\n [ngClass]=\"{'bg-accent-200': theme === 'dgda','bg-accent-100': theme === 'ksreleif' || theme === 'comptechco'}\"\r\n [@collapse]=\"!openFilter\">\r\n <!-- <form\r\n [formGroup]=\"searchForm\"\r\n class=\"search-form\"\r\n (ngSubmit)=\"submitForm()\"\r\n >\r\n <input\r\n class=\"search-input\"\r\n type=\"text\"\r\n formControlName=\"text\"\r\n [placeholder]=\"'search.search' | translate\"\r\n />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form> -->\r\n <div class=\"flex gap-x-18 flex-row mt-5 pb-3 overflow-x-auto\">\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <ng-container *ngIf=\"aggregations.length; else noAggregations\">\r\n <ng-container *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<div class=\"row wrapper\">\r\n <div class=\"wrapper-overlay\" *ngIf=\"loading\"></div>\r\n \r\n <ng-container *ngIf=\"!customResponsiveStyle\">\r\n <div class=\"popup-filter px-3 d-flex d-xl-none\" *ngIf=\"openFilter\">\r\n <form [formGroup]=\"searchForm\" class=\"search-form\" (ngSubmit)=\"submitForm()\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete1\" [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form>\r\n <mat-autocomplete\r\n class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \"\r\n [disableRipple]=\"true\"\r\n #matAutocomplete1=\"matAutocomplete\"\r\n >\r\n <mat-option\r\n class=\"no-text\"\r\n *ngIf=\"resultSets && !resultSets.length\"\r\n >\r\n {{'no_result_found' | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span\r\n class=\"option-iner-text\"\r\n >{{ resultSet.label }}</span\r\n >\r\n </mat-option >\r\n </ng-container>\r\n </mat-autocomplete>\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <ng-container *ngIf=\"aggregations.length; else noAggregations\">\r\n <div *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"col-xl-3 search-sideMenu d-none d-xl-block\">\r\n <form [formGroup]=\"searchForm\" class=\"search-form\" (ngSubmit)=\"submitForm()\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete2\"\r\n [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form>\r\n <mat-autocomplete class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \" [disableRipple]=\"true\" #matAutocomplete2=\"matAutocomplete\">\r\n <mat-option class=\"no-text\" *ngIf=\"resultSets && !resultSets.length\">\r\n {{'no_result_found' | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span class=\"option-iner-text\">{{ resultSet.label }}</span>\r\n </mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <div *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"col-12 col-xl-9\">\r\n <app-card>\r\n <div class=\"title\">\r\n <h3>\r\n {{ \"search.header\" | translate }}\r\n </h3>\r\n </div>\r\n <div class=\"body\">\r\n <div *ngIf=\"aggregations\" class=\"table-toolbar\">\r\n <div class=\"result-count\">\r\n <span>\r\n {{\r\n \"search.\" + \"resultsNumber\"\r\n | translate: { value: totalRecords ? totalRecords : 0 }\r\n }}\r\n </span>\r\n </div>\r\n <div>\r\n <form class=\"d-flex justify-between\" [formGroup]=\"searchForm\" (ngSubmit)=\"submitForm()\">\r\n <div *ngIf=\"useToggleFilters && !customResponsiveStyle\"></div>\r\n <div *ngIf=\"customResponsiveStyle\">\r\n <div class=\"search-form custom-responsive-search\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete\"\r\n [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </div>\r\n <mat-autocomplete\r\n class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \"\r\n [disableRipple]=\"true\"\r\n #matAutocomplete=\"matAutocomplete\"\r\n >\r\n <mat-option\r\n class=\"no-text\"\r\n *ngIf=\"resultSets && !resultSets.length\"\r\n >\r\n {{no_result_found | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span\r\n class=\"option-iner-text\"\r\n >{{ resultSet.label }}</span\r\n >\r\n </mat-option >\r\n </ng-container>\r\n </mat-autocomplete>\r\n </div>\r\n <div class=\"d-flex\" *ngIf=\"useToggleFilters\">\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.PERSONAL_FILES'\"\r\n (onToggle)=\"submitForm()\" formControlName=\"personalFiles\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.DEP_FILES'\"\r\n formControlName=\"depFiles\" (onToggle)=\"submitForm()\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.WORKSPACE_FILES'\"\r\n formControlName=\"workSpaceFiles\" (onToggle)=\"submitForm()\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <cts-dynamic-table #dynamicTable [pageSize]=\"pageSize\" [columns]=\"columns\" [responsiveColumns]=\"responsiveColumns\"\r\n [pageProvider]=\"pageProvider\" [quickFilter]=\"filter\" [entityType]=\"entityType\" [fields]=\"fields\"\r\n [queryParam]=\"queryParams\" [headers]=\"headers\" [prefix]=\"prefix\" [sortingBy]=\"sortingBy\" [isSearchPage]=\"true\"\r\n (onRowSelected)=\"onRowSelected($event)\" (actionOnRow)=\"performAction($event)\"\r\n (onGettingData)=\"getTableData($event)\"></cts-dynamic-table>\r\n </div>\r\n </app-card>\r\n </div>\r\n\r\n <ng-template #progressSpinner>\r\n <div class=\"progress-spinner\">\r\n <mat-spinner color=\"warn\" [diameter]=\"25\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n <ng-template #noAggregations>\r\n <div class=\"progress-spinner\">\r\n {{ \"search.noAggregations\" | translate }}\r\n </div>\r\n </ng-template>\r\n</div>", styles: [".bi{margin:0!important}.memo-sorting-wrapper{width:265px;margin:0 10px;height:100%;display:flex}.memo-sorting-wrapper .sorting-direction{width:65px;height:40px;background-color:#465573;color:#fff;font-size:20px;display:flex;justify-content:center;align-items:center;cursor:pointer}.memo-sorting-wrapper .memo-sorting-trigger{width:calc(100% - 65px);height:100%;background-color:transparent;border:1px solid lightgrey;display:flex;justify-content:space-between;align-items:center;padding:0 15px;font-size:14px}.memo-sorting-wrapper .memo-sorting-trigger i{font-size:16px;color:gray}.memo-sorting-menu{width:200px}.my-button{border:1px solid #465573;color:#465573;border-radius:5px;background-color:transparent;font-weight:bold;min-width:80px;height:40px}.my-button.reset{border:none}.my-button:hover{color:#fff;background-color:#465573}.my-button:hover.reset{color:#465573;border:1px solid #465573;background-color:#fff}.app-property-value .app-input-wrapper label{color:#646f85;font-size:13px;margin-bottom:5px}.app-property-value .app-input-wrapper label .text-danger{font-size:16px;line-height:14px;margin:0 5px!important}.app-property-value .app-input-wrapper .form-control{border:1px solid #ccc;border-radius:5px;background-color:#8f98aa1a;height:40px}.app-property-value .app-input-wrapper .form-control:disabled{background-color:#e9ecef!important}.app-property-value .app-input-wrapper .form-control:focus{border:1px solid #1a96c6;box-shadow:0 0 4px #79c3c26b!important}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers{list-style:none;padding:0;margin:0;font-size:14px}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers .error{margin-top:5px}.autocomplete-container .input-container input:focus,hijri-gregorian-datepicker .form-group .input-group .form-control:focus,.ng-select.ng-select-focused .ng-select-container{border:1px solid #1a96c6!important;box-shadow:0 0 4px #79c3c26b!important}input::placeholder{font-size:12px}.form-control:focus{box-shadow:none!important}.mat-stepper-horizontal{margin-top:-25px}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header.cdk-program-focused{background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-icon-selected{background-color:transparent;color:#fff;background-image:linear-gradient(to right,#0dbab5,#1a96c6)}@media only screen and (max-width: 576px){.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-label .mat-step-text-label{white-space:pre-wrap;overflow:visible}}.mat-stepper-horizontal .mat-horizontal-content-container{overflow:visible}@media only screen and (max-width: 768px){.mat-stepper-horizontal .mat-horizontal-content-container{padding:0 0 24px}}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:after,.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:before{display:none}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:before{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);left:0}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);right:0}.form-wrapper{padding:30px 15px;border:1px solid #dde0e2}.form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.form-wrapper .buttons-wrapper button:hover{opacity:.7}.form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.form-wrapper .upload-wrapper button span{margin:0 10px}.renameFileComponent .form-wrapper{padding:30px 15px;border:none!important}.renameFileComponent .form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.renameFileComponent .form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.renameFileComponent .form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.renameFileComponent .form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.renameFileComponent .form-wrapper .buttons-wrapper button:hover{opacity:.7}.renameFileComponent .form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.renameFileComponent .form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.renameFileComponent .form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.renameFileComponent .form-wrapper .upload-wrapper button span{margin:0 10px}.my-dynamic-viewer{display:flex;align-items:center;font-size:12px;min-height:30px}.my-dynamic-viewer .my-label{font-size:12px;font-weight:500;width:150px;word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-label{width:50%}}.my-dynamic-viewer .my-value{width:calc(100% - 150px);word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-value{width:50%}}.my-dynamic-viewer .direction-img{font-size:14px}.my-dynamic-viewer .direction-img .incoming{display:none}.my-dynamic-viewer .direction-img .outgoing{display:none}.my-dynamic-viewer .direction-img .internal{display:none}.my-dynamic-viewer.draft .my-value{color:#596973}.my-dynamic-viewer.inProgress .my-value{color:#3c3cf0}.my-dynamic-viewer.registered .my-value{color:#4f008c}.my-dynamic-viewer.archived .my-value{color:#fbb62c}.my-dynamic-viewer.closed .my-value{color:#00dca5}.my-dynamic-viewer.approved .my-value{color:#06a57e}.my-dynamic-viewer.assigned .my-value{color:#fd6670}.my-dynamic-viewer.sent .my-value{color:#3c3cf0}.my-dynamic-viewer.published .my-value{color:#00dca5}.my-dynamic-viewer.Outgoing .my-value{display:flex}.my-dynamic-viewer.Outgoing .my-value .direction-img .outgoing{color:#fbb62c;margin:1px 5px;display:flex}.my-dynamic-viewer.Outgoing .my-value .text{margin:0 5px}.my-dynamic-viewer.Internal .my-value{display:flex}.my-dynamic-viewer.Internal .my-value .direction-img .internal{color:#3c3cf0;margin:1px 5px;display:flex}.my-dynamic-viewer.Internal .my-value .text{margin:0 5px}.my-dynamic-viewer.Incoming .my-value{display:flex}.my-dynamic-viewer.Incoming .my-value .direction-img .incoming{color:#00dca5;display:flex}.my-dynamic-viewer.Incoming .my-value .text{margin:-3px 5px 0}.my-dynamic-viewer.vertical{display:block}.my-dynamic-viewer.vertical .my-label{width:auto}.my-dynamic-viewer.vertical .my-value{width:auto}.my-dynamic-viewer.with-out-label{width:100%!important}.result-count{color:#8f98aa;font-size:14px}.search-sideMenu{background-color:#fff;padding-top:22px;padding-bottom:22px;border-radius:5px}.auto-complete-iner-wrapper{max-height:350px;border-radius:4px}.auto-complete-iner-wrapper .no-text{font-size:14px;color:#465573}.auto-complete-iner-wrapper .mat-option{text-align:start;color:#465573;font-weight:bold;font-size:14px}.auto-complete-iner-wrapper .mat-option .mat-option-text{text-align:flex-start}.search-form{display:flex;color:#6a768e;width:100%}.search-form .search-input{width:100%;border:1px solid #d9dce2;border-inline-end:0;border-start-start-radius:5px;border-end-start-radius:5px;border:1px solid #ccc;height:32px;font-size:16px;padding-inline-start:4px}.search-form .search-input::-webkit-input-placeholder{font-size:14px}.search-form .search-input:focus-visible{border:2px solid #465573;outline:transparent}.search-form .search-icon{background:#465573;color:#fff;width:12%;display:flex;align-items:center;justify-content:center;border-radius:0;cursor:pointer;border:1px solid #d9dce2;border-start-end-radius:6px;border-end-end-radius:6px;border-inline-start:0}.small-font{font-size:14px}.custom-responsive-search{width:300px!important;margin:0 35px}.search-toolbar{position:relative;display:flex;justify-content:flex-end;margin-bottom:16px}.search-toolbar .my-button{width:90px}.search-toolbar .arrow-up{position:absolute;top:26px;right:28px;font-size:25px;color:#8f98aab3}.wrapper{position:relative}.wrapper .popup-filter{flex-direction:column;position:absolute;right:0;z-index:9999;max-height:70vh;max-width:400px;background-color:#fff;overflow:scroll;box-shadow:0 1px 10px 2px #00000054;top:-4px;border-radius:5px}.wrapper .popup-filter .search-form{margin-top:10px!important}.wrapper .popup-filter .search-input{width:100%!important}.wrapper .search-container{background-color:#fff;border-radius:5px;border:0px;padding:16px;height:max-content}.wrapper .search-container .table-toolbar{display:flex;align-items:center;margin-bottom:8px;justify-content:space-between}.wrapper .wrapper-overlay{position:absolute;top:0;bottom:0;right:0;left:0;z-index:9}.progress-spinner{margin-top:10px;margin-block-end:0;display:grid;place-items:center;width:100%}.rtl .popup-filter{left:0px;right:unset!important}.rtl .arrow-up{position:absolute;top:33px;left:28px;right:unset!important}@media (width: 1180px),(width: 820px){.customStyle cts-dynamic-filter .aggregation-container{width:176px!important}}.customStyle .search-form{display:flex;color:#6a768e;width:100%}.customStyle .search-form .search-input{width:288px;border:1px solid #d9dce2;border-inline-end:0;border-start-start-radius:5px;border-end-start-radius:5px;border:1px solid #ccc;height:32px;font-size:16px;padding-inline-start:4px}.customStyle .search-form .search-input::-webkit-input-placeholder{font-size:14px}.customStyle .search-form .search-input:focus-visible{border:2px solid #465573;outline:transparent}.customStyle .search-form .search-icon{background:#465573;color:#fff;width:40px;display:flex;align-items:center;justify-content:center;border-radius:0;cursor:pointer;border:1px solid #d9dce2;border-start-end-radius:6px;border-end-end-radius:6px;border-inline-start:0}\n"], components: [{ type: i6.DynamicFilterComponent, selector: "cts-dynamic-filter", inputs: ["title", "filters", "selections", "id", "entityType", "prefix", "department", "componentType", "customPageProvider", "config"], outputs: ["onFilterSelected"] }, { type: i7.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i9.CardComponent, selector: "app-card", inputs: ["noBody", "dark"] }, { type: i10.DynamicFormSlideToggleitemComponent, selector: "cts-dynamic-form-slide-toggleitem", inputs: ["label", "disabled", "checked", "theme"], outputs: ["onToggle"] }, { type: i11.DynamicTableComponent, selector: "cts-dynamic-table", inputs: ["columns", "responsiveColumns", "entityType", "prefix", "headers", "fields", "pageProvider", "pageSize", "sortingBy", "queryParam", "customFilters", "quickFilter", "report", "rowCursor", "fullWidth", "tableMode", "componentName", "tableActions", "defultSort", "range", "isSearchPage", "multiSelectRows", "customFirstRow", "highlightSelectedCard", "showActionsAsMenu", "filterParams", "skipAggregation", "customUrl", "format", "pageSizes"], outputs: ["onRowSelected", "onRowIndexSelected", "actionOnRow", "onGettingData", "onMultiRowSelected", "onLoading", "onLoad"] }, { type: i12.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i14.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i14.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i15.TranslatePipe }, animations: [
|
|
276
276
|
trigger('collapse', [
|
|
277
277
|
state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),
|
|
278
278
|
state('true', style({ height: '0', visibility: 'hidden' })),
|
|
@@ -339,4 +339,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
339
339
|
}], theme: [{
|
|
340
340
|
type: Input
|
|
341
341
|
}] } });
|
|
342
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9keW5hbWljLXNlYXJjaC9keW5hbWljLXNlYXJjaC9keW5hbWljLXNlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtc2VhcmNoL2R5bmFtaWMtc2VhcmNoL2R5bmFtaWMtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQTRCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0ksT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFlSCxNQUFNLE9BQU8sc0JBQXNCO0lBMERqQyxZQUNVLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxnQkFBb0MsRUFDcEMsWUFBMkIsRUFDM0Isa0JBQXVDLEVBQ2hCLFdBQVcsRUFDbkMs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LENBQUM7NEJBQzNELFVBQVUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUN6QyxVQUFVLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzt5QkFDMUMsQ0FBQztxQkFDSDtvQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7OzBCQWlFSSxNQUFNOzJCQUFDLGFBQWE7NkVBN0RJLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFFaEIsT0FBTztzQkFBZixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFTixhQUFhO3NCQURaLEtBQUs7Z0JBT0ksV0FBVztzQkFBcEIsTUFBTTtnQkFhUCxZQUFZO3NCQURYLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBJbmplY3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgYW5pbWF0ZSwgQVVUT19TVFlMRSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IEV2YWx1YXRvcnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3Blcm1pc3Npb25zL2V2YWx1YXRvcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOdXhlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL251eGVvL251eGVvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxBZG1pblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZ2xvYmFsLWFkbWluLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIER5bmFtaWMgc2VhcmNoIGNvbXBvbmVudCB1c2VzIFtEeW5hbWljIFRhYmxlXXtAbGluayBEeW5hbWljVGFibGVDb21wb25lbnR9ICYgW0R5bmFtaWMgRmlsdGVyXXtAbGluayBEeW5hbWljRmlsdGVyQ29tcG9uZW50fSBpbnRlcm5hbGx5LFxyXG4gKiBhbmQgdXRpbGl6ZXMgaXRzIGlucHV0cyB0byBwZXJmb3JtIGFkdmFuY2VkIHNlYXJjaCBhbmQgZmlsdGVyaW5nIG9uIGFueSBudXhlbyBQcm92aWRlclxyXG4gKiBAdGl0bGVcclxuICogRHluYW1pYyBTZWFyY2hcclxuICpcclxuICogQGV4YW1wbGVcclxuICogPGN0cy1keW5hbWljLXNlYXJjaFxyXG4gKiAgIFtwYWdlUHJvdmlkZXJdPVwiJ3BhZ2VQcm92aWRlck5hbWUnXCJcclxuICogICBbY29sdW1uc109XCJjb2x1bW5zQXJyYXlcIlxyXG4gKiAgIFtyZXNwb25zaXZlQ29sdW1uc109XCJyZXNwb25zaXZlQ29sdW1uc0FycmF5XCJcclxuICogICBbZW50aXR5VHlwZV09XCInZG9jdW1lbnRzJ1wiXHJcbiAqICAgW3ByZWZpeF09XCJwcmVmaXhcIlxyXG4gKiAgIFtmaWVsZHNdPVwiZmllbGRzXCJcclxuICogICBbaGVhZGVyc109XCJoZWFkZXJzXCJcclxuICogICBbc29ydGluZ0J5XT1cInNvcnRpbmdCeVwiXHJcbiAqICAgW3BhZ2VTaXplXT1cIlBhZ2VTaXplXCJcclxuKiAgICBbY3VzdG9tUmVzcG9uc2l2ZVN0eWxlXT1cImZhbHNlIG9yIHRydWVcIlxyXG4gICAgIFtvcGVuQ2xvc2VGaWx0ZXJGcm9tT3V0c2lkZV09XCJwYXNzIEZpbHRlciBzdGF0ZSBmcm9tIHBhcmVudCBjb21wb25lbnRcIlxyXG4gICAgIFt0aGVtZV0gPSBcInRvICBzZXQgYmFja2dyb3VuZCBkZXBlbmVkIG9uIHRoZW1lXCJcclxuICogPlxyXG4gKiA8L2N0cy1keW5hbWljLXNlYXJjaD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY3RzLWR5bmFtaWMtc2VhcmNoJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignY29sbGFwc2UnLCBbXHJcbiAgICAgIHN0YXRlKCdmYWxzZScsIHN0eWxlKHsgaGVpZ2h0OiBBVVRPX1NUWUxFLCB2aXNpYmlsaXR5OiBBVVRPX1NUWUxFIH0pKSxcclxuICAgICAgc3RhdGUoJ3RydWUnLCBzdHlsZSh7IGhlaWdodDogJzAnLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ2ZhbHNlID0+IHRydWUnLCBhbmltYXRlKDMwMCkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCd0cnVlID0+IGZhbHNlJywgYW5pbWF0ZSgzMDApKVxyXG4gICAgXSlcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsT25DaGFuZ2VzIHtcclxuICB0ZXh0OiBzdHJpbmc7XHJcbiAgYWdncmVnYXRpb25zO1xyXG4gIEBWaWV3Q2hpbGQoJ2R5bmFtaWNUYWJsZScpIGR5bmFtaWNUYWJsZSA6IER5bmFtaWNUYWJsZUNvbXBvbmVudDtcclxuICAvKiogQXJyYXkgb2YgY29sdW1ucyAqL1xyXG4gIEBJbnB1dCgpIGNvbHVtbnM7XHJcbiAgLyoqIEFycmF5IG9mIGNvbHVtbnMgb24gc21hbGxlciBzY3JlZW5zICovXHJcbiAgQElucHV0KCkgcmVzcG9uc2l2ZUNvbHVtbnM/O1xyXG4gIC8qKiBEZWZpbmVzIHRoZSBwYWdlIGluIHdoaWNoIHRhYmxlIGlzIGJlaW5nIHVzZWQgKi9cclxuICBASW5wdXQoKSBlbnRpdHlUeXBlOiBzdHJpbmc7XHJcbiAgLyoqIFRyYW5zbGF0aW9ucyBwcmVmaXggKi9cclxuICBASW5wdXQoKSBwcmVmaXggPSAnJztcclxuICAvKiogSGVhZGVycyB0byBiZSBzZW50IHdpdGggQVBJIFJlcXVlc3QgKi9cclxuICBASW5wdXQoKSBoZWFkZXJzO1xyXG4gIC8qKiBGaWVsZHMga2V5bWFwIHRvIGJlIG1hcHBlZCBpbiB0aGUgYWRhcHRlciAqL1xyXG4gIEBJbnB1dCgpIGZpZWxkcztcclxuICAvKiogUGFnZSBQcm92aWRlciBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJldHJpZXZlIGRhdGEgKi9cclxuICBASW5wdXQoKSBwYWdlUHJvdmlkZXI7XHJcbiAgLyoqIENvbnRyb2xzIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZSBpbiB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplO1xyXG4gIC8qKiBTb3J0aW5nIGNvbHVtbiAqL1xyXG4gIEBJbnB1dCgpIHNvcnRpbmdCeT89IHt9O1xyXG4gIEBJbnB1dCgpIGZ1bGxUZXh0UGFyYW1OYW1lID0gJ3N5c3RlbV9mdWxsdGV4dCc7XHJcbiAgQElucHV0KCkgZmlsdGVyOyAvLyB1c2VkIHRvIHBhc3MgcGFyYW1zIGZyb20gb3V0c2lkZSB0byBwYXJhbXMgb2YgZHluYW1pYyB0YWJsZSBkaXJlY3RseVxyXG5cclxuICBASW5wdXQoKSBzdWdnZXN0ZXJBcGk7IC8vIGFwaSB0byBiZSB1c2VkIGluIHRoZSBzdWdnZXN0ZXIgaW5wdXQgaWYgc2VudCB3aWxsIHVzZWQgaXQgaWYgbm90IHdpbGwgdXNlIHRoZSBkZWZ1bHQgb25jZVxyXG4gIEBJbnB1dCgpIFxyXG4gIG9uUm93U2VsZWN0ZWQgPSAocm93KSA9PiB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbeyBvdXRsZXRzOiB7IHZpZXdlcjogWyd2aWV3Jywgcm93Wyd1aWQnXV0gfSB9XSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyBsb2NhdGlvbjogdGhpcy5yb3V0ZXIudXJsIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqIHVzZWQgdG8gZW1pdCBhbnkgYWN0aW9ucyB0byBvdXRzaWRlICovXHJcbiAgQE91dHB1dCgpIGFjdGlvbk9uUm93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHF1ZXJ5UGFyYW1zID0ge307XHJcbiAgZmlsdGVycztcclxuICBzZWFyY2hGb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICB0ZXh0OiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICBwZXJzb25hbEZpbGVzIDogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcclxuICAgIGRlcEZpbGVzIDogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcclxuICAgIHdvcmtTcGFjZUZpbGVzIDogbmV3IEZvcm1Db250cm9sKGZhbHNlKVxyXG4gIH0pO1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICB0b3RhbFJlY29yZHM7XHJcbiAgb3BlbkZpbHRlcjogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIHNvcnRpbmdBcnJheTtcclxuICBASW5wdXQoKSBjdXN0b21SZXNwb25zaXZlU3R5bGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBvcGVuQ2xvc2VGaWx0ZXJGcm9tT3V0c2lkZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRoZW1lIDphbnk7XHJcbiAgdXNlVG9nZ2xlRmlsdGVycztcclxuXHJcbiAgcXVpY2tGaWx0ZXJzID0gJyc7XHJcbiAgc2F2ZWRQZXJzRmlsdGVyVmFsdWUgPSBudWxsO1xyXG4gIHNhdmVkRGVwRmlsdGVyVmFsdWUgPSBudWxsO1xyXG4gIHNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUgPSBudWxsO1xyXG5cclxuICByZXN1bHRTZXRzID0gW107XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGV2YWx1YXRvclNlcnZpY2UgOiBFdmFsdWF0b3JzU2VydmljZSxcclxuICAgIHByaXZhdGUgbnV4ZW9TZXJ2aWNlIDogTnV4ZW9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnbG9iYWxBZG1pblNlcnZpY2UgOiBHbG9iYWxBZG1pblNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQsXHJcbiAgICBwdWJsaWMgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXJcclxuICApIHsgXHJcbiAgICB0aGlzLmV2YWx1YXRvclNlcnZpY2UuZXZhbHVhdGVSdWxlKCdlbmFibGVTZWFyY2hUb2dnbGVzJyAsIHt9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMudXNlVG9nZ2xlRmlsdGVycyA9IHJlcztcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZihjaGFuZ2VzLm9wZW5DbG9zZUZpbHRlckZyb21PdXRzaWRlKSB7XHJcbiAgICAgIHRoaXMub3BlbkZpbHRlciA9IGNoYW5nZXMub3BlbkNsb3NlRmlsdGVyRnJvbU91dHNpZGUuY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBcclxuICAgIHRoaXMudXBkYXRlUXVlcnlQYXJhbXModGhpcy5jb25zdHJ1Y3RQYXJhbXNGdW5jdGlvbih0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKSk7XHJcbiAgICB0aGlzLnNlYXJjaElucHV0UG9wdWxhdGUoKTtcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICh0aGlzLnRleHQgIT09IHBhcmFtc1snc2VhcmNoX3F1ZXJ5J10gJiYgcGFyYW1zWydzZWFyY2hfcXVlcnknXSkgfHxcclxuICAgICAgICAocGFyYW1zWydzZWFyY2hfcXVlcnknXT8ubGVuZ3RoID09IDAgJiYgdGhpcy50ZXh0ICE9PSBwYXJhbXNbJ3NlYXJjaF9xdWVyeSddIHx8IFxyXG4gICAgICAgICh0aGlzLnVzZVRvZ2dsZUZpbHRlcnMgJiYgdGhpcy5xdWlja0ZpbHRlcnMgIT09IHBhcmFtc1sncXVpY2tGaWx0ZXJzJ10pKSBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVRdWVyeVBhcmFtcyh0aGlzLmNvbnN0cnVjdFBhcmFtc0Z1bmN0aW9uKHBhcmFtcykpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRQb3B1bGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYnJlYWtwb2ludCgpO1xyXG4gICAgXHJcbiAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RleHQnKS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgIGRlYm91bmNlVGltZSg1MDApKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5zZWFyY2gocmVzKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTZXRzID0gcmVzdWx0cztcclxuICAgICAgfSlcclxuICAgfSlcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFBhcmFtc0Z1bmN0aW9uKHBhcmFtcyl7XHJcbiAgICBsZXQgY29udHJ1Y3RlZFBhcm1zID0ge307XHJcbiAgICB0aGlzLnRleHQgPSBwYXJhbXNbJ3NlYXJjaF9xdWVyeSddO1xyXG4gICAgaWYodGhpcy50ZXh0ICYmIHRoaXMudGV4dC50cmltKCkpe1xyXG4gICAgICBpZih0aGlzLnVzZVRvZ2dsZUZpbHRlcnMpe1xyXG4gICAgICAgIGlmKHBhcmFtc1sncXVpY2tGaWx0ZXJzJ10pe1xyXG4gICAgICAgICAgdGhpcy5xdWlja0ZpbHRlcnMgPSBwYXJhbXNbJ3F1aWNrRmlsdGVycyddIDtcclxuICAgICAgICAgIGNvbnRydWN0ZWRQYXJtcyA9IHsgW3RoaXMuZnVsbFRleHRQYXJhbU5hbWVdIDogdGhpcy50ZXh0KycqJyAsIHF1aWNrRmlsdGVycyA6IHRoaXMucXVpY2tGaWx0ZXJzfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5xdWlja0ZpbHRlcnMgPSAnJztcclxuICAgICAgICAgIGNvbnRydWN0ZWRQYXJtcyA9IHsgW3RoaXMuZnVsbFRleHRQYXJhbU5hbWVdIDogdGhpcy50ZXh0KycqJyAsIHF1aWNrRmlsdGVycyA6ICcnfVxyXG4gICAgICAgIH1cclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgY29udHJ1Y3RlZFBhcm1zID0geyBbdGhpcy5mdWxsVGV4dFBhcmFtTmFtZV0gOiB0aGlzLnRleHQrJyonfVxyXG4gICAgICB9XHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29udHJ1Y3RlZFBhcm1zID0geyBbdGhpcy5mdWxsVGV4dFBhcmFtTmFtZV0gOiBudWxsfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb250cnVjdGVkUGFybXM7XHJcbiAgfVxyXG4gIHVwZGF0ZVF1ZXJ5UGFyYW1zKG5ld1F1ZXJ5cGFyYW1zOiBvYmplY3QpIHtcclxuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB7XHJcbiAgICAgIC4uLnRoaXMucXVlcnlQYXJhbXMsXHJcbiAgICAgIC4uLm5ld1F1ZXJ5cGFyYW1zLFxyXG4gICAgfTtcclxuICB9XHJcbiAgXHJcbiAgc2VhcmNoSW5wdXRQb3B1bGF0ZSgpIHtcclxuICAgIGlmKHRoaXMudXNlVG9nZ2xlRmlsdGVycyl7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXHJcbiAgICAgICAgcGVyc29uYWxGaWxlcyA6ICh0aGlzLnF1aWNrRmlsdGVycyA9PT0gJ3BlcnNvbmFsRmlsdGVyJyApID8gdHJ1ZSA6ICh0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICE9PSBudWxsKSA/IHRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgOiBmYWxzZSxcclxuICAgICAgICBkZXBGaWxlcyA6ICh0aGlzLnF1aWNrRmlsdGVycyA9PT0gJ2RlcGFydG1lbnRGaWx0ZXInKSA/IHRydWUgOiAodGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICE9PSBudWxsKSA/IHRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSA6IGZhbHNlICxcclxuICAgICAgICB3b3JrU3BhY2VGaWxlcyA6ICh0aGlzLnF1aWNrRmlsdGVycyA9PT0gJ2RlcGFydG1lbnRXb3JrU3BhY2VGaWx0ZXInKSA/IHRydWUgOiAodGhpcy5zYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlICE9PSBudWxsKSA/IHRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSA6IGZhbHNlIFxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIHRleHQ6IHRoaXMudGV4dCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBGaWx0ZXJTZWxlY3RlZCh2YWw6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZmlsdGVycyA9IHsgLi4udGhpcy5maWx0ZXJzLCAuLi52YWwuZmlsdGVyIH07IC8vc3RvcmUgZmlsdGVyc1xyXG4gICAgdGhpcy51cGRhdGVRdWVyeVBhcmFtcyh0aGlzLmZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgcGFnaW5hdGlvbkNoYW5nZShldmVudCkgeyB9XHJcblxyXG4gIGdldFRhYmxlRGF0YShkYXRhKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuYWdncmVnYXRpb25zID0gT2JqZWN0LmVudHJpZXMoZGF0YS5hZ2dyZWdhdGlvbnMgfHwge30pLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbVsxXTtcclxuICAgIH0pO1xyXG4gICAgLy8gdGhpcy5hZ2dyZWdhdGlvbnMgPSB0aGlzLmFnZ3JlZ2F0aW9ucy5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAvLyAgIHRoaXMuc29ydGluZ0FycmF5LmluY2x1ZGVzKGl0ZW0uaWQpXHJcbiAgICAvLyApO1xyXG4gICAgbGV0IHVwZGF0ZWRBZ2dyZWdhdGlvbiA9IFtdO1xyXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnMubWFwKGFnZ3JlZyA9PiB7XHJcbiAgICAgIHRoaXMuc29ydGluZ0FycmF5Lm1hcChzb3J0VHlwZSA9PiB7XHJcbiAgICAgICAgaWYoc29ydFR5cGUuaWQgPT09IGFnZ3JlZy5pZCl7XHJcbiAgICAgICAgICBhZ2dyZWdbJ2NvbXBvbmVudFR5cGUnXSA9IHNvcnRUeXBlLmNvbXBvZW5lbnRUeXBlO1xyXG4gICAgICAgICAgLy8gaW4gY2FzZSBvZiBjdXN0b20gY29tcG9uZW50IG5lZWQgdG8gY2FsbCBwYWdlIHByb3ZpZGVyIHRvIGdldCBkYXRhIFxyXG4gICAgICAgICAgaWYoc29ydFR5cGUuY29tcG9lbmVudFR5cGUgPT09ICdjdXN0b20tcHAnIHx8IHNvcnRUeXBlLmNvbXBvZW5lbnRUeXBlID09PSAnY3VzdG9tLWRvY3VtZW50JyB8fCBzb3J0VHlwZS5jb21wb2VuZW50VHlwZSA9PT0gJ2N1c3RvbS1kZXBhcnRtZW50Jyl7XHJcbiAgICAgICAgICAgIGFnZ3JlZ1snY3VzdG9tUGFnZVByb3ZpZGVyJ10gPSBzb3J0VHlwZS5wYWdlUHJvdmlkZXIsXHJcbiAgICAgICAgICAgIGFnZ3JlZ1snY29uZmlnJ10gPSBzb3J0VHlwZS5jb25maWdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHVwZGF0ZWRBZ2dyZWdhdGlvbi5wdXNoKGFnZ3JlZylcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnMgPSBfLnNvcnRCeSh1cGRhdGVkQWdncmVnYXRpb24sIChpdGVtKSA9PiB7XHJcbiAgICAgIGxldCBpID0gLTE7XHJcbiAgICAgICB0aGlzLnNvcnRpbmdBcnJheS5tYXAoKHNvcnRUeXBlICwgaW5kZXgpID0+IHtcclxuICAgICAgICAgaWYoc29ydFR5cGUuaWQgPT09IGl0ZW0uaWQpe1xyXG4gICAgICAgICAgIGkgPSBpbmRleDtcclxuICAgICAgICAgfVxyXG4gICAgICAgfSk7XHJcbiAgICAgICByZXR1cm4gaTtcclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2coJ2FnZ3JlZ2F0aW9ucycsIHRoaXMuYWdncmVnYXRpb25zKTtcclxuICAgIHRoaXMudG90YWxSZWNvcmRzID0gZGF0YS50b3RhbFNpemU7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRGb3JtKCkge1xyXG4gICAgbGV0IHBhcmFtcyA9IHt9IDtcclxuICAgIGlmKHRoaXMudXNlVG9nZ2xlRmlsdGVycyl7XHJcbiAgICAgIHBhcmFtcyA9IHtcclxuICAgICAgICBzZWFyY2hfcXVlcnk6IHRoaXMuc2VhcmNoRm9ybS5jb250cm9scy50ZXh0LnZhbHVlLFxyXG4gICAgICAgIHF1aWNrRmlsdGVycyA6IHRoaXMuZ2V0VG9nZ2xlRmlsdGVycygpXHJcbiAgICAgIH1cclxuICAgIH1lbHNle1xyXG4gICAgICBwYXJhbXMgPSB7XHJcbiAgICAgICAgc2VhcmNoX3F1ZXJ5OiB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMudGV4dC52YWx1ZSxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJ10sIHtcclxuICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgcXVlcnlQYXJhbXM6IHBhcmFtcyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG9nZ2xlRmlsdGVycygpIHtcclxuICAgIHRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS5jb250cm9scy5kZXBGaWxlcy52YWx1ZTtcclxuICAgIHRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMucGVyc29uYWxGaWxlcy52YWx1ZTtcclxuICAgIHRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS5jb250cm9scy53b3JrU3BhY2VGaWxlcy52YWx1ZTtcclxuICAgIGlmICgodGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgJiYgdGhpcy5zYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlKVxyXG4gICAgICB8fCAoIXRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiAhdGhpcy5zYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiAhdGhpcy5zYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBcInBlcnNvbmFsRmlsdGVyXCI7XHJcblxyXG4gICAgfSBlbHNlIGlmICghdGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gXCJkZXBhcnRtZW50RmlsdGVyXCI7XHJcblxyXG4gICAgfSBlbHNlIGlmICghdGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZSAmJiAhdGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICYmIHRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gXCJkZXBhcnRtZW50V29ya1NwYWNlRmlsdGVyXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICYmIHRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiAhdGhpcy5zYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBcImRlcGFydG1lbnRQZXJzb25hbEZpbHRlclwiO1xyXG5cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIFwicGVyc29uYWxEZXBhcnRtZW50V29ya1NwYWNlRmlsdGVyXCI7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoIXRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgdGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICYmIHRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gXCJkZXB0RGVwYXRtZW50V29ya1NwYWNlRmlsdGVyXCI7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0T3B0aW9uVmFsdWUoc2VhcmNoZWRUZXh0KXtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RleHQnKS5zZXRWYWx1ZShzZWFyY2hlZFRleHQpO1xyXG4gICAgdGhpcy5zdWJtaXRGb3JtKCk7XHJcbiAgfVxyXG4gIG9uT3BlbkZpbHRlcigpIHtcclxuICAgIHRoaXMub3BlbkZpbHRlciA9ICF0aGlzLm9wZW5GaWx0ZXI7XHJcbiAgfVxyXG5cclxuICBicmVha3BvaW50KCkge1xyXG4gICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXJcclxuICAgICAgLm9ic2VydmUoWycobWluLXdpZHRoOiAxMjAwcHgpJ10pXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQubWF0Y2hlcykge1xyXG4gICAgICAgICAgdGhpcy5vcGVuRmlsdGVyID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHBlcmZvcm1BY3Rpb24oYWN0aW9uKXtcclxuICAgIHRoaXMuYWN0aW9uT25Sb3cuZW1pdChhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgcGFyYW1zPSB7XHJcbiAgICAgIHNlYXJjaFRlcm06IHRlcm1cclxuICAgIH1cclxuICAgIGlmKHRoaXMuZ2xvYmFsQWRtaW5TZXJ2aWNlLmlzR2xvYmFsQWRtaW4pe1xyXG4gICAgICBwYXJhbXNbJ3BhdGgnXSA9ICcvJyArIHRoaXMuZ2xvYmFsQWRtaW5TZXJ2aWNlLmFjdGl2ZVRlbmFudCArICcvJ1xyXG4gICAgfWVsc2UgaWYoIXRoaXMuZ2xvYmFsQWRtaW5TZXJ2aWNlLmlzR2xvYmFsQWRtaW4gJiYgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQudXNlci5wcm9wZXJ0aWVzLnRlbmFudElkKXtcclxuICAgICAgcGFyYW1zWydwYXRoJ10gPSAnLycgKyB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMudGVuYW50SWQgKyAnLydcclxuICAgIH1cclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50XHJcbiAgICAgICAgICAgIC5vcGVyYXRpb24oKHRoaXMuc3VnZ2VzdGVyQXBpID8gdGhpcy5zdWdnZXN0ZXJBcGkgOiAnU2VhcmNoLkN1c3RvbVN1Z2dlc3RlcnNMYXVuY2hlcicpLCB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZW52aXJvbm1lbnQubnV4ZW99JHt0aGlzLmVudmlyb25tZW50LmN1c3RvbUF1dG9tYXRpb259YCxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBhcmFtcyh7XHJcbiAgICAgICAgICAgICAgICAuLi5wYXJhbXNcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNvbnRleHQoe30pXHJcbiAgICAgICAgICAgIC5leGVjdXRlKClcclxuICAgICk7XHJcbn1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbVJlc3BvbnNpdmVTdHlsZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtdG9vbGJhciBkLW1kLWZsZXggZC14bC1ub25lIG14LTNcIj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cIm9uT3BlbkZpbHRlcigpXCIgY2xhc3M9XCJteS1idXR0b25cIj5cclxuICAgICAgPHNwYW4+IHt7IFwiRklMVEVSXCIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgIDxpIGNsYXNzPVwiYmkgYmktZmlsdGVyXCIgKm5nSWY9XCIhb3BlbkZpbHRlclwiPjwvaT5cclxuICAgICAgPGkgY2xhc3M9XCJiaSBiaS14XCIgKm5nSWY9XCJvcGVuRmlsdGVyXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8ZGl2ICpuZ0lmPVwib3BlbkZpbHRlclwiPlxyXG4gICAgICA8aSBjbGFzcz1cImJpIGJpLWNhcmV0LXVwLWZpbGwgYXJyb3ctdXBcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tUmVzcG9uc2l2ZVN0eWxlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImN1c3RvbVN0eWxlIC1tdC0xMiBweC04IGZsZXggZmxleC1jb2xcIlxyXG4gICAgW25nQ2xhc3NdPVwieydiZy1hY2NlbnQtMjAwJzogdGhlbWUgPT09ICdkZ2RhJywnYmctYWNjZW50LTEwMCc6IHRoZW1lID09PSAna3NyZWxlaWYnIHx8IHRoZW1lID09PSAnY29tcHRlY2hjbyd9XCJcclxuICAgIFtAY29sbGFwc2VdPVwiIW9wZW5GaWx0ZXJcIj5cclxuICAgIDwhLS0gPGZvcm1cclxuICAgICAgICBbZm9ybUdyb3VwXT1cInNlYXJjaEZvcm1cIlxyXG4gICAgICAgIGNsYXNzPVwic2VhcmNoLWZvcm1cIlxyXG4gICAgICAgIChuZ1N1Ym1pdCk9XCJzdWJtaXRGb3JtKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXHJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0ZXh0XCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VhcmNoLnNlYXJjaCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCIgY2xhc3M9XCJzZWFyY2gtaWNvbiBiaSBiaS1zZWFyY2hcIj48L2Rpdj5cclxuICAgICAgPC9mb3JtPiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC14LTE4IGZsZXgtcm93IG10LTUgcGItMyBvdmVyZmxvdy14LWF1dG9cIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0aW9uczsgZWxzZSBwcm9ncmVzc1NwaW5uZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRpb25zLmxlbmd0aDsgZWxzZSBub0FnZ3JlZ2F0aW9uc1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWdncmVnYXRpb24gb2YgYWdncmVnYXRpb25zXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbi5idWNrZXRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICA8Y3RzLWR5bmFtaWMtZmlsdGVyIFtlbnRpdHlUeXBlXT1cImVudGl0eVR5cGVcIiBbZmlsdGVyc109XCJhZ2dyZWdhdGlvbi5idWNrZXRzXCIgW2lkXT1cImFnZ3JlZ2F0aW9uLmlkXCJcclxuICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25zXT1cImFnZ3JlZ2F0aW9uLnNlbGVjdGlvblwiIFt0aXRsZV09XCJhZ2dyZWdhdGlvbi5maWVsZFwiIFtwcmVmaXhdPVwiJ3NlYXJjaCdcIiBbZGVwYXJ0bWVudF09XCJcclxuICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbi5maWVsZCA9PT0gJ2NvcnI6dG8nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRpb24uZmllbGQgPT09ICdjb3JyOmZyb20nXHJcbiAgICAgICAgICAgICAgICAgIFwiIFtjb21wb25lbnRUeXBlXT1cImFnZ3JlZ2F0aW9uLmNvbXBvbmVudFR5cGUgPyBhZ2dyZWdhdGlvbi5jb21wb25lbnRUeXBlIDogJ2RlZnVsdCdcIlxyXG4gICAgICAgICAgICAgICAgW2N1c3RvbVBhZ2VQcm92aWRlcl09XCJhZ2dyZWdhdGlvbi5jdXN0b21QYWdlUHJvdmlkZXIgPyBhZ2dyZWdhdGlvbi5jdXN0b21QYWdlUHJvdmlkZXIgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cImFnZ3JlZ2F0aW9uLmNvbmZpZyA/IGFnZ3JlZ2F0aW9uLmNvbmZpZyA6IHt9XCIgKG9uRmlsdGVyU2VsZWN0ZWQpPVwiRmlsdGVyU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZmlsdGVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxkaXYgY2xhc3M9XCJyb3cgd3JhcHBlclwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY3VzdG9tUmVzcG9uc2l2ZVN0eWxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZmlsdGVyIHB4LTMgZC1mbGV4IGQteGwtbm9uZVwiICpuZ0lmPVwib3BlbkZpbHRlclwiPlxyXG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInNlYXJjaEZvcm1cIiBjbGFzcz1cInNlYXJjaC1mb3JtXCIgKG5nU3VibWl0KT1cInN1Ym1pdEZvcm0oKVwiPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidGV4dFwiIFttYXRBdXRvY29tcGxldGVdPVwibWF0QXV0b2NvbXBsZXRlMVwiIFtwbGFjZWhvbGRlcl09XCInc2VhcmNoLnNlYXJjaCcgfCB0cmFuc2xhdGVcIiAvPlxyXG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInN1Ym1pdEZvcm0oKVwiIGNsYXNzPVwic2VhcmNoLWljb24gYmkgYmktc2VhcmNoXCI+PC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgICAgPG1hdC1hdXRvY29tcGxldGVcclxuICAgICAgY2xhc3M9XCJcclxuICAgICAgICAgYXV0by1jb21wbGV0ZS1pbmVyLXdyYXBwZXJcclxuICAgICAgICAgIGF1dG8tY29tcGxldGUtd3JhcHBlclxyXG4gICAgICBcIlxyXG4gICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcclxuICAgICAgI21hdEF1dG9jb21wbGV0ZTE9XCJtYXRBdXRvY29tcGxldGVcIlxyXG4gID5cclxuICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgIGNsYXNzPVwibm8tdGV4dFwiXHJcbiAgICAgICAgICAqbmdJZj1cInJlc3VsdFNldHMgJiYgIXJlc3VsdFNldHMubGVuZ3RoXCJcclxuICAgICAgPlxyXG4gICAgICAgICAge3snbm9fcmVzdWx0X2ZvdW5kJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVzdWx0U2V0IG9mIHJlc3VsdFNldHNcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICAoY2xpY2spPVwic2V0T3B0aW9uVmFsdWUocmVzdWx0U2V0LmxhYmVsKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLWluZXItdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgID57eyByZXN1bHRTZXQubGFiZWwgfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24gPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRpb25zOyBlbHNlIHByb2dyZXNzU3Bpbm5lclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbnMubGVuZ3RoOyBlbHNlIG5vQWdncmVnYXRpb25zXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhZ2dyZWdhdGlvbiBvZiBhZ2dyZWdhdGlvbnNcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0aW9uLmJ1Y2tldHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgIDxjdHMtZHluYW1pYy1maWx0ZXIgW2VudGl0eVR5cGVdPVwiZW50aXR5VHlwZVwiIFtmaWx0ZXJzXT1cImFnZ3JlZ2F0aW9uLmJ1Y2tldHNcIiBbaWRdPVwiYWdncmVnYXRpb24uaWRcIlxyXG4gICAgICAgICAgICAgICAgW3NlbGVjdGlvbnNdPVwiYWdncmVnYXRpb24uc2VsZWN0aW9uXCIgW3RpdGxlXT1cImFnZ3JlZ2F0aW9uLmZpZWxkXCIgW3ByZWZpeF09XCInc2VhcmNoJ1wiIFtkZXBhcnRtZW50XT1cIlxyXG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb24uZmllbGQgPT09ICdjb3JyOnRvJyB8fFxyXG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb24uZmllbGQgPT09ICdjb3JyOmZyb20nXHJcbiAgICAgICAgICAgICAgXCIgW2NvbXBvbmVudFR5cGVdPVwiYWdncmVnYXRpb24uY29tcG9uZW50VHlwZSA/IGFnZ3JlZ2F0aW9uLmNvbXBvbmVudFR5cGUgOiAnZGVmdWx0J1wiXHJcbiAgICAgICAgICAgICAgICBbY3VzdG9tUGFnZVByb3ZpZGVyXT1cImFnZ3JlZ2F0aW9uLmN1c3RvbVBhZ2VQcm92aWRlciA/IGFnZ3JlZ2F0aW9uLmN1c3RvbVBhZ2VQcm92aWRlciA6ICcnXCJcclxuICAgICAgICAgICAgICAgIFtjb25maWddPVwiYWdncmVnYXRpb24uY29uZmlnID8gYWdncmVnYXRpb24uY29uZmlnIDoge31cIiAob25GaWx0ZXJTZWxlY3RlZCk9XCJGaWx0ZXJTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9jdHMtZHluYW1pYy1maWx0ZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb2wteGwtMyBzZWFyY2gtc2lkZU1lbnUgZC1ub25lIGQteGwtYmxvY2tcIj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybVwiIGNsYXNzPVwic2VhcmNoLWZvcm1cIiAobmdTdWJtaXQpPVwic3VibWl0Rm9ybSgpXCI+XHJcbiAgICAgIDxpbnB1dCBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidGV4dFwiIFttYXRBdXRvY29tcGxldGVdPVwibWF0QXV0b2NvbXBsZXRlMlwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2guc2VhcmNoJyB8IHRyYW5zbGF0ZVwiIC8+XHJcbiAgICAgIDxkaXYgKGNsaWNrKT1cInN1Ym1pdEZvcm0oKVwiIGNsYXNzPVwic2VhcmNoLWljb24gYmkgYmktc2VhcmNoXCI+PC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgICA8bWF0LWF1dG9jb21wbGV0ZSBjbGFzcz1cIlxyXG4gICAgICAgYXV0by1jb21wbGV0ZS1pbmVyLXdyYXBwZXJcclxuICAgICAgICBhdXRvLWNvbXBsZXRlLXdyYXBwZXJcclxuICAgIFwiIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIiAjbWF0QXV0b2NvbXBsZXRlMj1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cIm5vLXRleHRcIiAqbmdJZj1cInJlc3VsdFNldHMgJiYgIXJlc3VsdFNldHMubGVuZ3RoXCI+XHJcbiAgICAgICAge3snbm9fcmVzdWx0X2ZvdW5kJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVzdWx0U2V0IG9mIHJlc3VsdFNldHNcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAoY2xpY2spPVwic2V0T3B0aW9uVmFsdWUocmVzdWx0U2V0LmxhYmVsKVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb24taW5lci10ZXh0XCI+e3sgcmVzdWx0U2V0LmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRpb25zOyBlbHNlIHByb2dyZXNzU3Bpbm5lclwiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhZ2dyZWdhdGlvbiBvZiBhZ2dyZWdhdGlvbnNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRpb24uYnVja2V0cy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICA8Y3RzLWR5bmFtaWMtZmlsdGVyIFtlbnRpdHlUeXBlXT1cImVudGl0eVR5cGVcIiBbZmlsdGVyc109XCJhZ2dyZWdhdGlvbi5idWNrZXRzXCIgW2lkXT1cImFnZ3JlZ2F0aW9uLmlkXCJcclxuICAgICAgICAgICAgW3NlbGVjdGlvbnNdPVwiYWdncmVnYXRpb24uc2VsZWN0aW9uXCIgW3RpdGxlXT1cImFnZ3JlZ2F0aW9uLmZpZWxkXCIgW3ByZWZpeF09XCInc2VhcmNoJ1wiIFtkZXBhcnRtZW50XT1cIlxyXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uLmZpZWxkID09PSAnY29ycjp0bycgfHxcclxuICAgICAgICAgICAgICBhZ2dyZWdhdGlvbi5maWVsZCA9PT0gJ2NvcnI6ZnJvbSdcclxuICAgICAgICAgICAgXCIgW2NvbXBvbmVudFR5cGVdPVwiYWdncmVnYXRpb24uY29tcG9uZW50VHlwZSA/IGFnZ3JlZ2F0aW9uLmNvbXBvbmVudFR5cGUgOiAnZGVmdWx0J1wiXHJcbiAgICAgICAgICAgIFtjdXN0b21QYWdlUHJvdmlkZXJdPVwiYWdncmVnYXRpb24uY3VzdG9tUGFnZVByb3ZpZGVyID8gYWdncmVnYXRpb24uY3VzdG9tUGFnZVByb3ZpZGVyIDogJydcIlxyXG4gICAgICAgICAgICBbY29uZmlnXT1cImFnZ3JlZ2F0aW9uLmNvbmZpZyA/IGFnZ3JlZ2F0aW9uLmNvbmZpZyA6IHt9XCIgKG9uRmlsdGVyU2VsZWN0ZWQpPVwiRmlsdGVyU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPC9jdHMtZHluYW1pYy1maWx0ZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXhsLTlcIj5cclxuICAgIDxhcHAtY2FyZD5cclxuICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgPGgzPlxyXG4gICAgICAgICAge3sgXCJzZWFyY2guaGVhZGVyXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L2gzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImJvZHlcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYWdncmVnYXRpb25zXCIgY2xhc3M9XCJ0YWJsZS10b29sYmFyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0LWNvdW50XCI+XHJcbiAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgXCJzZWFyY2guXCIgKyBcInJlc3VsdHNOdW1iZXJcIlxyXG4gICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IHZhbHVlOiB0b3RhbFJlY29yZHMgPyB0b3RhbFJlY29yZHMgOiAwIH1cclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktYmV0d2VlblwiIFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybVwiIChuZ1N1Ym1pdCk9XCJzdWJtaXRGb3JtKClcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXNlVG9nZ2xlRmlsdGVycyAmJiAhY3VzdG9tUmVzcG9uc2l2ZVN0eWxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImN1c3RvbVJlc3BvbnNpdmVTdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1mb3JtIGN1c3RvbS1yZXNwb25zaXZlLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInRleHRcIiBbbWF0QXV0b2NvbXBsZXRlXT1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2guc2VhcmNoJyB8IHRyYW5zbGF0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInN1Ym1pdEZvcm0oKVwiIGNsYXNzPVwic2VhcmNoLWljb24gYmkgYmktc2VhcmNoXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIlxyXG4gICAgICAgICAgICAgICAgICAgYXV0by1jb21wbGV0ZS1pbmVyLXdyYXBwZXJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvLWNvbXBsZXRlLXdyYXBwZXJcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICNtYXRBdXRvY29tcGxldGU9XCJtYXRBdXRvY29tcGxldGVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm8tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyZXN1bHRTZXRzICYmICFyZXN1bHRTZXRzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3tub19yZXN1bHRfZm91bmQgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVzdWx0U2V0IG9mIHJlc3VsdFNldHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAgKGNsaWNrKT1cInNldE9wdGlvblZhbHVlKHJlc3VsdFNldC5sYWJlbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLWluZXItdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgcmVzdWx0U2V0LmxhYmVsIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24gPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiICpuZ0lmPVwidXNlVG9nZ2xlRmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgPGN0cy1keW5hbWljLWZvcm0tc2xpZGUtdG9nZ2xlaXRlbSBjbGFzcz1cIm14LTIgc21hbGwtZm9udFwiIFtsYWJlbF09XCInc2VhcmNoLlBFUlNPTkFMX0ZJTEVTJ1wiXHJcbiAgICAgICAgICAgICAgICAgIChvblRvZ2dsZSk9XCJzdWJtaXRGb3JtKClcIiBmb3JtQ29udHJvbE5hbWU9XCJwZXJzb25hbEZpbGVzXCI+XHJcbiAgICAgICAgICAgICAgICA8L2N0cy1keW5hbWljLWZvcm0tc2xpZGUtdG9nZ2xlaXRlbT5cclxuICAgICAgICAgICAgICAgIDxjdHMtZHluYW1pYy1mb3JtLXNsaWRlLXRvZ2dsZWl0ZW0gY2xhc3M9XCJteC0yIHNtYWxsLWZvbnRcIiBbbGFiZWxdPVwiJ3NlYXJjaC5ERVBfRklMRVMnXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVwRmlsZXNcIiAob25Ub2dnbGUpPVwic3VibWl0Rm9ybSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2N0cy1keW5hbWljLWZvcm0tc2xpZGUtdG9nZ2xlaXRlbT5cclxuICAgICAgICAgICAgICAgIDxjdHMtZHluYW1pYy1mb3JtLXNsaWRlLXRvZ2dsZWl0ZW0gY2xhc3M9XCJteC0yIHNtYWxsLWZvbnRcIiBbbGFiZWxdPVwiJ3NlYXJjaC5XT1JLU1BBQ0VfRklMRVMnXCJcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIndvcmtTcGFjZUZpbGVzXCIgKG9uVG9nZ2xlKT1cInN1Ym1pdEZvcm0oKVwiPlxyXG4gICAgICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZm9ybS1zbGlkZS10b2dnbGVpdGVtPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8Y3RzLWR5bmFtaWMtdGFibGUgI2R5bmFtaWNUYWJsZSBbcGFnZVNpemVdPVwicGFnZVNpemVcIiBbY29sdW1uc109XCJjb2x1bW5zXCIgW3Jlc3BvbnNpdmVDb2x1bW5zXT1cInJlc3BvbnNpdmVDb2x1bW5zXCJcclxuICAgICAgICAgIFtwYWdlUHJvdmlkZXJdPVwicGFnZVByb3ZpZGVyXCIgW3F1aWNrRmlsdGVyXT1cImZpbHRlclwiIFtlbnRpdHlUeXBlXT1cImVudGl0eVR5cGVcIiBbZmllbGRzXT1cImZpZWxkc1wiXHJcbiAgICAgICAgICBbcXVlcnlQYXJhbV09XCJxdWVyeVBhcmFtc1wiIFtoZWFkZXJzXT1cImhlYWRlcnNcIiBbcHJlZml4XT1cInByZWZpeFwiIFtzb3J0aW5nQnldPVwic29ydGluZ0J5XCIgW2lzU2VhcmNoUGFnZV09XCJ0cnVlXCJcclxuICAgICAgICAgIChvblJvd1NlbGVjdGVkKT1cIm9uUm93U2VsZWN0ZWQoJGV2ZW50KVwiIChhY3Rpb25PblJvdyk9XCJwZXJmb3JtQWN0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgKG9uR2V0dGluZ0RhdGEpPVwiZ2V0VGFibGVEYXRhKCRldmVudClcIj48L2N0cy1keW5hbWljLXRhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYXBwLWNhcmQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjcHJvZ3Jlc3NTcGlubmVyPlxyXG4gICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLXNwaW5uZXJcIj5cclxuICAgICAgPG1hdC1zcGlubmVyIGNvbG9yPVwid2FyblwiIFtkaWFtZXRlcl09XCIyNVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxuZy10ZW1wbGF0ZSAjbm9BZ2dyZWdhdGlvbnM+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3Mtc3Bpbm5lclwiPlxyXG4gICAgICB7eyBcInNlYXJjaC5ub0FnZ3JlZ2F0aW9uc1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj4iXX0=
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9keW5hbWljLXNlYXJjaC9keW5hbWljLXNlYXJjaC9keW5hbWljLXNlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtc2VhcmNoL2R5bmFtaWMtc2VhcmNoL2R5bmFtaWMtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQTRCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0ksT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFlSCxNQUFNLE9BQU8sc0JBQXNCO0lBMERqQyxZQUNVLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxnQkFBb0MsRUFDcEMsWUFBMkIsRUFDM0Isa0JBQXVDLEVBQ2hCLFdBQVcsRUFDbkMs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LENBQUM7NEJBQzNELFVBQVUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUN6QyxVQUFVLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzt5QkFDMUMsQ0FBQztxQkFDSDtvQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7OzBCQWlFSSxNQUFNOzJCQUFDLGFBQWE7NkVBN0RJLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFFaEIsT0FBTztzQkFBZixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFTixhQUFhO3NCQURaLEtBQUs7Z0JBT0ksV0FBVztzQkFBcEIsTUFBTTtnQkFhUCxZQUFZO3NCQURYLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBJbmplY3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgYW5pbWF0ZSwgQVVUT19TVFlMRSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IEV2YWx1YXRvcnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3Blcm1pc3Npb25zL2V2YWx1YXRvcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOdXhlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL251eGVvL251eGVvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxBZG1pblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZ2xvYmFsLWFkbWluLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIER5bmFtaWMgc2VhcmNoIGNvbXBvbmVudCB1c2VzIFtEeW5hbWljIFRhYmxlXXtAbGluayBEeW5hbWljVGFibGVDb21wb25lbnR9ICYgW0R5bmFtaWMgRmlsdGVyXXtAbGluayBEeW5hbWljRmlsdGVyQ29tcG9uZW50fSBpbnRlcm5hbGx5LFxyXG4gKiBhbmQgdXRpbGl6ZXMgaXRzIGlucHV0cyB0byBwZXJmb3JtIGFkdmFuY2VkIHNlYXJjaCBhbmQgZmlsdGVyaW5nIG9uIGFueSBudXhlbyBQcm92aWRlclxyXG4gKiBAdGl0bGVcclxuICogRHluYW1pYyBTZWFyY2hcclxuICpcclxuICogQGV4YW1wbGVcclxuICogPGN0cy1keW5hbWljLXNlYXJjaFxyXG4gKiAgIFtwYWdlUHJvdmlkZXJdPVwiJ3BhZ2VQcm92aWRlck5hbWUnXCJcclxuICogICBbY29sdW1uc109XCJjb2x1bW5zQXJyYXlcIlxyXG4gKiAgIFtyZXNwb25zaXZlQ29sdW1uc109XCJyZXNwb25zaXZlQ29sdW1uc0FycmF5XCJcclxuICogICBbZW50aXR5VHlwZV09XCInZG9jdW1lbnRzJ1wiXHJcbiAqICAgW3ByZWZpeF09XCJwcmVmaXhcIlxyXG4gKiAgIFtmaWVsZHNdPVwiZmllbGRzXCJcclxuICogICBbaGVhZGVyc109XCJoZWFkZXJzXCJcclxuICogICBbc29ydGluZ0J5XT1cInNvcnRpbmdCeVwiXHJcbiAqICAgW3BhZ2VTaXplXT1cIlBhZ2VTaXplXCJcclxuKiAgICBbY3VzdG9tUmVzcG9uc2l2ZVN0eWxlXT1cImZhbHNlIG9yIHRydWVcIlxyXG4gICAgIFtvcGVuQ2xvc2VGaWx0ZXJGcm9tT3V0c2lkZV09XCJwYXNzIEZpbHRlciBzdGF0ZSBmcm9tIHBhcmVudCBjb21wb25lbnRcIlxyXG4gICAgIFt0aGVtZV0gPSBcInRvICBzZXQgYmFja2dyb3VuZCBkZXBlbmVkIG9uIHRoZW1lXCJcclxuICogPlxyXG4gKiA8L2N0cy1keW5hbWljLXNlYXJjaD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY3RzLWR5bmFtaWMtc2VhcmNoJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignY29sbGFwc2UnLCBbXHJcbiAgICAgIHN0YXRlKCdmYWxzZScsIHN0eWxlKHsgaGVpZ2h0OiBBVVRPX1NUWUxFLCB2aXNpYmlsaXR5OiBBVVRPX1NUWUxFIH0pKSxcclxuICAgICAgc3RhdGUoJ3RydWUnLCBzdHlsZSh7IGhlaWdodDogJzAnLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ2ZhbHNlID0+IHRydWUnLCBhbmltYXRlKDMwMCkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCd0cnVlID0+IGZhbHNlJywgYW5pbWF0ZSgzMDApKVxyXG4gICAgXSlcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsT25DaGFuZ2VzIHtcclxuICB0ZXh0OiBzdHJpbmc7XHJcbiAgYWdncmVnYXRpb25zO1xyXG4gIEBWaWV3Q2hpbGQoJ2R5bmFtaWNUYWJsZScpIGR5bmFtaWNUYWJsZSA6IER5bmFtaWNUYWJsZUNvbXBvbmVudDtcclxuICAvKiogQXJyYXkgb2YgY29sdW1ucyAqL1xyXG4gIEBJbnB1dCgpIGNvbHVtbnM7XHJcbiAgLyoqIEFycmF5IG9mIGNvbHVtbnMgb24gc21hbGxlciBzY3JlZW5zICovXHJcbiAgQElucHV0KCkgcmVzcG9uc2l2ZUNvbHVtbnM/O1xyXG4gIC8qKiBEZWZpbmVzIHRoZSBwYWdlIGluIHdoaWNoIHRhYmxlIGlzIGJlaW5nIHVzZWQgKi9cclxuICBASW5wdXQoKSBlbnRpdHlUeXBlOiBzdHJpbmc7XHJcbiAgLyoqIFRyYW5zbGF0aW9ucyBwcmVmaXggKi9cclxuICBASW5wdXQoKSBwcmVmaXggPSAnJztcclxuICAvKiogSGVhZGVycyB0byBiZSBzZW50IHdpdGggQVBJIFJlcXVlc3QgKi9cclxuICBASW5wdXQoKSBoZWFkZXJzO1xyXG4gIC8qKiBGaWVsZHMga2V5bWFwIHRvIGJlIG1hcHBlZCBpbiB0aGUgYWRhcHRlciAqL1xyXG4gIEBJbnB1dCgpIGZpZWxkcztcclxuICAvKiogUGFnZSBQcm92aWRlciBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJldHJpZXZlIGRhdGEgKi9cclxuICBASW5wdXQoKSBwYWdlUHJvdmlkZXI7XHJcbiAgLyoqIENvbnRyb2xzIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZSBpbiB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplO1xyXG4gIC8qKiBTb3J0aW5nIGNvbHVtbiAqL1xyXG4gIEBJbnB1dCgpIHNvcnRpbmdCeT89IHt9O1xyXG4gIEBJbnB1dCgpIGZ1bGxUZXh0UGFyYW1OYW1lID0gJ3N5c3RlbV9mdWxsdGV4dCc7XHJcbiAgQElucHV0KCkgZmlsdGVyOyAvLyB1c2VkIHRvIHBhc3MgcGFyYW1zIGZyb20gb3V0c2lkZSB0byBwYXJhbXMgb2YgZHluYW1pYyB0YWJsZSBkaXJlY3RseVxyXG5cclxuICBASW5wdXQoKSBzdWdnZXN0ZXJBcGk7IC8vIGFwaSB0byBiZSB1c2VkIGluIHRoZSBzdWdnZXN0ZXIgaW5wdXQgaWYgc2VudCB3aWxsIHVzZWQgaXQgaWYgbm90IHdpbGwgdXNlIHRoZSBkZWZ1bHQgb25jZVxyXG4gIEBJbnB1dCgpIFxyXG4gIG9uUm93U2VsZWN0ZWQgPSAocm93KSA9PiB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbeyBvdXRsZXRzOiB7IHZpZXdlcjogWyd2aWV3Jywgcm93Wyd1aWQnXV0gfSB9XSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyBsb2NhdGlvbjogdGhpcy5yb3V0ZXIudXJsIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqIHVzZWQgdG8gZW1pdCBhbnkgYWN0aW9ucyB0byBvdXRzaWRlICovXHJcbiAgQE91dHB1dCgpIGFjdGlvbk9uUm93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHF1ZXJ5UGFyYW1zID0ge307XHJcbiAgZmlsdGVycztcclxuICBzZWFyY2hGb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICB0ZXh0OiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICBwZXJzb25hbEZpbGVzIDogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcclxuICAgIGRlcEZpbGVzIDogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcclxuICAgIHdvcmtTcGFjZUZpbGVzIDogbmV3IEZvcm1Db250cm9sKGZhbHNlKVxyXG4gIH0pO1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICB0b3RhbFJlY29yZHM7XHJcbiAgb3BlbkZpbHRlcjogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIHNvcnRpbmdBcnJheTtcclxuICBASW5wdXQoKSBjdXN0b21SZXNwb25zaXZlU3R5bGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBvcGVuQ2xvc2VGaWx0ZXJGcm9tT3V0c2lkZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRoZW1lIDphbnk7XHJcbiAgdXNlVG9nZ2xlRmlsdGVycztcclxuXHJcbiAgcXVpY2tGaWx0ZXJzID0gJyc7XHJcbiAgc2F2ZWRQZXJzRmlsdGVyVmFsdWUgPSBudWxsO1xyXG4gIHNhdmVkRGVwRmlsdGVyVmFsdWUgPSBudWxsO1xyXG4gIHNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUgPSBudWxsO1xyXG5cclxuICByZXN1bHRTZXRzID0gW107XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGV2YWx1YXRvclNlcnZpY2UgOiBFdmFsdWF0b3JzU2VydmljZSxcclxuICAgIHByaXZhdGUgbnV4ZW9TZXJ2aWNlIDogTnV4ZW9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnbG9iYWxBZG1pblNlcnZpY2UgOiBHbG9iYWxBZG1pblNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQsXHJcbiAgICBwdWJsaWMgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXJcclxuICApIHsgXHJcbiAgICB0aGlzLmV2YWx1YXRvclNlcnZpY2UuZXZhbHVhdGVSdWxlKCdlbmFibGVTZWFyY2hUb2dnbGVzJyAsIHt9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMudXNlVG9nZ2xlRmlsdGVycyA9IHJlcztcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZihjaGFuZ2VzLm9wZW5DbG9zZUZpbHRlckZyb21PdXRzaWRlKSB7XHJcbiAgICAgIHRoaXMub3BlbkZpbHRlciA9IGNoYW5nZXMub3BlbkNsb3NlRmlsdGVyRnJvbU91dHNpZGUuY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBcclxuICAgIHRoaXMudXBkYXRlUXVlcnlQYXJhbXModGhpcy5jb25zdHJ1Y3RQYXJhbXNGdW5jdGlvbih0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKSk7XHJcbiAgICB0aGlzLnNlYXJjaElucHV0UG9wdWxhdGUoKTtcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICh0aGlzLnRleHQgIT09IHBhcmFtc1snc2VhcmNoX3F1ZXJ5J10gJiYgcGFyYW1zWydzZWFyY2hfcXVlcnknXSkgfHxcclxuICAgICAgICAocGFyYW1zWydzZWFyY2hfcXVlcnknXT8ubGVuZ3RoID09IDAgJiYgdGhpcy50ZXh0ICE9PSBwYXJhbXNbJ3NlYXJjaF9xdWVyeSddIHx8IFxyXG4gICAgICAgICh0aGlzLnVzZVRvZ2dsZUZpbHRlcnMgJiYgdGhpcy5xdWlja0ZpbHRlcnMgIT09IHBhcmFtc1sncXVpY2tGaWx0ZXJzJ10pKSBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVRdWVyeVBhcmFtcyh0aGlzLmNvbnN0cnVjdFBhcmFtc0Z1bmN0aW9uKHBhcmFtcykpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRQb3B1bGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYnJlYWtwb2ludCgpO1xyXG4gICAgXHJcbiAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RleHQnKS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgIGRlYm91bmNlVGltZSg1MDApKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5zZWFyY2gocmVzKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTZXRzID0gcmVzdWx0cztcclxuICAgICAgfSlcclxuICAgfSlcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFBhcmFtc0Z1bmN0aW9uKHBhcmFtcyl7XHJcbiAgICBsZXQgY29udHJ1Y3RlZFBhcm1zID0ge307XHJcbiAgICB0aGlzLnRleHQgPSBwYXJhbXNbJ3NlYXJjaF9xdWVyeSddO1xyXG4gICAgaWYodGhpcy50ZXh0ICYmIHRoaXMudGV4dC50cmltKCkpe1xyXG4gICAgICBpZih0aGlzLnVzZVRvZ2dsZUZpbHRlcnMpe1xyXG4gICAgICAgIGlmKHBhcmFtc1sncXVpY2tGaWx0ZXJzJ10pe1xyXG4gICAgICAgICAgdGhpcy5xdWlja0ZpbHRlcnMgPSBwYXJhbXNbJ3F1aWNrRmlsdGVycyddIDtcclxuICAgICAgICAgIGNvbnRydWN0ZWRQYXJtcyA9IHsgW3RoaXMuZnVsbFRleHRQYXJhbU5hbWVdIDogdGhpcy50ZXh0KycqJyAsIHF1aWNrRmlsdGVycyA6IHRoaXMucXVpY2tGaWx0ZXJzfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5xdWlja0ZpbHRlcnMgPSAnJztcclxuICAgICAgICAgIGNvbnRydWN0ZWRQYXJtcyA9IHsgW3RoaXMuZnVsbFRleHRQYXJhbU5hbWVdIDogdGhpcy50ZXh0KycqJyAsIHF1aWNrRmlsdGVycyA6ICcnfVxyXG4gICAgICAgIH1cclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgY29udHJ1Y3RlZFBhcm1zID0geyBbdGhpcy5mdWxsVGV4dFBhcmFtTmFtZV0gOiB0aGlzLnRleHQrJyonfVxyXG4gICAgICB9XHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29udHJ1Y3RlZFBhcm1zID0geyBbdGhpcy5mdWxsVGV4dFBhcmFtTmFtZV0gOiBudWxsfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb250cnVjdGVkUGFybXM7XHJcbiAgfVxyXG4gIHVwZGF0ZVF1ZXJ5UGFyYW1zKG5ld1F1ZXJ5cGFyYW1zOiBvYmplY3QpIHtcclxuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB7XHJcbiAgICAgIC4uLnRoaXMucXVlcnlQYXJhbXMsXHJcbiAgICAgIC4uLm5ld1F1ZXJ5cGFyYW1zLFxyXG4gICAgfTtcclxuICB9XHJcbiAgXHJcbiAgc2VhcmNoSW5wdXRQb3B1bGF0ZSgpIHtcclxuICAgIGlmKHRoaXMudXNlVG9nZ2xlRmlsdGVycyl7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXHJcbiAgICAgICAgcGVyc29uYWxGaWxlcyA6ICh0aGlzLnF1aWNrRmlsdGVycyA9PT0gJ3BlcnNvbmFsRmlsdGVyJyApID8gdHJ1ZSA6ICh0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICE9PSBudWxsKSA/IHRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgOiBmYWxzZSxcclxuICAgICAgICBkZXBGaWxlcyA6ICh0aGlzLnF1aWNrRmlsdGVycyA9PT0gJ2RlcGFydG1lbnRGaWx0ZXInKSA/IHRydWUgOiAodGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICE9PSBudWxsKSA/IHRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSA6IGZhbHNlICxcclxuICAgICAgICB3b3JrU3BhY2VGaWxlcyA6ICh0aGlzLnF1aWNrRmlsdGVycyA9PT0gJ2RlcGFydG1lbnRXb3JrU3BhY2VGaWx0ZXInKSA/IHRydWUgOiAodGhpcy5zYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlICE9PSBudWxsKSA/IHRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSA6IGZhbHNlIFxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIHRleHQ6IHRoaXMudGV4dCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBGaWx0ZXJTZWxlY3RlZCh2YWw6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZmlsdGVycyA9IHsgLi4udGhpcy5maWx0ZXJzLCAuLi52YWwuZmlsdGVyIH07IC8vc3RvcmUgZmlsdGVyc1xyXG4gICAgdGhpcy51cGRhdGVRdWVyeVBhcmFtcyh0aGlzLmZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgcGFnaW5hdGlvbkNoYW5nZShldmVudCkgeyB9XHJcblxyXG4gIGdldFRhYmxlRGF0YShkYXRhKSB7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0aW9ucyA9IE9iamVjdC5lbnRyaWVzKGRhdGEuYWdncmVnYXRpb25zIHx8IHt9KS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW1bMV07XHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMuYWdncmVnYXRpb25zID0gdGhpcy5hZ2dyZWdhdGlvbnMuZmlsdGVyKChpdGVtKSA9PlxyXG4gICAgLy8gICB0aGlzLnNvcnRpbmdBcnJheS5pbmNsdWRlcyhpdGVtLmlkKVxyXG4gICAgLy8gKTtcclxuICAgIGxldCB1cGRhdGVkQWdncmVnYXRpb24gPSBbXTtcclxuICAgIHRoaXMuYWdncmVnYXRpb25zLm1hcChhZ2dyZWcgPT4ge1xyXG4gICAgICB0aGlzLnNvcnRpbmdBcnJheS5tYXAoc29ydFR5cGUgPT4ge1xyXG4gICAgICAgIGlmKHNvcnRUeXBlLmlkID09PSBhZ2dyZWcuaWQpe1xyXG4gICAgICAgICAgYWdncmVnWydjb21wb25lbnRUeXBlJ10gPSBzb3J0VHlwZS5jb21wb2VuZW50VHlwZTtcclxuICAgICAgICAgIC8vIGluIGNhc2Ugb2YgY3VzdG9tIGNvbXBvbmVudCBuZWVkIHRvIGNhbGwgcGFnZSBwcm92aWRlciB0byBnZXQgZGF0YSBcclxuICAgICAgICAgIGlmKHNvcnRUeXBlLmNvbXBvZW5lbnRUeXBlID09PSAnY3VzdG9tLXBwJyB8fCBzb3J0VHlwZS5jb21wb2VuZW50VHlwZSA9PT0gJ2N1c3RvbS1kb2N1bWVudCcgfHwgc29ydFR5cGUuY29tcG9lbmVudFR5cGUgPT09ICdjdXN0b20tZGVwYXJ0bWVudCcpe1xyXG4gICAgICAgICAgICBhZ2dyZWdbJ2N1c3RvbVBhZ2VQcm92aWRlciddID0gc29ydFR5cGUucGFnZVByb3ZpZGVyLFxyXG4gICAgICAgICAgICBhZ2dyZWdbJ2NvbmZpZyddID0gc29ydFR5cGUuY29uZmlnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB1cGRhdGVkQWdncmVnYXRpb24ucHVzaChhZ2dyZWcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICAgIHRoaXMuYWdncmVnYXRpb25zID0gXy5zb3J0QnkodXBkYXRlZEFnZ3JlZ2F0aW9uLCAoaXRlbSkgPT4ge1xyXG4gICAgICBsZXQgaSA9IC0xO1xyXG4gICAgICAgdGhpcy5zb3J0aW5nQXJyYXkubWFwKChzb3J0VHlwZSAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgIGlmKHNvcnRUeXBlLmlkID09PSBpdGVtLmlkKXtcclxuICAgICAgICAgICBpID0gaW5kZXg7XHJcbiAgICAgICAgIH1cclxuICAgICAgIH0pO1xyXG4gICAgICAgcmV0dXJuIGk7XHJcbiAgICB9KTtcclxuICAgIGNvbnNvbGUubG9nKCdhZ2dyZWdhdGlvbnMnLCB0aGlzLmFnZ3JlZ2F0aW9ucyk7XHJcbiAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IGRhdGEudG90YWxTaXplO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIH1cclxuXHJcbiAgc3VibWl0Rm9ybSgpIHtcclxuICAgIGxldCBwYXJhbXMgPSB7fSA7XHJcbiAgICBpZih0aGlzLnVzZVRvZ2dsZUZpbHRlcnMpe1xyXG4gICAgICBwYXJhbXMgPSB7XHJcbiAgICAgICAgc2VhcmNoX3F1ZXJ5OiB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMudGV4dC52YWx1ZSxcclxuICAgICAgICBxdWlja0ZpbHRlcnMgOiB0aGlzLmdldFRvZ2dsZUZpbHRlcnMoKVxyXG4gICAgICB9XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcGFyYW1zID0ge1xyXG4gICAgICAgIHNlYXJjaF9xdWVyeTogdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzLnRleHQudmFsdWUsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLiddLCB7XHJcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiBwYXJhbXMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFRvZ2dsZUZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMuZGVwRmlsZXMudmFsdWU7XHJcbiAgICB0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzLnBlcnNvbmFsRmlsZXMudmFsdWU7XHJcbiAgICB0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMud29ya1NwYWNlRmlsZXMudmFsdWU7XHJcbiAgICBpZiAoKHRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgdGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICYmIHRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSlcclxuICAgICAgfHwgKCF0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICYmICF0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICYmICF0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gXCJwZXJzb25hbEZpbHRlclwiO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgdGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICYmICF0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIFwiZGVwYXJ0bWVudEZpbHRlclwiO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIFwiZGVwYXJ0bWVudFdvcmtTcGFjZUZpbHRlclwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gXCJkZXBhcnRtZW50UGVyc29uYWxGaWx0ZXJcIjtcclxuXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICYmICF0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgJiYgdGhpcy5zYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBcInBlcnNvbmFsRGVwYXJ0bWVudFdvcmtTcGFjZUZpbHRlclwiO1xyXG5cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCF0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICYmIHRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIFwiZGVwdERlcGF0bWVudFdvcmtTcGFjZUZpbHRlclwiO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE9wdGlvblZhbHVlKHNlYXJjaGVkVGV4dCl7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0ZXh0Jykuc2V0VmFsdWUoc2VhcmNoZWRUZXh0KTtcclxuICAgIHRoaXMuc3VibWl0Rm9ybSgpO1xyXG4gIH1cclxuICBvbk9wZW5GaWx0ZXIoKSB7XHJcbiAgICB0aGlzLm9wZW5GaWx0ZXIgPSAhdGhpcy5vcGVuRmlsdGVyO1xyXG4gIH1cclxuXHJcbiAgYnJlYWtwb2ludCgpIHtcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyXHJcbiAgICAgIC5vYnNlcnZlKFsnKG1pbi13aWR0aDogMTIwMHB4KSddKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0Lm1hdGNoZXMpIHtcclxuICAgICAgICAgIHRoaXMub3BlbkZpbHRlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwZXJmb3JtQWN0aW9uKGFjdGlvbil7XHJcbiAgICB0aGlzLmFjdGlvbk9uUm93LmVtaXQoYWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaCh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgbGV0IHBhcmFtcz0ge1xyXG4gICAgICBzZWFyY2hUZXJtOiB0ZXJtXHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmdsb2JhbEFkbWluU2VydmljZS5pc0dsb2JhbEFkbWluKXtcclxuICAgICAgcGFyYW1zWydwYXRoJ10gPSAnLycgKyB0aGlzLmdsb2JhbEFkbWluU2VydmljZS5hY3RpdmVUZW5hbnQgKyAnLydcclxuICAgIH1lbHNlIGlmKCF0aGlzLmdsb2JhbEFkbWluU2VydmljZS5pc0dsb2JhbEFkbWluICYmIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy50ZW5hbnRJZCl7XHJcbiAgICAgIHBhcmFtc1sncGF0aCddID0gJy8nICsgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQudXNlci5wcm9wZXJ0aWVzLnRlbmFudElkICsgJy8nXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgICB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG4gICAgICAgICAgICAub3BlcmF0aW9uKCh0aGlzLnN1Z2dlc3RlckFwaSA/IHRoaXMuc3VnZ2VzdGVyQXBpIDogJ1NlYXJjaC5DdXN0b21TdWdnZXN0ZXJzTGF1bmNoZXInKSwge1xyXG4gICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmVudmlyb25tZW50Lm51eGVvfSR7dGhpcy5lbnZpcm9ubWVudC5jdXN0b21BdXRvbWF0aW9ufWAsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5wYXJhbXMoe1xyXG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jb250ZXh0KHt9KVxyXG4gICAgICAgICAgICAuZXhlY3V0ZSgpXHJcbiAgICApO1xyXG59XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21SZXNwb25zaXZlU3R5bGVcIj5cclxuICA8ZGl2IGNsYXNzPVwic2VhcmNoLXRvb2xiYXIgZC1tZC1mbGV4IGQteGwtbm9uZSBteC0zXCI+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJvbk9wZW5GaWx0ZXIoKVwiIGNsYXNzPVwibXktYnV0dG9uXCI+XHJcbiAgICAgIDxzcGFuPiB7eyBcIkZJTFRFUlwiIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICA8aSBjbGFzcz1cImJpIGJpLWZpbHRlclwiICpuZ0lmPVwiIW9wZW5GaWx0ZXJcIj48L2k+XHJcbiAgICAgIDxpIGNsYXNzPVwiYmkgYmkteFwiICpuZ0lmPVwib3BlbkZpbHRlclwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGRpdiAqbmdJZj1cIm9wZW5GaWx0ZXJcIj5cclxuICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jYXJldC11cC1maWxsIGFycm93LXVwXCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVJlc3BvbnNpdmVTdHlsZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjdXN0b21TdHlsZSAtbXQtMTIgcHgtOCBmbGV4IGZsZXgtY29sXCJcclxuICAgIFtuZ0NsYXNzXT1cInsnYmctYWNjZW50LTIwMCc6IHRoZW1lID09PSAnZGdkYScsJ2JnLWFjY2VudC0xMDAnOiB0aGVtZSA9PT0gJ2tzcmVsZWlmJyB8fCB0aGVtZSA9PT0gJ2NvbXB0ZWNoY28nfVwiXHJcbiAgICBbQGNvbGxhcHNlXT1cIiFvcGVuRmlsdGVyXCI+XHJcbiAgICA8IS0tIDxmb3JtXHJcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJzZWFyY2hGb3JtXCJcclxuICAgICAgICBjbGFzcz1cInNlYXJjaC1mb3JtXCJcclxuICAgICAgICAobmdTdWJtaXQpPVwic3VibWl0Rm9ybSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGV4dFwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaC5zZWFyY2gnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInN1Ym1pdEZvcm0oKVwiIGNsYXNzPVwic2VhcmNoLWljb24gYmkgYmktc2VhcmNoXCI+PC9kaXY+XHJcbiAgICAgIDwvZm9ybT4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAteC0xOCBmbGV4LXJvdyBtdC01IHBiLTMgb3ZlcmZsb3cteC1hdXRvXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbnM7IGVsc2UgcHJvZ3Jlc3NTcGlubmVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0aW9ucy5sZW5ndGg7IGVsc2Ugbm9BZ2dyZWdhdGlvbnNcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFnZ3JlZ2F0aW9uIG9mIGFnZ3JlZ2F0aW9uc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRpb24uYnVja2V0cy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgPGN0cy1keW5hbWljLWZpbHRlciBbZW50aXR5VHlwZV09XCJlbnRpdHlUeXBlXCIgW2ZpbHRlcnNdPVwiYWdncmVnYXRpb24uYnVja2V0c1wiIFtpZF09XCJhZ2dyZWdhdGlvbi5pZFwiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0aW9uc109XCJhZ2dyZWdhdGlvbi5zZWxlY3Rpb25cIiBbdGl0bGVdPVwiYWdncmVnYXRpb24uZmllbGRcIiBbcHJlZml4XT1cIidzZWFyY2gnXCIgW2RlcGFydG1lbnRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRpb24uZmllbGQgPT09ICdjb3JyOnRvJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uLmZpZWxkID09PSAnY29ycjpmcm9tJ1xyXG4gICAgICAgICAgICAgICAgICBcIiBbY29tcG9uZW50VHlwZV09XCJhZ2dyZWdhdGlvbi5jb21wb25lbnRUeXBlID8gYWdncmVnYXRpb24uY29tcG9uZW50VHlwZSA6ICdkZWZ1bHQnXCJcclxuICAgICAgICAgICAgICAgIFtjdXN0b21QYWdlUHJvdmlkZXJdPVwiYWdncmVnYXRpb24uY3VzdG9tUGFnZVByb3ZpZGVyID8gYWdncmVnYXRpb24uY3VzdG9tUGFnZVByb3ZpZGVyIDogJydcIlxyXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJhZ2dyZWdhdGlvbi5jb25maWcgPyBhZ2dyZWdhdGlvbi5jb25maWcgOiB7fVwiIChvbkZpbHRlclNlbGVjdGVkKT1cIkZpbHRlclNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2N0cy1keW5hbWljLWZpbHRlcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2IGNsYXNzPVwicm93IHdyYXBwZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwid3JhcHBlci1vdmVybGF5XCIgKm5nSWY9XCJsb2FkaW5nXCI+PC9kaXY+XHJcbiAgXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21SZXNwb25zaXZlU3R5bGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1maWx0ZXIgcHgtMyBkLWZsZXggZC14bC1ub25lXCIgKm5nSWY9XCJvcGVuRmlsdGVyXCI+XHJcbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybVwiIGNsYXNzPVwic2VhcmNoLWZvcm1cIiAobmdTdWJtaXQpPVwic3VibWl0Rm9ybSgpXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwic2VhcmNoLWlucHV0XCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZXh0XCIgW21hdEF1dG9jb21wbGV0ZV09XCJtYXRBdXRvY29tcGxldGUxXCIgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2guc2VhcmNoJyB8IHRyYW5zbGF0ZVwiIC8+XHJcbiAgICAgICAgPGRpdiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCIgY2xhc3M9XCJzZWFyY2gtaWNvbiBiaSBiaS1zZWFyY2hcIj48L2Rpdj5cclxuICAgICAgPC9mb3JtPlxyXG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZVxyXG4gICAgICBjbGFzcz1cIlxyXG4gICAgICAgICBhdXRvLWNvbXBsZXRlLWluZXItd3JhcHBlclxyXG4gICAgICAgICAgYXV0by1jb21wbGV0ZS13cmFwcGVyXHJcbiAgICAgIFwiXHJcbiAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxyXG4gICAgICAjbWF0QXV0b2NvbXBsZXRlMT1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgPlxyXG4gICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgY2xhc3M9XCJuby10ZXh0XCJcclxuICAgICAgICAgICpuZ0lmPVwicmVzdWx0U2V0cyAmJiAhcmVzdWx0U2V0cy5sZW5ndGhcIlxyXG4gICAgICA+XHJcbiAgICAgICAgICB7eydub19yZXN1bHRfZm91bmQnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXN1bHRTZXQgb2YgcmVzdWx0U2V0c1wiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gIChjbGljayk9XCJzZXRPcHRpb25WYWx1ZShyZXN1bHRTZXQubGFiZWwpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24taW5lci10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgPnt7IHJlc3VsdFNldC5sYWJlbCB9fTwvc3BhblxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbiA+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbnM7IGVsc2UgcHJvZ3Jlc3NTcGlubmVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0aW9ucy5sZW5ndGg7IGVsc2Ugbm9BZ2dyZWdhdGlvbnNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFnZ3JlZ2F0aW9uIG9mIGFnZ3JlZ2F0aW9uc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRpb24uYnVja2V0cy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgPGN0cy1keW5hbWljLWZpbHRlciBbZW50aXR5VHlwZV09XCJlbnRpdHlUeXBlXCIgW2ZpbHRlcnNdPVwiYWdncmVnYXRpb24uYnVja2V0c1wiIFtpZF09XCJhZ2dyZWdhdGlvbi5pZFwiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0aW9uc109XCJhZ2dyZWdhdGlvbi5zZWxlY3Rpb25cIiBbdGl0bGVdPVwiYWdncmVnYXRpb24uZmllbGRcIiBbcHJlZml4XT1cIidzZWFyY2gnXCIgW2RlcGFydG1lbnRdPVwiXHJcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbi5maWVsZCA9PT0gJ2NvcnI6dG8nIHx8XHJcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbi5maWVsZCA9PT0gJ2NvcnI6ZnJvbSdcclxuICAgICAgICAgICAgICBcIiBbY29tcG9uZW50VHlwZV09XCJhZ2dyZWdhdGlvbi5jb21wb25lbnRUeXBlID8gYWdncmVnYXRpb24uY29tcG9uZW50VHlwZSA6ICdkZWZ1bHQnXCJcclxuICAgICAgICAgICAgICAgIFtjdXN0b21QYWdlUHJvdmlkZXJdPVwiYWdncmVnYXRpb24uY3VzdG9tUGFnZVByb3ZpZGVyID8gYWdncmVnYXRpb24uY3VzdG9tUGFnZVByb3ZpZGVyIDogJydcIlxyXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJhZ2dyZWdhdGlvbi5jb25maWcgPyBhZ2dyZWdhdGlvbi5jb25maWcgOiB7fVwiIChvbkZpbHRlclNlbGVjdGVkKT1cIkZpbHRlclNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2N0cy1keW5hbWljLWZpbHRlcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbC14bC0zIHNlYXJjaC1zaWRlTWVudSBkLW5vbmUgZC14bC1ibG9ja1wiPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzZWFyY2hGb3JtXCIgY2xhc3M9XCJzZWFyY2gtZm9ybVwiIChuZ1N1Ym1pdCk9XCJzdWJtaXRGb3JtKClcIj5cclxuICAgICAgPGlucHV0IGNsYXNzPVwic2VhcmNoLWlucHV0XCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZXh0XCIgW21hdEF1dG9jb21wbGV0ZV09XCJtYXRBdXRvY29tcGxldGUyXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaC5zZWFyY2gnIHwgdHJhbnNsYXRlXCIgLz5cclxuICAgICAgPGRpdiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCIgY2xhc3M9XCJzZWFyY2gtaWNvbiBiaSBiaS1zZWFyY2hcIj48L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICAgIDxtYXQtYXV0b2NvbXBsZXRlIGNsYXNzPVwiXHJcbiAgICAgICBhdXRvLWNvbXBsZXRlLWluZXItd3JhcHBlclxyXG4gICAgICAgIGF1dG8tY29tcGxldGUtd3JhcHBlclxyXG4gICAgXCIgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiICNtYXRBdXRvY29tcGxldGUyPVwibWF0QXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwibm8tdGV4dFwiICpuZ0lmPVwicmVzdWx0U2V0cyAmJiAhcmVzdWx0U2V0cy5sZW5ndGhcIj5cclxuICAgICAgICB7eydub19yZXN1bHRfZm91bmQnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXN1bHRTZXQgb2YgcmVzdWx0U2V0c1wiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIChjbGljayk9XCJzZXRPcHRpb25WYWx1ZShyZXN1bHRTZXQubGFiZWwpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbi1pbmVyLXRleHRcIj57eyByZXN1bHRTZXQubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbnM7IGVsc2UgcHJvZ3Jlc3NTcGlubmVyXCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFnZ3JlZ2F0aW9uIG9mIGFnZ3JlZ2F0aW9uc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbi5idWNrZXRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgIDxjdHMtZHluYW1pYy1maWx0ZXIgW2VudGl0eVR5cGVdPVwiZW50aXR5VHlwZVwiIFtmaWx0ZXJzXT1cImFnZ3JlZ2F0aW9uLmJ1Y2tldHNcIiBbaWRdPVwiYWdncmVnYXRpb24uaWRcIlxyXG4gICAgICAgICAgICBbc2VsZWN0aW9uc109XCJhZ2dyZWdhdGlvbi5zZWxlY3Rpb25cIiBbdGl0bGVdPVwiYWdncmVnYXRpb24uZmllbGRcIiBbcHJlZml4XT1cIidzZWFyY2gnXCIgW2RlcGFydG1lbnRdPVwiXHJcbiAgICAgICAgICAgICAgYWdncmVnYXRpb24uZmllbGQgPT09ICdjb3JyOnRvJyB8fFxyXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uLmZpZWxkID09PSAnY29ycjpmcm9tJ1xyXG4gICAgICAgICAgICBcIiBbY29tcG9uZW50VHlwZV09XCJhZ2dyZWdhdGlvbi5jb21wb25lbnRUeXBlID8gYWdncmVnYXRpb24uY29tcG9uZW50VHlwZSA6ICdkZWZ1bHQnXCJcclxuICAgICAgICAgICAgW2N1c3RvbVBhZ2VQcm92aWRlcl09XCJhZ2dyZWdhdGlvbi5jdXN0b21QYWdlUHJvdmlkZXIgPyBhZ2dyZWdhdGlvbi5jdXN0b21QYWdlUHJvdmlkZXIgOiAnJ1wiXHJcbiAgICAgICAgICAgIFtjb25maWddPVwiYWdncmVnYXRpb24uY29uZmlnID8gYWdncmVnYXRpb24uY29uZmlnIDoge31cIiAob25GaWx0ZXJTZWxlY3RlZCk9XCJGaWx0ZXJTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8L2N0cy1keW5hbWljLWZpbHRlcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wteGwtOVwiPlxyXG4gICAgPGFwcC1jYXJkPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICA8aDM+XHJcbiAgICAgICAgICB7eyBcInNlYXJjaC5oZWFkZXJcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvaDM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9keVwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJhZ2dyZWdhdGlvbnNcIiBjbGFzcz1cInRhYmxlLXRvb2xiYXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtY291bnRcIj5cclxuICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICBcInNlYXJjaC5cIiArIFwicmVzdWx0c051bWJlclwiXHJcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgdmFsdWU6IHRvdGFsUmVjb3JkcyA/IHRvdGFsUmVjb3JkcyA6IDAgfVxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJkLWZsZXgganVzdGlmeS1iZXR3ZWVuXCIgW2Zvcm1Hcm91cF09XCJzZWFyY2hGb3JtXCIgKG5nU3VibWl0KT1cInN1Ym1pdEZvcm0oKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VUb2dnbGVGaWx0ZXJzICYmICFjdXN0b21SZXNwb25zaXZlU3R5bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VzdG9tUmVzcG9uc2l2ZVN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWZvcm0gY3VzdG9tLXJlc3BvbnNpdmUtc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidGV4dFwiIFttYXRBdXRvY29tcGxldGVdPVwibWF0QXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaC5zZWFyY2gnIHwgdHJhbnNsYXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCIgY2xhc3M9XCJzZWFyY2gtaWNvbiBiaSBiaS1zZWFyY2hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGVcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiXHJcbiAgICAgICAgICAgICAgICAgICBhdXRvLWNvbXBsZXRlLWluZXItd3JhcHBlclxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG8tY29tcGxldGUtd3JhcHBlclxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgI21hdEF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuby10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJlc3VsdFNldHMgJiYgIXJlc3VsdFNldHMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7e25vX3Jlc3VsdF9mb3VuZCB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXN1bHRTZXQgb2YgcmVzdWx0U2V0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICAoY2xpY2spPVwic2V0T3B0aW9uVmFsdWUocmVzdWx0U2V0LmxhYmVsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24taW5lci10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyByZXN1bHRTZXQubGFiZWwgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbiA+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgKm5nSWY9XCJ1c2VUb2dnbGVGaWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICA8Y3RzLWR5bmFtaWMtZm9ybS1zbGlkZS10b2dnbGVpdGVtIGNsYXNzPVwibXgtMiBzbWFsbC1mb250XCIgW2xhYmVsXT1cIidzZWFyY2guUEVSU09OQUxfRklMRVMnXCJcclxuICAgICAgICAgICAgICAgICAgKG9uVG9nZ2xlKT1cInN1Ym1pdEZvcm0oKVwiIGZvcm1Db250cm9sTmFtZT1cInBlcnNvbmFsRmlsZXNcIj5cclxuICAgICAgICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZm9ybS1zbGlkZS10b2dnbGVpdGVtPlxyXG4gICAgICAgICAgICAgICAgPGN0cy1keW5hbWljLWZvcm0tc2xpZGUtdG9nZ2xlaXRlbSBjbGFzcz1cIm14LTIgc21hbGwtZm9udFwiIFtsYWJlbF09XCInc2VhcmNoLkRFUF9GSUxFUydcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXBGaWxlc1wiIChvblRvZ2dsZSk9XCJzdWJtaXRGb3JtKClcIj5cclxuICAgICAgICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZm9ybS1zbGlkZS10b2dnbGVpdGVtPlxyXG4gICAgICAgICAgICAgICAgPGN0cy1keW5hbWljLWZvcm0tc2xpZGUtdG9nZ2xlaXRlbSBjbGFzcz1cIm14LTIgc21hbGwtZm9udFwiIFtsYWJlbF09XCInc2VhcmNoLldPUktTUEFDRV9GSUxFUydcIlxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwid29ya1NwYWNlRmlsZXNcIiAob25Ub2dnbGUpPVwic3VibWl0Rm9ybSgpXCI+XHJcbiAgICAgICAgICAgICAgPC9jdHMtZHluYW1pYy1mb3JtLXNsaWRlLXRvZ2dsZWl0ZW0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxjdHMtZHluYW1pYy10YWJsZSAjZHluYW1pY1RhYmxlIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbcmVzcG9uc2l2ZUNvbHVtbnNdPVwicmVzcG9uc2l2ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgW3BhZ2VQcm92aWRlcl09XCJwYWdlUHJvdmlkZXJcIiBbcXVpY2tGaWx0ZXJdPVwiZmlsdGVyXCIgW2VudGl0eVR5cGVdPVwiZW50aXR5VHlwZVwiIFtmaWVsZHNdPVwiZmllbGRzXCJcclxuICAgICAgICAgIFtxdWVyeVBhcmFtXT1cInF1ZXJ5UGFyYW1zXCIgW2hlYWRlcnNdPVwiaGVhZGVyc1wiIFtwcmVmaXhdPVwicHJlZml4XCIgW3NvcnRpbmdCeV09XCJzb3J0aW5nQnlcIiBbaXNTZWFyY2hQYWdlXT1cInRydWVcIlxyXG4gICAgICAgICAgKG9uUm93U2VsZWN0ZWQpPVwib25Sb3dTZWxlY3RlZCgkZXZlbnQpXCIgKGFjdGlvbk9uUm93KT1cInBlcmZvcm1BY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAob25HZXR0aW5nRGF0YSk9XCJnZXRUYWJsZURhdGEoJGV2ZW50KVwiPjwvY3RzLWR5bmFtaWMtdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9hcHAtY2FyZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNwcm9ncmVzc1NwaW5uZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3Mtc3Bpbm5lclwiPlxyXG4gICAgICA8bWF0LXNwaW5uZXIgY29sb3I9XCJ3YXJuXCIgW2RpYW1ldGVyXT1cIjI1XCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlICNub0FnZ3JlZ2F0aW9ucz5cclxuICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1zcGlubmVyXCI+XHJcbiAgICAgIHt7IFwic2VhcmNoLm5vQWdncmVnYXRpb25zXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PiJdfQ==
|