@alfresco/adf-process-services-cloud 8.1.0-16500060130 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/assets/adf-process-services-cloud/i18n/de.json +0 -3
- package/bundles/assets/adf-process-services-cloud/i18n/es.json +0 -3
- package/bundles/assets/adf-process-services-cloud/i18n/fr.json +0 -3
- package/bundles/assets/adf-process-services-cloud/i18n/it.json +0 -3
- package/bundles/assets/adf-process-services-cloud/i18n/pl.json +0 -3
- package/bundles/assets/adf-process-services-cloud/i18n/pt.json +0 -3
- package/fesm2022/adf-process-services-cloud.mjs +490 -410
- package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
- package/lib/app/services/apps-process-cloud.service.d.ts +2 -2
- package/lib/form/components/widgets/display-rich-text/display-rich-text.widget.scss +0 -1
- package/lib/process/start-process/components/start-process-cloud.component.d.ts +0 -1
- package/lib/process/start-process/components/start-process-cloud.component.scss +4 -0
- package/lib/process/start-process/services/start-process-cloud.service.d.ts +1 -0
- package/lib/process-services-cloud.module.d.ts +2 -1
- package/lib/screen/components/screen-cloud/screen-cloud.component.d.ts +1 -1
- package/lib/screen/public-api.d.ts +3 -1
- package/lib/screen/services/provide-screen.d.ts +37 -0
- package/lib/{services → screen/services}/screen-rendering.service.d.ts +29 -0
- package/lib/services/public-api.d.ts +0 -1
- package/lib/task/task-filters/components/base-task-filters-cloud.component.d.ts +1 -1
- package/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.d.ts +1 -1
- package/lib/task/task-list/components/base-task-list-cloud.component.d.ts +1 -1
- package/package.json +4 -6
- package/esm2022/adf-process-services-cloud.mjs +0 -5
- package/esm2022/lib/app/app-list-cloud.module.mjs +0 -20
- package/esm2022/lib/app/components/app-details-cloud/app-details-cloud.component.mjs +0 -67
- package/esm2022/lib/app/components/app-list-cloud/app-list-cloud.component.mjs +0 -125
- package/esm2022/lib/app/models/application-instance.model.mjs +0 -24
- package/esm2022/lib/app/public-api.mjs +0 -22
- package/esm2022/lib/app/services/apps-process-cloud.service.mjs +0 -97
- package/esm2022/lib/common/date-range-filter/date-range-filter.component.mjs +0 -163
- package/esm2022/lib/common/date-range-filter/date-range-filter.service.mjs +0 -97
- package/esm2022/lib/common/index.mjs +0 -18
- package/esm2022/lib/common/interface/environment.interface.mjs +0 -18
- package/esm2022/lib/common/interface/index.mjs +0 -18
- package/esm2022/lib/common/interface/public-api.mjs +0 -18
- package/esm2022/lib/common/public-api.mjs +0 -19
- package/esm2022/lib/form/components/cloud-form-rendering.service.mjs +0 -57
- package/esm2022/lib/form/components/form-cloud-custom-outcomes.component.mjs +0 -31
- package/esm2022/lib/form/components/form-cloud.component.mjs +0 -420
- package/esm2022/lib/form/components/form-definition-selector-cloud.component.mjs +0 -53
- package/esm2022/lib/form/components/spinner/form-spinner.component.mjs +0 -35
- package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +0 -249
- package/esm2022/lib/form/components/widgets/attach-file/file-properties-table/file-properties-table-cloud.component.mjs +0 -136
- package/esm2022/lib/form/components/widgets/data-table/data-table-adapter.widget.mjs +0 -107
- package/esm2022/lib/form/components/widgets/data-table/data-table.widget.mjs +0 -120
- package/esm2022/lib/form/components/widgets/data-table/helpers/data-table-path-parser.helper.mjs +0 -122
- package/esm2022/lib/form/components/widgets/date/date-cloud.widget.mjs +0 -189
- package/esm2022/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +0 -85
- package/esm2022/lib/form/components/widgets/display-rich-text/display-rich-text.widget.mjs +0 -80
- package/esm2022/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +0 -464
- package/esm2022/lib/form/components/widgets/dropdown/validators.mjs +0 -29
- package/esm2022/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +0 -46
- package/esm2022/lib/form/components/widgets/group/group-cloud.widget.mjs +0 -82
- package/esm2022/lib/form/components/widgets/people/people-cloud.widget.mjs +0 -91
- package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer-wrapper/properties-viewer-wrapper.component.mjs +0 -81
- package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +0 -53
- package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.schema.mjs +0 -86
- package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +0 -116
- package/esm2022/lib/form/components/widgets/upload/upload-cloud.widget.mjs +0 -187
- package/esm2022/lib/form/form-cloud.module.mjs +0 -99
- package/esm2022/lib/form/models/form-cloud-representation.model.mjs +0 -48
- package/esm2022/lib/form/models/task-variable-cloud.model.mjs +0 -28
- package/esm2022/lib/form/public-api.mjs +0 -44
- package/esm2022/lib/form/services/content-cloud-node-selector.service.mjs +0 -120
- package/esm2022/lib/form/services/display-mode.service.mjs +0 -146
- package/esm2022/lib/form/services/form-cloud.service.interface.mjs +0 -18
- package/esm2022/lib/form/services/form-cloud.service.mjs +0 -201
- package/esm2022/lib/form/services/form-definition-selector-cloud.service.interface.mjs +0 -18
- package/esm2022/lib/form/services/form-definition-selector-cloud.service.mjs +0 -51
- package/esm2022/lib/form/services/form-utils.service.mjs +0 -37
- package/esm2022/lib/form/services/process-cloud-content.service.mjs +0 -71
- package/esm2022/lib/form/services/spinner/form-cloud-spinner.service.mjs +0 -52
- package/esm2022/lib/group/components/group-cloud.component.mjs +0 -423
- package/esm2022/lib/group/group-cloud.module.mjs +0 -33
- package/esm2022/lib/group/models/identity-group.model.mjs +0 -18
- package/esm2022/lib/group/public-api.mjs +0 -21
- package/esm2022/lib/group/services/identity-group.service.mjs +0 -89
- package/esm2022/lib/models/application-version.model.mjs +0 -21
- package/esm2022/lib/models/constant-values.type.mjs +0 -18
- package/esm2022/lib/models/data-column-custom-data.mjs +0 -18
- package/esm2022/lib/models/date-cloud-filter.model.mjs +0 -31
- package/esm2022/lib/models/date-format-cloud.model.mjs +0 -18
- package/esm2022/lib/models/engine-event-cloud.model.mjs +0 -18
- package/esm2022/lib/models/filter-cloud-model.mjs +0 -128
- package/esm2022/lib/models/process-definition-cloud.model.mjs +0 -32
- package/esm2022/lib/models/process-instance-variable.model.mjs +0 -18
- package/esm2022/lib/models/process-variable-filter.model.mjs +0 -18
- package/esm2022/lib/models/task-cloud.model.mjs +0 -23
- package/esm2022/lib/models/task-list-sorting.model.mjs +0 -40
- package/esm2022/lib/models/variable-definition.mjs +0 -18
- package/esm2022/lib/people/components/people-cloud.component.mjs +0 -498
- package/esm2022/lib/people/models/identity-user.model.mjs +0 -18
- package/esm2022/lib/people/people-cloud.module.mjs +0 -33
- package/esm2022/lib/people/public-api.mjs +0 -21
- package/esm2022/lib/people/services/identity-user.service.mjs +0 -119
- package/esm2022/lib/process/process-cloud.module.mjs +0 -40
- package/esm2022/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.mjs +0 -801
- package/esm2022/lib/process/process-filters/components/process-filter-dialog/process-filter-dialog-cloud.component.mjs +0 -58
- package/esm2022/lib/process/process-filters/components/process-filters/process-filters-cloud.component.mjs +0 -292
- package/esm2022/lib/process/process-filters/models/process-filter-cloud.model.mjs +0 -170
- package/esm2022/lib/process/process-filters/process-filters-cloud.module.mjs +0 -44
- package/esm2022/lib/process/process-filters/public-api.mjs +0 -23
- package/esm2022/lib/process/process-filters/services/process-filter-cloud.service.mjs +0 -408
- package/esm2022/lib/process/process-header/components/process-header-cloud.component.mjs +0 -137
- package/esm2022/lib/process/process-header/process-header-cloud.module.mjs +0 -33
- package/esm2022/lib/process/process-header/public-api.mjs +0 -19
- package/esm2022/lib/process/process-list/components/process-list-cloud.component.mjs +0 -593
- package/esm2022/lib/process/process-list/datatable/process-list-datatable-adapter.mjs +0 -31
- package/esm2022/lib/process/process-list/models/perocess-instance-cloud-view.model.mjs +0 -18
- package/esm2022/lib/process/process-list/models/process-cloud-preferences.mjs +0 -24
- package/esm2022/lib/process/process-list/models/process-cloud-preset.model.mjs +0 -37
- package/esm2022/lib/process/process-list/models/process-cloud-query-request.model.mjs +0 -107
- package/esm2022/lib/process/process-list/models/process-list-sorting.model.mjs +0 -40
- package/esm2022/lib/process/process-list/process-list-cloud.module.mjs +0 -45
- package/esm2022/lib/process/process-list/public-api.mjs +0 -25
- package/esm2022/lib/process/process-list/services/process-list-cloud.service.mjs +0 -253
- package/esm2022/lib/process/process-list/services/process-task-list-cloud.service.mjs +0 -109
- package/esm2022/lib/process/public-api.mjs +0 -23
- package/esm2022/lib/process/services/process-cloud.service.mjs +0 -105
- package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +0 -465
- package/esm2022/lib/process/start-process/models/process-instance-cloud.model.mjs +0 -18
- package/esm2022/lib/process/start-process/models/process-payload-cloud.model.mjs +0 -26
- package/esm2022/lib/process/start-process/models/process-with-form-payload-cloud.model.mjs +0 -26
- package/esm2022/lib/process/start-process/public-api.mjs +0 -21
- package/esm2022/lib/process/start-process/services/start-process-cloud.service.mjs +0 -125
- package/esm2022/lib/process-services-cloud.module.mjs +0 -98
- package/esm2022/lib/providers.mjs +0 -45
- package/esm2022/lib/screen/components/screen-cloud/screen-cloud.component.mjs +0 -186
- package/esm2022/lib/screen/models/screen-cloud.model.mjs +0 -18
- package/esm2022/lib/screen/public-api.mjs +0 -18
- package/esm2022/lib/services/base-cloud.service.mjs +0 -83
- package/esm2022/lib/services/cloud-token.service.mjs +0 -23
- package/esm2022/lib/services/form-fields.interfaces.mjs +0 -55
- package/esm2022/lib/services/local-preference-cloud.service.mjs +0 -122
- package/esm2022/lib/services/notification-cloud.service.mjs +0 -45
- package/esm2022/lib/services/preference-cloud.interface.mjs +0 -18
- package/esm2022/lib/services/public-api.mjs +0 -28
- package/esm2022/lib/services/screen-rendering.service.mjs +0 -30
- package/esm2022/lib/services/task-list-cloud.service.interface.mjs +0 -18
- package/esm2022/lib/services/user-preference-cloud.service.mjs +0 -105
- package/esm2022/lib/services/variable-mapper.sevice.mjs +0 -77
- package/esm2022/lib/services/web-socket.service.mjs +0 -146
- package/esm2022/lib/task/models/start-task-cloud-request.model.mjs +0 -32
- package/esm2022/lib/task/models/task-details-cloud.model.mjs +0 -26
- package/esm2022/lib/task/models/task.model.mjs +0 -23
- package/esm2022/lib/task/public-api.mjs +0 -26
- package/esm2022/lib/task/services/task-cloud.service.mjs +0 -272
- package/esm2022/lib/task/task-cloud.module.mjs +0 -45
- package/esm2022/lib/task/task-filters/components/base-task-filters-cloud.component.mjs +0 -59
- package/esm2022/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.mjs +0 -467
- package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.mjs +0 -205
- package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.mjs +0 -317
- package/esm2022/lib/task/task-filters/components/service-task-filters/service-task-filters-cloud.component.mjs +0 -146
- package/esm2022/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +0 -142
- package/esm2022/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +0 -72
- package/esm2022/lib/task/task-filters/components/task-filters/task-filters-cloud.component.mjs +0 -255
- package/esm2022/lib/task/task-filters/models/filter-cloud.model.mjs +0 -207
- package/esm2022/lib/task/task-filters/public-api.mjs +0 -27
- package/esm2022/lib/task/task-filters/services/service-task-filter-cloud.service.mjs +0 -283
- package/esm2022/lib/task/task-filters/services/task-filter-cloud.service.mjs +0 -392
- package/esm2022/lib/task/task-filters/task-filters-cloud.module.mjs +0 -56
- package/esm2022/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.mjs +0 -231
- package/esm2022/lib/task/task-form/components/user-task-cloud/complete-task/complete-task.directive.mjs +0 -89
- package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +0 -309
- package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/claim-task/claim-task-cloud.directive.mjs +0 -101
- package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/unclaim-task/unclaim-task-cloud.directive.mjs +0 -87
- package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +0 -85
- package/esm2022/lib/task/task-form/public-api.mjs +0 -21
- package/esm2022/lib/task/task-form/task-form.module.mjs +0 -36
- package/esm2022/lib/task/task-header/components/task-header-cloud.component.mjs +0 -280
- package/esm2022/lib/task/task-header/public-api.mjs +0 -19
- package/esm2022/lib/task/task-header/task-header-cloud.module.mjs +0 -33
- package/esm2022/lib/task/task-list/components/base-task-list-cloud.component.mjs +0 -331
- package/esm2022/lib/task/task-list/components/service-task-list/service-task-list-cloud.component.mjs +0 -115
- package/esm2022/lib/task/task-list/components/task-list/datatable/task-list-datatable-adapter.mjs +0 -31
- package/esm2022/lib/task/task-list/components/task-list/task-list-cloud.component.mjs +0 -389
- package/esm2022/lib/task/task-list/models/service-task-cloud.model.mjs +0 -18
- package/esm2022/lib/task/task-list/models/task-cloud-view.model.mjs +0 -18
- package/esm2022/lib/task/task-list/public-api.mjs +0 -23
- package/esm2022/lib/task/task-list/services/service-task-list-cloud.service.mjs +0 -115
- package/esm2022/lib/task/task-list/services/task-list-cloud.service.mjs +0 -178
- package/esm2022/lib/task/task-list/task-list-cloud.module.mjs +0 -35
- package/esm2022/lib/types.mjs +0 -18
- package/esm2022/public-api.mjs +0 -40
- /package/lib/screen/{models → components/screen-cloud}/screen-cloud.model.d.ts +0 -0
|
@@ -1,593 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
import { Component, ContentChild, EventEmitter, Inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
18
|
-
import { AppConfigService, ColumnsSelectorComponent, CustomEmptyContentTemplateDirective, CustomLoadingContentTemplateDirective, DataTableComponent, DataTableSchema, EmptyContentComponent, LoadingContentTemplateDirective, MainMenuDataTableTemplateDirective, NoContentTemplateDirective, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
|
|
19
|
-
import { ProcessListCloudService } from '../services/process-list-cloud.service';
|
|
20
|
-
import { BehaviorSubject, combineLatest, of, Subject, throwError } from 'rxjs';
|
|
21
|
-
import { processCloudPresetsDefaultModel } from '../models/process-cloud-preset.model';
|
|
22
|
-
import { ProcessListRequestModel, ProcessQueryCloudRequestModel } from '../models/process-cloud-query-request.model';
|
|
23
|
-
import { ProcessListCloudSortingModel, ProcessListRequestSortingModel } from '../models/process-list-sorting.model';
|
|
24
|
-
import { catchError, filter, map, switchMap, take, tap } from 'rxjs/operators';
|
|
25
|
-
import { PROCESS_LISTS_PREFERENCES_SERVICE_TOKEN } from '../../../services/cloud-token.service';
|
|
26
|
-
import { ProcessListCloudPreferences } from '../models/process-cloud-preferences';
|
|
27
|
-
import { ProcessListDatatableAdapter } from '../datatable/process-list-datatable-adapter';
|
|
28
|
-
import { PROCESS_LIST_CUSTOM_VARIABLE_COLUMN } from '../../../models/data-column-custom-data';
|
|
29
|
-
import { VariableMapperService } from '../../../services/variable-mapper.sevice';
|
|
30
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
31
|
-
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
32
|
-
import { TranslatePipe } from '@ngx-translate/core';
|
|
33
|
-
import { NgIf } from '@angular/common';
|
|
34
|
-
import * as i0 from "@angular/core";
|
|
35
|
-
import * as i1 from "../services/process-list-cloud.service";
|
|
36
|
-
import * as i2 from "@alfresco/adf-core";
|
|
37
|
-
import * as i3 from "../../../services/variable-mapper.sevice";
|
|
38
|
-
import * as i4 from "@angular/material/progress-spinner";
|
|
39
|
-
const PRESET_KEY = 'adf-cloud-process-list.presets';
|
|
40
|
-
/* eslint-disable @typescript-eslint/brace-style */
|
|
41
|
-
export class ProcessListCloudComponent extends DataTableSchema {
|
|
42
|
-
constructor(processListCloudService, appConfigService, userPreferences, cloudPreferenceService, variableMapperService) {
|
|
43
|
-
super(appConfigService, PRESET_KEY, processCloudPresetsDefaultModel);
|
|
44
|
-
this.processListCloudService = processListCloudService;
|
|
45
|
-
this.userPreferences = userPreferences;
|
|
46
|
-
this.cloudPreferenceService = cloudPreferenceService;
|
|
47
|
-
this.variableMapperService = variableMapperService;
|
|
48
|
-
/** The name of the application. */
|
|
49
|
-
this.appName = '';
|
|
50
|
-
/** Name of the initiator of the process. */
|
|
51
|
-
this.initiator = '';
|
|
52
|
-
/** Filter the processes to display only the ones with this ID. */
|
|
53
|
-
this.id = '';
|
|
54
|
-
/** Filter the processes to display only the ones with this name. */
|
|
55
|
-
this.name = '';
|
|
56
|
-
/** Filter the processes to display only the ones with this process definition ID. */
|
|
57
|
-
this.processDefinitionId = '';
|
|
58
|
-
/** Filter the processes to display only the ones with this process definition name. */
|
|
59
|
-
this.processDefinitionName = '';
|
|
60
|
-
/** Filter the processes to display only the ones with this process definition key. */
|
|
61
|
-
this.processDefinitionKey = '';
|
|
62
|
-
/** Filter the processes to display only the ones with this status. */
|
|
63
|
-
this.status = '';
|
|
64
|
-
/** Filter the processes to display only the ones with this businessKey value. */
|
|
65
|
-
this.businessKey = '';
|
|
66
|
-
/** Filter the processes. Display only process with startedDate greater then the supplied date. */
|
|
67
|
-
this.startFrom = '';
|
|
68
|
-
/** Filter the processes. Display only process with startedDate less than the supplied date. */
|
|
69
|
-
this.startTo = '';
|
|
70
|
-
/** Filter the processes. Display only process with completedFrom equal to the supplied date. */
|
|
71
|
-
this.completedFrom = '';
|
|
72
|
-
/** Filter the processes. Display only process with completedTo equal to the supplied date. */
|
|
73
|
-
this.completedTo = '';
|
|
74
|
-
/** Filter the processes. Display only process with completedDate equal to the supplied date. */
|
|
75
|
-
this.completedDate = '';
|
|
76
|
-
/** Filter the processes. Display only process with suspendedFrom equal to the supplied date. */
|
|
77
|
-
this.suspendedFrom = '';
|
|
78
|
-
/** Filter the processes. Display only process with suspendedTo equal to the supplied date. */
|
|
79
|
-
this.suspendedTo = '';
|
|
80
|
-
/**
|
|
81
|
-
* Row selection mode. Can be "none", "single" or "multiple".
|
|
82
|
-
* For multiple mode, you can use Cmd (macOS) or Ctrl (Win) modifier
|
|
83
|
-
* key to toggle selection for multiple rows.
|
|
84
|
-
*/
|
|
85
|
-
this.selectionMode = 'single'; // none|single|multiple
|
|
86
|
-
/** Toggles multiple row selection and renders checkboxes at the beginning of each row */
|
|
87
|
-
this.multiselect = false;
|
|
88
|
-
/** Toggles the data actions column. */
|
|
89
|
-
this.showActions = false;
|
|
90
|
-
/** Toggles the provided actions. */
|
|
91
|
-
this.showProvidedActions = false;
|
|
92
|
-
/** Position of the actions dropdown menu. Can be "left" or "right". */
|
|
93
|
-
this.actionsPosition = 'right'; // left|right
|
|
94
|
-
/** Toggles the sticky header mode. */
|
|
95
|
-
this.stickyHeader = false;
|
|
96
|
-
/** Toggles custom context menu for the component. */
|
|
97
|
-
this.showContextMenu = false;
|
|
98
|
-
/** Toggle main datatable actions. */
|
|
99
|
-
this.showMainDatatableActions = false;
|
|
100
|
-
/** Toggles main datatable column resizing feature. */
|
|
101
|
-
this.isResizingEnabled = false;
|
|
102
|
-
/** From Activiti 8.7.0 forward, use 'POST' value and array inputs to enable advanced filtering. */
|
|
103
|
-
this.searchApiMethod = 'GET';
|
|
104
|
-
/**
|
|
105
|
-
* Filter the processes. Display only processes with names matching any of the supplied strings.
|
|
106
|
-
* This input will be used only if searchApiMethod input is provided with 'POST' value.
|
|
107
|
-
*/
|
|
108
|
-
this.names = [];
|
|
109
|
-
/**
|
|
110
|
-
* Filter the processes. Display only processes with instance Ids matching any of the supplied strings.
|
|
111
|
-
* This input will be used only if searchApiMethod input is provided with 'POST' value.
|
|
112
|
-
*/
|
|
113
|
-
this.ids = [];
|
|
114
|
-
/**
|
|
115
|
-
* Filter the processes. Display only processes with parent Ids matching any of the supplied strings.
|
|
116
|
-
* This input will be used only if searchApiMethod input is provided with 'POST' value.
|
|
117
|
-
*/
|
|
118
|
-
this.parentIds = [];
|
|
119
|
-
/**
|
|
120
|
-
* Filter the processes. Display only processes with definition names matching any of the supplied strings.
|
|
121
|
-
* This input will be used only if searchApiMethod input is provided with 'POST' value.
|
|
122
|
-
*/
|
|
123
|
-
this.processDefinitionNames = [];
|
|
124
|
-
/**
|
|
125
|
-
* Filter the processes. Display only processes started by any of the users whose usernames are present in the array.
|
|
126
|
-
* This input will be used only if searchApiMethod input is provided with 'POST' value.
|
|
127
|
-
*/
|
|
128
|
-
this.initiators = [];
|
|
129
|
-
/**
|
|
130
|
-
* Filter the processes. Display only processes present in any of the specified app versions.
|
|
131
|
-
* This input will be used only if searchApiMethod input is provided with 'POST' value.
|
|
132
|
-
*/
|
|
133
|
-
this.appVersions = [];
|
|
134
|
-
/**
|
|
135
|
-
* Filter the processes. Display only processes with provided statuses.
|
|
136
|
-
* This input will be used only if searchApiMethod input is provided with 'POST' value.
|
|
137
|
-
*/
|
|
138
|
-
this.statuses = [];
|
|
139
|
-
/** Emitted when a row in the process list is clicked. */
|
|
140
|
-
this.rowClick = new EventEmitter();
|
|
141
|
-
/** Emitted when rows are selected/unselected. */
|
|
142
|
-
this.rowsSelected = new EventEmitter();
|
|
143
|
-
/** Emitted before the context menu is displayed for a row. */
|
|
144
|
-
this.showRowContextMenu = new EventEmitter();
|
|
145
|
-
/** Emitted before the actions menu is displayed for a row. */
|
|
146
|
-
this.showRowActionsMenu = new EventEmitter();
|
|
147
|
-
/** Emitted when the user executes a row action. */
|
|
148
|
-
this.executeRowAction = new EventEmitter();
|
|
149
|
-
/** Emitted when an error occurs while loading the list of process instances from the server. */
|
|
150
|
-
this.error = new EventEmitter();
|
|
151
|
-
/** Emitted when the list of process instances has been loaded successfully from the server. */
|
|
152
|
-
this.success = new EventEmitter();
|
|
153
|
-
this.skipCount = 0;
|
|
154
|
-
this.isLoading = true;
|
|
155
|
-
this.rows = [];
|
|
156
|
-
this.defaultSorting = { key: 'startDate', direction: 'desc' };
|
|
157
|
-
this.fetchProcessesTrigger$ = new Subject();
|
|
158
|
-
this.size = userPreferences.paginationSize;
|
|
159
|
-
this.userPreferences.select(UserPreferenceValues.PaginationSize).subscribe((pageSize) => {
|
|
160
|
-
this.size = pageSize;
|
|
161
|
-
});
|
|
162
|
-
this.pagination = new BehaviorSubject({
|
|
163
|
-
maxItems: this.size,
|
|
164
|
-
skipCount: 0,
|
|
165
|
-
totalItems: 0
|
|
166
|
-
});
|
|
167
|
-
combineLatest([this.isColumnSchemaCreated$, this.fetchProcessesTrigger$])
|
|
168
|
-
.pipe(tap(() => (this.isLoading = true)), filter(([isColumnSchemaCreated]) => isColumnSchemaCreated), switchMap(() => {
|
|
169
|
-
if (this.searchApiMethod === 'POST') {
|
|
170
|
-
const requestNode = this.createProcessListRequestNode();
|
|
171
|
-
this.processListRequestNode = requestNode;
|
|
172
|
-
return this.processListCloudService.fetchProcessList(requestNode).pipe(take(1));
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
const requestNode = this.createRequestNode();
|
|
176
|
-
this.requestNode = requestNode;
|
|
177
|
-
return this.processListCloudService.getProcessByRequest(requestNode).pipe(take(1));
|
|
178
|
-
}
|
|
179
|
-
}), takeUntilDestroyed())
|
|
180
|
-
.subscribe({
|
|
181
|
-
next: (processes) => {
|
|
182
|
-
this.rows = this.variableMapperService.mapVariablesByColumnTitle(processes.list.entries, this.columns);
|
|
183
|
-
this.dataAdapter = new ProcessListDatatableAdapter(this.rows, this.columns);
|
|
184
|
-
this.success.emit(processes);
|
|
185
|
-
this.isLoading = false;
|
|
186
|
-
this.pagination.next(processes.list.pagination);
|
|
187
|
-
},
|
|
188
|
-
error: (error) => {
|
|
189
|
-
console.error(error);
|
|
190
|
-
this.error.emit(error);
|
|
191
|
-
this.isLoading = false;
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
ngAfterContentInit() {
|
|
196
|
-
this.cloudPreferenceService
|
|
197
|
-
.getPreferences(this.appName)
|
|
198
|
-
.pipe(take(1), map((preferences) => {
|
|
199
|
-
const preferencesList = preferences?.list?.entries || [];
|
|
200
|
-
const columnsOrder = preferencesList.find((preference) => preference.entry.key === ProcessListCloudPreferences.columnOrder);
|
|
201
|
-
const columnsVisibility = preferencesList.find((preference) => preference.entry.key === ProcessListCloudPreferences.columnsVisibility);
|
|
202
|
-
const columnsWidths = preferencesList.find((preference) => preference.entry.key === ProcessListCloudPreferences.columnsWidths);
|
|
203
|
-
return {
|
|
204
|
-
columnsOrder: columnsOrder ? JSON.parse(columnsOrder.entry.value) : undefined,
|
|
205
|
-
columnsVisibility: columnsVisibility ? JSON.parse(columnsVisibility.entry.value) : this.columnsVisibility,
|
|
206
|
-
columnsWidths: columnsWidths ? JSON.parse(columnsWidths.entry.value) : undefined
|
|
207
|
-
};
|
|
208
|
-
}), catchError((error) => {
|
|
209
|
-
if (error.status === 404) {
|
|
210
|
-
return of({
|
|
211
|
-
columnsOrder: undefined,
|
|
212
|
-
columnsVisibility: this.columnsVisibility,
|
|
213
|
-
columnsWidths: undefined
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
else {
|
|
217
|
-
return throwError(error);
|
|
218
|
-
}
|
|
219
|
-
}))
|
|
220
|
-
.subscribe(({ columnsOrder, columnsVisibility, columnsWidths }) => {
|
|
221
|
-
if (columnsVisibility) {
|
|
222
|
-
this.columnsVisibility = columnsVisibility;
|
|
223
|
-
}
|
|
224
|
-
if (columnsOrder) {
|
|
225
|
-
this.columnsOrder = columnsOrder;
|
|
226
|
-
}
|
|
227
|
-
if (columnsWidths) {
|
|
228
|
-
this.columnsWidths = columnsWidths;
|
|
229
|
-
}
|
|
230
|
-
this.createDatatableSchema();
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
ngOnChanges(changes) {
|
|
234
|
-
if (this.isPropertyChanged(changes, 'sorting')) {
|
|
235
|
-
this.formatSorting(changes['sorting'].currentValue);
|
|
236
|
-
}
|
|
237
|
-
if (this.isAnyPropertyChanged(changes)) {
|
|
238
|
-
this.reload();
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
getCurrentId() {
|
|
242
|
-
return this.currentInstanceId;
|
|
243
|
-
}
|
|
244
|
-
reload() {
|
|
245
|
-
if (this.appName || this.appName === '') {
|
|
246
|
-
this.fetchProcessesTrigger$.next();
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
this.rows = [];
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
isAnyPropertyChanged(changes) {
|
|
253
|
-
for (const property in changes) {
|
|
254
|
-
if (this.isPropertyChanged(changes, property)) {
|
|
255
|
-
return true;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
return false;
|
|
259
|
-
}
|
|
260
|
-
isPropertyChanged(changes, property) {
|
|
261
|
-
return Object.prototype.hasOwnProperty.call(changes, property);
|
|
262
|
-
}
|
|
263
|
-
isListEmpty() {
|
|
264
|
-
return !this.rows || this.rows.length === 0;
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Resets the pagination values
|
|
268
|
-
*/
|
|
269
|
-
resetPagination() {
|
|
270
|
-
this.skipCount = 0;
|
|
271
|
-
this.size = this.userPreferences.paginationSize;
|
|
272
|
-
this.pagination.next({
|
|
273
|
-
skipCount: 0,
|
|
274
|
-
maxItems: this.size
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Resets the pagination values and
|
|
279
|
-
* Reloads the process list
|
|
280
|
-
*
|
|
281
|
-
* @param pagination Pagination values to be set
|
|
282
|
-
*/
|
|
283
|
-
updatePagination(pagination) {
|
|
284
|
-
this.size = pagination.maxItems;
|
|
285
|
-
this.skipCount = pagination.skipCount;
|
|
286
|
-
this.pagination.next(pagination);
|
|
287
|
-
this.reload();
|
|
288
|
-
}
|
|
289
|
-
onSortingChanged(event) {
|
|
290
|
-
this.setSorting(event.detail);
|
|
291
|
-
this.formatSorting(this.sorting);
|
|
292
|
-
this.reload();
|
|
293
|
-
}
|
|
294
|
-
onColumnOrderChanged(columnsWithNewOrder) {
|
|
295
|
-
this.columnsOrder = columnsWithNewOrder.map((column) => column.id);
|
|
296
|
-
this.createColumns();
|
|
297
|
-
if (this.appName) {
|
|
298
|
-
this.cloudPreferenceService.updatePreference(this.appName, ProcessListCloudPreferences.columnOrder, this.columnsOrder);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
onColumnsVisibilityChange(columns) {
|
|
302
|
-
this.columnsVisibility = columns.reduce((visibleColumnsMap, column) => {
|
|
303
|
-
if (column.isHidden !== undefined) {
|
|
304
|
-
visibleColumnsMap[column.id] = !column.isHidden;
|
|
305
|
-
}
|
|
306
|
-
return visibleColumnsMap;
|
|
307
|
-
}, {});
|
|
308
|
-
this.createColumns();
|
|
309
|
-
this.createDatatableSchema();
|
|
310
|
-
if (this.appName) {
|
|
311
|
-
this.cloudPreferenceService.updatePreference(this.appName, ProcessListCloudPreferences.columnsVisibility, this.columnsVisibility);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
onColumnsWidthChanged(columns) {
|
|
315
|
-
const newColumnsWidths = columns.reduce((widthsColumnsMap, column) => {
|
|
316
|
-
if (column.width) {
|
|
317
|
-
widthsColumnsMap[column.id] = Math.ceil(column.width);
|
|
318
|
-
}
|
|
319
|
-
return widthsColumnsMap;
|
|
320
|
-
}, {});
|
|
321
|
-
this.columnsWidths = { ...this.columnsWidths, ...newColumnsWidths };
|
|
322
|
-
this.createColumns();
|
|
323
|
-
if (this.appName) {
|
|
324
|
-
this.cloudPreferenceService.updatePreference(this.appName, ProcessListCloudPreferences.columnsWidths, this.columnsWidths);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
onRowClick(item) {
|
|
328
|
-
this.currentInstanceId = item.value.getValue('id');
|
|
329
|
-
this.rowClick.emit(this.currentInstanceId);
|
|
330
|
-
}
|
|
331
|
-
onRowSelect(event) {
|
|
332
|
-
this.selectedInstances = [...event.detail.selection];
|
|
333
|
-
this.rowsSelected.emit(this.selectedInstances);
|
|
334
|
-
}
|
|
335
|
-
onRowUnselect(event) {
|
|
336
|
-
this.selectedInstances = [...event.detail.selection];
|
|
337
|
-
this.rowsSelected.emit(this.selectedInstances);
|
|
338
|
-
}
|
|
339
|
-
onRowKeyUp(event) {
|
|
340
|
-
if (event.detail.keyboardEvent.key === 'Enter') {
|
|
341
|
-
event.preventDefault();
|
|
342
|
-
this.currentInstanceId = event.detail.row.getValue('id');
|
|
343
|
-
this.rowClick.emit(this.currentInstanceId);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
onShowRowActionsMenu(event) {
|
|
347
|
-
this.showRowActionsMenu.emit(event);
|
|
348
|
-
}
|
|
349
|
-
onShowRowContextMenu(event) {
|
|
350
|
-
this.showRowContextMenu.emit(event);
|
|
351
|
-
}
|
|
352
|
-
onExecuteRowAction(row) {
|
|
353
|
-
this.executeRowAction.emit(row);
|
|
354
|
-
}
|
|
355
|
-
createProcessListRequestNode() {
|
|
356
|
-
const requestNode = {
|
|
357
|
-
appName: this.appName,
|
|
358
|
-
pagination: {
|
|
359
|
-
maxItems: this.size,
|
|
360
|
-
skipCount: this.skipCount
|
|
361
|
-
},
|
|
362
|
-
sorting: this.getProcessListRequestSorting(),
|
|
363
|
-
name: this.names,
|
|
364
|
-
id: this.ids,
|
|
365
|
-
parentId: this.parentIds,
|
|
366
|
-
processDefinitionName: this.processDefinitionNames,
|
|
367
|
-
initiator: this.initiators,
|
|
368
|
-
appVersion: this.appVersions,
|
|
369
|
-
status: this.statuses,
|
|
370
|
-
lastModifiedFrom: this.lastModifiedFrom?.toISOString() || '',
|
|
371
|
-
lasModifiedTo: this.lastModifiedTo?.toISOString() || '',
|
|
372
|
-
startFrom: this.startFrom,
|
|
373
|
-
startTo: this.startTo,
|
|
374
|
-
completedFrom: this.completedFrom,
|
|
375
|
-
completedTo: this.completedTo,
|
|
376
|
-
suspendedFrom: this.suspendedFrom,
|
|
377
|
-
suspendedTo: this.suspendedTo,
|
|
378
|
-
processVariableKeys: this.getVariableDefinitionsRequestModel(),
|
|
379
|
-
processVariableFilters: this.processVariables
|
|
380
|
-
};
|
|
381
|
-
return new ProcessListRequestModel(requestNode);
|
|
382
|
-
}
|
|
383
|
-
getProcessListRequestSorting() {
|
|
384
|
-
if (!this.sorting?.length) {
|
|
385
|
-
return new ProcessListRequestSortingModel({
|
|
386
|
-
orderBy: this.defaultSorting.key,
|
|
387
|
-
direction: this.defaultSorting.direction,
|
|
388
|
-
isFieldProcessVariable: false
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
const orderBy = this.sorting[0]?.orderBy;
|
|
392
|
-
const direction = this.sorting[0]?.direction;
|
|
393
|
-
const orderByColumn = this.columnList?.columns.find((column) => column.key === orderBy);
|
|
394
|
-
const isFieldProcessVariable = orderByColumn?.customData?.columnType === 'process-variable-column';
|
|
395
|
-
if (isFieldProcessVariable) {
|
|
396
|
-
const processDefinitionKey = orderByColumn.customData.variableDefinitionsPayload[0].split('/')[0];
|
|
397
|
-
const variableName = orderByColumn.customData.variableDefinitionsPayload[0].split('/')[1];
|
|
398
|
-
return new ProcessListRequestSortingModel({
|
|
399
|
-
orderBy: variableName,
|
|
400
|
-
direction,
|
|
401
|
-
isFieldProcessVariable: true,
|
|
402
|
-
processVariableData: {
|
|
403
|
-
processDefinitionKey,
|
|
404
|
-
type: orderByColumn.customData.variableType
|
|
405
|
-
}
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
else {
|
|
409
|
-
return new ProcessListRequestSortingModel({ orderBy, direction, isFieldProcessVariable: false });
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
createRequestNode() {
|
|
413
|
-
const requestNode = {
|
|
414
|
-
appName: this.appName,
|
|
415
|
-
appVersion: this.getAppVersions(),
|
|
416
|
-
maxItems: this.size,
|
|
417
|
-
skipCount: this.skipCount,
|
|
418
|
-
initiator: this.initiator,
|
|
419
|
-
id: this.id,
|
|
420
|
-
environmentId: this.environmentId,
|
|
421
|
-
name: this.name,
|
|
422
|
-
parentId: this.parentId,
|
|
423
|
-
processDefinitionId: this.processDefinitionId,
|
|
424
|
-
processDefinitionName: this.processDefinitionName,
|
|
425
|
-
processDefinitionKey: this.processDefinitionKey,
|
|
426
|
-
status: this.status,
|
|
427
|
-
businessKey: this.businessKey,
|
|
428
|
-
lastModifiedFrom: this.lastModifiedFrom,
|
|
429
|
-
lastModifiedTo: this.lastModifiedTo,
|
|
430
|
-
startFrom: this.startFrom,
|
|
431
|
-
startTo: this.startTo,
|
|
432
|
-
completedFrom: this.completedFrom,
|
|
433
|
-
completedTo: this.completedTo,
|
|
434
|
-
suspendedFrom: this.suspendedFrom,
|
|
435
|
-
suspendedTo: this.suspendedTo,
|
|
436
|
-
completedDate: this.completedDate,
|
|
437
|
-
sorting: this.sorting,
|
|
438
|
-
variableKeys: this.getVariableDefinitionsRequestModel()
|
|
439
|
-
};
|
|
440
|
-
return new ProcessQueryCloudRequestModel(requestNode);
|
|
441
|
-
}
|
|
442
|
-
getAppVersions() {
|
|
443
|
-
return this.appVersion instanceof Array ? this.appVersion.join(',') : this.appVersion ? String(this.appVersion) : '';
|
|
444
|
-
}
|
|
445
|
-
setSorting(sortDetail) {
|
|
446
|
-
const sorting = sortDetail
|
|
447
|
-
? {
|
|
448
|
-
orderBy: sortDetail.key,
|
|
449
|
-
direction: sortDetail.direction.toUpperCase()
|
|
450
|
-
}
|
|
451
|
-
: { ...this.defaultSorting };
|
|
452
|
-
this.sorting = [new ProcessListCloudSortingModel(sorting)];
|
|
453
|
-
}
|
|
454
|
-
formatSorting(sorting) {
|
|
455
|
-
this.formattedSorting = this.isValidSorting(sorting) ? [sorting[0].orderBy, sorting[0].direction.toLocaleLowerCase()] : null;
|
|
456
|
-
}
|
|
457
|
-
isValidSorting(sorting) {
|
|
458
|
-
return sorting.length && sorting[0].orderBy && sorting[0].direction;
|
|
459
|
-
}
|
|
460
|
-
getVariableDefinitionsRequestModel() {
|
|
461
|
-
const displayedVariableColumns = this.columns
|
|
462
|
-
.filter((column) => column.customData?.columnType === PROCESS_LIST_CUSTOM_VARIABLE_COLUMN && column.isHidden !== true)
|
|
463
|
-
.map((column) => {
|
|
464
|
-
const variableDefinitionsPayload = column.customData.variableDefinitionsPayload;
|
|
465
|
-
return variableDefinitionsPayload;
|
|
466
|
-
})
|
|
467
|
-
.reduce((variablesPayload, payload) => [...variablesPayload, ...payload], []);
|
|
468
|
-
return displayedVariableColumns.length ? displayedVariableColumns : undefined;
|
|
469
|
-
}
|
|
470
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProcessListCloudComponent, deps: [{ token: i1.ProcessListCloudService }, { token: i2.AppConfigService }, { token: i2.UserPreferencesService }, { token: PROCESS_LISTS_PREFERENCES_SERVICE_TOKEN }, { token: i3.VariableMapperService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
471
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ProcessListCloudComponent, isStandalone: true, selector: "adf-cloud-process-list", inputs: { appName: "appName", appVersion: "appVersion", initiator: "initiator", id: "id", environmentId: "environmentId", name: "name", parentId: "parentId", processDefinitionId: "processDefinitionId", processDefinitionName: "processDefinitionName", processDefinitionKey: "processDefinitionKey", status: "status", businessKey: "businessKey", lastModifiedFrom: "lastModifiedFrom", lastModifiedTo: "lastModifiedTo", startFrom: "startFrom", startTo: "startTo", completedFrom: "completedFrom", completedTo: "completedTo", completedDate: "completedDate", suspendedFrom: "suspendedFrom", suspendedTo: "suspendedTo", selectionMode: "selectionMode", multiselect: "multiselect", sorting: "sorting", showActions: "showActions", showProvidedActions: "showProvidedActions", actionsPosition: "actionsPosition", stickyHeader: "stickyHeader", showContextMenu: "showContextMenu", showMainDatatableActions: "showMainDatatableActions", isResizingEnabled: "isResizingEnabled", searchApiMethod: "searchApiMethod", names: "names", ids: "ids", parentIds: "parentIds", processDefinitionNames: "processDefinitionNames", initiators: "initiators", appVersions: "appVersions", statuses: "statuses", processVariables: "processVariables" }, outputs: { rowClick: "rowClick", rowsSelected: "rowsSelected", showRowContextMenu: "showRowContextMenu", showRowActionsMenu: "showRowActionsMenu", executeRowAction: "executeRowAction", error: "error", success: "success" }, queries: [{ propertyName: "emptyCustomContent", first: true, predicate: CustomEmptyContentTemplateDirective, descendants: true }, { propertyName: "customLoadingContent", first: true, predicate: CustomLoadingContentTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "dataTable", first: true, predicate: DataTableComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<adf-datatable\n [rows]=\"rows\"\n [columns]=\"columns\"\n [data]=\"dataAdapter\"\n [stickyHeader]=\"stickyHeader\"\n [loading]=\"isLoading\"\n [sorting]=\"formattedSorting\"\n [selectionMode]=\"selectionMode\"\n [multiselect]=\"multiselect\"\n [actions]=\"showActions\"\n [actionsPosition]=\"actionsPosition\"\n [contextMenu]=\"showContextMenu\"\n [showMainDatatableActions]=\"showMainDatatableActions\"\n [showProvidedActions]=\"showProvidedActions\"\n [isResizingEnabled]=\"isResizingEnabled\"\n (showRowActionsMenu)=\"onShowRowActionsMenu($event)\"\n (showRowContextMenu)=\"onShowRowContextMenu($event)\"\n (executeRowAction)=\"onExecuteRowAction($event)\"\n (rowClick)=\"onRowClick($any($event))\"\n (row-select)=\"onRowSelect($any($event))\"\n (row-unselect)=\"onRowUnselect($any($event))\"\n (row-keyup)=\"onRowKeyUp($any($event))\"\n (sorting-changed)=\"onSortingChanged($any($event))\"\n (columnOrderChanged)=\"onColumnOrderChanged($event)\"\n (columnsWidthChanged)=\"onColumnsWidthChanged($event)\"\n >\n <adf-loading-content-template>\n <ng-template>\n <mat-progress-spinner\n *ngIf=\"!customLoadingContent\"\n class=\"adf-cloud-process-list-loading-margin\"\n [color]=\"'primary'\"\n [mode]=\"'indeterminate'\" />\n <ng-content select=\"adf-custom-loading-content-template\" />\n </ng-template>\n </adf-loading-content-template>\n <adf-no-content-template>\n <ng-template>\n <adf-empty-content *ngIf=\"!emptyCustomContent\"\n icon=\"assessment\"\n [title]=\"'ADF_CLOUD_PROCESS_LIST.MESSAGES.TITLE' | translate\"\n [subtitle]=\"'ADF_CLOUD_PROCESS_LIST.MESSAGES.SUBTITLE'| translate\" />\n <ng-content select=\"adf-custom-empty-content-template\" />\n </ng-template>\n </adf-no-content-template>\n\n <adf-main-menu-datatable-template>\n <ng-template let-mainMenuTrigger>\n <adf-datatable-column-selector\n [columns]=\"columns\"\n [mainMenuTrigger]=\"mainMenuTrigger\"\n (submitColumnsVisibility)=\"onColumnsVisibilityChange($event)\" />\n </ng-template>\n </adf-main-menu-datatable-template>\n</adf-datatable>\n", styles: [".adf-cloud-process-list-loading-margin{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"], dependencies: [{ kind: "component", type: DataTableComponent, selector: "adf-datatable", inputs: ["data", "rows", "sorting", "columns", "selectionMode", "multiselect", "mainTableAction", "actions", "showMainDatatableActions", "showProvidedActions", "actionsPosition", "actionsVisibleOnHover", "fallbackThumbnail", "contextMenu", "rowStyle", "rowStyleClass", "showHeader", "stickyHeader", "loading", "noPermission", "rowMenuCacheEnabled", "resolverFn", "allowFiltering", "isResizingEnabled", "blurOnResize", "displayCheckboxesOnHover", "enableDragRows"], outputs: ["rowClick", "rowDblClick", "showRowContextMenu", "showRowActionsMenu", "executeRowAction", "columnOrderChanged", "columnsWidthChanged", "selectedItemsCountChanged", "dragDropped"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: ColumnsSelectorComponent, selector: "adf-datatable-column-selector", inputs: ["columns", "mainMenuTrigger", "columnsSorting", "maxColumnsVisible"], outputs: ["submitColumnsVisibility"] }, { kind: "directive", type: MainMenuDataTableTemplateDirective, selector: "adf-main-menu-datatable-template" }, { kind: "component", type: EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "directive", type: NoContentTemplateDirective, selector: "adf-no-content-template, no-content-template" }, { kind: "directive", type: LoadingContentTemplateDirective, selector: "adf-loading-content-template, loading-content-template" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
472
|
-
}
|
|
473
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProcessListCloudComponent, decorators: [{
|
|
474
|
-
type: Component,
|
|
475
|
-
args: [{ selector: 'adf-cloud-process-list', standalone: true, imports: [
|
|
476
|
-
DataTableComponent,
|
|
477
|
-
MatProgressSpinnerModule,
|
|
478
|
-
TranslatePipe,
|
|
479
|
-
ColumnsSelectorComponent,
|
|
480
|
-
MainMenuDataTableTemplateDirective,
|
|
481
|
-
EmptyContentComponent,
|
|
482
|
-
NoContentTemplateDirective,
|
|
483
|
-
LoadingContentTemplateDirective,
|
|
484
|
-
NgIf
|
|
485
|
-
], encapsulation: ViewEncapsulation.None, template: "<adf-datatable\n [rows]=\"rows\"\n [columns]=\"columns\"\n [data]=\"dataAdapter\"\n [stickyHeader]=\"stickyHeader\"\n [loading]=\"isLoading\"\n [sorting]=\"formattedSorting\"\n [selectionMode]=\"selectionMode\"\n [multiselect]=\"multiselect\"\n [actions]=\"showActions\"\n [actionsPosition]=\"actionsPosition\"\n [contextMenu]=\"showContextMenu\"\n [showMainDatatableActions]=\"showMainDatatableActions\"\n [showProvidedActions]=\"showProvidedActions\"\n [isResizingEnabled]=\"isResizingEnabled\"\n (showRowActionsMenu)=\"onShowRowActionsMenu($event)\"\n (showRowContextMenu)=\"onShowRowContextMenu($event)\"\n (executeRowAction)=\"onExecuteRowAction($event)\"\n (rowClick)=\"onRowClick($any($event))\"\n (row-select)=\"onRowSelect($any($event))\"\n (row-unselect)=\"onRowUnselect($any($event))\"\n (row-keyup)=\"onRowKeyUp($any($event))\"\n (sorting-changed)=\"onSortingChanged($any($event))\"\n (columnOrderChanged)=\"onColumnOrderChanged($event)\"\n (columnsWidthChanged)=\"onColumnsWidthChanged($event)\"\n >\n <adf-loading-content-template>\n <ng-template>\n <mat-progress-spinner\n *ngIf=\"!customLoadingContent\"\n class=\"adf-cloud-process-list-loading-margin\"\n [color]=\"'primary'\"\n [mode]=\"'indeterminate'\" />\n <ng-content select=\"adf-custom-loading-content-template\" />\n </ng-template>\n </adf-loading-content-template>\n <adf-no-content-template>\n <ng-template>\n <adf-empty-content *ngIf=\"!emptyCustomContent\"\n icon=\"assessment\"\n [title]=\"'ADF_CLOUD_PROCESS_LIST.MESSAGES.TITLE' | translate\"\n [subtitle]=\"'ADF_CLOUD_PROCESS_LIST.MESSAGES.SUBTITLE'| translate\" />\n <ng-content select=\"adf-custom-empty-content-template\" />\n </ng-template>\n </adf-no-content-template>\n\n <adf-main-menu-datatable-template>\n <ng-template let-mainMenuTrigger>\n <adf-datatable-column-selector\n [columns]=\"columns\"\n [mainMenuTrigger]=\"mainMenuTrigger\"\n (submitColumnsVisibility)=\"onColumnsVisibilityChange($event)\" />\n </ng-template>\n </adf-main-menu-datatable-template>\n</adf-datatable>\n", styles: [".adf-cloud-process-list-loading-margin{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"] }]
|
|
486
|
-
}], ctorParameters: () => [{ type: i1.ProcessListCloudService }, { type: i2.AppConfigService }, { type: i2.UserPreferencesService }, { type: undefined, decorators: [{
|
|
487
|
-
type: Inject,
|
|
488
|
-
args: [PROCESS_LISTS_PREFERENCES_SERVICE_TOKEN]
|
|
489
|
-
}] }, { type: i3.VariableMapperService }], propDecorators: { dataTable: [{
|
|
490
|
-
type: ViewChild,
|
|
491
|
-
args: [DataTableComponent]
|
|
492
|
-
}], emptyCustomContent: [{
|
|
493
|
-
type: ContentChild,
|
|
494
|
-
args: [CustomEmptyContentTemplateDirective]
|
|
495
|
-
}], customLoadingContent: [{
|
|
496
|
-
type: ContentChild,
|
|
497
|
-
args: [CustomLoadingContentTemplateDirective]
|
|
498
|
-
}], appName: [{
|
|
499
|
-
type: Input
|
|
500
|
-
}], appVersion: [{
|
|
501
|
-
type: Input
|
|
502
|
-
}], initiator: [{
|
|
503
|
-
type: Input
|
|
504
|
-
}], id: [{
|
|
505
|
-
type: Input
|
|
506
|
-
}], environmentId: [{
|
|
507
|
-
type: Input
|
|
508
|
-
}], name: [{
|
|
509
|
-
type: Input
|
|
510
|
-
}], parentId: [{
|
|
511
|
-
type: Input
|
|
512
|
-
}], processDefinitionId: [{
|
|
513
|
-
type: Input
|
|
514
|
-
}], processDefinitionName: [{
|
|
515
|
-
type: Input
|
|
516
|
-
}], processDefinitionKey: [{
|
|
517
|
-
type: Input
|
|
518
|
-
}], status: [{
|
|
519
|
-
type: Input
|
|
520
|
-
}], businessKey: [{
|
|
521
|
-
type: Input
|
|
522
|
-
}], lastModifiedFrom: [{
|
|
523
|
-
type: Input
|
|
524
|
-
}], lastModifiedTo: [{
|
|
525
|
-
type: Input
|
|
526
|
-
}], startFrom: [{
|
|
527
|
-
type: Input
|
|
528
|
-
}], startTo: [{
|
|
529
|
-
type: Input
|
|
530
|
-
}], completedFrom: [{
|
|
531
|
-
type: Input
|
|
532
|
-
}], completedTo: [{
|
|
533
|
-
type: Input
|
|
534
|
-
}], completedDate: [{
|
|
535
|
-
type: Input
|
|
536
|
-
}], suspendedFrom: [{
|
|
537
|
-
type: Input
|
|
538
|
-
}], suspendedTo: [{
|
|
539
|
-
type: Input
|
|
540
|
-
}], selectionMode: [{
|
|
541
|
-
type: Input
|
|
542
|
-
}], multiselect: [{
|
|
543
|
-
type: Input
|
|
544
|
-
}], sorting: [{
|
|
545
|
-
type: Input
|
|
546
|
-
}], showActions: [{
|
|
547
|
-
type: Input
|
|
548
|
-
}], showProvidedActions: [{
|
|
549
|
-
type: Input
|
|
550
|
-
}], actionsPosition: [{
|
|
551
|
-
type: Input
|
|
552
|
-
}], stickyHeader: [{
|
|
553
|
-
type: Input
|
|
554
|
-
}], showContextMenu: [{
|
|
555
|
-
type: Input
|
|
556
|
-
}], showMainDatatableActions: [{
|
|
557
|
-
type: Input
|
|
558
|
-
}], isResizingEnabled: [{
|
|
559
|
-
type: Input
|
|
560
|
-
}], searchApiMethod: [{
|
|
561
|
-
type: Input
|
|
562
|
-
}], names: [{
|
|
563
|
-
type: Input
|
|
564
|
-
}], ids: [{
|
|
565
|
-
type: Input
|
|
566
|
-
}], parentIds: [{
|
|
567
|
-
type: Input
|
|
568
|
-
}], processDefinitionNames: [{
|
|
569
|
-
type: Input
|
|
570
|
-
}], initiators: [{
|
|
571
|
-
type: Input
|
|
572
|
-
}], appVersions: [{
|
|
573
|
-
type: Input
|
|
574
|
-
}], statuses: [{
|
|
575
|
-
type: Input
|
|
576
|
-
}], processVariables: [{
|
|
577
|
-
type: Input
|
|
578
|
-
}], rowClick: [{
|
|
579
|
-
type: Output
|
|
580
|
-
}], rowsSelected: [{
|
|
581
|
-
type: Output
|
|
582
|
-
}], showRowContextMenu: [{
|
|
583
|
-
type: Output
|
|
584
|
-
}], showRowActionsMenu: [{
|
|
585
|
-
type: Output
|
|
586
|
-
}], executeRowAction: [{
|
|
587
|
-
type: Output
|
|
588
|
-
}], error: [{
|
|
589
|
-
type: Output
|
|
590
|
-
}], success: [{
|
|
591
|
-
type: Output
|
|
592
|
-
}] } });
|
|
593
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1saXN0LWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcHJvY2Vzcy9wcm9jZXNzLWxpc3QvY29tcG9uZW50cy9wcm9jZXNzLWxpc3QtY2xvdWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMtY2xvdWQvc3JjL2xpYi9wcm9jZXNzL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3Byb2Nlc3MtbGlzdC1jbG91ZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixtQ0FBbUMsRUFDbkMscUNBQXFDLEVBS3JDLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLCtCQUErQixFQUMvQixrQ0FBa0MsRUFDbEMsMEJBQTBCLEVBRzFCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDdkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2Q0FB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O2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sd0JBQXdCO3NCQUR2QixLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBUU4sS0FBSztzQkFESixLQUFLO2dCQVFOLEdBQUc7c0JBREYsS0FBSztnQkFRTixTQUFTO3NCQURSLEtBQUs7Z0JBUU4sc0JBQXNCO3NCQURyQixLQUFLO2dCQVFOLFVBQVU7c0JBRFQsS0FBSztnQkFRTixXQUFXO3NCQURWLEtBQUs7Z0JBUU4sUUFBUTtzQkFEUCxLQUFLO2dCQVFOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsTUFBTTtnQkFLUCxZQUFZO3NCQURYLE1BQU07Z0JBS1Asa0JBQWtCO3NCQURqQixNQUFNO2dCQUtQLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFLUCxnQkFBZ0I7c0JBRGYsTUFBTTtnQkFLUCxLQUFLO3NCQURKLE1BQU07Z0JBS1AsT0FBTztzQkFETixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgQ29sdW1uc1NlbGVjdG9yQ29tcG9uZW50LFxuICAgIEN1c3RvbUVtcHR5Q29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIEN1c3RvbUxvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgRGF0YUNlbGxFdmVudCxcbiAgICBEYXRhQ29sdW1uLFxuICAgIERhdGFSb3dBY3Rpb25FdmVudCxcbiAgICBEYXRhUm93RXZlbnQsXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICAgIERhdGFUYWJsZVNjaGVtYSxcbiAgICBFbXB0eUNvbnRlbnRDb21wb25lbnQsXG4gICAgTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBNYWluTWVudURhdGFUYWJsZVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE5vQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIFBhZ2luYXRlZENvbXBvbmVudCxcbiAgICBQYWdpbmF0aW9uTW9kZWwsXG4gICAgVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICBVc2VyUHJlZmVyZW5jZVZhbHVlc1xufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgUHJvY2Vzc0xpc3RDbG91ZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9jZXNzLWxpc3QtY2xvdWQuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBwcm9jZXNzQ2xvdWRQcmVzZXRzRGVmYXVsdE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3Byb2Nlc3MtY2xvdWQtcHJlc2V0Lm1vZGVsJztcbmltcG9ydCB7IFByb2Nlc3NMaXN0UmVxdWVzdE1vZGVsLCBQcm9jZXNzUXVlcnlDbG91ZFJlcXVlc3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9wcm9jZXNzLWNsb3VkLXF1ZXJ5LXJlcXVlc3QubW9kZWwnO1xuaW1wb3J0IHsgUHJvY2Vzc0xpc3RDbG91ZFNvcnRpbmdNb2RlbCwgUHJvY2Vzc0xpc3RSZXF1ZXN0U29ydGluZ01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3Byb2Nlc3MtbGlzdC1zb3J0aW5nLm1vZGVsJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFByZWZlcmVuY2VDbG91ZFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVmZXJlbmNlLWNsb3VkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQUk9DRVNTX0xJU1RTX1BSRUZFUkVOQ0VTX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jbG91ZC10b2tlbi5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2Nlc3NMaXN0Q2xvdWRQcmVmZXJlbmNlcyB9IGZyb20gJy4uL21vZGVscy9wcm9jZXNzLWNsb3VkLXByZWZlcmVuY2VzJztcbmltcG9ydCB7IFByb2Nlc3NMaXN0RGF0YXRhYmxlQWRhcHRlciB9IGZyb20gJy4uL2RhdGF0YWJsZS9wcm9jZXNzLWxpc3QtZGF0YXRhYmxlLWFkYXB0ZXInO1xuaW1wb3J0IHsgUFJPQ0VTU19MSVNUX0NVU1RPTV9WQVJJQUJMRV9DT0xVTU4sIFByb2Nlc3NMaXN0RGF0YUNvbHVtbkN1c3RvbURhdGEgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZGF0YS1jb2x1bW4tY3VzdG9tLWRhdGEnO1xuaW1wb3J0IHsgVmFyaWFibGVNYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmFyaWFibGUtbWFwcGVyLnNldmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBQcm9jZXNzVmFyaWFibGVGaWx0ZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9wcm9jZXNzLXZhcmlhYmxlLWZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5jb25zdCBQUkVTRVRfS0VZID0gJ2FkZi1jbG91ZC1wcm9jZXNzLWxpc3QucHJlc2V0cyc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9icmFjZS1zdHlsZSAqL1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1wcm9jZXNzLWxpc3QnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBEYXRhVGFibGVDb21wb25lbnQsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgQ29sdW1uc1NlbGVjdG9yQ29tcG9uZW50LFxuICAgICAgICBNYWluTWVudURhdGFUYWJsZVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBFbXB0eUNvbnRlbnRDb21wb25lbnQsXG4gICAgICAgIE5vQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBMb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ0lmXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvY2Vzcy1saXN0LWNsb3VkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9jZXNzLWxpc3QtY2xvdWQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NMaXN0Q2xvdWRDb21wb25lbnRcbiAgICBleHRlbmRzIERhdGFUYWJsZVNjaGVtYTxQcm9jZXNzTGlzdERhdGFDb2x1bW5DdXN0b21EYXRhPlxuICAgIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRJbml0LCBQYWdpbmF0ZWRDb21wb25lbnRcbntcbiAgICBAVmlld0NoaWxkKERhdGFUYWJsZUNvbXBvbmVudCkgZGF0YVRhYmxlOiBEYXRhVGFibGVDb21wb25lbnQ7XG5cbiAgICBAQ29udGVudENoaWxkKEN1c3RvbUVtcHR5Q29udGVudFRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIGVtcHR5Q3VzdG9tQ29udGVudDogQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKEN1c3RvbUxvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tTG9hZGluZ0NvbnRlbnQ6IEN1c3RvbUxvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwTmFtZTogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogVGhlIHZlcnNpb24gb2YgdGhlIGFwcGxpY2F0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwVmVyc2lvbjogbnVtYmVyIHwgbnVtYmVyW107XG5cbiAgICAvKiogTmFtZSBvZiB0aGUgaW5pdGlhdG9yIG9mIHRoZSBwcm9jZXNzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5pdGlhdG9yOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBGaWx0ZXIgdGhlIHByb2Nlc3NlcyB0byBkaXNwbGF5IG9ubHkgdGhlIG9uZXMgd2l0aCB0aGlzIElELiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzIHRvIGRpc3BsYXkgb25seSB0aGUgb25lcyB3aXRoIHRoaXMgZW52aXJvbm1lbnQgSUQuICovXG4gICAgQElucHV0KClcbiAgICBlbnZpcm9ubWVudElkOiBzdHJpbmc7XG5cbiAgICAvKiogRmlsdGVyIHRoZSBwcm9jZXNzZXMgdG8gZGlzcGxheSBvbmx5IHRoZSBvbmVzIHdpdGggdGhpcyBuYW1lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmFtZTogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogRmlsdGVyIHRoZSBwcm9jZXNzZXMgdG8gZGlzcGxheSBvbmx5IHRoZSBvbmVzIHdpdGggdGhpcyBwYXJlbnRJZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBhcmVudElkPzogc3RyaW5nO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzIHRvIGRpc3BsYXkgb25seSB0aGUgb25lcyB3aXRoIHRoaXMgcHJvY2VzcyBkZWZpbml0aW9uIElELiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc0RlZmluaXRpb25JZDogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogRmlsdGVyIHRoZSBwcm9jZXNzZXMgdG8gZGlzcGxheSBvbmx5IHRoZSBvbmVzIHdpdGggdGhpcyBwcm9jZXNzIGRlZmluaXRpb24gbmFtZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHByb2Nlc3NEZWZpbml0aW9uTmFtZTogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogRmlsdGVyIHRoZSBwcm9jZXNzZXMgdG8gZGlzcGxheSBvbmx5IHRoZSBvbmVzIHdpdGggdGhpcyBwcm9jZXNzIGRlZmluaXRpb24ga2V5LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc0RlZmluaXRpb25LZXk6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzIHRvIGRpc3BsYXkgb25seSB0aGUgb25lcyB3aXRoIHRoaXMgc3RhdHVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhdHVzOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBGaWx0ZXIgdGhlIHByb2Nlc3NlcyB0byBkaXNwbGF5IG9ubHkgdGhlIG9uZXMgd2l0aCB0aGlzIGJ1c2luZXNzS2V5IHZhbHVlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnVzaW5lc3NLZXk6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2VzcyB3aXRoIGxhc3RNb2RpZmllZFRvIGVxdWFsIHRvIHRoZSBzdXBwbGllZCBkYXRlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGFzdE1vZGlmaWVkRnJvbTogRGF0ZTtcblxuICAgIC8qKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3Mgd2l0aCBsYXN0TW9kaWZpZWRUbyBlcXVhbCB0byB0aGUgc3VwcGxpZWQgZGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxhc3RNb2RpZmllZFRvOiBEYXRlO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2VzcyB3aXRoIHN0YXJ0ZWREYXRlIGdyZWF0ZXIgdGhlbiB0aGUgc3VwcGxpZWQgZGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXJ0RnJvbTogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogRmlsdGVyIHRoZSBwcm9jZXNzZXMuIERpc3BsYXkgb25seSBwcm9jZXNzIHdpdGggc3RhcnRlZERhdGUgbGVzcyB0aGFuIHRoZSBzdXBwbGllZCBkYXRlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRUbzogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogRmlsdGVyIHRoZSBwcm9jZXNzZXMuIERpc3BsYXkgb25seSBwcm9jZXNzIHdpdGggY29tcGxldGVkRnJvbSBlcXVhbCB0byB0aGUgc3VwcGxpZWQgZGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbXBsZXRlZEZyb206IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2VzcyB3aXRoIGNvbXBsZXRlZFRvIGVxdWFsIHRvIHRoZSBzdXBwbGllZCBkYXRlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29tcGxldGVkVG86IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2VzcyB3aXRoIGNvbXBsZXRlZERhdGUgZXF1YWwgdG8gdGhlIHN1cHBsaWVkIGRhdGUuICovXG4gICAgQElucHV0KClcbiAgICBjb21wbGV0ZWREYXRlOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3Mgd2l0aCBzdXNwZW5kZWRGcm9tIGVxdWFsIHRvIHRoZSBzdXBwbGllZCBkYXRlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3VzcGVuZGVkRnJvbTogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogRmlsdGVyIHRoZSBwcm9jZXNzZXMuIERpc3BsYXkgb25seSBwcm9jZXNzIHdpdGggc3VzcGVuZGVkVG8gZXF1YWwgdG8gdGhlIHN1cHBsaWVkIGRhdGUuICovXG4gICAgQElucHV0KClcbiAgICBzdXNwZW5kZWRUbzogc3RyaW5nID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBSb3cgc2VsZWN0aW9uIG1vZGUuIENhbiBiZSBcIm5vbmVcIiwgXCJzaW5nbGVcIiBvciBcIm11bHRpcGxlXCIuXG4gICAgICogRm9yIG11bHRpcGxlIG1vZGUsIHlvdSBjYW4gdXNlIENtZCAobWFjT1MpIG9yIEN0cmwgKFdpbikgbW9kaWZpZXJcbiAgICAgKiBrZXkgdG8gdG9nZ2xlIHNlbGVjdGlvbiBmb3IgbXVsdGlwbGUgcm93cy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbk1vZGU6IHN0cmluZyA9ICdzaW5nbGUnOyAvLyBub25lfHNpbmdsZXxtdWx0aXBsZVxuXG4gICAgLyoqIFRvZ2dsZXMgbXVsdGlwbGUgcm93IHNlbGVjdGlvbiBhbmQgcmVuZGVycyBjaGVja2JveGVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCByb3cgKi9cbiAgICBASW5wdXQoKVxuICAgIG11bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiBvYmplY3RzIHNwZWNpZnlpbmcgdGhlIHNvcnQgb3JkZXIgYW5kIGRpcmVjdGlvbiBmb3IgdGhlXG4gICAgICogbGlzdC4gVGhlIHNvcnQgcGFyYW1ldGVycyBhcmUgZm9yIEJFIHNvcnRpbmcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzb3J0aW5nOiBQcm9jZXNzTGlzdENsb3VkU29ydGluZ01vZGVsW107XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgZGF0YSBhY3Rpb25zIGNvbHVtbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgcHJvdmlkZWQgYWN0aW9ucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dQcm92aWRlZEFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBQb3NpdGlvbiBvZiB0aGUgYWN0aW9ucyBkcm9wZG93biBtZW51LiBDYW4gYmUgXCJsZWZ0XCIgb3IgXCJyaWdodFwiLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uc1Bvc2l0aW9uOiBzdHJpbmcgPSAncmlnaHQnOyAvLyBsZWZ0fHJpZ2h0XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgc3RpY2t5IGhlYWRlciBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyBjdXN0b20gY29udGV4dCBtZW51IGZvciB0aGUgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0NvbnRleHRNZW51OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlIG1haW4gZGF0YXRhYmxlIGFjdGlvbnMuICovXG4gICAgQElucHV0KClcbiAgICBzaG93TWFpbkRhdGF0YWJsZUFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIG1haW4gZGF0YXRhYmxlIGNvbHVtbiByZXNpemluZyBmZWF0dXJlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNSZXNpemluZ0VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBGcm9tIEFjdGl2aXRpIDguNy4wIGZvcndhcmQsIHVzZSAnUE9TVCcgdmFsdWUgYW5kIGFycmF5IGlucHV0cyB0byBlbmFibGUgYWR2YW5jZWQgZmlsdGVyaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoQXBpTWV0aG9kOiAnR0VUJyB8ICdQT1NUJyA9ICdHRVQnO1xuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIHRoZSBwcm9jZXNzZXMuIERpc3BsYXkgb25seSBwcm9jZXNzZXMgd2l0aCBuYW1lcyBtYXRjaGluZyBhbnkgb2YgdGhlIHN1cHBsaWVkIHN0cmluZ3MuXG4gICAgICogVGhpcyBpbnB1dCB3aWxsIGJlIHVzZWQgb25seSBpZiBzZWFyY2hBcGlNZXRob2QgaW5wdXQgaXMgcHJvdmlkZWQgd2l0aCAnUE9TVCcgdmFsdWUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBuYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2Vzc2VzIHdpdGggaW5zdGFuY2UgSWRzIG1hdGNoaW5nIGFueSBvZiB0aGUgc3VwcGxpZWQgc3RyaW5ncy5cbiAgICAgKiBUaGlzIGlucHV0IHdpbGwgYmUgdXNlZCBvbmx5IGlmIHNlYXJjaEFwaU1ldGhvZCBpbnB1dCBpcyBwcm92aWRlZCB3aXRoICdQT1NUJyB2YWx1ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2Vzc2VzIHdpdGggcGFyZW50IElkcyBtYXRjaGluZyBhbnkgb2YgdGhlIHN1cHBsaWVkIHN0cmluZ3MuXG4gICAgICogVGhpcyBpbnB1dCB3aWxsIGJlIHVzZWQgb25seSBpZiBzZWFyY2hBcGlNZXRob2QgaW5wdXQgaXMgcHJvdmlkZWQgd2l0aCAnUE9TVCcgdmFsdWUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwYXJlbnRJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3NlcyB3aXRoIGRlZmluaXRpb24gbmFtZXMgbWF0Y2hpbmcgYW55IG9mIHRoZSBzdXBwbGllZCBzdHJpbmdzLlxuICAgICAqIFRoaXMgaW5wdXQgd2lsbCBiZSB1c2VkIG9ubHkgaWYgc2VhcmNoQXBpTWV0aG9kIGlucHV0IGlzIHByb3ZpZGVkIHdpdGggJ1BPU1QnIHZhbHVlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc0RlZmluaXRpb25OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2Vzc2VzIHN0YXJ0ZWQgYnkgYW55IG9mIHRoZSB1c2VycyB3aG9zZSB1c2VybmFtZXMgYXJlIHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICAgICAqIFRoaXMgaW5wdXQgd2lsbCBiZSB1c2VkIG9ubHkgaWYgc2VhcmNoQXBpTWV0aG9kIGlucHV0IGlzIHByb3ZpZGVkIHdpdGggJ1BPU1QnIHZhbHVlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5pdGlhdG9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2Vzc2VzIHByZXNlbnQgaW4gYW55IG9mIHRoZSBzcGVjaWZpZWQgYXBwIHZlcnNpb25zLlxuICAgICAqIFRoaXMgaW5wdXQgd2lsbCBiZSB1c2VkIG9ubHkgaWYgc2VhcmNoQXBpTWV0aG9kIGlucHV0IGlzIHByb3ZpZGVkIHdpdGggJ1BPU1QnIHZhbHVlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwVmVyc2lvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3NlcyB3aXRoIHByb3ZpZGVkIHN0YXR1c2VzLlxuICAgICAqIFRoaXMgaW5wdXQgd2lsbCBiZSB1c2VkIG9ubHkgaWYgc2VhcmNoQXBpTWV0aG9kIGlucHV0IGlzIHByb3ZpZGVkIHdpdGggJ1BPU1QnIHZhbHVlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhdHVzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3NlcyB3aXRoIHNwZWNpZmljIHByb2Nlc3MgdmFyaWFibGVzLlxuICAgICAqIFRoaXMgaW5wdXQgd2lsbCBiZSB1c2VkIG9ubHkgaWYgc2VhcmNoQXBpTWV0aG9kIGlucHV0IGlzIHByb3ZpZGVkIHdpdGggJ1BPU1QnIHZhbHVlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc1ZhcmlhYmxlczogUHJvY2Vzc1ZhcmlhYmxlRmlsdGVyTW9kZWxbXTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSByb3cgaW4gdGhlIHByb2Nlc3MgbGlzdCBpcyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiByb3dzIGFyZSBzZWxlY3RlZC91bnNlbGVjdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJvd3NTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgICAvKiogRW1pdHRlZCBiZWZvcmUgdGhlIGNvbnRleHQgbWVudSBpcyBkaXNwbGF5ZWQgZm9yIGEgcm93LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNob3dSb3dDb250ZXh0TWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNlbGxFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIGJlZm9yZSB0aGUgYWN0aW9ucyBtZW51IGlzIGRpc3BsYXllZCBmb3IgYSByb3cuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2hvd1Jvd0FjdGlvbnNNZW51ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhQ2VsbEV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBleGVjdXRlcyBhIHJvdyBhY3Rpb24uICovXG4gICAgQE91dHB1dCgpXG4gICAgZXhlY3V0ZVJvd0FjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVJvd0FjdGlvbkV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgbG9hZGluZyB0aGUgbGlzdCBvZiBwcm9jZXNzIGluc3RhbmNlcyBmcm9tIHRoZSBzZXJ2ZXIuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGxpc3Qgb2YgcHJvY2VzcyBpbnN0YW5jZXMgaGFzIGJlZW4gbG9hZGVkIHN1Y2Nlc3NmdWxseSBmcm9tIHRoZSBzZXJ2ZXIuICovXG4gICAgQE91dHB1dCgpXG4gICAgc3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgcGFnaW5hdGlvbjogQmVoYXZpb3JTdWJqZWN0PFBhZ2luYXRpb25Nb2RlbD47XG4gICAgc2l6ZTogbnVtYmVyO1xuICAgIHNraXBDb3VudDogbnVtYmVyID0gMDtcbiAgICBjdXJyZW50SW5zdGFuY2VJZDogc3RyaW5nO1xuICAgIHNlbGVjdGVkSW5zdGFuY2VzOiBhbnlbXTtcbiAgICBpc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgcm93czogYW55W10gPSBbXTtcbiAgICBmb3JtYXR0ZWRTb3J0aW5nOiBhbnlbXTtcbiAgICByZXF1ZXN0Tm9kZTogUHJvY2Vzc1F1ZXJ5Q2xvdWRSZXF1ZXN0TW9kZWw7XG4gICAgcHJvY2Vzc0xpc3RSZXF1ZXN0Tm9kZTogUHJvY2Vzc0xpc3RSZXF1ZXN0TW9kZWw7XG4gICAgZGF0YUFkYXB0ZXI6IFByb2Nlc3NMaXN0RGF0YXRhYmxlQWRhcHRlcjtcblxuICAgIHByaXZhdGUgZGVmYXVsdFNvcnRpbmcgPSB7IGtleTogJ3N0YXJ0RGF0ZScsIGRpcmVjdGlvbjogJ2Rlc2MnIH07XG5cbiAgICBwcml2YXRlIGZldGNoUHJvY2Vzc2VzVHJpZ2dlciQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcHJvY2Vzc0xpc3RDbG91ZFNlcnZpY2U6IFByb2Nlc3NMaXN0Q2xvdWRTZXJ2aWNlLFxuICAgICAgICBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlczogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICAgICAgQEluamVjdChQUk9DRVNTX0xJU1RTX1BSRUZFUkVOQ0VTX1NFUlZJQ0VfVE9LRU4pIHByaXZhdGUgY2xvdWRQcmVmZXJlbmNlU2VydmljZTogUHJlZmVyZW5jZUNsb3VkU2VydmljZUludGVyZmFjZSxcbiAgICAgICAgcHJpdmF0ZSB2YXJpYWJsZU1hcHBlclNlcnZpY2U6IFZhcmlhYmxlTWFwcGVyU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihhcHBDb25maWdTZXJ2aWNlLCBQUkVTRVRfS0VZLCBwcm9jZXNzQ2xvdWRQcmVzZXRzRGVmYXVsdE1vZGVsKTtcbiAgICAgICAgdGhpcy5zaXplID0gdXNlclByZWZlcmVuY2VzLnBhZ2luYXRpb25TaXplO1xuICAgICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlcy5zZWxlY3QoVXNlclByZWZlcmVuY2VWYWx1ZXMuUGFnaW5hdGlvblNpemUpLnN1YnNjcmliZSgocGFnZVNpemUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2l6ZSA9IHBhZ2VTaXplO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uTW9kZWw+KHtcbiAgICAgICAgICAgIG1heEl0ZW1zOiB0aGlzLnNpemUsXG4gICAgICAgICAgICBza2lwQ291bnQ6IDAsXG4gICAgICAgICAgICB0b3RhbEl0ZW1zOiAwXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuaXNDb2x1bW5TY2hlbWFDcmVhdGVkJCwgdGhpcy5mZXRjaFByb2Nlc3Nlc1RyaWdnZXIkXSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSB0cnVlKSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChbaXNDb2x1bW5TY2hlbWFDcmVhdGVkXSkgPT4gaXNDb2x1bW5TY2hlbWFDcmVhdGVkKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hBcGlNZXRob2QgPT09ICdQT1NUJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdE5vZGUgPSB0aGlzLmNyZWF0ZVByb2Nlc3NMaXN0UmVxdWVzdE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0xpc3RSZXF1ZXN0Tm9kZSA9IHJlcXVlc3ROb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0xpc3RDbG91ZFNlcnZpY2UuZmV0Y2hQcm9jZXNzTGlzdChyZXF1ZXN0Tm9kZSkucGlwZSh0YWtlKDEpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3ROb2RlID0gdGhpcy5jcmVhdGVSZXF1ZXN0Tm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0Tm9kZSA9IHJlcXVlc3ROb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0xpc3RDbG91ZFNlcnZpY2UuZ2V0UHJvY2Vzc0J5UmVxdWVzdChyZXF1ZXN0Tm9kZSkucGlwZSh0YWtlKDEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAocHJvY2Vzc2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93cyA9IHRoaXMudmFyaWFibGVNYXBwZXJTZXJ2aWNlLm1hcFZhcmlhYmxlc0J5Q29sdW1uVGl0bGUocHJvY2Vzc2VzLmxpc3QuZW50cmllcywgdGhpcy5jb2x1bW5zKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFBZGFwdGVyID0gbmV3IFByb2Nlc3NMaXN0RGF0YXRhYmxlQWRhcHRlcih0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzLmVtaXQocHJvY2Vzc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uLm5leHQocHJvY2Vzc2VzLmxpc3QucGFnaW5hdGlvbik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5jbG91ZFByZWZlcmVuY2VTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UHJlZmVyZW5jZXModGhpcy5hcHBOYW1lKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBtYXAoKHByZWZlcmVuY2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWZlcmVuY2VzTGlzdCA9IHByZWZlcmVuY2VzPy5saXN0Py5lbnRyaWVzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zT3JkZXIgPSBwcmVmZXJlbmNlc0xpc3QuZmluZCgocHJlZmVyZW5jZSkgPT4gcHJlZmVyZW5jZS5lbnRyeS5rZXkgPT09IFByb2Nlc3NMaXN0Q2xvdWRQcmVmZXJlbmNlcy5jb2x1bW5PcmRlcik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnNWaXNpYmlsaXR5ID0gcHJlZmVyZW5jZXNMaXN0LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAocHJlZmVyZW5jZSkgPT4gcHJlZmVyZW5jZS5lbnRyeS5rZXkgPT09IFByb2Nlc3NMaXN0Q2xvdWRQcmVmZXJlbmNlcy5jb2x1bW5zVmlzaWJpbGl0eVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zV2lkdGhzID0gcHJlZmVyZW5jZXNMaXN0LmZpbmQoKHByZWZlcmVuY2UpID0+IHByZWZlcmVuY2UuZW50cnkua2V5ID09PSBQcm9jZXNzTGlzdENsb3VkUHJlZmVyZW5jZXMuY29sdW1uc1dpZHRocyk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNPcmRlcjogY29sdW1uc09yZGVyID8gSlNPTi5wYXJzZShjb2x1bW5zT3JkZXIuZW50cnkudmFsdWUpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc1Zpc2liaWxpdHk6IGNvbHVtbnNWaXNpYmlsaXR5ID8gSlNPTi5wYXJzZShjb2x1bW5zVmlzaWJpbGl0eS5lbnRyeS52YWx1ZSkgOiB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc1dpZHRoczogY29sdW1uc1dpZHRocyA/IEpTT04ucGFyc2UoY29sdW1uc1dpZHRocy5lbnRyeS52YWx1ZSkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc09yZGVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc1Zpc2liaWxpdHk6IHRoaXMuY29sdW1uc1Zpc2liaWxpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc1dpZHRoczogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbHVtbnNPcmRlciwgY29sdW1uc1Zpc2liaWxpdHksIGNvbHVtbnNXaWR0aHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5zVmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5ID0gY29sdW1uc1Zpc2liaWxpdHk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbnNPcmRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnNPcmRlciA9IGNvbHVtbnNPcmRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uc1dpZHRocykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnNXaWR0aHMgPSBjb2x1bW5zV2lkdGhzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRGF0YXRhYmxlU2NoZW1hKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAodGhpcy5pc1Byb3BlcnR5Q2hhbmdlZChjaGFuZ2VzLCAnc29ydGluZycpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdFNvcnRpbmcoY2hhbmdlc1snc29ydGluZyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0FueVByb3BlcnR5Q2hhbmdlZChjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEN1cnJlbnRJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5zdGFuY2VJZDtcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmFwcE5hbWUgfHwgdGhpcy5hcHBOYW1lID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5mZXRjaFByb2Nlc3Nlc1RyaWdnZXIkLm5leHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm93cyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FueVByb3BlcnR5Q2hhbmdlZChjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNQcm9wZXJ0eUNoYW5nZWQoY2hhbmdlcywgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNQcm9wZXJ0eUNoYW5nZWQoY2hhbmdlczogU2ltcGxlQ2hhbmdlcywgcHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsIHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBpc0xpc3RFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnJvd3MgfHwgdGhpcy5yb3dzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIHBhZ2luYXRpb24gdmFsdWVzXG4gICAgICovXG4gICAgcmVzZXRQYWdpbmF0aW9uKCkge1xuICAgICAgICB0aGlzLnNraXBDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHRoaXMudXNlclByZWZlcmVuY2VzLnBhZ2luYXRpb25TaXplO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24ubmV4dCh7XG4gICAgICAgICAgICBza2lwQ291bnQ6IDAsXG4gICAgICAgICAgICBtYXhJdGVtczogdGhpcy5zaXplXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgcGFnaW5hdGlvbiB2YWx1ZXMgYW5kXG4gICAgICogUmVsb2FkcyB0aGUgcHJvY2VzcyBsaXN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFnaW5hdGlvbiBQYWdpbmF0aW9uIHZhbHVlcyB0byBiZSBzZXRcbiAgICAgKi9cbiAgICB1cGRhdGVQYWdpbmF0aW9uKHBhZ2luYXRpb246IFBhZ2luYXRpb25Nb2RlbCkge1xuICAgICAgICB0aGlzLnNpemUgPSBwYWdpbmF0aW9uLm1heEl0ZW1zO1xuICAgICAgICB0aGlzLnNraXBDb3VudCA9IHBhZ2luYXRpb24uc2tpcENvdW50O1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24ubmV4dChwYWdpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICBvblNvcnRpbmdDaGFuZ2VkKGV2ZW50OiBDdXN0b21FdmVudCkge1xuICAgICAgICB0aGlzLnNldFNvcnRpbmcoZXZlbnQuZGV0YWlsKTtcbiAgICAgICAgdGhpcy5mb3JtYXRTb3J0aW5nKHRoaXMuc29ydGluZyk7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgb25Db2x1bW5PcmRlckNoYW5nZWQoY29sdW1uc1dpdGhOZXdPcmRlcjogRGF0YUNvbHVtbltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1uc09yZGVyID0gY29sdW1uc1dpdGhOZXdPcmRlci5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmlkKTtcbiAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW5zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXBwTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5jbG91ZFByZWZlcmVuY2VTZXJ2aWNlLnVwZGF0ZVByZWZlcmVuY2UodGhpcy5hcHBOYW1lLCBQcm9jZXNzTGlzdENsb3VkUHJlZmVyZW5jZXMuY29sdW1uT3JkZXIsIHRoaXMuY29sdW1uc09yZGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29sdW1uc1Zpc2liaWxpdHlDaGFuZ2UoY29sdW1uczogRGF0YUNvbHVtbltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1uc1Zpc2liaWxpdHkgPSBjb2x1bW5zLnJlZHVjZSgodmlzaWJsZUNvbHVtbnNNYXAsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5pc0hpZGRlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUNvbHVtbnNNYXBbY29sdW1uLmlkXSA9ICFjb2x1bW4uaXNIaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2aXNpYmxlQ29sdW1uc01hcDtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmNyZWF0ZURhdGF0YWJsZVNjaGVtYSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmFwcE5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRQcmVmZXJlbmNlU2VydmljZS51cGRhdGVQcmVmZXJlbmNlKHRoaXMuYXBwTmFtZSwgUHJvY2Vzc0xpc3RDbG91ZFByZWZlcmVuY2VzLmNvbHVtbnNWaXNpYmlsaXR5LCB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29sdW1uc1dpZHRoQ2hhbmdlZChjb2x1bW5zOiBEYXRhQ29sdW1uW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3Q29sdW1uc1dpZHRocyA9IGNvbHVtbnMucmVkdWNlKCh3aWR0aHNDb2x1bW5zTWFwLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ud2lkdGgpIHtcbiAgICAgICAgICAgICAgICB3aWR0aHNDb2x1bW5zTWFwW2NvbHVtbi5pZF0gPSBNYXRoLmNlaWwoY29sdW1uLndpZHRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3aWR0aHNDb2x1bW5zTWFwO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zV2lkdGhzID0geyAuLi50aGlzLmNvbHVtbnNXaWR0aHMsIC4uLm5ld0NvbHVtbnNXaWR0aHMgfTtcblxuICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcblxuICAgICAgICBpZiAodGhpcy5hcHBOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3VkUHJlZmVyZW5jZVNlcnZpY2UudXBkYXRlUHJlZmVyZW5jZSh0aGlzLmFwcE5hbWUsIFByb2Nlc3NMaXN0Q2xvdWRQcmVmZXJlbmNlcy5jb2x1bW5zV2lkdGhzLCB0aGlzLmNvbHVtbnNXaWR0aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Sb3dDbGljayhpdGVtOiBEYXRhUm93RXZlbnQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5zdGFuY2VJZCA9IGl0ZW0udmFsdWUuZ2V0VmFsdWUoJ2lkJyk7XG4gICAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh0aGlzLmN1cnJlbnRJbnN0YW5jZUlkKTtcbiAgICB9XG5cbiAgICBvblJvd1NlbGVjdChldmVudDogQ3VzdG9tRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluc3RhbmNlcyA9IFsuLi5ldmVudC5kZXRhaWwuc2VsZWN0aW9uXTtcbiAgICAgICAgdGhpcy5yb3dzU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICBvblJvd1Vuc2VsZWN0KGV2ZW50OiBDdXN0b21FdmVudCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW5zdGFuY2VzID0gWy4uLmV2ZW50LmRldGFpbC5zZWxlY3Rpb25dO1xuICAgICAgICB0aGlzLnJvd3NTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRJbnN0YW5jZXMpO1xuICAgIH1cblxuICAgIG9uUm93S2V5VXAoZXZlbnQ6IEN1c3RvbUV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5kZXRhaWwua2V5Ym9hcmRFdmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbnN0YW5jZUlkID0gZXZlbnQuZGV0YWlsLnJvdy5nZXRWYWx1ZSgnaWQnKTtcbiAgICAgICAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh0aGlzLmN1cnJlbnRJbnN0YW5jZUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2hvd1Jvd0FjdGlvbnNNZW51KGV2ZW50OiBEYXRhQ2VsbEV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2hvd1Jvd0FjdGlvbnNNZW51LmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uU2hvd1Jvd0NvbnRleHRNZW51KGV2ZW50OiBEYXRhQ2VsbEV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2hvd1Jvd0NvbnRleHRNZW51LmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uRXhlY3V0ZVJvd0FjdGlvbihyb3c6IERhdGFSb3dBY3Rpb25FdmVudCkge1xuICAgICAgICB0aGlzLmV4ZWN1dGVSb3dBY3Rpb24uZW1pdChyb3cpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUHJvY2Vzc0xpc3RSZXF1ZXN0Tm9kZSgpOiBQcm9jZXNzTGlzdFJlcXVlc3RNb2RlbCB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3ROb2RlOiBQcm9jZXNzTGlzdFJlcXVlc3RNb2RlbCA9IHtcbiAgICAgICAgICAgIGFwcE5hbWU6IHRoaXMuYXBwTmFtZSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICBtYXhJdGVtczogdGhpcy5zaXplLFxuICAgICAgICAgICAgICAgIHNraXBDb3VudDogdGhpcy5za2lwQ291bnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0aW5nOiB0aGlzLmdldFByb2Nlc3NMaXN0UmVxdWVzdFNvcnRpbmcoKSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZXMsXG4gICAgICAgICAgICBpZDogdGhpcy5pZHMsXG4gICAgICAgICAgICBwYXJlbnRJZDogdGhpcy5wYXJlbnRJZHMsXG4gICAgICAgICAgICBwcm9jZXNzRGVmaW5pdGlvbk5hbWU6IHRoaXMucHJvY2Vzc0RlZmluaXRpb25OYW1lcyxcbiAgICAgICAgICAgIGluaXRpYXRvcjogdGhpcy5pbml0aWF0b3JzLFxuICAgICAgICAgICAgYXBwVmVyc2lvbjogdGhpcy5hcHBWZXJzaW9ucyxcbiAgICAgICAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNlcyxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZEZyb206IHRoaXMubGFzdE1vZGlmaWVkRnJvbT8udG9JU09TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICAgIGxhc01vZGlmaWVkVG86IHRoaXMubGFzdE1vZGlmaWVkVG8/LnRvSVNPU3RyaW5nKCkgfHwgJycsXG4gICAgICAgICAgICBzdGFydEZyb206IHRoaXMuc3RhcnRGcm9tLFxuICAgICAgICAgICAgc3RhcnRUbzogdGhpcy5zdGFydFRvLFxuICAgICAgICAgICAgY29tcGxldGVkRnJvbTogdGhpcy5jb21wbGV0ZWRGcm9tLFxuICAgICAgICAgICAgY29tcGxldGVkVG86IHRoaXMuY29tcGxldGVkVG8sXG4gICAgICAgICAgICBzdXNwZW5kZWRGcm9tOiB0aGlzLnN1c3BlbmRlZEZyb20sXG4gICAgICAgICAgICBzdXNwZW5kZWRUbzogdGhpcy5zdXNwZW5kZWRUbyxcbiAgICAgICAgICAgIHByb2Nlc3NWYXJpYWJsZUtleXM6IHRoaXMuZ2V0VmFyaWFibGVEZWZpbml0aW9uc1JlcXVlc3RNb2RlbCgpLFxuICAgICAgICAgICAgcHJvY2Vzc1ZhcmlhYmxlRmlsdGVyczogdGhpcy5wcm9jZXNzVmFyaWFibGVzXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzTGlzdFJlcXVlc3RNb2RlbChyZXF1ZXN0Tm9kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9jZXNzTGlzdFJlcXVlc3RTb3J0aW5nKCk6IFByb2Nlc3NMaXN0UmVxdWVzdFNvcnRpbmdNb2RlbCB7XG4gICAgICAgIGlmICghdGhpcy5zb3J0aW5nPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc0xpc3RSZXF1ZXN0U29ydGluZ01vZGVsKHtcbiAgICAgICAgICAgICAgICBvcmRlckJ5OiB0aGlzLmRlZmF1bHRTb3J0aW5nLmtleSxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IHRoaXMuZGVmYXVsdFNvcnRpbmcuZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIGlzRmllbGRQcm9jZXNzVmFyaWFibGU6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9yZGVyQnkgPSB0aGlzLnNvcnRpbmdbMF0/Lm9yZGVyQnk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuc29ydGluZ1swXT8uZGlyZWN0aW9uO1xuICAgICAgICBjb25zdCBvcmRlckJ5Q29sdW1uID0gdGhpcy5jb2x1bW5MaXN0Py5jb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmtleSA9PT0gb3JkZXJCeSk7XG4gICAgICAgIGNvbnN0IGlzRmllbGRQcm9jZXNzVmFyaWFibGUgPSBvcmRlckJ5Q29sdW1uPy5jdXN0b21EYXRhPy5jb2x1bW5UeXBlID09PSAncHJvY2Vzcy12YXJpYWJsZS1jb2x1bW4nO1xuXG4gICAgICAgIGlmIChpc0ZpZWxkUHJvY2Vzc1ZhcmlhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzRGVmaW5pdGlvbktleSA9IG9yZGVyQnlDb2x1bW4uY3VzdG9tRGF0YS52YXJpYWJsZURlZmluaXRpb25zUGF5bG9hZFswXS5zcGxpdCgnLycpWzBdO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVOYW1lID0gb3JkZXJCeUNvbHVtbi5jdXN0b21EYXRhLnZhcmlhYmxlRGVmaW5pdGlvbnNQYXlsb2FkWzBdLnNwbGl0KCcvJylbMV07XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb2Nlc3NMaXN0UmVxdWVzdFNvcnRpbmdNb2RlbCh7XG4gICAgICAgICAgICAgICAgb3JkZXJCeTogdmFyaWFibGVOYW1lLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICBpc0ZpZWxkUHJvY2Vzc1ZhcmlhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NWYXJpYWJsZURhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IG9yZGVyQnlDb2x1bW4uY3VzdG9tRGF0YS52YXJpYWJsZVR5cGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc0xpc3RSZXF1ZXN0U29ydGluZ01vZGVsKHsgb3JkZXJCeSwgZGlyZWN0aW9uLCBpc0ZpZWxkUHJvY2Vzc1ZhcmlhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUmVxdWVzdE5vZGUoKTogUHJvY2Vzc1F1ZXJ5Q2xvdWRSZXF1ZXN0TW9kZWwge1xuICAgICAgICBjb25zdCByZXF1ZXN0Tm9kZSA9IHtcbiAgICAgICAgICAgIGFwcE5hbWU6IHRoaXMuYXBwTmFtZSxcbiAgICAgICAgICAgIGFwcFZlcnNpb246IHRoaXMuZ2V0QXBwVmVyc2lvbnMoKSxcbiAgICAgICAgICAgIG1heEl0ZW1zOiB0aGlzLnNpemUsXG4gICAgICAgICAgICBza2lwQ291bnQ6IHRoaXMuc2tpcENvdW50LFxuICAgICAgICAgICAgaW5pdGlhdG9yOiB0aGlzLmluaXRpYXRvcixcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgZW52aXJvbm1lbnRJZDogdGhpcy5lbnZpcm9ubWVudElkLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgcGFyZW50SWQ6IHRoaXMucGFyZW50SWQsXG4gICAgICAgICAgICBwcm9jZXNzRGVmaW5pdGlvbklkOiB0aGlzLnByb2Nlc3NEZWZpbml0aW9uSWQsXG4gICAgICAgICAgICBwcm9jZXNzRGVmaW5pdGlvbk5hbWU6IHRoaXMucHJvY2Vzc0RlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXk6IHRoaXMucHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgICAgICAgYnVzaW5lc3NLZXk6IHRoaXMuYnVzaW5lc3NLZXksXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWRGcm9tOiB0aGlzLmxhc3RNb2RpZmllZEZyb20sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWRUbzogdGhpcy5sYXN0TW9kaWZpZWRUbyxcbiAgICAgICAgICAgIHN0YXJ0RnJvbTogdGhpcy5zdGFydEZyb20sXG4gICAgICAgICAgICBzdGFydFRvOiB0aGlzLnN0YXJ0VG8sXG4gICAgICAgICAgICBjb21wbGV0ZWRGcm9tOiB0aGlzLmNvbXBsZXRlZEZyb20sXG4gICAgICAgICAgICBjb21wbGV0ZWRUbzogdGhpcy5jb21wbGV0ZWRUbyxcbiAgICAgICAgICAgIHN1c3BlbmRlZEZyb206IHRoaXMuc3VzcGVuZGVkRnJvbSxcbiAgICAgICAgICAgIHN1c3BlbmRlZFRvOiB0aGlzLnN1c3BlbmRlZFRvLFxuICAgICAgICAgICAgY29tcGxldGVkRGF0ZTogdGhpcy5jb21wbGV0ZWREYXRlLFxuICAgICAgICAgICAgc29ydGluZzogdGhpcy5zb3J0aW5nLFxuICAgICAgICAgICAgdmFyaWFibGVLZXlzOiB0aGlzLmdldFZhcmlhYmxlRGVmaW5pdGlvbnNSZXF1ZXN0TW9kZWwoKVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc1F1ZXJ5Q2xvdWRSZXF1ZXN0TW9kZWwocmVxdWVzdE5vZGUpO1xuICAgIH1cblxuICAgIGdldEFwcFZlcnNpb25zKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcFZlcnNpb24gaW5zdGFuY2VvZiBBcnJheSA/IHRoaXMuYXBwVmVyc2lvbi5qb2luKCcsJykgOiB0aGlzLmFwcFZlcnNpb24gPyBTdHJpbmcodGhpcy5hcHBWZXJzaW9uKSA6ICcnO1xuICAgIH1cblxuICAgIHNldFNvcnRpbmcoc29ydERldGFpbCkge1xuICAgICAgICBjb25zdCBzb3J0aW5nID0gc29ydERldGFpbFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBvcmRlckJ5OiBzb3J0RGV0YWlsLmtleSxcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogc29ydERldGFpbC5kaXJlY3Rpb24udG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHsgLi4udGhpcy5kZWZhdWx0U29ydGluZyB9O1xuICAgICAgICB0aGlzLnNvcnRpbmcgPSBbbmV3IFByb2Nlc3NMaXN0Q2xvdWRTb3J0aW5nTW9kZWwoc29ydGluZyldO1xuICAgIH1cblxuICAgIGZvcm1hdFNvcnRpbmcoc29ydGluZzogUHJvY2Vzc0xpc3RDbG91ZFNvcnRpbmdNb2RlbFtdKSB7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVkU29ydGluZyA9IHRoaXMuaXNWYWxpZFNvcnRpbmcoc29ydGluZykgPyBbc29ydGluZ1swXS5vcmRlckJ5LCBzb3J0aW5nWzBdLmRpcmVjdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpXSA6IG51bGw7XG4gICAgfVxuXG4gICAgaXNWYWxpZFNvcnRpbmcoc29ydGluZzogUHJvY2Vzc0xpc3RDbG91ZFNvcnRpbmdNb2RlbFtdKSB7XG4gICAgICAgIHJldHVybiBzb3J0aW5nLmxlbmd0aCAmJiBzb3J0aW5nWzBdLm9yZGVyQnkgJiYgc29ydGluZ1swXS5kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYXJpYWJsZURlZmluaXRpb25zUmVxdWVzdE1vZGVsKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgZGlzcGxheWVkVmFyaWFibGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5jdXN0b21EYXRhPy5jb2x1bW5UeXBlID09PSBQUk9DRVNTX0xJU1RfQ1VTVE9NX1ZBUklBQkxFX0NPTFVNTiAmJiBjb2x1bW4uaXNIaWRkZW4gIT09IHRydWUpXG4gICAgICAgICAgICAubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YXJpYWJsZURlZmluaXRpb25zUGF5bG9hZCA9IGNvbHVtbi5jdXN0b21EYXRhLnZhcmlhYmxlRGVmaW5pdGlvbnNQYXlsb2FkO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZURlZmluaXRpb25zUGF5bG9hZDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVkdWNlKCh2YXJpYWJsZXNQYXlsb2FkLCBwYXlsb2FkKSA9PiBbLi4udmFyaWFibGVzUGF5bG9hZCwgLi4ucGF5bG9hZF0sIFtdKTtcblxuICAgICAgICByZXR1cm4gZGlzcGxheWVkVmFyaWFibGVDb2x1bW5zLmxlbmd0aCA/IGRpc3BsYXllZFZhcmlhYmxlQ29sdW1ucyA6IHVuZGVmaW5lZDtcbiAgICB9XG59XG4iLCI8YWRmLWRhdGF0YWJsZVxuICAgICAgICBbcm93c109XCJyb3dzXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgIFtkYXRhXT1cImRhdGFBZGFwdGVyXCJcbiAgICAgICAgW3N0aWNreUhlYWRlcl09XCJzdGlja3lIZWFkZXJcIlxuICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxuICAgICAgICBbc29ydGluZ109XCJmb3JtYXR0ZWRTb3J0aW5nXCJcbiAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgICAgIFttdWx0aXNlbGVjdF09XCJtdWx0aXNlbGVjdFwiXG4gICAgICAgIFthY3Rpb25zXT1cInNob3dBY3Rpb25zXCJcbiAgICAgICAgW2FjdGlvbnNQb3NpdGlvbl09XCJhY3Rpb25zUG9zaXRpb25cIlxuICAgICAgICBbY29udGV4dE1lbnVdPVwic2hvd0NvbnRleHRNZW51XCJcbiAgICAgICAgW3Nob3dNYWluRGF0YXRhYmxlQWN0aW9uc109XCJzaG93TWFpbkRhdGF0YWJsZUFjdGlvbnNcIlxuICAgICAgICBbc2hvd1Byb3ZpZGVkQWN0aW9uc109XCJzaG93UHJvdmlkZWRBY3Rpb25zXCJcbiAgICAgICAgW2lzUmVzaXppbmdFbmFibGVkXT1cImlzUmVzaXppbmdFbmFibGVkXCJcbiAgICAgICAgKHNob3dSb3dBY3Rpb25zTWVudSk9XCJvblNob3dSb3dBY3Rpb25zTWVudSgkZXZlbnQpXCJcbiAgICAgICAgKHNob3dSb3dDb250ZXh0TWVudSk9XCJvblNob3dSb3dDb250ZXh0TWVudSgkZXZlbnQpXCJcbiAgICAgICAgKGV4ZWN1dGVSb3dBY3Rpb24pPVwib25FeGVjdXRlUm93QWN0aW9uKCRldmVudClcIlxuICAgICAgICAocm93Q2xpY2spPVwib25Sb3dDbGljaygkYW55KCRldmVudCkpXCJcbiAgICAgICAgKHJvdy1zZWxlY3QpPVwib25Sb3dTZWxlY3QoJGFueSgkZXZlbnQpKVwiXG4gICAgICAgIChyb3ctdW5zZWxlY3QpPVwib25Sb3dVbnNlbGVjdCgkYW55KCRldmVudCkpXCJcbiAgICAgICAgKHJvdy1rZXl1cCk9XCJvblJvd0tleVVwKCRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAoc29ydGluZy1jaGFuZ2VkKT1cIm9uU29ydGluZ0NoYW5nZWQoJGFueSgkZXZlbnQpKVwiXG4gICAgICAgIChjb2x1bW5PcmRlckNoYW5nZWQpPVwib25Db2x1bW5PcmRlckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIChjb2x1bW5zV2lkdGhDaGFuZ2VkKT1cIm9uQ29sdW1uc1dpZHRoQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8YWRmLWxvYWRpbmctY29udGVudC10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY3VzdG9tTG9hZGluZ0NvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jbG91ZC1wcm9jZXNzLWxpc3QtbG9hZGluZy1tYXJnaW5cIlxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiJ2luZGV0ZXJtaW5hdGUnXCIgLz5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhZGYtY3VzdG9tLWxvYWRpbmctY29udGVudC10ZW1wbGF0ZVwiIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2FkZi1sb2FkaW5nLWNvbnRlbnQtdGVtcGxhdGU+XG4gICAgICAgIDxhZGYtbm8tY29udGVudC10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8YWRmLWVtcHR5LWNvbnRlbnQgKm5nSWY9XCIhZW1wdHlDdXN0b21Db250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImFzc2Vzc21lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERl9DTE9VRF9QUk9DRVNTX0xJU1QuTUVTU0FHRVMuVElUTEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cIidBREZfQ0xPVURfUFJPQ0VTU19MSVNULk1FU1NBR0VTLlNVQlRJVExFJ3wgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9hZGYtbm8tY29udGVudC10ZW1wbGF0ZT5cblxuICAgICAgICA8YWRmLW1haW4tbWVudS1kYXRhdGFibGUtdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW1haW5NZW51VHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8YWRmLWRhdGF0YWJsZS1jb2x1bW4tc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgIFttYWluTWVudVRyaWdnZXJdPVwibWFpbk1lbnVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgKHN1Ym1pdENvbHVtbnNWaXNpYmlsaXR5KT1cIm9uQ29sdW1uc1Zpc2liaWxpdHlDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2FkZi1tYWluLW1lbnUtZGF0YXRhYmxlLXRlbXBsYXRlPlxuPC9hZGYtZGF0YXRhYmxlPlxuIl19
|