@bnsights/bbsf-admin-portal 1.1.4 → 1.1.6
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/README.md +6 -2
- package/bnsights-bbsf-admin-portal-1.1.6.tgz +0 -0
- package/esm2022/lib/Pages/ActiveDirectories/active-directories.component.mjs +1 -1
- package/esm2022/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +146 -146
- package/esm2022/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +152 -152
- package/esm2022/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +1 -1
- package/esm2022/lib/Pages/_layout/components/aside/aside.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/activation/activation.component.mjs +15 -15
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout-routing.module.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/error/error.component.mjs +7 -7
- package/esm2022/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.mjs +12 -12
- package/esm2022/lib/Pages/anonymouslayout/login/login.component.mjs +19 -19
- package/esm2022/lib/Pages/anonymouslayout/rest-password/rest-password.component.mjs +15 -15
- package/esm2022/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +12 -12
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +102 -102
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +7 -7
- package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +271 -271
- package/esm2022/lib/Pages/core/auth.module.mjs +1 -1
- package/esm2022/lib/Pages/core/authentication/admin.guard.mjs +1 -1
- package/esm2022/lib/Pages/core/authentication/auth.guard.mjs +3 -3
- package/esm2022/lib/Pages/departments/department/department.component.mjs +48 -48
- package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +32 -32
- package/esm2022/lib/Pages/documents/add-document/add-document.component.mjs +52 -52
- package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +20 -20
- package/esm2022/lib/Pages/documents/document-template-info/document-template-info.component.mjs +100 -100
- package/esm2022/lib/Pages/documents/document-templates/document-templates.component.mjs +151 -151
- package/esm2022/lib/Pages/documents/edit-document/edit-document.component.mjs +72 -72
- package/esm2022/lib/Pages/documents/edit-document-template/edit-document-template.component.mjs +27 -27
- package/esm2022/lib/Pages/empty-data/empty-data.component.mjs +1 -1
- package/esm2022/lib/Pages/empty-data/empty-data.module.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +84 -84
- package/esm2022/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +56 -56
- package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +58 -58
- package/esm2022/lib/Pages/home/home.component.mjs +7 -7
- package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +129 -129
- package/esm2022/lib/Pages/jobs/jobs/jobs.component.mjs +14 -14
- package/esm2022/lib/Pages/license/license/license.component.mjs +11 -11
- package/esm2022/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.mjs +41 -41
- package/esm2022/lib/Pages/localizations/localizations.component.mjs +125 -125
- package/esm2022/lib/Pages/logs/log/log.component.mjs +11 -11
- package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +120 -120
- package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +34 -34
- package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +83 -83
- package/esm2022/lib/Pages/notifications/add-notification/add-notification.component.mjs +35 -35
- package/esm2022/lib/Pages/notifications/edit-email/edit-email.component.mjs +53 -53
- package/esm2022/lib/Pages/notifications/edit-notification/edit-notification.component.mjs +50 -50
- package/esm2022/lib/Pages/notifications/edit-sms/edit-sms.component.mjs +16 -16
- package/esm2022/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +20 -20
- package/esm2022/lib/Pages/notifications/template-info/template-info.component.mjs +135 -135
- package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +186 -186
- package/esm2022/lib/Pages/providers/provider/provider.component.mjs +122 -122
- package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +120 -120
- package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +29 -29
- package/esm2022/lib/Pages/roles/permissions/permissions.component.mjs +57 -57
- package/esm2022/lib/Pages/roles/permissionsets/permissionsets.component.mjs +79 -79
- package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +35 -35
- package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +27 -27
- package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +27 -27
- package/esm2022/lib/Pages/shared/Services/AccountService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/ActiveDirectoryService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/AnonymousLayoutService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/DepartmentService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/DocumentTemplateService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/HelpCenterService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/ImpersonationRuleService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/JobsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LicenseService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LogsService.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LookupGroupsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LookupService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PermissionSetService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PermissionsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PublicHolidayService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/SectorService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/TemplateService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowActivityService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowVariablesService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/localizationsService.service .mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/provider.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/external-url/external-url.component.mjs +36 -36
- package/esm2022/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +74 -74
- package/esm2022/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.mjs +8 -8
- package/esm2022/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.mjs +10 -10
- package/esm2022/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.mjs +89 -89
- package/esm2022/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.mjs +7 -7
- package/esm2022/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.mjs +9 -9
- package/esm2022/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.mjs +10 -10
- package/esm2022/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.mjs +222 -222
- package/esm2022/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.mjs +7 -7
- package/esm2022/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.mjs +257 -257
- package/esm2022/lib/Pages/shared/components/survey/survey-info/preview/preview.component.mjs +25 -25
- package/esm2022/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.mjs +24 -24
- package/esm2022/lib/Pages/shared/components/survey/survey-info/result-question/result.component.mjs +6 -6
- package/esm2022/lib/Pages/shared/components/survey/survey-info/survey-info.component.mjs +52 -52
- package/esm2022/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.mjs +16 -16
- package/esm2022/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.mjs +20 -20
- package/esm2022/lib/Pages/shared/components/survey/survey.component.mjs +69 -69
- package/esm2022/lib/Pages/shared/components/survey-form/survey-form.component.mjs +180 -180
- package/esm2022/lib/Pages/shared/models/SurveyModels/survey-question-option.mjs +3 -3
- package/esm2022/lib/Pages/users/users.component.mjs +190 -190
- package/esm2022/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.mjs +176 -176
- package/esm2022/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.mjs +364 -364
- package/esm2022/lib/Pages/workflows/instance-info/instance-info.component.mjs +67 -67
- package/esm2022/lib/Pages/workflows/tabs/tabs.component.mjs +227 -227
- package/esm2022/lib/Pages/workflows/version-info/version-info.component.mjs +31 -31
- package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +56 -56
- package/fesm2022/bnsights-bbsf-admin-portal.mjs +5187 -5187
- package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -1
- package/lib/Pages/ActiveDirectories/active-directories.component.d.ts +0 -1
- package/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.d.ts +2 -2
- package/lib/Pages/workflows/tabs/tabs.component.d.ts +1 -1
- package/package.json +3 -3
- package/esm2022/bnsights-test-test-admin-portal.mjs +0 -5
- package/fesm2022/bnsights-test-test-admin-portal.mjs +0 -27181
- package/fesm2022/bnsights-test-test-admin-portal.mjs.map +0 -1
|
@@ -173,18 +173,18 @@ export class LocalizationsComponent {
|
|
|
173
173
|
this.resourceSetList = result;
|
|
174
174
|
// Resource Set Init
|
|
175
175
|
this.resourceSetOptions = new DropdownOptions();
|
|
176
|
-
this.resourceSetOptions.
|
|
177
|
-
this.resourceSetOptions.
|
|
178
|
-
this.resourceSetOptions.
|
|
179
|
-
this.resourceSetOptions.
|
|
180
|
-
this.resourceSetOptions.
|
|
181
|
-
this.resourceSetOptions.
|
|
176
|
+
this.resourceSetOptions.name = "ResourceSet";
|
|
177
|
+
this.resourceSetOptions.labelKey = "ResourceSet";
|
|
178
|
+
this.resourceSetOptions.dataSource = this.resourceSetList;
|
|
179
|
+
this.resourceSetOptions.singleSelection = true;
|
|
180
|
+
this.resourceSetOptions.allowSearchFilter = true;
|
|
181
|
+
this.resourceSetOptions.placeholder = "";
|
|
182
182
|
// TextBox inti
|
|
183
183
|
this.searchTextBox = new TextBoxOptions();
|
|
184
|
-
this.searchTextBox.
|
|
185
|
-
this.searchTextBox.
|
|
186
|
-
this.searchTextBox.
|
|
187
|
-
this.searchTextBox.
|
|
184
|
+
this.searchTextBox.name = "searchTextBox";
|
|
185
|
+
this.searchTextBox.hideLabel = true;
|
|
186
|
+
this.searchTextBox.type = InputType.Text;
|
|
187
|
+
this.searchTextBox.placeholder = this.utilityService.getResourceValue("SearchByValueOrResourceID");
|
|
188
188
|
this.resourceSetFilter = new FilterItem();
|
|
189
189
|
this.resourceSetFilter.FormControlName = "ResourceSet";
|
|
190
190
|
this.resourceSetFilter.ActionParameterName = "resourceSet";
|
|
@@ -196,11 +196,11 @@ export class LocalizationsComponent {
|
|
|
196
196
|
this.textInputFilter.IsFormControl = true;
|
|
197
197
|
this.textInputFilter.FilterType = FilterType.TextBox;
|
|
198
198
|
this.localizationPaging = new PagingOptions();
|
|
199
|
-
this.localizationPaging.
|
|
200
|
-
this.localizationPaging.
|
|
201
|
-
this.localizationPaging.
|
|
202
|
-
this.localizationPaging.
|
|
203
|
-
this.localizationPaging.
|
|
199
|
+
this.localizationPaging.actionPostURL = this.ApiUrl + 'GetLocalizationsByFilter';
|
|
200
|
+
this.localizationPaging.onKeyPressFiltersControlNames = ["searchTextBox"];
|
|
201
|
+
this.localizationPaging.dropdownFiltersControlNames = ["ResourceSet"];
|
|
202
|
+
this.localizationPaging.filters = [this.resourceSetFilter, this.textInputFilter];
|
|
203
|
+
this.localizationPaging.resetFilterButtonName = "localizationsFiltersBtn";
|
|
204
204
|
this.isFilterLoaded = true;
|
|
205
205
|
});
|
|
206
206
|
}
|
|
@@ -209,14 +209,14 @@ export class LocalizationsComponent {
|
|
|
209
209
|
this.exportAsTemplate = ExportAsTemplate;
|
|
210
210
|
this.exportControlLoaded = false;
|
|
211
211
|
this.exportConfirmationOptions = new ConfirmationModalOptions();
|
|
212
|
-
this.exportConfirmationOptions.
|
|
213
|
-
this.exportConfirmationOptions.
|
|
214
|
-
this.exportConfirmationOptions.
|
|
215
|
-
this.exportConfirmationOptions.
|
|
216
|
-
this.exportConfirmationOptions.
|
|
217
|
-
this.exportConfirmationOptions.
|
|
218
|
-
this.exportConfirmationOptions.
|
|
219
|
-
this.exportConfirmationOptions.
|
|
212
|
+
this.exportConfirmationOptions.serviceSubmitFunction = this.exportExcelFunction;
|
|
213
|
+
this.exportConfirmationOptions.pagingReference = this.pagingElement;
|
|
214
|
+
this.exportConfirmationOptions.onSuccessHandler = this.onExportSuccessHandler;
|
|
215
|
+
this.exportConfirmationOptions.confirmationBody = this.utilityService.getResourceValue("ExportResourcesConfirmation");
|
|
216
|
+
this.exportConfirmationOptions.confirmationHeader = this.utilityService.getResourceValue("ExportResources");
|
|
217
|
+
this.exportConfirmationOptions.submitButtonText = this.utilityService.getResourceValue("Export");
|
|
218
|
+
this.exportConfirmationOptions.styleConfirmationMode = StyleConfirmationMode.Warning;
|
|
219
|
+
this.exportConfirmationOptions.successNotificationMessage = this.utilityService.getResourceValue("SuccessMessage");
|
|
220
220
|
this.exportControlLoaded = true;
|
|
221
221
|
setTimeout(() => {
|
|
222
222
|
this.exportConfirmationControl.showModal();
|
|
@@ -228,36 +228,36 @@ export class LocalizationsComponent {
|
|
|
228
228
|
this.utilityService.startBlockUI();
|
|
229
229
|
this.addResourceForm = new FormGroup({});
|
|
230
230
|
this.addResourceFormOptions = new FormOptions();
|
|
231
|
-
this.addResourceFormOptions.
|
|
232
|
-
this.addResourceFormOptions.
|
|
233
|
-
this.addResourceFormOptions.
|
|
234
|
-
this.addResourceFormOptions.
|
|
231
|
+
this.addResourceFormOptions.formGroup = this.addResourceForm;
|
|
232
|
+
this.addResourceFormOptions.getModelFunction = this.getAddResourceModal;
|
|
233
|
+
this.addResourceFormOptions.serviceSubmitFunction = this.getAddResourceFunction;
|
|
234
|
+
this.addResourceFormOptions.pagingReference = this.pagingElement;
|
|
235
235
|
this.resourceSet = new AutocompleteOptions();
|
|
236
|
-
this.resourceSet.
|
|
237
|
-
this.resourceSet.
|
|
238
|
-
this.resourceSet.
|
|
239
|
-
this.resourceSet.
|
|
240
|
-
this.resourceSet.
|
|
241
|
-
this.resourceSet.
|
|
242
|
-
this.resourceSet.
|
|
236
|
+
this.resourceSet.name = "ResourceSet";
|
|
237
|
+
this.resourceSet.labelKey = "ResourceSet";
|
|
238
|
+
this.resourceSet.type = InputType.Text;
|
|
239
|
+
this.resourceSet.isRequired = true;
|
|
240
|
+
this.resourceSet.allowNewSelection = true;
|
|
241
|
+
this.resourceSet.value = null;
|
|
242
|
+
this.resourceSet.actionURL = this.ApiUrl + "AutoCompleteResourceSet";
|
|
243
243
|
this.resourceId = new TextBoxOptions();
|
|
244
|
-
this.resourceId.
|
|
245
|
-
this.resourceId.
|
|
246
|
-
this.resourceId.
|
|
247
|
-
this.resourceId.
|
|
248
|
-
this.resourceId.
|
|
249
|
-
this.resourceId.
|
|
244
|
+
this.resourceId.name = "ResourceId";
|
|
245
|
+
this.resourceId.labelKey = "ResourceId";
|
|
246
|
+
this.resourceId.type = InputType.Text;
|
|
247
|
+
this.resourceId.value = null;
|
|
248
|
+
this.resourceId.isRequired = true;
|
|
249
|
+
this.resourceId.maxLength = 1024;
|
|
250
250
|
this.multiLingualValue = new MultiLingualTextAreaOptions();
|
|
251
|
-
this.multiLingualValue.
|
|
252
|
-
this.multiLingualValue.
|
|
253
|
-
this.multiLingualValue.
|
|
254
|
-
this.multiLingualValue.
|
|
255
|
-
this.multiLingualValue.
|
|
251
|
+
this.multiLingualValue.name = "ValueDTO";
|
|
252
|
+
this.multiLingualValue.arabicLabelKey = "ValueInArabic";
|
|
253
|
+
this.multiLingualValue.englishLabelKey = "ValueInEnglish";
|
|
254
|
+
this.multiLingualValue.isRequired = true;
|
|
255
|
+
this.multiLingualValue.maxLength = 5000;
|
|
256
256
|
this.multiLingualComment = new MultiLingualTextAreaOptions();
|
|
257
|
-
this.multiLingualComment.
|
|
258
|
-
this.multiLingualComment.
|
|
259
|
-
this.multiLingualComment.
|
|
260
|
-
this.multiLingualComment.
|
|
257
|
+
this.multiLingualComment.name = "CommentDTO";
|
|
258
|
+
this.multiLingualComment.arabicLabelKey = "CommentInArabic";
|
|
259
|
+
this.multiLingualComment.englishLabelKey = "CommentInEnglish";
|
|
260
|
+
this.multiLingualComment.maxLength = 5000;
|
|
261
261
|
this.modalService.open(addResourceModal);
|
|
262
262
|
this.utilityService.stopBlockUI();
|
|
263
263
|
}
|
|
@@ -268,31 +268,31 @@ export class LocalizationsComponent {
|
|
|
268
268
|
this.editResourceId = resource.resourceId;
|
|
269
269
|
this.editResourceSet = resource.resourceSet;
|
|
270
270
|
this.editResourceFormOptions = new FormOptions();
|
|
271
|
-
this.editResourceFormOptions.
|
|
272
|
-
this.editResourceFormOptions.
|
|
273
|
-
this.editResourceFormOptions.
|
|
274
|
-
this.editResourceFormOptions.
|
|
271
|
+
this.editResourceFormOptions.formGroup = this.editResourceForm;
|
|
272
|
+
this.editResourceFormOptions.getModelFunction = this.getEditResourceModel;
|
|
273
|
+
this.editResourceFormOptions.serviceSubmitFunction = this.getEditResourceFunction;
|
|
274
|
+
this.editResourceFormOptions.pagingReference = this.pagingElement;
|
|
275
275
|
this.localizationsService.getResource(this.editResourceSet, this.editResourceId).subscribe((result) => {
|
|
276
276
|
let Resource = result.model;
|
|
277
277
|
let Value = new EnglishArabicDTO();
|
|
278
|
-
Value.
|
|
279
|
-
Value.
|
|
278
|
+
Value.arabic = Resource.valueDTO.arabic;
|
|
279
|
+
Value.english = Resource.valueDTO.english;
|
|
280
280
|
this.editMultiLingualValue = new MultiLingualTextAreaOptions();
|
|
281
|
-
this.editMultiLingualValue.
|
|
282
|
-
this.editMultiLingualValue.
|
|
283
|
-
this.editMultiLingualValue.
|
|
284
|
-
this.editMultiLingualValue.
|
|
285
|
-
this.editMultiLingualValue.
|
|
286
|
-
this.editMultiLingualValue.
|
|
281
|
+
this.editMultiLingualValue.name = "ValueDTO";
|
|
282
|
+
this.editMultiLingualValue.arabicLabelKey = "ValueInArabic";
|
|
283
|
+
this.editMultiLingualValue.englishLabelKey = "ValueInEnglish";
|
|
284
|
+
this.editMultiLingualValue.isRequired = true;
|
|
285
|
+
this.editMultiLingualValue.value = Value;
|
|
286
|
+
this.editMultiLingualValue.maxLength = 5000;
|
|
287
287
|
let Comment = new EnglishArabicDTO();
|
|
288
|
-
Comment.
|
|
289
|
-
Comment.
|
|
288
|
+
Comment.arabic = Resource.commentDTO.arabic;
|
|
289
|
+
Comment.english = Resource.commentDTO.english;
|
|
290
290
|
this.editMultiLingualComment = new MultiLingualTextAreaOptions();
|
|
291
|
-
this.editMultiLingualComment.
|
|
292
|
-
this.editMultiLingualComment.
|
|
293
|
-
this.editMultiLingualComment.
|
|
294
|
-
this.editMultiLingualComment.
|
|
295
|
-
this.editMultiLingualComment.
|
|
291
|
+
this.editMultiLingualComment.name = "CommentDTO";
|
|
292
|
+
this.editMultiLingualComment.arabicLabelKey = "CommentInArabic";
|
|
293
|
+
this.editMultiLingualComment.englishLabelKey = "CommentInEnglish";
|
|
294
|
+
this.editMultiLingualComment.value = Comment;
|
|
295
|
+
this.editMultiLingualComment.maxLength = 5000;
|
|
296
296
|
this.modalService.open(editResourceModal);
|
|
297
297
|
});
|
|
298
298
|
}
|
|
@@ -305,9 +305,9 @@ export class LocalizationsComponent {
|
|
|
305
305
|
paramArray.push(resource.resourceSet);
|
|
306
306
|
paramArray.push(resource.resourceId);
|
|
307
307
|
this.deleteConfirmationOptions = new ConfirmationModalOptions();
|
|
308
|
-
this.deleteConfirmationOptions.
|
|
309
|
-
this.deleteConfirmationOptions.
|
|
310
|
-
this.deleteConfirmationOptions.
|
|
308
|
+
this.deleteConfirmationOptions.serviceSubmitFunction = this.deleteResourceFunction;
|
|
309
|
+
this.deleteConfirmationOptions.serviceSubmitModel = paramArray;
|
|
310
|
+
this.deleteConfirmationOptions.pagingReference = this.pagingElement;
|
|
311
311
|
this.deleteControlLoaded = true;
|
|
312
312
|
setTimeout(() => {
|
|
313
313
|
this.ConfirmationModalControl.showModal();
|
|
@@ -318,13 +318,13 @@ export class LocalizationsComponent {
|
|
|
318
318
|
showReloadResourceModal() {
|
|
319
319
|
this.reloadControlLoaded = false;
|
|
320
320
|
this.reloadConfirmationOptions = new ConfirmationModalOptions();
|
|
321
|
-
this.reloadConfirmationOptions.
|
|
322
|
-
this.reloadConfirmationOptions.
|
|
323
|
-
this.reloadConfirmationOptions.
|
|
324
|
-
this.reloadConfirmationOptions.
|
|
325
|
-
this.reloadConfirmationOptions.
|
|
326
|
-
this.reloadConfirmationOptions.
|
|
327
|
-
this.reloadConfirmationOptions.
|
|
321
|
+
this.reloadConfirmationOptions.serviceSubmitFunction = this.reloadResourceFunction;
|
|
322
|
+
this.reloadConfirmationOptions.pagingReference = this.pagingElement;
|
|
323
|
+
this.reloadConfirmationOptions.confirmationBody = this.utilityService.getResourceValue("ReloadResourcesConfirmation");
|
|
324
|
+
this.reloadConfirmationOptions.confirmationHeader = this.utilityService.getResourceValue("ReloadResources");
|
|
325
|
+
this.reloadConfirmationOptions.submitButtonText = this.utilityService.getResourceValue("Reload");
|
|
326
|
+
this.reloadConfirmationOptions.styleConfirmationMode = StyleConfirmationMode.Danger;
|
|
327
|
+
this.reloadConfirmationOptions.successNotificationMessage = this.utilityService.getResourceValue("SuccessMessage");
|
|
328
328
|
this.reloadControlLoaded = true;
|
|
329
329
|
setTimeout(() => {
|
|
330
330
|
this.reloadConfirmationModalControl.showModal();
|
|
@@ -335,13 +335,13 @@ export class LocalizationsComponent {
|
|
|
335
335
|
showRestToFactoryDefault() {
|
|
336
336
|
this.restToFactoryDefaultControlLoaded = false;
|
|
337
337
|
this.restToFactoryDefaultConfirmationOptions = new ConfirmationModalOptions();
|
|
338
|
-
this.restToFactoryDefaultConfirmationOptions.
|
|
339
|
-
this.restToFactoryDefaultConfirmationOptions.
|
|
340
|
-
this.restToFactoryDefaultConfirmationOptions.
|
|
341
|
-
this.restToFactoryDefaultConfirmationOptions.
|
|
342
|
-
this.restToFactoryDefaultConfirmationOptions.
|
|
343
|
-
this.restToFactoryDefaultConfirmationOptions.
|
|
344
|
-
this.restToFactoryDefaultConfirmationOptions.
|
|
338
|
+
this.restToFactoryDefaultConfirmationOptions.serviceSubmitFunction = this.restToFactoryDefaultFunction;
|
|
339
|
+
this.restToFactoryDefaultConfirmationOptions.pagingReference = this.pagingElement;
|
|
340
|
+
this.restToFactoryDefaultConfirmationOptions.confirmationBody = this.utilityService.getResourceValue("ResetToFactoryConfirmation");
|
|
341
|
+
this.restToFactoryDefaultConfirmationOptions.confirmationHeader = this.utilityService.getResourceValue("ResetToFactoryDefault");
|
|
342
|
+
this.restToFactoryDefaultConfirmationOptions.submitButtonText = this.utilityService.getResourceValue("Rest");
|
|
343
|
+
this.restToFactoryDefaultConfirmationOptions.styleConfirmationMode = StyleConfirmationMode.Warning;
|
|
344
|
+
this.restToFactoryDefaultConfirmationOptions.successNotificationMessage = this.utilityService.getResourceValue("SuccessMessage");
|
|
345
345
|
this.restToFactoryDefaultControlLoaded = true;
|
|
346
346
|
setTimeout(() => {
|
|
347
347
|
this.restConfirmationModalControl.showModal();
|
|
@@ -354,14 +354,14 @@ export class LocalizationsComponent {
|
|
|
354
354
|
this.localizationsService.generateStronglyTypedClass().subscribe((result) => {
|
|
355
355
|
var Value = result;
|
|
356
356
|
this.stronglyTypedClass = new TextAreaOptions();
|
|
357
|
-
this.stronglyTypedClass.
|
|
358
|
-
this.stronglyTypedClass.
|
|
357
|
+
this.stronglyTypedClass.name = "GenerateCodeTextArea";
|
|
358
|
+
this.stronglyTypedClass.value = Value.val.toString();
|
|
359
359
|
this.valueToCopy = Value.val.toString();
|
|
360
|
-
this.stronglyTypedClass.
|
|
361
|
-
this.stronglyTypedClass.
|
|
362
|
-
this.stronglyTypedClass.
|
|
363
|
-
this.stronglyTypedClass.
|
|
364
|
-
this.stronglyTypedClass.
|
|
360
|
+
this.stronglyTypedClass.isDisabled = true;
|
|
361
|
+
this.stronglyTypedClass.hideLabel = true;
|
|
362
|
+
this.stronglyTypedClass.rows = 20;
|
|
363
|
+
this.stronglyTypedClass.cols = 20;
|
|
364
|
+
this.stronglyTypedClass.maxLength = 1000000;
|
|
365
365
|
this.modalService.open(generateStronglyTypedModal);
|
|
366
366
|
});
|
|
367
367
|
}
|
|
@@ -370,14 +370,14 @@ export class LocalizationsComponent {
|
|
|
370
370
|
this.localizationsService.generateBBSFResourceClass().subscribe((result) => {
|
|
371
371
|
var Value = result;
|
|
372
372
|
this.stronglyTypedClass = new TextAreaOptions();
|
|
373
|
-
this.stronglyTypedClass.
|
|
374
|
-
this.stronglyTypedClass.
|
|
373
|
+
this.stronglyTypedClass.name = "GenerateCodeTextArea";
|
|
374
|
+
this.stronglyTypedClass.value = Value.val.toString();
|
|
375
375
|
this.valueToCopy = Value.val.toString();
|
|
376
|
-
this.stronglyTypedClass.
|
|
377
|
-
this.stronglyTypedClass.
|
|
378
|
-
this.stronglyTypedClass.
|
|
379
|
-
this.stronglyTypedClass.
|
|
380
|
-
this.stronglyTypedClass.
|
|
376
|
+
this.stronglyTypedClass.isDisabled = true;
|
|
377
|
+
this.stronglyTypedClass.hideLabel = true;
|
|
378
|
+
this.stronglyTypedClass.rows = 20;
|
|
379
|
+
this.stronglyTypedClass.cols = 20;
|
|
380
|
+
this.stronglyTypedClass.maxLength = 1000000;
|
|
381
381
|
this.modalService.open(generateModal);
|
|
382
382
|
});
|
|
383
383
|
}
|
|
@@ -386,14 +386,14 @@ export class LocalizationsComponent {
|
|
|
386
386
|
this.localizationsService.generateAppResourceClass().subscribe((result) => {
|
|
387
387
|
var Value = result;
|
|
388
388
|
this.stronglyTypedClass = new TextAreaOptions();
|
|
389
|
-
this.stronglyTypedClass.
|
|
390
|
-
this.stronglyTypedClass.
|
|
389
|
+
this.stronglyTypedClass.name = "GenerateCodeTextArea";
|
|
390
|
+
this.stronglyTypedClass.value = Value.val.toString();
|
|
391
391
|
this.valueToCopy = Value.val.toString();
|
|
392
|
-
this.stronglyTypedClass.
|
|
393
|
-
this.stronglyTypedClass.
|
|
394
|
-
this.stronglyTypedClass.
|
|
395
|
-
this.stronglyTypedClass.
|
|
396
|
-
this.stronglyTypedClass.
|
|
392
|
+
this.stronglyTypedClass.isDisabled = true;
|
|
393
|
+
this.stronglyTypedClass.hideLabel = true;
|
|
394
|
+
this.stronglyTypedClass.rows = 20;
|
|
395
|
+
this.stronglyTypedClass.cols = 20;
|
|
396
|
+
this.stronglyTypedClass.maxLength = 1000000;
|
|
397
397
|
this.modalService.open(generateModal);
|
|
398
398
|
});
|
|
399
399
|
}
|
|
@@ -442,25 +442,25 @@ export class LocalizationsComponent {
|
|
|
442
442
|
this.utilityService.startBlockUI();
|
|
443
443
|
this.uploadJsonFileForm = new FormGroup({});
|
|
444
444
|
this.uploadJsonFileFormOptions = new FormOptions();
|
|
445
|
-
this.uploadJsonFileFormOptions.
|
|
446
|
-
this.uploadJsonFileFormOptions.
|
|
447
|
-
this.uploadJsonFileFormOptions.
|
|
448
|
-
this.uploadJsonFileFormOptions.
|
|
449
|
-
this.uploadJsonFileFormOptions.
|
|
445
|
+
this.uploadJsonFileFormOptions.formGroup = this.uploadJsonFileForm;
|
|
446
|
+
this.uploadJsonFileFormOptions.getModelFunction = this.getUploadModal;
|
|
447
|
+
this.uploadJsonFileFormOptions.serviceSubmitFunction = this.getUploadFunction;
|
|
448
|
+
this.uploadJsonFileFormOptions.onSuccessHandler = this.onSuccessHandler;
|
|
449
|
+
this.uploadJsonFileFormOptions.pagingReference = this.pagingElement;
|
|
450
450
|
this.uploadResourceSetOptions = new DropdownOptions();
|
|
451
|
-
this.uploadResourceSetOptions.
|
|
452
|
-
this.uploadResourceSetOptions.
|
|
453
|
-
this.uploadResourceSetOptions.
|
|
454
|
-
this.uploadResourceSetOptions.
|
|
455
|
-
this.uploadResourceSetOptions.
|
|
456
|
-
this.uploadResourceSetOptions.
|
|
451
|
+
this.uploadResourceSetOptions.name = "SelectedResourceSet";
|
|
452
|
+
this.uploadResourceSetOptions.labelKey = "ResourceSet";
|
|
453
|
+
this.uploadResourceSetOptions.dataSource = this.resourceSetList;
|
|
454
|
+
this.uploadResourceSetOptions.singleSelection = true;
|
|
455
|
+
this.uploadResourceSetOptions.allowSearchFilter = true;
|
|
456
|
+
this.uploadResourceSetOptions.placeholder = "";
|
|
457
457
|
this.resourcesFileInput = new FileUploadOptions();
|
|
458
|
-
this.resourcesFileInput.
|
|
459
|
-
this.resourcesFileInput.
|
|
460
|
-
this.resourcesFileInput.
|
|
461
|
-
this.resourcesFileInput.
|
|
462
|
-
this.resourcesFileInput.
|
|
463
|
-
this.resourcesFileInput.
|
|
458
|
+
this.resourcesFileInput.name = "ResourcesFile";
|
|
459
|
+
this.resourcesFileInput.labelKey = "UploadFile";
|
|
460
|
+
this.resourcesFileInput.isMultipleFile = false;
|
|
461
|
+
this.resourcesFileInput.fileUploadAcceptsTypes = [FileType.Excel];
|
|
462
|
+
this.resourcesFileInput.fileMaxSizeInMB = 10;
|
|
463
|
+
this.resourcesFileInput.isRequired = true;
|
|
464
464
|
this.modalService.open(uploadResourceModal);
|
|
465
465
|
this.utilityService.stopBlockUI();
|
|
466
466
|
}
|
|
@@ -486,7 +486,7 @@ export class LocalizationsComponent {
|
|
|
486
486
|
this.requestHandlerService.destroyHandler();
|
|
487
487
|
}
|
|
488
488
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: LocalizationsComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i2.EnvironmentService }, { token: i3.DatePipe }, { token: i4.ClipboardService }, { token: i5.localizationsService }, { token: i6.NgbModal }, { token: i2.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
489
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: LocalizationsComponent, selector: "lib-localizations", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["LocalizationPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }, { propertyName: "exportConfirmationControl", first: true, predicate: ["exportConfirmationControl"], descendants: true }, { propertyName: "reloadConfirmationModalControl", first: true, predicate: ["ReloadConfirmationModalControl"], descendants: true }, { propertyName: "restConfirmationModalControl", first: true, predicate: ["RestConfirmationModalControl"], descendants: true }, { propertyName: "ShowResourceValidationModal", first: true, predicate: ["ShowResourceValidationModal"], descendants: true }, { propertyName: "CloseResourceValidationModal", first: true, predicate: ["CloseResourceValidationModal"], descendants: true }], ngImport: i0, template: "<block-ui> </block-ui>\r\n <!-- Page Content -->\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"isFilterLoaded\">\r\n <!--(OnChange)=\"filterLocalizationList($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"localizationForm\"></BBSF-TextBox>\r\n \r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n\r\n <div ngbDropdown class=\"d-inline-block\">\r\n <button ngbDropdownToggle href=\"javascript:;\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{utilityService.getResourceValue(\"Filter\")}}\r\n </button>\r\n <div *ngIf=\"isFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\" class=\" filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 \">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList [options]=\"resourceSetOptions\" [group]=\"localizationForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"localizationsFiltersBtn\">\r\n {{utilityService.getResourceValue(\"Reset\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <button (click)=\"showExportExcelModal()\"\r\n title=\"Export\" type=\"button\" class=\"btn btn-sm btn-light-primary bnsights-btn-export me-3 \">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{utilityService.getResourceValue(\"Export\")}}\r\n </button>\r\n\r\n <button id=\"btnActivate\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3 \" (click)=\"showReloadResourceModal()\">\r\n <i class=\"fas fa-sync-alt me-1\"></i>\r\n {{utilityService.getResourceValue(\"Reload\")}}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-sm btn-primary me-3 \" id=\"btnActivate\" (click)=\"showUploadModal(UploadJsonFileModal)\">\r\n <i class=\"fas fa-upload me-1\"></i>\r\n {{utilityService.getResourceValue(\"Upload\")}}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-sm btn-primary me-3\" (click)=\"showAddResourceModal(AddResourceModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menut\" class=\"btn btn-sm btn-primary me-3 btn-icon\" title=\"options\">\r\n <i class=\"fa fa-bars\"></i>\r\n </button>\r\n <mat-menu #menut=\"matMenu\" class=\"py-3\">\r\n <button ngbDropdownItem type=\"button\" class=\"menu-item px-3\" (click)=\"showRestToFactoryDefault()\">\r\n <span class=\"menu-link px-3\"> {{utilityService.getResourceValue(\"RestToFactoryDefault\")}}</span>\r\n </button>\r\n <button ngbDropdownItem *ngIf=\"!ProductionMode\" type=\"button\" class=\"menu-item px-3\" (click)=\"generateStronglyTypedClass(GenerateStronglyTypedModal)\">\r\n <span class=\"menu-link px-3\"> {{utilityService.getResourceValue(\"GenerateStronglyTypedClass\")}} </span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" type=\"button\" (click)=\"generateBBSFResourceClass(GenerateStronglyTypedModal)\">\r\n <span class=\"menu-link px-3\"> {{utilityService.getResourceValue(\"GenerateBBSFResourceClass\")}} </span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" type=\"button\" (click)=\"generateAppResourceClass(GenerateStronglyTypedModal)\">\r\n <span class=\"menu-link px-3\"> {{utilityService.getResourceValue(\"GenerateApplicationResourceClass\")}} </span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" type=\"button\" [routerLink]=\"['/Admin/Localization/ReplaceText']\">\r\n <span class=\"menu-link px-3\"> {{utilityService.getResourceValue(\"ReplaceText\")}} </span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ResourceId\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ResourceSet\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let Localization of filteredLocalizationPagingResult\">\r\n <td class=\"text-dark\">{{Localization.resourceId}}</td>\r\n <td>{{Localization.resourceSet}}</td>\r\n <td>{{Localization.value}}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditResourceModal(Localization,EditResourceModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showDeleteResourceModal(Localization)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"filteredLocalizationPagingResult.length == 0\">\r\n <td colspan=\"5\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!--end::users list-->\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setLocalizationListResult($event)\" *ngIf=\"isFilterLoaded\" [options]=\"localizationPaging\"\r\n [group]=\"localizationForm\" #LocalizationPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- Add Modal -->\r\n <ng-template #AddResourceModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"AddResource\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"addResourceFormOptions\">\r\n <BBSF-AutocompleteTextBox [options]=\"resourceSet\" [group]=\"addResourceForm\">\r\n </BBSF-AutocompleteTextBox>\r\n <BBSF-TextBox [options]=\"resourceId\" [group]=\"addResourceForm\">\r\n </BBSF-TextBox>\r\n <BBSF-MultiLingualTextArea [options]=\"multiLingualValue\" [group]=\"addResourceForm\"></BBSF-MultiLingualTextArea>\r\n <BBSF-MultiLingualTextArea [options]=\"multiLingualComment\" [group]=\"addResourceForm\"></BBSF-MultiLingualTextArea>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseResourceModal id=\"CloseResourceModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Edit Modal -->\r\n <ng-template #EditResourceModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"EditResource\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"editResourceFormOptions\">\r\n <BBSF-MultiLingualTextArea [options]=\"editMultiLingualValue\" [group]=\"editResourceForm\"></BBSF-MultiLingualTextArea>\r\n <BBSF-MultiLingualTextArea [options]=\"editMultiLingualComment\" [group]=\"editResourceForm\"></BBSF-MultiLingualTextArea>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseEditResourceModal id=\"CloseEditResourceModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Upload Modal -->\r\n <ng-template #UploadJsonFileModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"UploadResources\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"uploadJsonFileFormOptions\">\r\n <a [hidden]=\"true\" id=\"ShowResourceValidationModal\" href=\"javascript:;\" (click)=\"openResourceValidationModal(ResourceValidationModal)\">\r\n <i class=\"fa fa-history\"></i> {{utilityService.getResourceValue(\"show\")}}\r\n </a>\r\n <BBSF-FileUplaod [options]=\"resourcesFileInput\" [group]=\"uploadJsonFileForm\">\r\n </BBSF-FileUplaod>\r\n <a id=\"btnDeactivate\" href=\"javascript:;\" (click)=\"showExportExcelModal(true)\">\r\n {{utilityService.getResourceValue(\"DownloadResourceTemplateSheet\")}}\r\n </a>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseUploadJsonFileModal id=\"CloseUploadJsonFileModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n\r\n <!-- GenerateStronglyTypedClass Modal -->\r\n <ng-template #GenerateStronglyTypedModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"GenerateCode\")}}</h1>\r\n </div>\r\n <div>\r\n <BBSF-TextArea [options]=\"stronglyTypedClass\" [group]=\"generateCodeForm\">\r\n </BBSF-TextArea>\r\n\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseStronglyTypedClassModal id=\"CloseStronglyTypedClassModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"copyInputMessage()\">\r\n {{utilityService.getResourceValue(\"CopyToClipboard\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"deleteConfirmationOptions\" id=\"ConfirmationModalControl\"\r\n#ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n<!--Export Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"exportControlLoaded\" [options]=\"exportConfirmationOptions\" id=\"exportConfirmationControl\"\r\n#exportConfirmationControl></BBSF-ConfirmationModal>\r\n\r\n<!--Reload Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"reloadControlLoaded\" [options]=\"reloadConfirmationOptions\" id=\"ReloadConfirmationModalControl\"\r\n#ReloadConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n<!--Rest Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"restToFactoryDefaultControlLoaded\" [options]=\"restToFactoryDefaultConfirmationOptions\" id=\"RestConfirmationModalControl\"\r\n#RestConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n\r\n <!-- Resource Validation Modal-->\r\n <ng-template #ResourceValidationModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"ResourcecheckResult\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!excelValidation.isValid\">\r\n <div>\r\n {{utilityService.getResourceValue(\"UpdatedEntriesNumber\")}} {{excelValidation.validCount}}\r\n </div>\r\n <div>\r\n {{utilityService.getResourceValue(\"InvalidEntriesNumber\")}} {{excelValidation.invalidCount}}\r\n </div>\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"excelValidation.isValid\">\r\n {{utilityService.getResourceValue(\"AllEntriesValid\")}}\r\n </div>\r\n\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div *ngIf=\"!excelValidation.isValid\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"ResourceId\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"ResourceSet\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"ErrorMessage\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\" *ngFor=\"let Localization of excelValidation.invalidEntries\">\r\n <td class=\"text-dark\">\r\n {{Localization.resourceId}}\r\n </td>\r\n <td>{{Localization.resourceSet}}</td>\r\n <td>{{Localization.errorMessage}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseResourceValidationModal id=\"CloseResourceValidationModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"button\" (click)=\"confirmExcel()\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n", styles: [".info{background-color:#e7f3fe;border-left:6px solid #2196F3}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i9.FileUploadComponent, selector: "BBSF-FileUplaod", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i9.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange", "OnBlur"] }, { kind: "component", type: i9.TextAreaComponent, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i9.MultiLingualTextAreaComponent, selector: "BBSF-MultiLingualTextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i9.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { kind: "component", type: i9.AutocompleteTextBoxComponent, selector: "BBSF-AutocompleteTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i9.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i9.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["OnChange"] }, { kind: "component", type: i9.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i6.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i6.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i6.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i6.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i6.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i12.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
|
|
489
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: LocalizationsComponent, selector: "lib-localizations", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["LocalizationPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }, { propertyName: "exportConfirmationControl", first: true, predicate: ["exportConfirmationControl"], descendants: true }, { propertyName: "reloadConfirmationModalControl", first: true, predicate: ["ReloadConfirmationModalControl"], descendants: true }, { propertyName: "restConfirmationModalControl", first: true, predicate: ["RestConfirmationModalControl"], descendants: true }, { propertyName: "ShowResourceValidationModal", first: true, predicate: ["ShowResourceValidationModal"], descendants: true }, { propertyName: "CloseResourceValidationModal", first: true, predicate: ["CloseResourceValidationModal"], descendants: true }], ngImport: i0, template: "<block-ui> </block-ui>\r\n <!-- Page Content -->\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"isFilterLoaded\">\r\n <!--(OnChange)=\"filterLocalizationList($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"localizationForm\"></BBSF-TextBox>\r\n \r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n\r\n <div ngbDropdown class=\"d-inline-block\">\r\n <button ngbDropdownToggle href=\"javascript:;\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{utilityService.getResourceValue(\"Filter\")}}\r\n </button>\r\n <div *ngIf=\"isFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\" class=\" filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 \">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList [options]=\"resourceSetOptions\" [group]=\"localizationForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"localizationsFiltersBtn\">\r\n {{utilityService.getResourceValue(\"Reset\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <button (click)=\"showExportExcelModal()\"\r\n title=\"Export\" type=\"button\" class=\"btn btn-sm btn-light-primary bnsights-btn-export me-3 \">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{utilityService.getResourceValue(\"Export\")}}\r\n </button>\r\n\r\n <button id=\"btnActivate\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3 \" (click)=\"showReloadResourceModal()\">\r\n <i class=\"fas fa-sync-alt me-1\"></i>\r\n {{utilityService.getResourceValue(\"Reload\")}}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-sm btn-primary me-3 \" id=\"btnActivate\" (click)=\"showUploadModal(UploadJsonFileModal)\">\r\n <i class=\"fas fa-upload me-1\"></i>\r\n {{utilityService.getResourceValue(\"Upload\")}}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-sm btn-primary me-3\" (click)=\"showAddResourceModal(AddResourceModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menut\" class=\"btn btn-sm btn-primary me-3 btn-icon\" title=\"options\">\r\n <i class=\"fa fa-bars\"></i>\r\n </button>\r\n <mat-menu #menut=\"matMenu\" class=\"py-3\">\r\n <button ngbDropdownItem type=\"button\" class=\"menu-item px-3\" (click)=\"showRestToFactoryDefault()\">\r\n <span class=\"menu-link px-3\"> {{utilityService.getResourceValue(\"RestToFactoryDefault\")}}</span>\r\n </button>\r\n <button ngbDropdownItem *ngIf=\"!ProductionMode\" type=\"button\" class=\"menu-item px-3\" (click)=\"generateStronglyTypedClass(GenerateStronglyTypedModal)\">\r\n <span class=\"menu-link px-3\"> {{utilityService.getResourceValue(\"GenerateStronglyTypedClass\")}} </span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" type=\"button\" (click)=\"generateBBSFResourceClass(GenerateStronglyTypedModal)\">\r\n <span class=\"menu-link px-3\"> {{utilityService.getResourceValue(\"GenerateBBSFResourceClass\")}} </span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" type=\"button\" (click)=\"generateAppResourceClass(GenerateStronglyTypedModal)\">\r\n <span class=\"menu-link px-3\"> {{utilityService.getResourceValue(\"GenerateApplicationResourceClass\")}} </span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" type=\"button\" [routerLink]=\"['/Admin/Localization/ReplaceText']\">\r\n <span class=\"menu-link px-3\"> {{utilityService.getResourceValue(\"ReplaceText\")}} </span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ResourceId\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ResourceSet\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let Localization of filteredLocalizationPagingResult\">\r\n <td class=\"text-dark\">{{Localization.resourceId}}</td>\r\n <td>{{Localization.resourceSet}}</td>\r\n <td>{{Localization.value}}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditResourceModal(Localization,EditResourceModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showDeleteResourceModal(Localization)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"filteredLocalizationPagingResult.length == 0\">\r\n <td colspan=\"5\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!--end::users list-->\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setLocalizationListResult($event)\" *ngIf=\"isFilterLoaded\" [options]=\"localizationPaging\"\r\n [group]=\"localizationForm\" #LocalizationPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <!-- Add Modal -->\r\n <ng-template #AddResourceModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"AddResource\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"addResourceFormOptions\">\r\n <BBSF-AutocompleteTextBox [options]=\"resourceSet\" [group]=\"addResourceForm\">\r\n </BBSF-AutocompleteTextBox>\r\n <BBSF-TextBox [options]=\"resourceId\" [group]=\"addResourceForm\">\r\n </BBSF-TextBox>\r\n <BBSF-MultiLingualTextArea [options]=\"multiLingualValue\" [group]=\"addResourceForm\"></BBSF-MultiLingualTextArea>\r\n <BBSF-MultiLingualTextArea [options]=\"multiLingualComment\" [group]=\"addResourceForm\"></BBSF-MultiLingualTextArea>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseResourceModal id=\"CloseResourceModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Edit Modal -->\r\n <ng-template #EditResourceModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"EditResource\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"editResourceFormOptions\">\r\n <BBSF-MultiLingualTextArea [options]=\"editMultiLingualValue\" [group]=\"editResourceForm\"></BBSF-MultiLingualTextArea>\r\n <BBSF-MultiLingualTextArea [options]=\"editMultiLingualComment\" [group]=\"editResourceForm\"></BBSF-MultiLingualTextArea>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseEditResourceModal id=\"CloseEditResourceModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Upload Modal -->\r\n <ng-template #UploadJsonFileModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"UploadResources\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"uploadJsonFileFormOptions\">\r\n <a [hidden]=\"true\" id=\"ShowResourceValidationModal\" href=\"javascript:;\" (click)=\"openResourceValidationModal(ResourceValidationModal)\">\r\n <i class=\"fa fa-history\"></i> {{utilityService.getResourceValue(\"show\")}}\r\n </a>\r\n <BBSF-FileUplaod [options]=\"resourcesFileInput\" [group]=\"uploadJsonFileForm\">\r\n </BBSF-FileUplaod>\r\n <a id=\"btnDeactivate\" href=\"javascript:;\" (click)=\"showExportExcelModal(true)\">\r\n {{utilityService.getResourceValue(\"DownloadResourceTemplateSheet\")}}\r\n </a>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseUploadJsonFileModal id=\"CloseUploadJsonFileModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n\r\n <!-- GenerateStronglyTypedClass Modal -->\r\n <ng-template #GenerateStronglyTypedModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"GenerateCode\")}}</h1>\r\n </div>\r\n <div>\r\n <BBSF-TextArea [options]=\"stronglyTypedClass\" [group]=\"generateCodeForm\">\r\n </BBSF-TextArea>\r\n\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseStronglyTypedClassModal id=\"CloseStronglyTypedClassModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"copyInputMessage()\">\r\n {{utilityService.getResourceValue(\"CopyToClipboard\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"deleteConfirmationOptions\" id=\"ConfirmationModalControl\"\r\n#ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n<!--Export Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"exportControlLoaded\" [options]=\"exportConfirmationOptions\" id=\"exportConfirmationControl\"\r\n#exportConfirmationControl></BBSF-ConfirmationModal>\r\n\r\n<!--Reload Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"reloadControlLoaded\" [options]=\"reloadConfirmationOptions\" id=\"ReloadConfirmationModalControl\"\r\n#ReloadConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n<!--Rest Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"restToFactoryDefaultControlLoaded\" [options]=\"restToFactoryDefaultConfirmationOptions\" id=\"RestConfirmationModalControl\"\r\n#RestConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n\r\n <!-- Resource Validation Modal-->\r\n <ng-template #ResourceValidationModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"ResourcecheckResult\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!excelValidation.isValid\">\r\n <div>\r\n {{utilityService.getResourceValue(\"UpdatedEntriesNumber\")}} {{excelValidation.validCount}}\r\n </div>\r\n <div>\r\n {{utilityService.getResourceValue(\"InvalidEntriesNumber\")}} {{excelValidation.invalidCount}}\r\n </div>\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"excelValidation.isValid\">\r\n {{utilityService.getResourceValue(\"AllEntriesValid\")}}\r\n </div>\r\n\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div *ngIf=\"!excelValidation.isValid\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"ResourceId\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"ResourceSet\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"ErrorMessage\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\" *ngFor=\"let Localization of excelValidation.invalidEntries\">\r\n <td class=\"text-dark\">\r\n {{Localization.resourceId}}\r\n </td>\r\n <td>{{Localization.resourceSet}}</td>\r\n <td>{{Localization.errorMessage}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseResourceValidationModal id=\"CloseResourceValidationModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"button\" (click)=\"confirmExcel()\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n", styles: [".info{background-color:#e7f3fe;border-left:6px solid #2196F3}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i9.FileUploadComponent, selector: "BBSF-FileUplaod", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i9.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i9.TextAreaComponent, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i9.MultiLingualTextAreaComponent, selector: "BBSF-MultiLingualTextArea", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i9.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i9.AutocompleteTextBoxComponent, selector: "BBSF-AutocompleteTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i9.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i9.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "component", type: i9.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i6.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i6.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i6.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i6.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i6.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i12.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
|
|
490
490
|
}
|
|
491
491
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: LocalizationsComponent, decorators: [{
|
|
492
492
|
type: Component,
|
|
@@ -513,4 +513,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
513
513
|
type: ViewChild,
|
|
514
514
|
args: ['CloseResourceValidationModal', { static: false }]
|
|
515
515
|
}] } });
|
|
516
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2xvY2FsaXphdGlvbnMvbG9jYWxpemF0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2xvY2FsaXphdGlvbnMvbG9jYWxpemF0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFzQixTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLDJCQUEyQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBK0MsTUFBTSx5QkFBeUIsQ0FBQztBQUN6VixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUUxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBR2xGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUXBDLE1BQU0sT0FBTyxzQkFBc0I7SUF5RmpDLFlBRVksZUFBZ0MsRUFDakMsY0FBOEIsRUFDN0Isa0JBQXNDLEVBQ3RDLFFBQWtCLEVBQ2xCLGlCQUFtQyxFQUNuQyxvQkFBMEMsRUFDMUMsWUFBc0IsRUFD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RixTQUFTO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPQywyQkFBMkI7c0JBQXZGLFNBQVM7dUJBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNHLDRCQUE0QjtzQkFBekYsU0FBUzt1QkFBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBdXRvY29tcGxldGVPcHRpb25zLCBEcm9wZG93bk9wdGlvbnMsIEZpbGVVcGxvYWRPcHRpb25zLCBGaWxlVHlwZSwgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBQYWdpbmdPcHRpb25zLCBUZXh0QXJlYU9wdGlvbnMsIFRleHRCb3hPcHRpb25zLCBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMsIEVuZ2xpc2hBcmFiaWNEVE8sIEZvcm1PcHRpb25zLCBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMsIFN0eWxlQ29uZmlybWF0aW9uTW9kZSwgUGFnaW5nQ29tcG9uZW50LCBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgRWRpdFJlc291cmNlTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL0xvY2FsaXphdGlvbk1vZGVscy9FZGl0UmVzb3VyY2VNb2RlbCc7XHJcbmltcG9ydCB7IGxvY2FsaXphdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL1NlcnZpY2VzL2xvY2FsaXphdGlvbnNTZXJ2aWNlLnNlcnZpY2UgJztcclxuaW1wb3J0IHsgVXBsb2FkSnNvblZNIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9Mb2NhbGl6YXRpb25Nb2RlbHMvVXBsb2FkSnNvblZNJztcclxuaW1wb3J0IHsgQ2xpcGJvYXJkU2VydmljZSB9IGZyb20gJ25neC1jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1sb2NhbGl6YXRpb25zJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9jYWxpemF0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbG9jYWxpemF0aW9ucy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXphdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBBcGlVcmwgPSB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLkFwaVVybFxyXG4gIFByb2R1Y3Rpb25Nb2RlOiBib29sZWFuO1xyXG5cclxuICAvL0ZpbHRlciBhbmQgcGFnaW5nIGNvbXBvbmVudHNcclxuICByZXNvdXJjZVNldE9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBzZWxlY3RlZExvY2FsaXphdGlvbkxpc3QgPSBbXTtcclxuICByZXNvdXJjZVNldExpc3QgPSBbXTtcclxuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgbG9jYWxpemF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsb2NhbGl6YXRpb25QYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRMb2NhbGl6YXRpb25QYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgbG9jYWxpemF0aW9uUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIHJlc291cmNlU2V0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIHRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBpc0ZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ0xvY2FsaXphdGlvblBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBhZGRSZXNvdXJjZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBhZGRSZXNvdXJjZUZvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIHJlc291cmNlU2V0OiBBdXRvY29tcGxldGVPcHRpb25zO1xyXG4gIHJlc291cmNlSWQ6IFRleHRCb3hPcHRpb25zO1xyXG4gIG11bHRpTGluZ3VhbFZhbHVlOiBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnNcclxuICBtdWx0aUxpbmd1YWxDb21tZW50OiBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnNcclxuXHJcbiAgLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgZWRpdFJlc291cmNlRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgZWRpdFJlc291cmNlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGVkaXRNdWx0aUxpbmd1YWxWYWx1ZTogTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zXHJcbiAgZWRpdE11bHRpTGluZ3VhbENvbW1lbnQ6IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9uc1xyXG4gIGVkaXRSZXNvdXJjZUlkOiBzdHJpbmc7XHJcbiAgZWRpdFJlc291cmNlU2V0OiBzdHJpbmc7XHJcblxyXG4gIC8vR2VuZXJhdGVTdHJvbmdseVR5cGVkQ2xhc3NcclxuICBnZW5lcmF0ZUNvZGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc3Ryb25nbHlUeXBlZENsYXNzOiBUZXh0QXJlYU9wdGlvbnM7XHJcbiAgdmFsdWVUb0NvcHk6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vVXBsb2FkIE1vZGVsIENvbnRyb2xzXHJcbiAgdXBsb2FkSnNvbkZpbGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgdXBsb2FkSnNvbkZpbGVGb3JtT3B0aW9uczogRm9ybU9wdGlvbnNcclxuICB1cGxvYWRSZXNvdXJjZVNldE9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICByZXNvdXJjZXNGaWxlSW5wdXQ6IEZpbGVVcGxvYWRPcHRpb25zO1xyXG5cclxuICAvL2RlbGV0ZSBNb2RlbCBDb250cm9sc1xyXG4gIGRlbGV0ZVJlc291cmNlTGlzdDogYW55W10gPSBbXVxyXG4gIGRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnM6IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucztcclxuICBkZWxldGVDb250cm9sTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnQ29uZmlybWF0aW9uTW9kYWxDb250cm9sJywgeyBzdGF0aWM6IGZhbHNlIH0pIENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG5cclxuXHJcblxyXG4gIC8vRXhwb3J0IEV4Y2VsICBDb250cm9sc1xyXG4gIGV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnM6IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucztcclxuICBleHBvcnRDb250cm9sTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZXhwb3J0QXNUZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ2V4cG9ydENvbmZpcm1hdGlvbkNvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgZXhwb3J0Q29uZmlybWF0aW9uQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG5cclxuICAvL1JlbG9hZCBKc29uIE1vZGVsIENvbnRyb2xzXHJcbiAgcmVsb2FkQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIHJlbG9hZENvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdSZWxvYWRDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgcmVsb2FkQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcblxyXG5cclxuICAvL1Jlc3QgVG8gRmFjdG9yeSBEZWZhdWx0ICBDb250cm9sc1xyXG4gIHJlc3RUb0ZhY3RvcnlEZWZhdWx0Q29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIHJlc3RUb0ZhY3RvcnlEZWZhdWx0Q29udHJvbExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ1Jlc3RDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgcmVzdENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG5cclxuXHJcblxyXG4gIC8vUmVzb3VyY2VWYWxpZGF0aW9uTW9kYWxDb250cm9sc1xyXG4gIGV4Y2VsVmFsaWRhdGlvbjogYW55O1xyXG4gIEBWaWV3Q2hpbGQoJ1Nob3dSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBTaG93UmVzb3VyY2VWYWxpZGF0aW9uTW9kYWw6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnQ2xvc2VSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZVJlc291cmNlVmFsaWRhdGlvbk1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3RvclxyXG4gICAgKFxyXG4gICAgICBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgICAgcHJpdmF0ZSBfY2xpcGJvYXJkU2VydmljZTogQ2xpcGJvYXJkU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBsb2NhbGl6YXRpb25zU2VydmljZTogbG9jYWxpemF0aW9uc1NlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgICAgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZVxyXG4gICAgKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvL1BhZ2UgaGVhZGVyIChicmVhZGNydW1iIGFuZCB0aXRsZSlcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJMb2NhbGl6YXRpb25cIilcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgXTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgdGhpcy5Qcm9kdWN0aW9uTW9kZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldFByb2R1Y3Rpb25Nb2RlKClcclxuICAgIC8vaW5pdGlhbGl6ZSBwYWdlXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcbiAgfVxyXG4gIC8vUGFnaW5nIGZ1bmN0aW9uc1xyXG4gIHNldExvY2FsaXphdGlvbkxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLmxvY2FsaXphdGlvblBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gICAgdGhpcy5maWx0ZXJlZExvY2FsaXphdGlvblBhZ2luZ1Jlc3VsdCA9IHRoaXMubG9jYWxpemF0aW9uUGFnaW5nUmVzdWx0XHJcblxyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsTG9jYWxpemF0aW9uTGlzdChldmVudCwgTG9jYWxpemF0aW9ucykge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBMb2NhbGl6YXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IExvY2FsaXphdGlvbiA9IExvY2FsaXphdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkxvY2FsaXphdGlvbi1cIiArIExvY2FsaXphdGlvbi5SZXNvdXJjZUlkKTtcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGl6YXRpb25MaXN0LnB1c2goTG9jYWxpemF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTG9jYWxpemF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBMb2NhbGl6YXRpb24gPSBMb2NhbGl6YXRpb25zW2luZGV4XTtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJMb2NhbGl6YXRpb24tXCIgKyBMb2NhbGl6YXRpb24uUmVzb3VyY2VJZCk7XHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJjaGVja2VkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGl6YXRpb25MaXN0ID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkRmlsdGVycygpIHtcclxuICAgIGlmICh0aGlzLnNob3dGaWx0ZXIgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0ZpbHRlciA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dGaWx0ZXIgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuXHJcbiAgICB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLmxvYWREcm9wZG93bigpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMucmVzb3VyY2VTZXRMaXN0ID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICAvLyBSZXNvdXJjZSBTZXQgSW5pdFxyXG4gICAgICB0aGlzLnJlc291cmNlU2V0T3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldE9wdGlvbnMuTmFtZSA9IFwiUmVzb3VyY2VTZXRcIlxyXG4gICAgICB0aGlzLnJlc291cmNlU2V0T3B0aW9ucy5MYWJlbEtleSA9IFwiUmVzb3VyY2VTZXRcIlxyXG4gICAgICB0aGlzLnJlc291cmNlU2V0T3B0aW9ucy5EYXRhU291cmNlID0gdGhpcy5yZXNvdXJjZVNldExpc3RcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldE9wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldE9wdGlvbnMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlc291cmNlU2V0T3B0aW9ucy5QbGFjZWhvbGRlciA9IFwiXCI7XHJcblxyXG4gICAgICAvLyBUZXh0Qm94IGludGlcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5OYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlWYWx1ZU9yUmVzb3VyY2VJRFwiKVxyXG5cclxuXHJcblxyXG4gICAgICB0aGlzLnJlc291cmNlU2V0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcIlJlc291cmNlU2V0XCJcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJyZXNvdXJjZVNldFwiXHJcbiAgICAgIHRoaXMucmVzb3VyY2VTZXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3RcclxuXHJcblxyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInJlc291cmNlTmFtZVwiXHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcblxyXG4gICAgICB0aGlzLmxvY2FsaXphdGlvblBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMubG9jYWxpemF0aW9uUGFnaW5nLkFjdGlvblBvc3RVUkwgPSB0aGlzLkFwaVVybCArICdHZXRMb2NhbGl6YXRpb25zQnlGaWx0ZXInO1xyXG4gICAgICB0aGlzLmxvY2FsaXphdGlvblBhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRleHRCb3hcIl1cclxuICAgICAgdGhpcy5sb2NhbGl6YXRpb25QYWdpbmcuRHJvcGRvd25GaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wiUmVzb3VyY2VTZXRcIl07XHJcbiAgICAgIHRoaXMubG9jYWxpemF0aW9uUGFnaW5nLkZpbHRlcnMgPSBbdGhpcy5yZXNvdXJjZVNldEZpbHRlciwgdGhpcy50ZXh0SW5wdXRGaWx0ZXJdXHJcbiAgICAgIHRoaXMubG9jYWxpemF0aW9uUGFnaW5nLlJlc2V0RmlsdGVyQnV0dG9uTmFtZSA9IFwibG9jYWxpemF0aW9uc0ZpbHRlcnNCdG5cIjtcclxuXHJcbiAgICAgIHRoaXMuaXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy9TdGFydCBvZiBFeHBvcnQgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93RXhwb3J0RXhjZWxNb2RhbChFeHBvcnRBc1RlbXBsYXRlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuZXhwb3J0QXNUZW1wbGF0ZSA9IEV4cG9ydEFzVGVtcGxhdGU7XHJcblxyXG4gICAgdGhpcy5leHBvcnRDb250cm9sTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLmV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5leHBvcnRFeGNlbEZ1bmN0aW9uO1xyXG4gICAgdGhpcy5leHBvcnRDb25maXJtYXRpb25PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuICAgIHRoaXMuZXhwb3J0Q29uZmlybWF0aW9uT3B0aW9ucy5PblN1Y2Nlc3NIYW5kbGVyID0gdGhpcy5vbkV4cG9ydFN1Y2Nlc3NIYW5kbGVyO1xyXG4gICAgdGhpcy5leHBvcnRDb25maXJtYXRpb25PcHRpb25zLkNvbmZpcm1hdGlvbkJvZHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFeHBvcnRSZXNvdXJjZXNDb25maXJtYXRpb25cIik7XHJcbiAgICB0aGlzLmV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnMuQ29uZmlybWF0aW9uSGVhZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRXhwb3J0UmVzb3VyY2VzXCIpO1xyXG4gICAgdGhpcy5leHBvcnRDb25maXJtYXRpb25PcHRpb25zLlN1Ym1pdEJ1dHRvblRleHQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFeHBvcnRcIik7XHJcbiAgICB0aGlzLmV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnMuU3R5bGVDb25maXJtYXRpb25Nb2RlID0gU3R5bGVDb25maXJtYXRpb25Nb2RlLldhcm5pbmc7XHJcbiAgICB0aGlzLmV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnMuU3VjY2Vzc05vdGlmaWNhdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdWNjZXNzTWVzc2FnZVwiKTtcclxuICAgIHRoaXMuZXhwb3J0Q29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5leHBvcnRDb25maXJtYXRpb25Db250cm9sLnNob3dNb2RhbCgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydEV4Y2VsRnVuY3Rpb24gPSAocGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIGxldCBmaWx0ZXJzID0gdGhpcy5wYWdpbmdFbGVtZW50LmdldEZpbHRlcnNWYWx1ZSgpO1xyXG4gICAgZmlsdGVyc1tcImV4cG9ydEFzVGVtcGxhdGVcIl0gPSB0aGlzLmV4cG9ydEFzVGVtcGxhdGU7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uc1NlcnZpY2UuZXhwb3J0KGZpbHRlcnMpO1xyXG4gIH1cclxuICBvbkV4cG9ydFN1Y2Nlc3NIYW5kbGVyID0gKHJlc3VsdCkgPT4ge1xyXG4gICAgbGV0IEZpbGVEVE8gPSByZXN1bHQgYXMgYW55XHJcbiAgICBjb25zdCBmaWxlID0gbmV3IEJsb2IoW0ZpbGVEVE9dLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfSk7XHJcbiAgICBzYXZlQXMoZmlsZSwgdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzb3VyY2VzXCIpICsgYCR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3IERhdGUoKSwgXCJkZC1NTS1ZWVlZIGhoOm1tXCIpLnRvU3RyaW5nKCl9Lnhsc3hgKTtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuXHJcbiAgfVxyXG4gIC8vLy8vLy8vLy8vRW5kIG9mIEV4cG9ydCBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy8vLyBTdGFydCBhZGQgUmVzb3VyY2UgUGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93QWRkUmVzb3VyY2VNb2RhbChhZGRSZXNvdXJjZU1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5hZGRSZXNvdXJjZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgICB0aGlzLmFkZFJlc291cmNlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuYWRkUmVzb3VyY2VGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLmFkZFJlc291cmNlRm9ybVxyXG4gICAgdGhpcy5hZGRSZXNvdXJjZUZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZFJlc291cmNlTW9kYWw7XHJcbiAgICB0aGlzLmFkZFJlc291cmNlRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRSZXNvdXJjZUZ1bmN0aW9uO1xyXG4gICAgdGhpcy5hZGRSZXNvdXJjZUZvcm1PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudFxyXG5cclxuICAgIHRoaXMucmVzb3VyY2VTZXQgPSBuZXcgQXV0b2NvbXBsZXRlT3B0aW9ucygpO1xyXG4gICAgdGhpcy5yZXNvdXJjZVNldC5OYW1lID0gXCJSZXNvdXJjZVNldFwiO1xyXG4gICAgdGhpcy5yZXNvdXJjZVNldC5MYWJlbEtleSA9IFwiUmVzb3VyY2VTZXRcIjtcclxuICAgIHRoaXMucmVzb3VyY2VTZXQuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5yZXNvdXJjZVNldC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzb3VyY2VTZXQuQWxsb3dOZXdTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5yZXNvdXJjZVNldC5WYWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLnJlc291cmNlU2V0LkFjdGlvblVSTCA9IHRoaXMuQXBpVXJsICsgXCJBdXRvQ29tcGxldGVSZXNvdXJjZVNldFwiXHJcblxyXG4gICAgdGhpcy5yZXNvdXJjZUlkID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnJlc291cmNlSWQuTmFtZSA9IFwiUmVzb3VyY2VJZFwiO1xyXG4gICAgdGhpcy5yZXNvdXJjZUlkLkxhYmVsS2V5ID0gXCJSZXNvdXJjZUlkXCI7XHJcbiAgICB0aGlzLnJlc291cmNlSWQuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5yZXNvdXJjZUlkLlZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMucmVzb3VyY2VJZC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzb3VyY2VJZC5NYXhMZW5ndGggPSAxMDI0O1xyXG5cclxuICAgIHRoaXMubXVsdGlMaW5ndWFsVmFsdWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbFZhbHVlLk5hbWUgPSBcIlZhbHVlRFRPXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbFZhbHVlLkFyYWJpY0xhYmVsS2V5ID0gXCJWYWx1ZUluQXJhYmljXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbFZhbHVlLkVuZ2xpc2hMYWJlbEtleSA9IFwiVmFsdWVJbkVuZ2xpc2hcIjtcclxuICAgIHRoaXMubXVsdGlMaW5ndWFsVmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbFZhbHVlLk1heExlbmd0aCA9IDUwMDA7XHJcblxyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxDb21tZW50ID0gbmV3IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxDb21tZW50Lk5hbWUgPSBcIkNvbW1lbnREVE9cIjtcclxuICAgIHRoaXMubXVsdGlMaW5ndWFsQ29tbWVudC5BcmFiaWNMYWJlbEtleSA9IFwiQ29tbWVudEluQXJhYmljXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbENvbW1lbnQuRW5nbGlzaExhYmVsS2V5ID0gXCJDb21tZW50SW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbENvbW1lbnQuTWF4TGVuZ3RoID0gNTAwMDtcclxuXHJcblxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihhZGRSZXNvdXJjZU1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRBZGRSZXNvdXJjZU1vZGFsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLmFkZFJlc291cmNlRm9ybS52YWx1ZSBhcyBhbnk7XHJcbiAgICBsZXQgQWRkTW9kZWwgPSBuZXcgRWRpdFJlc291cmNlTW9kZWwoKTtcclxuICAgIEFkZE1vZGVsLlJlc291cmNlSWQgPSBSZXN1bHRNb2RlbC5SZXNvdXJjZUlkO1xyXG4gICAgQWRkTW9kZWwuUmVzb3VyY2VTZXQgPSBSZXN1bHRNb2RlbC5SZXNvdXJjZVNldC52YWx1ZTtcclxuICAgIEFkZE1vZGVsLlZhbHVlRFRPID0gUmVzdWx0TW9kZWwuVmFsdWVEVE87XHJcbiAgICBBZGRNb2RlbC5Db21tZW50RFRPID0gUmVzdWx0TW9kZWwuQ29tbWVudERUTztcclxuXHJcbiAgICBwYXJhbUFycmF5LnB1c2goQWRkTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRSZXNvdXJjZUZ1bmN0aW9uID0gKEFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLmFkZFJlc291cmNlKEFkZE1vZGVsKVxyXG4gIH1cclxuICAvLy8vLy8vLy8vLy8gRW5kIG9mIGFkZCBSZXNvdXJjZSBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvLy8vLy8vLy8vL1N0YXJ0IG9mIGVkaXQgUmVzb3VyY2UgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93RWRpdFJlc291cmNlTW9kYWwocmVzb3VyY2U6IGFueSwgZWRpdFJlc291cmNlTW9kYWwpIHtcclxuXHJcbiAgICB0aGlzLmVkaXRSZXNvdXJjZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgICB0aGlzLmVkaXRSZXNvdXJjZUlkID0gcmVzb3VyY2UucmVzb3VyY2VJZFxyXG4gICAgdGhpcy5lZGl0UmVzb3VyY2VTZXQgPSByZXNvdXJjZS5yZXNvdXJjZVNldFxyXG5cclxuICAgIHRoaXMuZWRpdFJlc291cmNlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuZWRpdFJlc291cmNlRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5lZGl0UmVzb3VyY2VGb3JtXHJcbiAgICB0aGlzLmVkaXRSZXNvdXJjZUZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRSZXNvdXJjZU1vZGVsO1xyXG4gICAgdGhpcy5lZGl0UmVzb3VyY2VGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEVkaXRSZXNvdXJjZUZ1bmN0aW9uO1xyXG4gICAgdGhpcy5lZGl0UmVzb3VyY2VGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuXHJcblxyXG5cclxuICAgIHRoaXMubG9jYWxpemF0aW9uc1NlcnZpY2UuZ2V0UmVzb3VyY2UodGhpcy5lZGl0UmVzb3VyY2VTZXQsIHRoaXMuZWRpdFJlc291cmNlSWQpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgbGV0IFJlc291cmNlID0gcmVzdWx0Lm1vZGVsIGFzIGFueTtcclxuICAgICAgbGV0IFZhbHVlID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgVmFsdWUuQXJhYmljID0gUmVzb3VyY2UudmFsdWVEVE8uYXJhYmljO1xyXG4gICAgICBWYWx1ZS5FbmdsaXNoID0gUmVzb3VyY2UudmFsdWVEVE8uZW5nbGlzaDtcclxuXHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbFZhbHVlID0gbmV3IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxWYWx1ZS5OYW1lID0gXCJWYWx1ZURUT1wiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxWYWx1ZS5BcmFiaWNMYWJlbEtleSA9IFwiVmFsdWVJbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxWYWx1ZS5FbmdsaXNoTGFiZWxLZXkgPSBcIlZhbHVlSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbFZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxWYWx1ZS5WYWx1ZSA9IFZhbHVlO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxWYWx1ZS5NYXhMZW5ndGggPSA1MDAwO1xyXG5cclxuXHJcbiAgICAgIGxldCBDb21tZW50ID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgQ29tbWVudC5BcmFiaWMgPSBSZXNvdXJjZS5jb21tZW50RFRPLmFyYWJpYztcclxuICAgICAgQ29tbWVudC5FbmdsaXNoID0gUmVzb3VyY2UuY29tbWVudERUTy5lbmdsaXNoO1xyXG5cclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsQ29tbWVudCA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsQ29tbWVudC5OYW1lID0gXCJDb21tZW50RFRPXCI7XHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbENvbW1lbnQuQXJhYmljTGFiZWxLZXkgPSBcIkNvbW1lbnRJbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxDb21tZW50LkVuZ2xpc2hMYWJlbEtleSA9IFwiQ29tbWVudEluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxDb21tZW50LlZhbHVlID0gQ29tbWVudDtcclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsQ29tbWVudC5NYXhMZW5ndGggPSA1MDAwO1xyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihlZGl0UmVzb3VyY2VNb2RhbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRFZGl0UmVzb3VyY2VNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5lZGl0UmVzb3VyY2VGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBFZGl0TW9kZWwgPSBuZXcgRWRpdFJlc291cmNlTW9kZWwoKTtcclxuICAgIEVkaXRNb2RlbC5SZXNvdXJjZUlkID0gdGhpcy5lZGl0UmVzb3VyY2VJZDtcclxuICAgIEVkaXRNb2RlbC5SZXNvdXJjZVNldCA9IHRoaXMuZWRpdFJlc291cmNlU2V0O1xyXG4gICAgRWRpdE1vZGVsLlZhbHVlRFRPID0gUmVzdWx0TW9kZWwuVmFsdWVEVE87XHJcbiAgICBFZGl0TW9kZWwuQ29tbWVudERUTyA9IFJlc3VsdE1vZGVsLkNvbW1lbnREVE87XHJcbiAgICBwYXJhbUFycmF5LnB1c2goRWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdFJlc291cmNlRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLmVkaXRSZXNvdXJjZShFZGl0TW9kZWwpXHJcbiAgfVxyXG4gIC8vLy8vLy8vLy8vRW5kIG9mIGVkaXQgUmVzb3VyY2UgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy9TdGFydCBvZiBkZWxldGUgUmVzb3VyY2UgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93RGVsZXRlUmVzb3VyY2VNb2RhbChyZXNvdXJjZTogYW55KSB7XHJcblxyXG4gICAgdGhpcy5kZWxldGVDb250cm9sTG9hZGVkID0gZmFsc2U7XHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2gocmVzb3VyY2UucmVzb3VyY2VTZXQpO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKHJlc291cmNlLnJlc291cmNlSWQpO1xyXG5cclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucyA9IG5ldyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMoKTtcclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmRlbGV0ZVJlc291cmNlRnVuY3Rpb247XHJcbiAgICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdE1vZGVsID0gcGFyYW1BcnJheTtcclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcblxyXG4gICAgdGhpcy5kZWxldGVDb250cm9sTG9hZGVkID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbC5zaG93TW9kYWwoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVSZXNvdXJjZUZ1bmN0aW9uID0gKHJlc291cmNlU2V0LCByZXNvdXJjZUlkKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLmRlbGV0ZVJlc291cmNlKHJlc291cmNlU2V0LCByZXNvdXJjZUlkKVxyXG4gIH1cclxuICAvLy8vLy8vLy8vL0VuZCBvZiBkZWxldGUgUmVzb3VyY2UgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG4gIC8vLy8vLy8vLy8vU3RhcnQgb2YgIFJlbG9hZCBSZXNvdXJjZSBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHNob3dSZWxvYWRSZXNvdXJjZU1vZGFsKCkge1xyXG5cclxuICAgIHRoaXMucmVsb2FkQ29udHJvbExvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMucmVsb2FkQ29uZmlybWF0aW9uT3B0aW9ucyA9IG5ldyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMoKTtcclxuICAgIHRoaXMucmVsb2FkQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLnJlbG9hZFJlc291cmNlRnVuY3Rpb247XHJcbiAgICB0aGlzLnJlbG9hZENvbmZpcm1hdGlvbk9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG4gICAgdGhpcy5yZWxvYWRDb25maXJtYXRpb25PcHRpb25zLkNvbmZpcm1hdGlvbkJvZHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSZWxvYWRSZXNvdXJjZXNDb25maXJtYXRpb25cIik7XHJcbiAgICB0aGlzLnJlbG9hZENvbmZpcm1hdGlvbk9wdGlvbnMuQ29uZmlybWF0aW9uSGVhZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVsb2FkUmVzb3VyY2VzXCIpO1xyXG4gICAgdGhpcy5yZWxvYWRDb25maXJtYXRpb25PcHRpb25zLlN1Ym1pdEJ1dHRvblRleHQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSZWxvYWRcIik7XHJcbiAgICB0aGlzLnJlbG9hZENvbmZpcm1hdGlvbk9wdGlvbnMuU3R5bGVDb25maXJtYXRpb25Nb2RlID0gU3R5bGVDb25maXJtYXRpb25Nb2RlLkRhbmdlcjtcclxuICAgIHRoaXMucmVsb2FkQ29uZmlybWF0aW9uT3B0aW9ucy5TdWNjZXNzTm90aWZpY2F0aW9uTWVzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlN1Y2Nlc3NNZXNzYWdlXCIpO1xyXG5cclxuXHJcbiAgICB0aGlzLnJlbG9hZENvbnRyb2xMb2FkZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVsb2FkQ29uZmlybWF0aW9uTW9kYWxDb250cm9sLnNob3dNb2RhbCgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZFJlc291cmNlRnVuY3Rpb24gPSAoKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLnJlbG9hZEpzb25GaWxlKClcclxuICB9XHJcbiAgLy8vLy8vLy8vLy9FbmQgb2YgUmVsb2FkIFJlc291cmNlIHBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy9TdGFydCBvZiBSZXN0VG9GYWN0b3J5RGVmYXVsdCBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHNob3dSZXN0VG9GYWN0b3J5RGVmYXVsdCgpIHtcclxuXHJcbiAgICB0aGlzLnJlc3RUb0ZhY3RvcnlEZWZhdWx0Q29udHJvbExvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMucmVzdFRvRmFjdG9yeURlZmF1bHRDb25maXJtYXRpb25PcHRpb25zID0gbmV3IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucygpO1xyXG4gICAgdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdENvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdEZ1bmN0aW9uO1xyXG4gICAgdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdENvbmZpcm1hdGlvbk9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG4gICAgdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdENvbmZpcm1hdGlvbk9wdGlvbnMuQ29uZmlybWF0aW9uQm9keSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0VG9GYWN0b3J5Q29uZmlybWF0aW9uXCIpO1xyXG4gICAgdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdENvbmZpcm1hdGlvbk9wdGlvbnMuQ29uZmlybWF0aW9uSGVhZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRUb0ZhY3RvcnlEZWZhdWx0XCIpXHJcbiAgICB0aGlzLnJlc3RUb0ZhY3RvcnlEZWZhdWx0Q29uZmlybWF0aW9uT3B0aW9ucy5TdWJtaXRCdXR0b25UZXh0ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzdFwiKTtcclxuICAgIHRoaXMucmVzdFRvRmFjdG9yeURlZmF1bHRDb25maXJtYXRpb25PcHRpb25zLlN0eWxlQ29uZmlybWF0aW9uTW9kZSA9IFN0eWxlQ29uZmlybWF0aW9uTW9kZS5XYXJuaW5nO1xyXG4gICAgdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdENvbmZpcm1hdGlvbk9wdGlvbnMuU3VjY2Vzc05vdGlmaWNhdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdWNjZXNzTWVzc2FnZVwiKTtcclxuXHJcbiAgICB0aGlzLnJlc3RUb0ZhY3RvcnlEZWZhdWx0Q29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXN0Q29uZmlybWF0aW9uTW9kYWxDb250cm9sLnNob3dNb2RhbCgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHJlc3RUb0ZhY3RvcnlEZWZhdWx0RnVuY3Rpb24gPSAoKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLnJlc3RUb0ZhY3RvcnlEZWZhdWx0KClcclxuICB9XHJcbiAgLy8vLy8vLy8vLy9FbmQgb2YgUmVzdFRvRmFjdG9yeURlZmF1bHQgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG5cclxuICAvLy8vLy8vLy8vL1N0YXJ0IG9mIEdlbmVyYXRlU3Ryb25nbHlUeXBlZENsYXNzIHBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGdlbmVyYXRlU3Ryb25nbHlUeXBlZENsYXNzKGdlbmVyYXRlU3Ryb25nbHlUeXBlZE1vZGFsKSB7XHJcblxyXG4gICAgdGhpcy5nZW5lcmF0ZUNvZGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLmdlbmVyYXRlU3Ryb25nbHlUeXBlZENsYXNzKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIFZhbHVlID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcyA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuTmFtZSA9IFwiR2VuZXJhdGVDb2RlVGV4dEFyZWFcIjtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuVmFsdWUgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy52YWx1ZVRvQ29weSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5Jc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuUm93cyA9IDIwO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5Db2xzID0gMjA7XHJcbiAgICAgIHRoaXMuc3Ryb25nbHlUeXBlZENsYXNzLk1heExlbmd0aCA9IDEwMDAwMDA7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZ2VuZXJhdGVTdHJvbmdseVR5cGVkTW9kYWwpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUJCU0ZSZXNvdXJjZUNsYXNzKGdlbmVyYXRlTW9kYWwpIHtcclxuICAgIHRoaXMuZ2VuZXJhdGVDb2RlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgdGhpcy5sb2NhbGl6YXRpb25zU2VydmljZS5nZW5lcmF0ZUJCU0ZSZXNvdXJjZUNsYXNzKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIFZhbHVlID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcyA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuTmFtZSA9IFwiR2VuZXJhdGVDb2RlVGV4dEFyZWFcIjtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuVmFsdWUgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy52YWx1ZVRvQ29weSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5Jc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuUm93cyA9IDIwO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5Db2xzID0gMjA7XHJcbiAgICAgIHRoaXMuc3Ryb25nbHlUeXBlZENsYXNzLk1heExlbmd0aCA9IDEwMDAwMDA7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZ2VuZXJhdGVNb2RhbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQXBwUmVzb3VyY2VDbGFzcyhnZW5lcmF0ZU1vZGFsKSB7XHJcbiAgICB0aGlzLmdlbmVyYXRlQ29kZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMubG9jYWxpemF0aW9uc1NlcnZpY2UuZ2VuZXJhdGVBcHBSZXNvdXJjZUNsYXNzKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIFZhbHVlID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcyA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuTmFtZSA9IFwiR2VuZXJhdGVDb2RlVGV4dEFyZWFcIjtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuVmFsdWUgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy52YWx1ZVRvQ29weSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5Jc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuUm93cyA9IDIwO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5Db2xzID0gMjA7XHJcbiAgICAgIHRoaXMuc3Ryb25nbHlUeXBlZENsYXNzLk1heExlbmd0aCA9IDEwMDAwMDA7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZ2VuZXJhdGVNb2RhbCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgY29weUlucHV0TWVzc2FnZSgpIHtcclxuICAgIHRoaXMuX2NsaXBib2FyZFNlcnZpY2UuY29weSh0aGlzLnZhbHVlVG9Db3B5LnRvU3RyaW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vLy9FbmQgb2YgR2VuZXJhdGVTdHJvbmdseVR5cGVkQ2xhc3MgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG4gIC8vIFJlc3RSZXNvdXJjZVRvRmFjdG9yeURlZmF1bHQoUmVzb3VyY2U6YW55KSB7XHJcbiAgLy8gICAgIGxldCBSZXNvdXJjZU1vZGVsID0gbmV3IEVkaXRSZXNvdXJjZU1vZGVsKCk7XHJcbiAgLy8gICAgIFJlc291cmNlTW9kZWwuUmVzb3VyY2VJZCA9IFJlc291cmNlLnJlc291cmNlSWQ7XHJcbiAgLy8gICAgIFJlc291cmNlTW9kZWwuUmVzb3VyY2VTZXQgPSBSZXNvdXJjZS5yZXNvdXJjZVNldDtcclxuICAvLyAgICAgUmVzb3VyY2VNb2RlbC5WYWx1ZUVOID0gXCJcIjtcclxuICAvLyAgICAgUmVzb3VyY2VNb2RlbC5WYWx1ZUFSID1cIlwiO1xyXG4gIC8vICAgICBSZXNvdXJjZU1vZGVsLkNvbW1lbnRFbiA9IFwiXCI7XHJcbiAgLy8gICAgIFJlc291cmNlTW9kZWwuQ29tbWVudEFyID0gXCJcIjtcclxuICAvLyAgICAgdGhpcy5sb2NhbGl6YXRpb25zU2VydmljZS5SZXN0UmVzb3VyY2VUb0ZhY3RvcnlEZWZhdWx0KFJlc291cmNlTW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcblxyXG4gIC8vICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgLy8gICAgICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICAvLyAgICAgfSlcclxuXHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG4gIC8vIFJlbG9hZEpzb25GaWxlKCkge1xyXG4gIC8vICAgdGhpcy5sb2NhbGl6YXRpb25zU2VydmljZS5SZWxvYWRKc29uRmlsZSgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgLy8gICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAvLyAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAvLyAgICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICAvLyAgIH0sIChlcnJvcikgPT4ge1xyXG4gIC8vICAgfSlcclxuICAvLyB9XHJcblxyXG4gIC8vIFJlc3RUb0ZhY3RvcnlEZWZhdWx0KCkge1xyXG4gIC8vICB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLlJlc3RUb0ZhY3RvcnlEZWZhdWx0KCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAvLyAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gIC8vICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gIC8vICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gIC8vICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gIC8vICAgfSlcclxuICAvLyB9XHJcblxyXG4gIC8vIFJlc3RVbm1vZGlmaWVkVG9GYWN0b3J5RGVmYXVsdCgpIHtcclxuICAvLyAgIHRoaXMubG9jYWxpemF0aW9uc1NlcnZpY2UuUmVzdFVubW9kaWZpZWRUb0ZhY3RvcnlEZWZhdWx0KCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAvLyAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAvLyAgICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICAvLyAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy8vLyBTdGFydCBVcGxvYWQgUmVzb3VyY2UgUGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93VXBsb2FkTW9kYWwodXBsb2FkUmVzb3VyY2VNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMudXBsb2FkSnNvbkZpbGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gICAgdGhpcy51cGxvYWRKc29uRmlsZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICB0aGlzLnVwbG9hZEpzb25GaWxlRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy51cGxvYWRKc29uRmlsZUZvcm1cclxuICAgIHRoaXMudXBsb2FkSnNvbkZpbGVGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRVcGxvYWRNb2RhbDtcclxuICAgIHRoaXMudXBsb2FkSnNvbkZpbGVGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldFVwbG9hZEZ1bmN0aW9uO1xyXG4gICAgdGhpcy51cGxvYWRKc29uRmlsZUZvcm1PcHRpb25zLk9uU3VjY2Vzc0hhbmRsZXIgPSB0aGlzLm9uU3VjY2Vzc0hhbmRsZXI7XHJcbiAgICB0aGlzLnVwbG9hZEpzb25GaWxlRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG4gICAgdGhpcy51cGxvYWRSZXNvdXJjZVNldE9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnVwbG9hZFJlc291cmNlU2V0T3B0aW9ucy5OYW1lID0gXCJTZWxlY3RlZFJlc291cmNlU2V0XCJcclxuICAgIHRoaXMudXBsb2FkUmVzb3VyY2VTZXRPcHRpb25zLkxhYmVsS2V5ID0gXCJSZXNvdXJjZVNldFwiXHJcbiAgICB0aGlzLnVwbG9hZFJlc291cmNlU2V0T3B0aW9ucy5EYXRhU291cmNlID0gdGhpcy5yZXNvdXJjZVNldExpc3RcclxuICAgIHRoaXMudXBsb2FkUmVzb3VyY2VTZXRPcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLnVwbG9hZFJlc291cmNlU2V0T3B0aW9ucy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICB0aGlzLnVwbG9hZFJlc291cmNlU2V0T3B0aW9ucy5QbGFjZWhvbGRlciA9IFwiXCI7XHJcblxyXG5cclxuICAgIHRoaXMucmVzb3VyY2VzRmlsZUlucHV0ID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICB0aGlzLnJlc291cmNlc0ZpbGVJbnB1dC5OYW1lID0gXCJSZXNvdXJjZXNGaWxlXCJcclxuICAgIHRoaXMucmVzb3VyY2VzRmlsZUlucHV0LkxhYmVsS2V5ID0gXCJVcGxvYWRGaWxlXCJcclxuICAgIHRoaXMucmVzb3VyY2VzRmlsZUlucHV0LklzTXVsdGlwbGVGaWxlID0gZmFsc2VcclxuICAgIHRoaXMucmVzb3VyY2VzRmlsZUlucHV0LkZpbGVVcGxvYWRBY2NlcHRzVHlwZXMgPSBbRmlsZVR5cGUuRXhjZWxdXHJcbiAgICB0aGlzLnJlc291cmNlc0ZpbGVJbnB1dC5GaWxlTWF4U2l6ZUluTUIgPSAxMDtcclxuICAgIHRoaXMucmVzb3VyY2VzRmlsZUlucHV0LklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odXBsb2FkUmVzb3VyY2VNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0VXBsb2FkTW9kYWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMudXBsb2FkSnNvbkZpbGVGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBSZXNvdXJjZU1vZGVsID0gbmV3IFVwbG9hZEpzb25WTSgpO1xyXG4gICAgUmVzb3VyY2VNb2RlbC5TZWxlY3RlZFJlc291cmNlU2V0ID0gUmVzdWx0TW9kZWwuU2VsZWN0ZWRSZXNvdXJjZVNldDtcclxuICAgIFJlc291cmNlTW9kZWwuUmVzb3VyY2VzRmlsZSA9IHtcclxuICAgICAgRmlsZUJhc2U2NDogUmVzdWx0TW9kZWxbXCJSZXNvdXJjZXNGaWxlXCJdLkZpbGUuRmlsZUJhc2U2NCxcclxuICAgICAgRmlsZU5hbWU6IFJlc3VsdE1vZGVsW1wiUmVzb3VyY2VzRmlsZVwiXS5GaWxlLkZpbGVOYW1lLFxyXG4gICAgICBGaWxlU2l6ZUluTUI6IFJlc3VsdE1vZGVsW1wiUmVzb3VyY2VzRmlsZVwiXS5GaWxlLkZpbGVTaXplSW5NQixcclxuICAgICAgRmlsZVR5cGU6IFJlc3VsdE1vZGVsW1wiUmVzb3VyY2VzRmlsZVwiXS5GaWxlLkZpbGVUeXBlXHJcbiAgICB9XHJcbiAgICBwYXJhbUFycmF5LnB1c2goUmVzb3VyY2VNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldFVwbG9hZEZ1bmN0aW9uID0gKFJlc291cmNlTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uc1NlcnZpY2UudXBsb2FkRXhjZWxGaWxlcyhSZXNvdXJjZU1vZGVsKVxyXG4gIH1cclxuICBvblN1Y2Nlc3NIYW5kbGVyID0gKHJlc3VsdCkgPT4ge1xyXG4gICAgdGhpcy5leGNlbFZhbGlkYXRpb24gPSByZXN1bHQudmFsXHJcbiAgICBsZXQgc2hvd0J1dHRvbiA9IHRoaXMuU2hvd1Jlc291cmNlVmFsaWRhdGlvbk1vZGFsIGFzIGFueVxyXG4gICAgc2hvd0J1dHRvbi5jbGljaygpXHJcbiAgfVxyXG4gIC8vLy8vLy8vLy8vLyBFbmQgb2YgVXBsb2FkIFJlc291cmNlIHBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcblxyXG4gIG9wZW5SZXNvdXJjZVZhbGlkYXRpb25Nb2RhbChSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbCkge1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbCk7XHJcbiAgfVxyXG4gIGNvbmZpcm1FeGNlbCgpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5U3VjY2Vzc01lc3NhZ2UoKVxyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLnBhZ2luZ0VsZW1lbnQgYXMgYW55O1xyXG4gICAgdGhpcy5pbml0aWFsaXplUGFnZSgpO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZmlsdGVyTG9jYWxpemF0aW9uTGlzdChzZWFyY2hWYWx1ZSkge1xyXG4gICAgaWYgKHNlYXJjaFZhbHVlKVxyXG4gICAgICB0aGlzLmZpbHRlcmVkTG9jYWxpemF0aW9uUGFnaW5nUmVzdWx0ID0gdGhpcy5sb2NhbGl6YXRpb25QYWdpbmdSZXN1bHQuZmlsdGVyKGl0ZW0gPT4gaXRlbS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5maWx0ZXJlZExvY2FsaXphdGlvblBhZ2luZ1Jlc3VsdCA9IHRoaXMubG9jYWxpemF0aW9uUGFnaW5nUmVzdWx0XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vL0Rlc3Ryb3kgT2JzZXJ2YWJsZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxibG9jay11aT4gPC9ibG9jay11aT5cclxuICA8IS0tIFBhZ2UgQ29udGVudCAtLT5cclxuICA8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJpc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgPCEtLShPbkNoYW5nZSk9XCJmaWx0ZXJMb2NhbGl6YXRpb25MaXN0KCRldmVudClcIiAtLT5cclxuICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiAgIFtncm91cF09XCJsb2NhbGl6YXRpb25Gb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46Ok1lbnUgLS0+XHJcblxyXG4gICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25Ub2dnbGUgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiIGlkPVwiRmlsdGVyc0Ryb3Bkb3duXCIgdGl0bGU9XCJGaWx0ZXJcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWx0ZXIgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJGaWx0ZXJcIil9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmlsdGVyTG9hZGVkXCIgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cIkZpbHRlcnNEcm9wZG93blwiIGNsYXNzPVwiIGZpbHRlci1jb250YWluZXIgbWVudSBtZW51LXN1YiBtZW51LXN1Yi1kcm9wZG93biBtZW51LWNvbHVtbiBtZW51LXJvdW5kZWQgbWVudS1ncmF5LTgwMCBtZW51LXN0YXRlLWJnLWxpZ2h0LXByaW1hcnkgIHctMjUwcHggdy1tZC01MDBweCBmdy1ib2xkIHB5LTMgXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNyBweS01XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cInJlc291cmNlU2V0T3B0aW9uc1wiIFtncm91cF09XCJsb2NhbGl6YXRpb25Gb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5IHB2LXJlc2V0IGJ0bi1zbVwiIG5hbWU9XCJsb2NhbGl6YXRpb25zRmlsdGVyc0J0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2hvd0V4cG9ydEV4Y2VsTW9kYWwoKVwiXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRXhwb3J0XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBibnNpZ2h0cy1idG4tZXhwb3J0IG1lLTMgXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWRvd25sb2FkIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkV4cG9ydFwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuQWN0aXZhdGVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTMgXCIgKGNsaWNrKT1cInNob3dSZWxvYWRSZXNvdXJjZU1vZGFsKClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc3luYy1hbHQgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVsb2FkXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IG1lLTMgXCIgaWQ9XCJidG5BY3RpdmF0ZVwiIChjbGljayk9XCJzaG93VXBsb2FkTW9kYWwoVXBsb2FkSnNvbkZpbGVNb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdXBsb2FkIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVwbG9hZFwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBtZS0zXCIgKGNsaWNrKT1cInNob3dBZGRSZXNvdXJjZU1vZGFsKEFkZFJlc291cmNlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51dFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBtZS0zIGJ0bi1pY29uXCIgdGl0bGU9XCJvcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXJzXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51dD1cIm1hdE1lbnVcIiBjbGFzcz1cInB5LTNcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIChjbGljayk9XCJzaG93UmVzdFRvRmFjdG9yeURlZmF1bHQoKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPiAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzdFRvRmFjdG9yeURlZmF1bHRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAqbmdJZj1cIiFQcm9kdWN0aW9uTW9kZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgKGNsaWNrKT1cImdlbmVyYXRlU3Ryb25nbHlUeXBlZENsYXNzKEdlbmVyYXRlU3Ryb25nbHlUeXBlZE1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPiAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiR2VuZXJhdGVTdHJvbmdseVR5cGVkQ2xhc3NcIil9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZ2VuZXJhdGVCQlNGUmVzb3VyY2VDbGFzcyhHZW5lcmF0ZVN0cm9uZ2x5VHlwZWRNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj4gIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkdlbmVyYXRlQkJTRlJlc291cmNlQ2xhc3NcIil9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZ2VuZXJhdGVBcHBSZXNvdXJjZUNsYXNzKEdlbmVyYXRlU3Ryb25nbHlUeXBlZE1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPiAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiR2VuZXJhdGVBcHBsaWNhdGlvblJlc291cmNlQ2xhc3NcIil9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIHR5cGU9XCJidXR0b25cIiBbcm91dGVyTGlua109XCJbJy9BZG1pbi9Mb2NhbGl6YXRpb24vUmVwbGFjZVRleHQnXVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPiAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVwbGFjZVRleHRcIil9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBlbmQ6OkhlYWRlciAtLT5cclxuICAgICAgPCEtLSBiZWdpbjo6Qm9keSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc291cmNlSWRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc291cmNlU2V0XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWYWx1ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBMb2NhbGl6YXRpb24gb2YgZmlsdGVyZWRMb2NhbGl6YXRpb25QYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZGFya1wiPnt7TG9jYWxpemF0aW9uLnJlc291cmNlSWR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+e3tMb2NhbGl6YXRpb24ucmVzb3VyY2VTZXR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+e3tMb2NhbGl6YXRpb24udmFsdWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBuZ2JEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dFZGl0UmVzb3VyY2VNb2RhbChMb2NhbGl6YXRpb24sRWRpdFJlc291cmNlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBpZD1cImJ0blJlc2V0UGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlUmVzb3VyY2VNb2RhbChMb2NhbGl6YXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJmaWx0ZXJlZExvY2FsaXphdGlvblBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgIDwhLS1lbmQ6OnVzZXJzIGxpc3QtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0TG9jYWxpemF0aW9uTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJpc0ZpbHRlckxvYWRlZFwiIFtvcHRpb25zXT1cImxvY2FsaXphdGlvblBhZ2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJsb2NhbGl6YXRpb25Gb3JtXCIgI0xvY2FsaXphdGlvblBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgPCEtLSBBZGQgTW9kYWwgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNBZGRSZXNvdXJjZU1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkUmVzb3VyY2VcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cImFkZFJlc291cmNlRm9ybU9wdGlvbnNcIj5cclxuICAgICAgICA8QkJTRi1BdXRvY29tcGxldGVUZXh0Qm94IFtvcHRpb25zXT1cInJlc291cmNlU2V0XCIgW2dyb3VwXT1cImFkZFJlc291cmNlRm9ybVwiPlxyXG4gICAgICAgIDwvQkJTRi1BdXRvY29tcGxldGVUZXh0Qm94PlxyXG4gICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwicmVzb3VyY2VJZFwiIFtncm91cF09XCJhZGRSZXNvdXJjZUZvcm1cIj5cclxuICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYSBbb3B0aW9uc109XCJtdWx0aUxpbmd1YWxWYWx1ZVwiIFtncm91cF09XCJhZGRSZXNvdXJjZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWE+XHJcbiAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWEgW29wdGlvbnNdPVwibXVsdGlMaW5ndWFsQ29tbWVudFwiIFtncm91cF09XCJhZGRSZXNvdXJjZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWE+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNDbG9zZVJlc291cmNlTW9kYWwgaWQ9XCJDbG9zZVJlc291cmNlTW9kYWxcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19IDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9CQlNGLUZvcm0+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPCEtLSBFZGl0IE1vZGFsIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjRWRpdFJlc291cmNlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0UmVzb3VyY2VcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cImVkaXRSZXNvdXJjZUZvcm1PcHRpb25zXCI+XHJcbiAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWEgW29wdGlvbnNdPVwiZWRpdE11bHRpTGluZ3VhbFZhbHVlXCIgW2dyb3VwXT1cImVkaXRSZXNvdXJjZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWE+XHJcbiAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWEgW29wdGlvbnNdPVwiZWRpdE11bHRpTGluZ3VhbENvbW1lbnRcIiBbZ3JvdXBdPVwiZWRpdFJlc291cmNlRm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNDbG9zZUVkaXRSZXNvdXJjZU1vZGFsIGlkPVwiQ2xvc2VFZGl0UmVzb3VyY2VNb2RhbFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX0gPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L0JCU0YtRm9ybT5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8IS0tIFVwbG9hZCBNb2RhbCAtLT5cclxuICA8bmctdGVtcGxhdGUgI1VwbG9hZEpzb25GaWxlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJVcGxvYWRSZXNvdXJjZXNcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cInVwbG9hZEpzb25GaWxlRm9ybU9wdGlvbnNcIj5cclxuICAgICAgICA8YSBbaGlkZGVuXT1cInRydWVcIiBpZD1cIlNob3dSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbFwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwib3BlblJlc291cmNlVmFsaWRhdGlvbk1vZGFsKFJlc291cmNlVmFsaWRhdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1oaXN0b3J5XCI+PC9pPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJzaG93XCIpfX1cclxuICAgICAgICA8L2E+XHJcbiAgICAgICAgPEJCU0YtRmlsZVVwbGFvZCBbb3B0aW9uc109XCJyZXNvdXJjZXNGaWxlSW5wdXRcIiBbZ3JvdXBdPVwidXBsb2FkSnNvbkZpbGVGb3JtXCI+XHJcbiAgICAgICAgPC9CQlNGLUZpbGVVcGxhb2Q+XHJcbiAgICAgICAgPGEgaWQ9XCJidG5EZWFjdGl2YXRlXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJzaG93RXhwb3J0RXhjZWxNb2RhbCh0cnVlKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRG93bmxvYWRSZXNvdXJjZVRlbXBsYXRlU2hlZXRcIil9fVxyXG4gICAgICAgIDwvYT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI0Nsb3NlVXBsb2FkSnNvbkZpbGVNb2RhbCBpZD1cIkNsb3NlVXBsb2FkSnNvbkZpbGVNb2RhbFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX0gPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L0JCU0YtRm9ybT5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcblxyXG4gIDwhLS0gR2VuZXJhdGVTdHJvbmdseVR5cGVkQ2xhc3MgIE1vZGFsIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjR2VuZXJhdGVTdHJvbmdseVR5cGVkTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZUNvZGVcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJzdHJvbmdseVR5cGVkQ2xhc3NcIiBbZ3JvdXBdPVwiZ2VuZXJhdGVDb2RlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRBcmVhPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI0Nsb3NlU3Ryb25nbHlUeXBlZENsYXNzTW9kYWwgaWQ9XCJDbG9zZVN0cm9uZ2x5VHlwZWRDbGFzc01vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fSA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIChjbGljayk9XCJjb3B5SW5wdXRNZXNzYWdlKClcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ29weVRvQ2xpcGJvYXJkXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48IS0tZGVsZXRlIE1vZGFsLS0+XHJcbjxCQlNGLUNvbmZpcm1hdGlvbk1vZGFsICpuZ0lmPVwiZGVsZXRlQ29udHJvbExvYWRlZFwiIFtvcHRpb25zXT1cImRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnNcIiBpZD1cIkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbFwiXHJcbiNDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuPCEtLUV4cG9ydCBNb2RhbC0tPlxyXG48QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cImV4cG9ydENvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJleHBvcnRDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJleHBvcnRDb25maXJtYXRpb25Db250cm9sXCJcclxuI2V4cG9ydENvbmZpcm1hdGlvbkNvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuPCEtLVJlbG9hZCBNb2RhbC0tPlxyXG48QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cInJlbG9hZENvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJyZWxvYWRDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJSZWxvYWRDb25maXJtYXRpb25Nb2RhbENvbnRyb2xcIlxyXG4jUmVsb2FkQ29uZmlybWF0aW9uTW9kYWxDb250cm9sPjwvQkJTRi1Db25maXJtYXRpb25Nb2RhbD5cclxuXHJcbjwhLS1SZXN0IE1vZGFsLS0+XHJcbjxCQlNGLUNvbmZpcm1hdGlvbk1vZGFsICpuZ0lmPVwicmVzdFRvRmFjdG9yeURlZmF1bHRDb250cm9sTG9hZGVkXCIgW29wdGlvbnNdPVwicmVzdFRvRmFjdG9yeURlZmF1bHRDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJSZXN0Q29uZmlybWF0aW9uTW9kYWxDb250cm9sXCJcclxuI1Jlc3RDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuXHJcbiAgPCEtLSBSZXNvdXJjZSBWYWxpZGF0aW9uIE1vZGFsLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbCBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc291cmNlY2hlY2tSZXN1bHRcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibm90aWNlIGQtZmxleCBiZy1saWdodC13YXJuaW5nIHJvdW5kZWQgYm9yZGVyLXdhcm5pbmcgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpTdmcgSWNvbiB8IHBhdGg6IGljb25zL2R1b3R1bmUvZ2VuZXJhbC9nZW4wNDQuc3ZnLS0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8IS0tZW5kOjpTdmcgSWNvbi0tPlxyXG4gICAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgICA8IS0tYmVnaW46OldyYXBwZXItLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiICpuZ0lmPVwiIWV4Y2VsVmFsaWRhdGlvbi5pc1ZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVwZGF0ZWRFbnRyaWVzTnVtYmVyXCIpfX0ge3tleGNlbFZhbGlkYXRpb24udmFsaWRDb3VudH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkludmFsaWRFbnRyaWVzTnVtYmVyXCIpfX0ge3tleGNlbFZhbGlkYXRpb24uaW52YWxpZENvdW50fX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIiAqbmdJZj1cImV4Y2VsVmFsaWRhdGlvbi5pc1ZhbGlkXCI+XHJcbiAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWxsRW50cmllc1ZhbGlkXCIpfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLWVuZDo6V3JhcHBlci0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFleGNlbFZhbGlkYXRpb24uaXNWYWxpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzb3VyY2VJZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc291cmNlU2V0XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRXJyb3JNZXNzYWdlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRySXRlbVwiICpuZ0Zvcj1cImxldCBMb2NhbGl6YXRpb24gb2YgZXhjZWxWYWxpZGF0aW9uLmludmFsaWRFbnRyaWVzXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj5cclxuICAgICAgICAgICAgICAgICAge3tMb2NhbGl6YXRpb24ucmVzb3VyY2VJZH19XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7TG9jYWxpemF0aW9uLnJlc291cmNlU2V0fX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7TG9jYWxpemF0aW9uLmVycm9yTWVzc2FnZX19PC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI0Nsb3NlUmVzb3VyY2VWYWxpZGF0aW9uTW9kYWwgaWQ9XCJDbG9zZVJlc291cmNlVmFsaWRhdGlvbk1vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fSA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY29uZmlybUV4Y2VsKClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuIl19
|
|
516
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2xvY2FsaXphdGlvbnMvbG9jYWxpemF0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2xvY2FsaXphdGlvbnMvbG9jYWxpemF0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFzQixTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLDJCQUEyQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBK0MsTUFBTSx5QkFBeUIsQ0FBQztBQUN6VixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUUxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBR2xGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUXBDLE1BQU0sT0FBTyxzQkFBc0I7SUF5RmpDLFlBRVksZUFBZ0MsRUFDakMsY0FBOEIsRUFDN0Isa0JBQXNDLEVBQ3RDLFFBQWtCLEVBQ2xCLGlCQUFtQyxFQUNuQyxvQkFBMEMsRUFDMUMsWUFBc0IsRUFD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RixTQUFTO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPQywyQkFBMkI7c0JBQXZGLFNBQVM7dUJBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNHLDRCQUE0QjtzQkFBekYsU0FBUzt1QkFBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBdXRvY29tcGxldGVPcHRpb25zLCBEcm9wZG93bk9wdGlvbnMsIEZpbGVVcGxvYWRPcHRpb25zLCBGaWxlVHlwZSwgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBQYWdpbmdPcHRpb25zLCBUZXh0QXJlYU9wdGlvbnMsIFRleHRCb3hPcHRpb25zLCBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMsIEVuZ2xpc2hBcmFiaWNEVE8sIEZvcm1PcHRpb25zLCBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMsIFN0eWxlQ29uZmlybWF0aW9uTW9kZSwgUGFnaW5nQ29tcG9uZW50LCBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgRWRpdFJlc291cmNlTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL0xvY2FsaXphdGlvbk1vZGVscy9FZGl0UmVzb3VyY2VNb2RlbCc7XHJcbmltcG9ydCB7IGxvY2FsaXphdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL1NlcnZpY2VzL2xvY2FsaXphdGlvbnNTZXJ2aWNlLnNlcnZpY2UgJztcclxuaW1wb3J0IHsgVXBsb2FkSnNvblZNIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9Mb2NhbGl6YXRpb25Nb2RlbHMvVXBsb2FkSnNvblZNJztcclxuaW1wb3J0IHsgQ2xpcGJvYXJkU2VydmljZSB9IGZyb20gJ25neC1jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1sb2NhbGl6YXRpb25zJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9jYWxpemF0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbG9jYWxpemF0aW9ucy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXphdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBBcGlVcmwgPSB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLkFwaVVybFxyXG4gIFByb2R1Y3Rpb25Nb2RlOiBib29sZWFuO1xyXG5cclxuICAvL0ZpbHRlciBhbmQgcGFnaW5nIGNvbXBvbmVudHNcclxuICByZXNvdXJjZVNldE9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBzZWxlY3RlZExvY2FsaXphdGlvbkxpc3QgPSBbXTtcclxuICByZXNvdXJjZVNldExpc3QgPSBbXTtcclxuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgbG9jYWxpemF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsb2NhbGl6YXRpb25QYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRMb2NhbGl6YXRpb25QYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgbG9jYWxpemF0aW9uUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIHJlc291cmNlU2V0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIHRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBpc0ZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ0xvY2FsaXphdGlvblBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBhZGRSZXNvdXJjZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBhZGRSZXNvdXJjZUZvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIHJlc291cmNlU2V0OiBBdXRvY29tcGxldGVPcHRpb25zO1xyXG4gIHJlc291cmNlSWQ6IFRleHRCb3hPcHRpb25zO1xyXG4gIG11bHRpTGluZ3VhbFZhbHVlOiBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnNcclxuICBtdWx0aUxpbmd1YWxDb21tZW50OiBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnNcclxuXHJcbiAgLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgZWRpdFJlc291cmNlRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgZWRpdFJlc291cmNlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGVkaXRNdWx0aUxpbmd1YWxWYWx1ZTogTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zXHJcbiAgZWRpdE11bHRpTGluZ3VhbENvbW1lbnQ6IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9uc1xyXG4gIGVkaXRSZXNvdXJjZUlkOiBzdHJpbmc7XHJcbiAgZWRpdFJlc291cmNlU2V0OiBzdHJpbmc7XHJcblxyXG4gIC8vR2VuZXJhdGVTdHJvbmdseVR5cGVkQ2xhc3NcclxuICBnZW5lcmF0ZUNvZGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc3Ryb25nbHlUeXBlZENsYXNzOiBUZXh0QXJlYU9wdGlvbnM7XHJcbiAgdmFsdWVUb0NvcHk6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vVXBsb2FkIE1vZGVsIENvbnRyb2xzXHJcbiAgdXBsb2FkSnNvbkZpbGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgdXBsb2FkSnNvbkZpbGVGb3JtT3B0aW9uczogRm9ybU9wdGlvbnNcclxuICB1cGxvYWRSZXNvdXJjZVNldE9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICByZXNvdXJjZXNGaWxlSW5wdXQ6IEZpbGVVcGxvYWRPcHRpb25zO1xyXG5cclxuICAvL2RlbGV0ZSBNb2RlbCBDb250cm9sc1xyXG4gIGRlbGV0ZVJlc291cmNlTGlzdDogYW55W10gPSBbXVxyXG4gIGRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnM6IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucztcclxuICBkZWxldGVDb250cm9sTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnQ29uZmlybWF0aW9uTW9kYWxDb250cm9sJywgeyBzdGF0aWM6IGZhbHNlIH0pIENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG5cclxuXHJcblxyXG4gIC8vRXhwb3J0IEV4Y2VsICBDb250cm9sc1xyXG4gIGV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnM6IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucztcclxuICBleHBvcnRDb250cm9sTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZXhwb3J0QXNUZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ2V4cG9ydENvbmZpcm1hdGlvbkNvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgZXhwb3J0Q29uZmlybWF0aW9uQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG5cclxuICAvL1JlbG9hZCBKc29uIE1vZGVsIENvbnRyb2xzXHJcbiAgcmVsb2FkQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIHJlbG9hZENvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdSZWxvYWRDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgcmVsb2FkQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcblxyXG5cclxuICAvL1Jlc3QgVG8gRmFjdG9yeSBEZWZhdWx0ICBDb250cm9sc1xyXG4gIHJlc3RUb0ZhY3RvcnlEZWZhdWx0Q29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIHJlc3RUb0ZhY3RvcnlEZWZhdWx0Q29udHJvbExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ1Jlc3RDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgcmVzdENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG5cclxuXHJcblxyXG4gIC8vUmVzb3VyY2VWYWxpZGF0aW9uTW9kYWxDb250cm9sc1xyXG4gIGV4Y2VsVmFsaWRhdGlvbjogYW55O1xyXG4gIEBWaWV3Q2hpbGQoJ1Nob3dSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBTaG93UmVzb3VyY2VWYWxpZGF0aW9uTW9kYWw6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnQ2xvc2VSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZVJlc291cmNlVmFsaWRhdGlvbk1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3RvclxyXG4gICAgKFxyXG4gICAgICBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgICAgcHJpdmF0ZSBfY2xpcGJvYXJkU2VydmljZTogQ2xpcGJvYXJkU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBsb2NhbGl6YXRpb25zU2VydmljZTogbG9jYWxpemF0aW9uc1NlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgICAgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZVxyXG4gICAgKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvL1BhZ2UgaGVhZGVyIChicmVhZGNydW1iIGFuZCB0aXRsZSlcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJMb2NhbGl6YXRpb25cIilcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgXTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgdGhpcy5Qcm9kdWN0aW9uTW9kZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldFByb2R1Y3Rpb25Nb2RlKClcclxuICAgIC8vaW5pdGlhbGl6ZSBwYWdlXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcbiAgfVxyXG4gIC8vUGFnaW5nIGZ1bmN0aW9uc1xyXG4gIHNldExvY2FsaXphdGlvbkxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLmxvY2FsaXphdGlvblBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gICAgdGhpcy5maWx0ZXJlZExvY2FsaXphdGlvblBhZ2luZ1Jlc3VsdCA9IHRoaXMubG9jYWxpemF0aW9uUGFnaW5nUmVzdWx0XHJcblxyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsTG9jYWxpemF0aW9uTGlzdChldmVudCwgTG9jYWxpemF0aW9ucykge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBMb2NhbGl6YXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IExvY2FsaXphdGlvbiA9IExvY2FsaXphdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkxvY2FsaXphdGlvbi1cIiArIExvY2FsaXphdGlvbi5SZXNvdXJjZUlkKTtcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGl6YXRpb25MaXN0LnB1c2goTG9jYWxpemF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTG9jYWxpemF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBMb2NhbGl6YXRpb24gPSBMb2NhbGl6YXRpb25zW2luZGV4XTtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJMb2NhbGl6YXRpb24tXCIgKyBMb2NhbGl6YXRpb24uUmVzb3VyY2VJZCk7XHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJjaGVja2VkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGl6YXRpb25MaXN0ID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkRmlsdGVycygpIHtcclxuICAgIGlmICh0aGlzLnNob3dGaWx0ZXIgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0ZpbHRlciA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dGaWx0ZXIgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuXHJcbiAgICB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLmxvYWREcm9wZG93bigpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMucmVzb3VyY2VTZXRMaXN0ID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICAvLyBSZXNvdXJjZSBTZXQgSW5pdFxyXG4gICAgICB0aGlzLnJlc291cmNlU2V0T3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldE9wdGlvbnMubmFtZSA9IFwiUmVzb3VyY2VTZXRcIlxyXG4gICAgICB0aGlzLnJlc291cmNlU2V0T3B0aW9ucy5sYWJlbEtleSA9IFwiUmVzb3VyY2VTZXRcIlxyXG4gICAgICB0aGlzLnJlc291cmNlU2V0T3B0aW9ucy5kYXRhU291cmNlID0gdGhpcy5yZXNvdXJjZVNldExpc3RcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldE9wdGlvbnMuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldE9wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlc291cmNlU2V0T3B0aW9ucy5wbGFjZWhvbGRlciA9IFwiXCI7XHJcblxyXG4gICAgICAvLyBUZXh0Qm94IGludGlcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5uYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC50eXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LnBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlWYWx1ZU9yUmVzb3VyY2VJRFwiKVxyXG5cclxuXHJcblxyXG4gICAgICB0aGlzLnJlc291cmNlU2V0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcIlJlc291cmNlU2V0XCJcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJyZXNvdXJjZVNldFwiXHJcbiAgICAgIHRoaXMucmVzb3VyY2VTZXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgICAgdGhpcy5yZXNvdXJjZVNldEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3RcclxuXHJcblxyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInJlc291cmNlTmFtZVwiXHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcblxyXG4gICAgICB0aGlzLmxvY2FsaXphdGlvblBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMubG9jYWxpemF0aW9uUGFnaW5nLmFjdGlvblBvc3RVUkwgPSB0aGlzLkFwaVVybCArICdHZXRMb2NhbGl6YXRpb25zQnlGaWx0ZXInO1xyXG4gICAgICB0aGlzLmxvY2FsaXphdGlvblBhZ2luZy5vbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRleHRCb3hcIl1cclxuICAgICAgdGhpcy5sb2NhbGl6YXRpb25QYWdpbmcuZHJvcGRvd25GaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wiUmVzb3VyY2VTZXRcIl07XHJcbiAgICAgIHRoaXMubG9jYWxpemF0aW9uUGFnaW5nLmZpbHRlcnMgPSBbdGhpcy5yZXNvdXJjZVNldEZpbHRlciwgdGhpcy50ZXh0SW5wdXRGaWx0ZXJdXHJcbiAgICAgIHRoaXMubG9jYWxpemF0aW9uUGFnaW5nLnJlc2V0RmlsdGVyQnV0dG9uTmFtZSA9IFwibG9jYWxpemF0aW9uc0ZpbHRlcnNCdG5cIjtcclxuXHJcbiAgICAgIHRoaXMuaXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy9TdGFydCBvZiBFeHBvcnQgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93RXhwb3J0RXhjZWxNb2RhbChFeHBvcnRBc1RlbXBsYXRlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuZXhwb3J0QXNUZW1wbGF0ZSA9IEV4cG9ydEFzVGVtcGxhdGU7XHJcblxyXG4gICAgdGhpcy5leHBvcnRDb250cm9sTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLmV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5leHBvcnRFeGNlbEZ1bmN0aW9uO1xyXG4gICAgdGhpcy5leHBvcnRDb25maXJtYXRpb25PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuICAgIHRoaXMuZXhwb3J0Q29uZmlybWF0aW9uT3B0aW9ucy5vblN1Y2Nlc3NIYW5kbGVyID0gdGhpcy5vbkV4cG9ydFN1Y2Nlc3NIYW5kbGVyO1xyXG4gICAgdGhpcy5leHBvcnRDb25maXJtYXRpb25PcHRpb25zLmNvbmZpcm1hdGlvbkJvZHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFeHBvcnRSZXNvdXJjZXNDb25maXJtYXRpb25cIik7XHJcbiAgICB0aGlzLmV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnMuY29uZmlybWF0aW9uSGVhZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRXhwb3J0UmVzb3VyY2VzXCIpO1xyXG4gICAgdGhpcy5leHBvcnRDb25maXJtYXRpb25PcHRpb25zLnN1Ym1pdEJ1dHRvblRleHQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFeHBvcnRcIik7XHJcbiAgICB0aGlzLmV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnMuc3R5bGVDb25maXJtYXRpb25Nb2RlID0gU3R5bGVDb25maXJtYXRpb25Nb2RlLldhcm5pbmc7XHJcbiAgICB0aGlzLmV4cG9ydENvbmZpcm1hdGlvbk9wdGlvbnMuc3VjY2Vzc05vdGlmaWNhdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdWNjZXNzTWVzc2FnZVwiKTtcclxuICAgIHRoaXMuZXhwb3J0Q29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5leHBvcnRDb25maXJtYXRpb25Db250cm9sLnNob3dNb2RhbCgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydEV4Y2VsRnVuY3Rpb24gPSAocGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIGxldCBmaWx0ZXJzID0gdGhpcy5wYWdpbmdFbGVtZW50LmdldEZpbHRlcnNWYWx1ZSgpO1xyXG4gICAgZmlsdGVyc1tcImV4cG9ydEFzVGVtcGxhdGVcIl0gPSB0aGlzLmV4cG9ydEFzVGVtcGxhdGU7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uc1NlcnZpY2UuZXhwb3J0KGZpbHRlcnMpO1xyXG4gIH1cclxuICBvbkV4cG9ydFN1Y2Nlc3NIYW5kbGVyID0gKHJlc3VsdCkgPT4ge1xyXG4gICAgbGV0IEZpbGVEVE8gPSByZXN1bHQgYXMgYW55XHJcbiAgICBjb25zdCBmaWxlID0gbmV3IEJsb2IoW0ZpbGVEVE9dLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfSk7XHJcbiAgICBzYXZlQXMoZmlsZSwgdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzb3VyY2VzXCIpICsgYCR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3IERhdGUoKSwgXCJkZC1NTS1ZWVlZIGhoOm1tXCIpLnRvU3RyaW5nKCl9Lnhsc3hgKTtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuXHJcbiAgfVxyXG4gIC8vLy8vLy8vLy8vRW5kIG9mIEV4cG9ydCBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy8vLyBTdGFydCBhZGQgUmVzb3VyY2UgUGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93QWRkUmVzb3VyY2VNb2RhbChhZGRSZXNvdXJjZU1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5hZGRSZXNvdXJjZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgICB0aGlzLmFkZFJlc291cmNlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuYWRkUmVzb3VyY2VGb3JtT3B0aW9ucy5mb3JtR3JvdXAgPSB0aGlzLmFkZFJlc291cmNlRm9ybVxyXG4gICAgdGhpcy5hZGRSZXNvdXJjZUZvcm1PcHRpb25zLmdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZFJlc291cmNlTW9kYWw7XHJcbiAgICB0aGlzLmFkZFJlc291cmNlRm9ybU9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRSZXNvdXJjZUZ1bmN0aW9uO1xyXG4gICAgdGhpcy5hZGRSZXNvdXJjZUZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudFxyXG5cclxuICAgIHRoaXMucmVzb3VyY2VTZXQgPSBuZXcgQXV0b2NvbXBsZXRlT3B0aW9ucygpO1xyXG4gICAgdGhpcy5yZXNvdXJjZVNldC5uYW1lID0gXCJSZXNvdXJjZVNldFwiO1xyXG4gICAgdGhpcy5yZXNvdXJjZVNldC5sYWJlbEtleSA9IFwiUmVzb3VyY2VTZXRcIjtcclxuICAgIHRoaXMucmVzb3VyY2VTZXQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5yZXNvdXJjZVNldC5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzb3VyY2VTZXQuYWxsb3dOZXdTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5yZXNvdXJjZVNldC52YWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLnJlc291cmNlU2V0LmFjdGlvblVSTCA9IHRoaXMuQXBpVXJsICsgXCJBdXRvQ29tcGxldGVSZXNvdXJjZVNldFwiXHJcblxyXG4gICAgdGhpcy5yZXNvdXJjZUlkID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnJlc291cmNlSWQubmFtZSA9IFwiUmVzb3VyY2VJZFwiO1xyXG4gICAgdGhpcy5yZXNvdXJjZUlkLmxhYmVsS2V5ID0gXCJSZXNvdXJjZUlkXCI7XHJcbiAgICB0aGlzLnJlc291cmNlSWQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5yZXNvdXJjZUlkLnZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMucmVzb3VyY2VJZC5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzb3VyY2VJZC5tYXhMZW5ndGggPSAxMDI0O1xyXG5cclxuICAgIHRoaXMubXVsdGlMaW5ndWFsVmFsdWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbFZhbHVlLm5hbWUgPSBcIlZhbHVlRFRPXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbFZhbHVlLmFyYWJpY0xhYmVsS2V5ID0gXCJWYWx1ZUluQXJhYmljXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbFZhbHVlLmVuZ2xpc2hMYWJlbEtleSA9IFwiVmFsdWVJbkVuZ2xpc2hcIjtcclxuICAgIHRoaXMubXVsdGlMaW5ndWFsVmFsdWUuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbFZhbHVlLm1heExlbmd0aCA9IDUwMDA7XHJcblxyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxDb21tZW50ID0gbmV3IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxDb21tZW50Lm5hbWUgPSBcIkNvbW1lbnREVE9cIjtcclxuICAgIHRoaXMubXVsdGlMaW5ndWFsQ29tbWVudC5hcmFiaWNMYWJlbEtleSA9IFwiQ29tbWVudEluQXJhYmljXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbENvbW1lbnQuZW5nbGlzaExhYmVsS2V5ID0gXCJDb21tZW50SW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbENvbW1lbnQubWF4TGVuZ3RoID0gNTAwMDtcclxuXHJcblxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihhZGRSZXNvdXJjZU1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRBZGRSZXNvdXJjZU1vZGFsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLmFkZFJlc291cmNlRm9ybS52YWx1ZSBhcyBhbnk7XHJcbiAgICBsZXQgQWRkTW9kZWwgPSBuZXcgRWRpdFJlc291cmNlTW9kZWwoKTtcclxuICAgIEFkZE1vZGVsLlJlc291cmNlSWQgPSBSZXN1bHRNb2RlbC5SZXNvdXJjZUlkO1xyXG4gICAgQWRkTW9kZWwuUmVzb3VyY2VTZXQgPSBSZXN1bHRNb2RlbC5SZXNvdXJjZVNldC52YWx1ZTtcclxuICAgIEFkZE1vZGVsLlZhbHVlRFRPID0gUmVzdWx0TW9kZWwuVmFsdWVEVE87XHJcbiAgICBBZGRNb2RlbC5Db21tZW50RFRPID0gUmVzdWx0TW9kZWwuQ29tbWVudERUTztcclxuXHJcbiAgICBwYXJhbUFycmF5LnB1c2goQWRkTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRSZXNvdXJjZUZ1bmN0aW9uID0gKEFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLmFkZFJlc291cmNlKEFkZE1vZGVsKVxyXG4gIH1cclxuICAvLy8vLy8vLy8vLy8gRW5kIG9mIGFkZCBSZXNvdXJjZSBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvLy8vLy8vLy8vL1N0YXJ0IG9mIGVkaXQgUmVzb3VyY2UgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93RWRpdFJlc291cmNlTW9kYWwocmVzb3VyY2U6IGFueSwgZWRpdFJlc291cmNlTW9kYWwpIHtcclxuXHJcbiAgICB0aGlzLmVkaXRSZXNvdXJjZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgICB0aGlzLmVkaXRSZXNvdXJjZUlkID0gcmVzb3VyY2UucmVzb3VyY2VJZFxyXG4gICAgdGhpcy5lZGl0UmVzb3VyY2VTZXQgPSByZXNvdXJjZS5yZXNvdXJjZVNldFxyXG5cclxuICAgIHRoaXMuZWRpdFJlc291cmNlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuZWRpdFJlc291cmNlRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5lZGl0UmVzb3VyY2VGb3JtXHJcbiAgICB0aGlzLmVkaXRSZXNvdXJjZUZvcm1PcHRpb25zLmdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRSZXNvdXJjZU1vZGVsO1xyXG4gICAgdGhpcy5lZGl0UmVzb3VyY2VGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEVkaXRSZXNvdXJjZUZ1bmN0aW9uO1xyXG4gICAgdGhpcy5lZGl0UmVzb3VyY2VGb3JtT3B0aW9ucy5wYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuXHJcblxyXG5cclxuICAgIHRoaXMubG9jYWxpemF0aW9uc1NlcnZpY2UuZ2V0UmVzb3VyY2UodGhpcy5lZGl0UmVzb3VyY2VTZXQsIHRoaXMuZWRpdFJlc291cmNlSWQpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgbGV0IFJlc291cmNlID0gcmVzdWx0Lm1vZGVsIGFzIGFueTtcclxuICAgICAgbGV0IFZhbHVlID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgVmFsdWUuYXJhYmljID0gUmVzb3VyY2UudmFsdWVEVE8uYXJhYmljO1xyXG4gICAgICBWYWx1ZS5lbmdsaXNoID0gUmVzb3VyY2UudmFsdWVEVE8uZW5nbGlzaDtcclxuXHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbFZhbHVlID0gbmV3IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxWYWx1ZS5uYW1lID0gXCJWYWx1ZURUT1wiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxWYWx1ZS5hcmFiaWNMYWJlbEtleSA9IFwiVmFsdWVJbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxWYWx1ZS5lbmdsaXNoTGFiZWxLZXkgPSBcIlZhbHVlSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbFZhbHVlLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxWYWx1ZS52YWx1ZSA9IFZhbHVlO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxWYWx1ZS5tYXhMZW5ndGggPSA1MDAwO1xyXG5cclxuXHJcbiAgICAgIGxldCBDb21tZW50ID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgQ29tbWVudC5hcmFiaWMgPSBSZXNvdXJjZS5jb21tZW50RFRPLmFyYWJpYztcclxuICAgICAgQ29tbWVudC5lbmdsaXNoID0gUmVzb3VyY2UuY29tbWVudERUTy5lbmdsaXNoO1xyXG5cclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsQ29tbWVudCA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsQ29tbWVudC5uYW1lID0gXCJDb21tZW50RFRPXCI7XHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbENvbW1lbnQuYXJhYmljTGFiZWxLZXkgPSBcIkNvbW1lbnRJbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxDb21tZW50LmVuZ2xpc2hMYWJlbEtleSA9IFwiQ29tbWVudEluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxDb21tZW50LnZhbHVlID0gQ29tbWVudDtcclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsQ29tbWVudC5tYXhMZW5ndGggPSA1MDAwO1xyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihlZGl0UmVzb3VyY2VNb2RhbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRFZGl0UmVzb3VyY2VNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5lZGl0UmVzb3VyY2VGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBFZGl0TW9kZWwgPSBuZXcgRWRpdFJlc291cmNlTW9kZWwoKTtcclxuICAgIEVkaXRNb2RlbC5SZXNvdXJjZUlkID0gdGhpcy5lZGl0UmVzb3VyY2VJZDtcclxuICAgIEVkaXRNb2RlbC5SZXNvdXJjZVNldCA9IHRoaXMuZWRpdFJlc291cmNlU2V0O1xyXG4gICAgRWRpdE1vZGVsLlZhbHVlRFRPID0gUmVzdWx0TW9kZWwuVmFsdWVEVE87XHJcbiAgICBFZGl0TW9kZWwuQ29tbWVudERUTyA9IFJlc3VsdE1vZGVsLkNvbW1lbnREVE87XHJcbiAgICBwYXJhbUFycmF5LnB1c2goRWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdFJlc291cmNlRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLmVkaXRSZXNvdXJjZShFZGl0TW9kZWwpXHJcbiAgfVxyXG4gIC8vLy8vLy8vLy8vRW5kIG9mIGVkaXQgUmVzb3VyY2UgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy9TdGFydCBvZiBkZWxldGUgUmVzb3VyY2UgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93RGVsZXRlUmVzb3VyY2VNb2RhbChyZXNvdXJjZTogYW55KSB7XHJcblxyXG4gICAgdGhpcy5kZWxldGVDb250cm9sTG9hZGVkID0gZmFsc2U7XHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2gocmVzb3VyY2UucmVzb3VyY2VTZXQpO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKHJlc291cmNlLnJlc291cmNlSWQpO1xyXG5cclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucyA9IG5ldyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMoKTtcclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmRlbGV0ZVJlc291cmNlRnVuY3Rpb247XHJcbiAgICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuc2VydmljZVN1Ym1pdE1vZGVsID0gcGFyYW1BcnJheTtcclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5wYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcblxyXG4gICAgdGhpcy5kZWxldGVDb250cm9sTG9hZGVkID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbC5zaG93TW9kYWwoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVSZXNvdXJjZUZ1bmN0aW9uID0gKHJlc291cmNlU2V0LCByZXNvdXJjZUlkKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLmRlbGV0ZVJlc291cmNlKHJlc291cmNlU2V0LCByZXNvdXJjZUlkKVxyXG4gIH1cclxuICAvLy8vLy8vLy8vL0VuZCBvZiBkZWxldGUgUmVzb3VyY2UgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG4gIC8vLy8vLy8vLy8vU3RhcnQgb2YgIFJlbG9hZCBSZXNvdXJjZSBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHNob3dSZWxvYWRSZXNvdXJjZU1vZGFsKCkge1xyXG5cclxuICAgIHRoaXMucmVsb2FkQ29udHJvbExvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMucmVsb2FkQ29uZmlybWF0aW9uT3B0aW9ucyA9IG5ldyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMoKTtcclxuICAgIHRoaXMucmVsb2FkQ29uZmlybWF0aW9uT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLnJlbG9hZFJlc291cmNlRnVuY3Rpb247XHJcbiAgICB0aGlzLnJlbG9hZENvbmZpcm1hdGlvbk9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG4gICAgdGhpcy5yZWxvYWRDb25maXJtYXRpb25PcHRpb25zLmNvbmZpcm1hdGlvbkJvZHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSZWxvYWRSZXNvdXJjZXNDb25maXJtYXRpb25cIik7XHJcbiAgICB0aGlzLnJlbG9hZENvbmZpcm1hdGlvbk9wdGlvbnMuY29uZmlybWF0aW9uSGVhZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVsb2FkUmVzb3VyY2VzXCIpO1xyXG4gICAgdGhpcy5yZWxvYWRDb25maXJtYXRpb25PcHRpb25zLnN1Ym1pdEJ1dHRvblRleHQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSZWxvYWRcIik7XHJcbiAgICB0aGlzLnJlbG9hZENvbmZpcm1hdGlvbk9wdGlvbnMuc3R5bGVDb25maXJtYXRpb25Nb2RlID0gU3R5bGVDb25maXJtYXRpb25Nb2RlLkRhbmdlcjtcclxuICAgIHRoaXMucmVsb2FkQ29uZmlybWF0aW9uT3B0aW9ucy5zdWNjZXNzTm90aWZpY2F0aW9uTWVzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlN1Y2Nlc3NNZXNzYWdlXCIpO1xyXG5cclxuXHJcbiAgICB0aGlzLnJlbG9hZENvbnRyb2xMb2FkZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVsb2FkQ29uZmlybWF0aW9uTW9kYWxDb250cm9sLnNob3dNb2RhbCgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZFJlc291cmNlRnVuY3Rpb24gPSAoKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLnJlbG9hZEpzb25GaWxlKClcclxuICB9XHJcbiAgLy8vLy8vLy8vLy9FbmQgb2YgUmVsb2FkIFJlc291cmNlIHBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy9TdGFydCBvZiBSZXN0VG9GYWN0b3J5RGVmYXVsdCBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHNob3dSZXN0VG9GYWN0b3J5RGVmYXVsdCgpIHtcclxuXHJcbiAgICB0aGlzLnJlc3RUb0ZhY3RvcnlEZWZhdWx0Q29udHJvbExvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMucmVzdFRvRmFjdG9yeURlZmF1bHRDb25maXJtYXRpb25PcHRpb25zID0gbmV3IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucygpO1xyXG4gICAgdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdENvbmZpcm1hdGlvbk9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdEZ1bmN0aW9uO1xyXG4gICAgdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdENvbmZpcm1hdGlvbk9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG4gICAgdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdENvbmZpcm1hdGlvbk9wdGlvbnMuY29uZmlybWF0aW9uQm9keSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0VG9GYWN0b3J5Q29uZmlybWF0aW9uXCIpO1xyXG4gICAgdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdENvbmZpcm1hdGlvbk9wdGlvbnMuY29uZmlybWF0aW9uSGVhZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRUb0ZhY3RvcnlEZWZhdWx0XCIpXHJcbiAgICB0aGlzLnJlc3RUb0ZhY3RvcnlEZWZhdWx0Q29uZmlybWF0aW9uT3B0aW9ucy5zdWJtaXRCdXR0b25UZXh0ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzdFwiKTtcclxuICAgIHRoaXMucmVzdFRvRmFjdG9yeURlZmF1bHRDb25maXJtYXRpb25PcHRpb25zLnN0eWxlQ29uZmlybWF0aW9uTW9kZSA9IFN0eWxlQ29uZmlybWF0aW9uTW9kZS5XYXJuaW5nO1xyXG4gICAgdGhpcy5yZXN0VG9GYWN0b3J5RGVmYXVsdENvbmZpcm1hdGlvbk9wdGlvbnMuc3VjY2Vzc05vdGlmaWNhdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdWNjZXNzTWVzc2FnZVwiKTtcclxuXHJcbiAgICB0aGlzLnJlc3RUb0ZhY3RvcnlEZWZhdWx0Q29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXN0Q29uZmlybWF0aW9uTW9kYWxDb250cm9sLnNob3dNb2RhbCgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHJlc3RUb0ZhY3RvcnlEZWZhdWx0RnVuY3Rpb24gPSAoKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLnJlc3RUb0ZhY3RvcnlEZWZhdWx0KClcclxuICB9XHJcbiAgLy8vLy8vLy8vLy9FbmQgb2YgUmVzdFRvRmFjdG9yeURlZmF1bHQgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG5cclxuICAvLy8vLy8vLy8vL1N0YXJ0IG9mIEdlbmVyYXRlU3Ryb25nbHlUeXBlZENsYXNzIHBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGdlbmVyYXRlU3Ryb25nbHlUeXBlZENsYXNzKGdlbmVyYXRlU3Ryb25nbHlUeXBlZE1vZGFsKSB7XHJcblxyXG4gICAgdGhpcy5nZW5lcmF0ZUNvZGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLmdlbmVyYXRlU3Ryb25nbHlUeXBlZENsYXNzKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIFZhbHVlID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcyA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MubmFtZSA9IFwiR2VuZXJhdGVDb2RlVGV4dEFyZWFcIjtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MudmFsdWUgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy52YWx1ZVRvQ29weSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3Mucm93cyA9IDIwO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5jb2xzID0gMjA7XHJcbiAgICAgIHRoaXMuc3Ryb25nbHlUeXBlZENsYXNzLm1heExlbmd0aCA9IDEwMDAwMDA7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZ2VuZXJhdGVTdHJvbmdseVR5cGVkTW9kYWwpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUJCU0ZSZXNvdXJjZUNsYXNzKGdlbmVyYXRlTW9kYWwpIHtcclxuICAgIHRoaXMuZ2VuZXJhdGVDb2RlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgdGhpcy5sb2NhbGl6YXRpb25zU2VydmljZS5nZW5lcmF0ZUJCU0ZSZXNvdXJjZUNsYXNzKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIFZhbHVlID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcyA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MubmFtZSA9IFwiR2VuZXJhdGVDb2RlVGV4dEFyZWFcIjtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MudmFsdWUgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy52YWx1ZVRvQ29weSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3Mucm93cyA9IDIwO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5jb2xzID0gMjA7XHJcbiAgICAgIHRoaXMuc3Ryb25nbHlUeXBlZENsYXNzLm1heExlbmd0aCA9IDEwMDAwMDA7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZ2VuZXJhdGVNb2RhbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQXBwUmVzb3VyY2VDbGFzcyhnZW5lcmF0ZU1vZGFsKSB7XHJcbiAgICB0aGlzLmdlbmVyYXRlQ29kZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMubG9jYWxpemF0aW9uc1NlcnZpY2UuZ2VuZXJhdGVBcHBSZXNvdXJjZUNsYXNzKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIFZhbHVlID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcyA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MubmFtZSA9IFwiR2VuZXJhdGVDb2RlVGV4dEFyZWFcIjtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MudmFsdWUgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy52YWx1ZVRvQ29weSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3MuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHJvbmdseVR5cGVkQ2xhc3Mucm93cyA9IDIwO1xyXG4gICAgICB0aGlzLnN0cm9uZ2x5VHlwZWRDbGFzcy5jb2xzID0gMjA7XHJcbiAgICAgIHRoaXMuc3Ryb25nbHlUeXBlZENsYXNzLm1heExlbmd0aCA9IDEwMDAwMDA7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZ2VuZXJhdGVNb2RhbCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgY29weUlucHV0TWVzc2FnZSgpIHtcclxuICAgIHRoaXMuX2NsaXBib2FyZFNlcnZpY2UuY29weSh0aGlzLnZhbHVlVG9Db3B5LnRvU3RyaW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vLy9FbmQgb2YgR2VuZXJhdGVTdHJvbmdseVR5cGVkQ2xhc3MgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG4gIC8vIFJlc3RSZXNvdXJjZVRvRmFjdG9yeURlZmF1bHQoUmVzb3VyY2U6YW55KSB7XHJcbiAgLy8gICAgIGxldCBSZXNvdXJjZU1vZGVsID0gbmV3IEVkaXRSZXNvdXJjZU1vZGVsKCk7XHJcbiAgLy8gICAgIFJlc291cmNlTW9kZWwuUmVzb3VyY2VJZCA9IFJlc291cmNlLnJlc291cmNlSWQ7XHJcbiAgLy8gICAgIFJlc291cmNlTW9kZWwuUmVzb3VyY2VTZXQgPSBSZXNvdXJjZS5yZXNvdXJjZVNldDtcclxuICAvLyAgICAgUmVzb3VyY2VNb2RlbC5WYWx1ZUVOID0gXCJcIjtcclxuICAvLyAgICAgUmVzb3VyY2VNb2RlbC5WYWx1ZUFSID1cIlwiO1xyXG4gIC8vICAgICBSZXNvdXJjZU1vZGVsLkNvbW1lbnRFbiA9IFwiXCI7XHJcbiAgLy8gICAgIFJlc291cmNlTW9kZWwuQ29tbWVudEFyID0gXCJcIjtcclxuICAvLyAgICAgdGhpcy5sb2NhbGl6YXRpb25zU2VydmljZS5SZXN0UmVzb3VyY2VUb0ZhY3RvcnlEZWZhdWx0KFJlc291cmNlTW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcblxyXG4gIC8vICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgLy8gICAgICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICAvLyAgICAgfSlcclxuXHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG4gIC8vIFJlbG9hZEpzb25GaWxlKCkge1xyXG4gIC8vICAgdGhpcy5sb2NhbGl6YXRpb25zU2VydmljZS5SZWxvYWRKc29uRmlsZSgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgLy8gICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAvLyAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAvLyAgICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICAvLyAgIH0sIChlcnJvcikgPT4ge1xyXG4gIC8vICAgfSlcclxuICAvLyB9XHJcblxyXG4gIC8vIFJlc3RUb0ZhY3RvcnlEZWZhdWx0KCkge1xyXG4gIC8vICB0aGlzLmxvY2FsaXphdGlvbnNTZXJ2aWNlLlJlc3RUb0ZhY3RvcnlEZWZhdWx0KCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAvLyAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gIC8vICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gIC8vICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gIC8vICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gIC8vICAgfSlcclxuICAvLyB9XHJcblxyXG4gIC8vIFJlc3RVbm1vZGlmaWVkVG9GYWN0b3J5RGVmYXVsdCgpIHtcclxuICAvLyAgIHRoaXMubG9jYWxpemF0aW9uc1NlcnZpY2UuUmVzdFVubW9kaWZpZWRUb0ZhY3RvcnlEZWZhdWx0KCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAvLyAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAvLyAgICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICAvLyAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy8vLyBTdGFydCBVcGxvYWQgUmVzb3VyY2UgUGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93VXBsb2FkTW9kYWwodXBsb2FkUmVzb3VyY2VNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMudXBsb2FkSnNvbkZpbGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gICAgdGhpcy51cGxvYWRKc29uRmlsZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICB0aGlzLnVwbG9hZEpzb25GaWxlRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy51cGxvYWRKc29uRmlsZUZvcm1cclxuICAgIHRoaXMudXBsb2FkSnNvbkZpbGVGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRVcGxvYWRNb2RhbDtcclxuICAgIHRoaXMudXBsb2FkSnNvbkZpbGVGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldFVwbG9hZEZ1bmN0aW9uO1xyXG4gICAgdGhpcy51cGxvYWRKc29uRmlsZUZvcm1PcHRpb25zLm9uU3VjY2Vzc0hhbmRsZXIgPSB0aGlzLm9uU3VjY2Vzc0hhbmRsZXI7XHJcbiAgICB0aGlzLnVwbG9hZEpzb25GaWxlRm9ybU9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG4gICAgdGhpcy51cGxvYWRSZXNvdXJjZVNldE9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnVwbG9hZFJlc291cmNlU2V0T3B0aW9ucy5uYW1lID0gXCJTZWxlY3RlZFJlc291cmNlU2V0XCJcclxuICAgIHRoaXMudXBsb2FkUmVzb3VyY2VTZXRPcHRpb25zLmxhYmVsS2V5ID0gXCJSZXNvdXJjZVNldFwiXHJcbiAgICB0aGlzLnVwbG9hZFJlc291cmNlU2V0T3B0aW9ucy5kYXRhU291cmNlID0gdGhpcy5yZXNvdXJjZVNldExpc3RcclxuICAgIHRoaXMudXBsb2FkUmVzb3VyY2VTZXRPcHRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLnVwbG9hZFJlc291cmNlU2V0T3B0aW9ucy5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICB0aGlzLnVwbG9hZFJlc291cmNlU2V0T3B0aW9ucy5wbGFjZWhvbGRlciA9IFwiXCI7XHJcblxyXG5cclxuICAgIHRoaXMucmVzb3VyY2VzRmlsZUlucHV0ID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICB0aGlzLnJlc291cmNlc0ZpbGVJbnB1dC5uYW1lID0gXCJSZXNvdXJjZXNGaWxlXCJcclxuICAgIHRoaXMucmVzb3VyY2VzRmlsZUlucHV0LmxhYmVsS2V5ID0gXCJVcGxvYWRGaWxlXCJcclxuICAgIHRoaXMucmVzb3VyY2VzRmlsZUlucHV0LmlzTXVsdGlwbGVGaWxlID0gZmFsc2VcclxuICAgIHRoaXMucmVzb3VyY2VzRmlsZUlucHV0LmZpbGVVcGxvYWRBY2NlcHRzVHlwZXMgPSBbRmlsZVR5cGUuRXhjZWxdXHJcbiAgICB0aGlzLnJlc291cmNlc0ZpbGVJbnB1dC5maWxlTWF4U2l6ZUluTUIgPSAxMDtcclxuICAgIHRoaXMucmVzb3VyY2VzRmlsZUlucHV0LmlzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odXBsb2FkUmVzb3VyY2VNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0VXBsb2FkTW9kYWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMudXBsb2FkSnNvbkZpbGVGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBSZXNvdXJjZU1vZGVsID0gbmV3IFVwbG9hZEpzb25WTSgpO1xyXG4gICAgUmVzb3VyY2VNb2RlbC5TZWxlY3RlZFJlc291cmNlU2V0ID0gUmVzdWx0TW9kZWwuU2VsZWN0ZWRSZXNvdXJjZVNldDtcclxuICAgIFJlc291cmNlTW9kZWwuUmVzb3VyY2VzRmlsZSA9IHtcclxuICAgICAgRmlsZUJhc2U2NDogUmVzdWx0TW9kZWxbXCJSZXNvdXJjZXNGaWxlXCJdLkZpbGUuRmlsZUJhc2U2NCxcclxuICAgICAgRmlsZU5hbWU6IFJlc3VsdE1vZGVsW1wiUmVzb3VyY2VzRmlsZVwiXS5GaWxlLkZpbGVOYW1lLFxyXG4gICAgICBGaWxlU2l6ZUluTUI6IFJlc3VsdE1vZGVsW1wiUmVzb3VyY2VzRmlsZVwiXS5GaWxlLkZpbGVTaXplSW5NQixcclxuICAgICAgRmlsZVR5cGU6IFJlc3VsdE1vZGVsW1wiUmVzb3VyY2VzRmlsZVwiXS5GaWxlLkZpbGVUeXBlXHJcbiAgICB9XHJcbiAgICBwYXJhbUFycmF5LnB1c2goUmVzb3VyY2VNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldFVwbG9hZEZ1bmN0aW9uID0gKFJlc291cmNlTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uc1NlcnZpY2UudXBsb2FkRXhjZWxGaWxlcyhSZXNvdXJjZU1vZGVsKVxyXG4gIH1cclxuICBvblN1Y2Nlc3NIYW5kbGVyID0gKHJlc3VsdCkgPT4ge1xyXG4gICAgdGhpcy5leGNlbFZhbGlkYXRpb24gPSByZXN1bHQudmFsXHJcbiAgICBsZXQgc2hvd0J1dHRvbiA9IHRoaXMuU2hvd1Jlc291cmNlVmFsaWRhdGlvbk1vZGFsIGFzIGFueVxyXG4gICAgc2hvd0J1dHRvbi5jbGljaygpXHJcbiAgfVxyXG4gIC8vLy8vLy8vLy8vLyBFbmQgb2YgVXBsb2FkIFJlc291cmNlIHBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcblxyXG4gIG9wZW5SZXNvdXJjZVZhbGlkYXRpb25Nb2RhbChSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbCkge1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbCk7XHJcbiAgfVxyXG4gIGNvbmZpcm1FeGNlbCgpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5U3VjY2Vzc01lc3NhZ2UoKVxyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLnBhZ2luZ0VsZW1lbnQgYXMgYW55O1xyXG4gICAgdGhpcy5pbml0aWFsaXplUGFnZSgpO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZmlsdGVyTG9jYWxpemF0aW9uTGlzdChzZWFyY2hWYWx1ZSkge1xyXG4gICAgaWYgKHNlYXJjaFZhbHVlKVxyXG4gICAgICB0aGlzLmZpbHRlcmVkTG9jYWxpemF0aW9uUGFnaW5nUmVzdWx0ID0gdGhpcy5sb2NhbGl6YXRpb25QYWdpbmdSZXN1bHQuZmlsdGVyKGl0ZW0gPT4gaXRlbS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5maWx0ZXJlZExvY2FsaXphdGlvblBhZ2luZ1Jlc3VsdCA9IHRoaXMubG9jYWxpemF0aW9uUGFnaW5nUmVzdWx0XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vL0Rlc3Ryb3kgT2JzZXJ2YWJsZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxibG9jay11aT4gPC9ibG9jay11aT5cclxuICA8IS0tIFBhZ2UgQ29udGVudCAtLT5cclxuICA8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJpc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgPCEtLShPbkNoYW5nZSk9XCJmaWx0ZXJMb2NhbGl6YXRpb25MaXN0KCRldmVudClcIiAtLT5cclxuICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiAgIFtncm91cF09XCJsb2NhbGl6YXRpb25Gb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46Ok1lbnUgLS0+XHJcblxyXG4gICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25Ub2dnbGUgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiIGlkPVwiRmlsdGVyc0Ryb3Bkb3duXCIgdGl0bGU9XCJGaWx0ZXJcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWx0ZXIgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJGaWx0ZXJcIil9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmlsdGVyTG9hZGVkXCIgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cIkZpbHRlcnNEcm9wZG93blwiIGNsYXNzPVwiIGZpbHRlci1jb250YWluZXIgbWVudSBtZW51LXN1YiBtZW51LXN1Yi1kcm9wZG93biBtZW51LWNvbHVtbiBtZW51LXJvdW5kZWQgbWVudS1ncmF5LTgwMCBtZW51LXN0YXRlLWJnLWxpZ2h0LXByaW1hcnkgIHctMjUwcHggdy1tZC01MDBweCBmdy1ib2xkIHB5LTMgXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNyBweS01XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cInJlc291cmNlU2V0T3B0aW9uc1wiIFtncm91cF09XCJsb2NhbGl6YXRpb25Gb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5IHB2LXJlc2V0IGJ0bi1zbVwiIG5hbWU9XCJsb2NhbGl6YXRpb25zRmlsdGVyc0J0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2hvd0V4cG9ydEV4Y2VsTW9kYWwoKVwiXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRXhwb3J0XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBibnNpZ2h0cy1idG4tZXhwb3J0IG1lLTMgXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWRvd25sb2FkIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkV4cG9ydFwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuQWN0aXZhdGVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTMgXCIgKGNsaWNrKT1cInNob3dSZWxvYWRSZXNvdXJjZU1vZGFsKClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc3luYy1hbHQgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVsb2FkXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IG1lLTMgXCIgaWQ9XCJidG5BY3RpdmF0ZVwiIChjbGljayk9XCJzaG93VXBsb2FkTW9kYWwoVXBsb2FkSnNvbkZpbGVNb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdXBsb2FkIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVwbG9hZFwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBtZS0zXCIgKGNsaWNrKT1cInNob3dBZGRSZXNvdXJjZU1vZGFsKEFkZFJlc291cmNlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51dFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBtZS0zIGJ0bi1pY29uXCIgdGl0bGU9XCJvcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXJzXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51dD1cIm1hdE1lbnVcIiBjbGFzcz1cInB5LTNcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIChjbGljayk9XCJzaG93UmVzdFRvRmFjdG9yeURlZmF1bHQoKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPiAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzdFRvRmFjdG9yeURlZmF1bHRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAqbmdJZj1cIiFQcm9kdWN0aW9uTW9kZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgKGNsaWNrKT1cImdlbmVyYXRlU3Ryb25nbHlUeXBlZENsYXNzKEdlbmVyYXRlU3Ryb25nbHlUeXBlZE1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPiAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiR2VuZXJhdGVTdHJvbmdseVR5cGVkQ2xhc3NcIil9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZ2VuZXJhdGVCQlNGUmVzb3VyY2VDbGFzcyhHZW5lcmF0ZVN0cm9uZ2x5VHlwZWRNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj4gIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkdlbmVyYXRlQkJTRlJlc291cmNlQ2xhc3NcIil9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZ2VuZXJhdGVBcHBSZXNvdXJjZUNsYXNzKEdlbmVyYXRlU3Ryb25nbHlUeXBlZE1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPiAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiR2VuZXJhdGVBcHBsaWNhdGlvblJlc291cmNlQ2xhc3NcIil9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIHR5cGU9XCJidXR0b25cIiBbcm91dGVyTGlua109XCJbJy9BZG1pbi9Mb2NhbGl6YXRpb24vUmVwbGFjZVRleHQnXVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPiAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVwbGFjZVRleHRcIil9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBlbmQ6OkhlYWRlciAtLT5cclxuICAgICAgPCEtLSBiZWdpbjo6Qm9keSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc291cmNlSWRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc291cmNlU2V0XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWYWx1ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBMb2NhbGl6YXRpb24gb2YgZmlsdGVyZWRMb2NhbGl6YXRpb25QYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZGFya1wiPnt7TG9jYWxpemF0aW9uLnJlc291cmNlSWR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+e3tMb2NhbGl6YXRpb24ucmVzb3VyY2VTZXR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+e3tMb2NhbGl6YXRpb24udmFsdWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBuZ2JEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dFZGl0UmVzb3VyY2VNb2RhbChMb2NhbGl6YXRpb24sRWRpdFJlc291cmNlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBpZD1cImJ0blJlc2V0UGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlUmVzb3VyY2VNb2RhbChMb2NhbGl6YXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJmaWx0ZXJlZExvY2FsaXphdGlvblBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgIDwhLS1lbmQ6OnVzZXJzIGxpc3QtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0TG9jYWxpemF0aW9uTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJpc0ZpbHRlckxvYWRlZFwiIFtvcHRpb25zXT1cImxvY2FsaXphdGlvblBhZ2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJsb2NhbGl6YXRpb25Gb3JtXCIgI0xvY2FsaXphdGlvblBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgPCEtLSBBZGQgTW9kYWwgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNBZGRSZXNvdXJjZU1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkUmVzb3VyY2VcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cImFkZFJlc291cmNlRm9ybU9wdGlvbnNcIj5cclxuICAgICAgICA8QkJTRi1BdXRvY29tcGxldGVUZXh0Qm94IFtvcHRpb25zXT1cInJlc291cmNlU2V0XCIgW2dyb3VwXT1cImFkZFJlc291cmNlRm9ybVwiPlxyXG4gICAgICAgIDwvQkJTRi1BdXRvY29tcGxldGVUZXh0Qm94PlxyXG4gICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwicmVzb3VyY2VJZFwiIFtncm91cF09XCJhZGRSZXNvdXJjZUZvcm1cIj5cclxuICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYSBbb3B0aW9uc109XCJtdWx0aUxpbmd1YWxWYWx1ZVwiIFtncm91cF09XCJhZGRSZXNvdXJjZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWE+XHJcbiAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWEgW29wdGlvbnNdPVwibXVsdGlMaW5ndWFsQ29tbWVudFwiIFtncm91cF09XCJhZGRSZXNvdXJjZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWE+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNDbG9zZVJlc291cmNlTW9kYWwgaWQ9XCJDbG9zZVJlc291cmNlTW9kYWxcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19IDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9CQlNGLUZvcm0+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPCEtLSBFZGl0IE1vZGFsIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjRWRpdFJlc291cmNlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0UmVzb3VyY2VcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cImVkaXRSZXNvdXJjZUZvcm1PcHRpb25zXCI+XHJcbiAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWEgW29wdGlvbnNdPVwiZWRpdE11bHRpTGluZ3VhbFZhbHVlXCIgW2dyb3VwXT1cImVkaXRSZXNvdXJjZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWE+XHJcbiAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWEgW29wdGlvbnNdPVwiZWRpdE11bHRpTGluZ3VhbENvbW1lbnRcIiBbZ3JvdXBdPVwiZWRpdFJlc291cmNlRm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNDbG9zZUVkaXRSZXNvdXJjZU1vZGFsIGlkPVwiQ2xvc2VFZGl0UmVzb3VyY2VNb2RhbFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX0gPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L0JCU0YtRm9ybT5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8IS0tIFVwbG9hZCBNb2RhbCAtLT5cclxuICA8bmctdGVtcGxhdGUgI1VwbG9hZEpzb25GaWxlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJVcGxvYWRSZXNvdXJjZXNcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cInVwbG9hZEpzb25GaWxlRm9ybU9wdGlvbnNcIj5cclxuICAgICAgICA8YSBbaGlkZGVuXT1cInRydWVcIiBpZD1cIlNob3dSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbFwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwib3BlblJlc291cmNlVmFsaWRhdGlvbk1vZGFsKFJlc291cmNlVmFsaWRhdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1oaXN0b3J5XCI+PC9pPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJzaG93XCIpfX1cclxuICAgICAgICA8L2E+XHJcbiAgICAgICAgPEJCU0YtRmlsZVVwbGFvZCBbb3B0aW9uc109XCJyZXNvdXJjZXNGaWxlSW5wdXRcIiBbZ3JvdXBdPVwidXBsb2FkSnNvbkZpbGVGb3JtXCI+XHJcbiAgICAgICAgPC9CQlNGLUZpbGVVcGxhb2Q+XHJcbiAgICAgICAgPGEgaWQ9XCJidG5EZWFjdGl2YXRlXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJzaG93RXhwb3J0RXhjZWxNb2RhbCh0cnVlKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRG93bmxvYWRSZXNvdXJjZVRlbXBsYXRlU2hlZXRcIil9fVxyXG4gICAgICAgIDwvYT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI0Nsb3NlVXBsb2FkSnNvbkZpbGVNb2RhbCBpZD1cIkNsb3NlVXBsb2FkSnNvbkZpbGVNb2RhbFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX0gPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L0JCU0YtRm9ybT5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcblxyXG4gIDwhLS0gR2VuZXJhdGVTdHJvbmdseVR5cGVkQ2xhc3MgIE1vZGFsIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjR2VuZXJhdGVTdHJvbmdseVR5cGVkTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZUNvZGVcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJzdHJvbmdseVR5cGVkQ2xhc3NcIiBbZ3JvdXBdPVwiZ2VuZXJhdGVDb2RlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRBcmVhPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI0Nsb3NlU3Ryb25nbHlUeXBlZENsYXNzTW9kYWwgaWQ9XCJDbG9zZVN0cm9uZ2x5VHlwZWRDbGFzc01vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fSA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIChjbGljayk9XCJjb3B5SW5wdXRNZXNzYWdlKClcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ29weVRvQ2xpcGJvYXJkXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48IS0tZGVsZXRlIE1vZGFsLS0+XHJcbjxCQlNGLUNvbmZpcm1hdGlvbk1vZGFsICpuZ0lmPVwiZGVsZXRlQ29udHJvbExvYWRlZFwiIFtvcHRpb25zXT1cImRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnNcIiBpZD1cIkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbFwiXHJcbiNDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuPCEtLUV4cG9ydCBNb2RhbC0tPlxyXG48QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cImV4cG9ydENvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJleHBvcnRDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJleHBvcnRDb25maXJtYXRpb25Db250cm9sXCJcclxuI2V4cG9ydENvbmZpcm1hdGlvbkNvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuPCEtLVJlbG9hZCBNb2RhbC0tPlxyXG48QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cInJlbG9hZENvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJyZWxvYWRDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJSZWxvYWRDb25maXJtYXRpb25Nb2RhbENvbnRyb2xcIlxyXG4jUmVsb2FkQ29uZmlybWF0aW9uTW9kYWxDb250cm9sPjwvQkJTRi1Db25maXJtYXRpb25Nb2RhbD5cclxuXHJcbjwhLS1SZXN0IE1vZGFsLS0+XHJcbjxCQlNGLUNvbmZpcm1hdGlvbk1vZGFsICpuZ0lmPVwicmVzdFRvRmFjdG9yeURlZmF1bHRDb250cm9sTG9hZGVkXCIgW29wdGlvbnNdPVwicmVzdFRvRmFjdG9yeURlZmF1bHRDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJSZXN0Q29uZmlybWF0aW9uTW9kYWxDb250cm9sXCJcclxuI1Jlc3RDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuXHJcbiAgPCEtLSBSZXNvdXJjZSBWYWxpZGF0aW9uIE1vZGFsLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNSZXNvdXJjZVZhbGlkYXRpb25Nb2RhbCBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc291cmNlY2hlY2tSZXN1bHRcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibm90aWNlIGQtZmxleCBiZy1saWdodC13YXJuaW5nIHJvdW5kZWQgYm9yZGVyLXdhcm5pbmcgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpTdmcgSWNvbiB8IHBhdGg6IGljb25zL2R1b3R1bmUvZ2VuZXJhbC9nZW4wNDQuc3ZnLS0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8IS0tZW5kOjpTdmcgSWNvbi0tPlxyXG4gICAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgICA8IS0tYmVnaW46OldyYXBwZXItLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiICpuZ0lmPVwiIWV4Y2VsVmFsaWRhdGlvbi5pc1ZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVwZGF0ZWRFbnRyaWVzTnVtYmVyXCIpfX0ge3tleGNlbFZhbGlkYXRpb24udmFsaWRDb3VudH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkludmFsaWRFbnRyaWVzTnVtYmVyXCIpfX0ge3tleGNlbFZhbGlkYXRpb24uaW52YWxpZENvdW50fX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIiAqbmdJZj1cImV4Y2VsVmFsaWRhdGlvbi5pc1ZhbGlkXCI+XHJcbiAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWxsRW50cmllc1ZhbGlkXCIpfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLWVuZDo6V3JhcHBlci0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFleGNlbFZhbGlkYXRpb24uaXNWYWxpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzb3VyY2VJZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc291cmNlU2V0XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRXJyb3JNZXNzYWdlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRySXRlbVwiICpuZ0Zvcj1cImxldCBMb2NhbGl6YXRpb24gb2YgZXhjZWxWYWxpZGF0aW9uLmludmFsaWRFbnRyaWVzXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj5cclxuICAgICAgICAgICAgICAgICAge3tMb2NhbGl6YXRpb24ucmVzb3VyY2VJZH19XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7TG9jYWxpemF0aW9uLnJlc291cmNlU2V0fX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7TG9jYWxpemF0aW9uLmVycm9yTWVzc2FnZX19PC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI0Nsb3NlUmVzb3VyY2VWYWxpZGF0aW9uTW9kYWwgaWQ9XCJDbG9zZVJlc291cmNlVmFsaWRhdGlvbk1vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fSA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY29uZmlybUV4Y2VsKClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuIl19
|