@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
|
@@ -204,8 +204,8 @@ export class TabsComponent {
|
|
|
204
204
|
this.WorkflowService.getDetails(this.WorkflowId).subscribe((result) => {
|
|
205
205
|
this.WorkflowDetails = result;
|
|
206
206
|
var Name = new EnglishArabicDTO();
|
|
207
|
-
Name.
|
|
208
|
-
Name.
|
|
207
|
+
Name.arabic = this.WorkflowDetails.name.arabic;
|
|
208
|
+
Name.english = this.WorkflowDetails.name.english;
|
|
209
209
|
this.Pagetitle = this.WorkflowDetails.nameStr;
|
|
210
210
|
PageInfoService.PageTitle = this.Pagetitle;
|
|
211
211
|
PageInfoService.PageBreadcrumbs = [
|
|
@@ -217,40 +217,40 @@ export class TabsComponent {
|
|
|
217
217
|
this.pageInfoService.calculateTitle();
|
|
218
218
|
this.pageInfoService.calculateBreadcrumbs();
|
|
219
219
|
this.NameMultilingualTextBox = new MultiLingualTextBoxOptions();
|
|
220
|
-
this.NameMultilingualTextBox.
|
|
221
|
-
this.NameMultilingualTextBox.
|
|
222
|
-
this.NameMultilingualTextBox.
|
|
223
|
-
this.NameMultilingualTextBox.
|
|
224
|
-
this.NameMultilingualTextBox.
|
|
225
|
-
this.NameMultilingualTextBox.
|
|
220
|
+
this.NameMultilingualTextBox.arabicLabelKey = "NameInArabic";
|
|
221
|
+
this.NameMultilingualTextBox.englishLabelKey = "NameInEnglish";
|
|
222
|
+
this.NameMultilingualTextBox.isRequired = true;
|
|
223
|
+
this.NameMultilingualTextBox.name = "Name";
|
|
224
|
+
this.NameMultilingualTextBox.value = Name;
|
|
225
|
+
this.NameMultilingualTextBox.isDisabled = true;
|
|
226
226
|
var Description = new EnglishArabicDTO();
|
|
227
|
-
Description.
|
|
228
|
-
Description.
|
|
227
|
+
Description.arabic = this.WorkflowDetails.description.arabic;
|
|
228
|
+
Description.english = this.WorkflowDetails.description.english;
|
|
229
229
|
this.DescriptionMultilingualTextBox = new MultiLingualTextBoxOptions();
|
|
230
|
-
this.DescriptionMultilingualTextBox.
|
|
231
|
-
this.DescriptionMultilingualTextBox.
|
|
232
|
-
this.DescriptionMultilingualTextBox.
|
|
233
|
-
this.DescriptionMultilingualTextBox.
|
|
234
|
-
this.DescriptionMultilingualTextBox.
|
|
235
|
-
this.DescriptionMultilingualTextBox.
|
|
230
|
+
this.DescriptionMultilingualTextBox.arabicLabelKey = "DescriptionInArabic";
|
|
231
|
+
this.DescriptionMultilingualTextBox.englishLabelKey = "DescriptionInEnglish";
|
|
232
|
+
this.DescriptionMultilingualTextBox.isRequired = true;
|
|
233
|
+
this.DescriptionMultilingualTextBox.name = "Description";
|
|
234
|
+
this.DescriptionMultilingualTextBox.value = Description;
|
|
235
|
+
this.DescriptionMultilingualTextBox.isDisabled = true;
|
|
236
236
|
this.SysName = new TextBoxOptions();
|
|
237
|
-
this.SysName.
|
|
238
|
-
this.SysName.
|
|
239
|
-
this.SysName.
|
|
240
|
-
this.SysName.
|
|
241
|
-
this.SysName.
|
|
237
|
+
this.SysName.name = "SysName";
|
|
238
|
+
this.SysName.labelKey = "SysName";
|
|
239
|
+
this.SysName.type = InputType.Text;
|
|
240
|
+
this.SysName.isDisabled = true;
|
|
241
|
+
this.SysName.value = this.WorkflowDetails.sysName;
|
|
242
242
|
this.Active = new TextBoxOptions();
|
|
243
|
-
this.Active.
|
|
244
|
-
this.Active.
|
|
245
|
-
this.Active.
|
|
246
|
-
this.Active.
|
|
247
|
-
this.Active.
|
|
243
|
+
this.Active.name = "Active";
|
|
244
|
+
this.Active.labelKey = "Active";
|
|
245
|
+
this.Active.type = InputType.Text;
|
|
246
|
+
this.Active.isDisabled = true;
|
|
247
|
+
this.Active.value = this.WorkflowDetails.isActive;
|
|
248
248
|
this.Published = new TextBoxOptions();
|
|
249
|
-
this.Published.
|
|
250
|
-
this.Published.
|
|
251
|
-
this.Published.
|
|
252
|
-
this.Published.
|
|
253
|
-
this.Published.
|
|
249
|
+
this.Published.name = "Published";
|
|
250
|
+
this.Published.labelKey = "Published";
|
|
251
|
+
this.Published.type = InputType.Text;
|
|
252
|
+
this.Published.isDisabled = true;
|
|
253
|
+
this.Published.value = this.WorkflowDetails.isPublished;
|
|
254
254
|
this.IsFilterLoaded = false;
|
|
255
255
|
this.IsWorkflowVariableFilterLoaded = false;
|
|
256
256
|
this.IsworkflowActivityFilterLoaded = false;
|
|
@@ -266,13 +266,13 @@ export class TabsComponent {
|
|
|
266
266
|
let paramArray = [];
|
|
267
267
|
paramArray.push(id);
|
|
268
268
|
this.publishWFConfirmationOptions = new ConfirmationModalOptions();
|
|
269
|
-
this.publishWFConfirmationOptions.
|
|
270
|
-
this.publishWFConfirmationOptions.
|
|
271
|
-
this.publishWFConfirmationOptions.
|
|
272
|
-
this.publishWFConfirmationOptions.
|
|
273
|
-
this.publishWFConfirmationOptions.
|
|
274
|
-
this.publishWFConfirmationOptions.
|
|
275
|
-
this.publishWFConfirmationOptions.
|
|
269
|
+
this.publishWFConfirmationOptions.serviceSubmitFunction = this.publishWorkFlow;
|
|
270
|
+
this.publishWFConfirmationOptions.serviceSubmitModel = paramArray;
|
|
271
|
+
this.publishWFConfirmationOptions.confirmationHeader = this.utilityService.getResourceValue("PublishWorkFflow");
|
|
272
|
+
this.publishWFConfirmationOptions.confirmationBody = this.utilityService.getResourceValue("PublishWorkFflowConfirmation");
|
|
273
|
+
this.publishWFConfirmationOptions.submitButtonText = this.utilityService.getResourceValue("Publish");
|
|
274
|
+
this.publishWFConfirmationOptions.successNotificationMessage = this.utilityService.getResourceValue("PublishedSuccessfully");
|
|
275
|
+
this.publishWFConfirmationOptions.onSuccessHandler = this.publishWorkFlowOnSuccess;
|
|
276
276
|
this.publishControlLoaded = true;
|
|
277
277
|
setTimeout(() => {
|
|
278
278
|
this.publishConfirmationModalControl.showModal();
|
|
@@ -287,30 +287,30 @@ export class TabsComponent {
|
|
|
287
287
|
this.utilityService.startBlockUI();
|
|
288
288
|
// TextBox inti
|
|
289
289
|
this.searchTextBox = new TextBoxOptions();
|
|
290
|
-
this.searchTextBox.
|
|
291
|
-
this.searchTextBox.
|
|
292
|
-
this.searchTextBox.
|
|
293
|
-
this.searchTextBox.
|
|
290
|
+
this.searchTextBox.name = "searchTextBox";
|
|
291
|
+
this.searchTextBox.type = InputType.Text;
|
|
292
|
+
this.searchTextBox.placeholder = this.utilityService.getResourceValue("SearchByName");
|
|
293
|
+
this.searchTextBox.hideLabel = true;
|
|
294
294
|
this.TextInputFilter = new FilterItem();
|
|
295
295
|
this.TextInputFilter.FormControlName = "searchTextBox";
|
|
296
296
|
this.TextInputFilter.ActionParameterName = "searchText";
|
|
297
297
|
this.TextInputFilter.IsFormControl = true;
|
|
298
298
|
this.TextInputFilter.FilterType = FilterType.TextBox;
|
|
299
299
|
this.WorkflowIdTextBox = new TextBoxOptions();
|
|
300
|
-
this.WorkflowIdTextBox.
|
|
301
|
-
this.WorkflowIdTextBox.
|
|
302
|
-
this.WorkflowIdTextBox.
|
|
303
|
-
this.WorkflowIdTextBox.
|
|
300
|
+
this.WorkflowIdTextBox.name = "WorkflowIdTextBox";
|
|
301
|
+
this.WorkflowIdTextBox.hideLabel = true;
|
|
302
|
+
this.WorkflowIdTextBox.type = InputType.Text;
|
|
303
|
+
this.WorkflowIdTextBox.value = this.WorkflowId;
|
|
304
304
|
this.WorkflowIdFilter = new FilterItem();
|
|
305
305
|
this.WorkflowIdFilter.FormControlName = "WorkflowIdTextBox";
|
|
306
306
|
this.WorkflowIdFilter.ActionParameterName = "WfID";
|
|
307
307
|
this.WorkflowIdFilter.IsFormControl = true;
|
|
308
308
|
this.WorkflowIdFilter.FilterType = FilterType.TextBox;
|
|
309
309
|
this.WorkflowVersionPaging = new PagingOptions();
|
|
310
|
-
this.WorkflowVersionPaging.
|
|
311
|
-
this.WorkflowVersionPaging.
|
|
312
|
-
this.WorkflowVersionPaging.
|
|
313
|
-
this.WorkflowVersionPaging.
|
|
310
|
+
this.WorkflowVersionPaging.actionPostURL = this.WorkFlowVersionApiUrl + 'GetVersionsListing';
|
|
311
|
+
this.WorkflowVersionPaging.onKeyPressFiltersControlNames = ["searchTextBox", "WorkflowIdTextBox"];
|
|
312
|
+
this.WorkflowVersionPaging.filters = [this.TextInputFilter, this.WorkflowIdFilter];
|
|
313
|
+
this.WorkflowVersionPaging.validationToken = this.authService.authorizationHeaderValue();
|
|
314
314
|
this.IsWorkflowVariableFilterLoaded = false;
|
|
315
315
|
this.IsworkflowActivityFilterLoaded = false;
|
|
316
316
|
setTimeout(() => {
|
|
@@ -331,30 +331,30 @@ export class TabsComponent {
|
|
|
331
331
|
initializeWorkflowVariables() {
|
|
332
332
|
// TextBox init
|
|
333
333
|
this.WorkflowVariablesearchTextBox = new TextBoxOptions();
|
|
334
|
-
this.WorkflowVariablesearchTextBox.
|
|
335
|
-
this.WorkflowVariablesearchTextBox.
|
|
336
|
-
this.WorkflowVariablesearchTextBox.
|
|
337
|
-
this.WorkflowVariablesearchTextBox.
|
|
334
|
+
this.WorkflowVariablesearchTextBox.name = "WorkflowVariablesearchTextBox";
|
|
335
|
+
this.WorkflowVariablesearchTextBox.type = InputType.Text;
|
|
336
|
+
this.WorkflowVariablesearchTextBox.placeholder = this.utilityService.getResourceValue("SearchByName");
|
|
337
|
+
this.WorkflowVariablesearchTextBox.hideLabel = true;
|
|
338
338
|
this.TextInputFilter = new FilterItem();
|
|
339
339
|
this.TextInputFilter.FormControlName = "WorkflowVariablesearchTextBox";
|
|
340
340
|
this.TextInputFilter.ActionParameterName = "searchText";
|
|
341
341
|
this.TextInputFilter.IsFormControl = true;
|
|
342
342
|
this.TextInputFilter.FilterType = FilterType.TextBox;
|
|
343
343
|
this.VerisonIdTextBox = new TextBoxOptions();
|
|
344
|
-
this.VerisonIdTextBox.
|
|
345
|
-
this.VerisonIdTextBox.
|
|
346
|
-
this.VerisonIdTextBox.
|
|
347
|
-
this.VerisonIdTextBox.
|
|
344
|
+
this.VerisonIdTextBox.name = "VerisonIdTextBox";
|
|
345
|
+
this.VerisonIdTextBox.hideLabel = true;
|
|
346
|
+
this.VerisonIdTextBox.type = InputType.Text;
|
|
347
|
+
this.VerisonIdTextBox.value = this.WorkflowId;
|
|
348
348
|
this.VerisonIdTextInputFilter = new FilterItem();
|
|
349
349
|
this.VerisonIdTextInputFilter.FormControlName = "VerisonIdTextBox";
|
|
350
350
|
this.VerisonIdTextInputFilter.ActionParameterName = "versionID";
|
|
351
351
|
this.VerisonIdTextInputFilter.IsFormControl = true;
|
|
352
352
|
this.VerisonIdTextInputFilter.FilterType = FilterType.TextBox;
|
|
353
353
|
this.WorkflowVariablePaging = new PagingOptions();
|
|
354
|
-
this.WorkflowVariablePaging.
|
|
355
|
-
this.WorkflowVariablePaging.
|
|
356
|
-
this.WorkflowVariablePaging.
|
|
357
|
-
this.WorkflowVariablePaging.
|
|
354
|
+
this.WorkflowVariablePaging.actionPostURL = this.WorkflowVariableApiUrl + 'GetVariableListing';
|
|
355
|
+
this.WorkflowVariablePaging.onKeyPressFiltersControlNames = ["WorkflowVariablesearchTextBox", "VerisonIdTextBox"];
|
|
356
|
+
this.WorkflowVariablePaging.filters = [this.TextInputFilter, this.VerisonIdTextInputFilter];
|
|
357
|
+
this.WorkflowVariablePaging.validationToken = this.authService.authorizationHeaderValue();
|
|
358
358
|
this.ShowWorkflowDetails = false;
|
|
359
359
|
this.IsFilterLoaded = false;
|
|
360
360
|
this.IsworkflowActivityFilterLoaded = false;
|
|
@@ -409,27 +409,27 @@ export class TabsComponent {
|
|
|
409
409
|
}
|
|
410
410
|
//For edit only
|
|
411
411
|
let lookupID = new TextBoxOptions();
|
|
412
|
-
lookupID.
|
|
413
|
-
lookupID.
|
|
414
|
-
lookupID.
|
|
412
|
+
lookupID.name = actionIndicate + "LookupID" + index;
|
|
413
|
+
lookupID.hideLabel = true;
|
|
414
|
+
lookupID.type = InputType.Text;
|
|
415
415
|
let lookupNameEN = new TextBoxOptions();
|
|
416
|
-
lookupNameEN.
|
|
417
|
-
lookupNameEN.
|
|
418
|
-
lookupNameEN.
|
|
419
|
-
lookupNameEN.
|
|
420
|
-
lookupNameEN.
|
|
416
|
+
lookupNameEN.name = actionIndicate + "LookupNameEN" + index;
|
|
417
|
+
lookupNameEN.hideLabel = true;
|
|
418
|
+
lookupNameEN.type = InputType.Text;
|
|
419
|
+
lookupNameEN.isRequired = true;
|
|
420
|
+
lookupNameEN.maxLength = 255;
|
|
421
421
|
let lookupNameAR = new TextBoxOptions();
|
|
422
|
-
lookupNameAR.
|
|
423
|
-
lookupNameAR.
|
|
424
|
-
lookupNameAR.
|
|
425
|
-
lookupNameAR.
|
|
426
|
-
lookupNameAR.
|
|
422
|
+
lookupNameAR.name = actionIndicate + "LookupNameAR" + index;
|
|
423
|
+
lookupNameAR.hideLabel = true;
|
|
424
|
+
lookupNameAR.type = InputType.Text;
|
|
425
|
+
lookupNameAR.isRequired = true;
|
|
426
|
+
lookupNameAR.maxLength = 255;
|
|
427
427
|
let lookupValue = new TextBoxOptions();
|
|
428
|
-
lookupValue.
|
|
429
|
-
lookupValue.
|
|
430
|
-
lookupValue.
|
|
431
|
-
lookupValue.
|
|
432
|
-
lookupValue.
|
|
428
|
+
lookupValue.name = actionIndicate + "LookupValue" + index;
|
|
429
|
+
lookupValue.hideLabel = true;
|
|
430
|
+
lookupValue.type = InputType.Text;
|
|
431
|
+
lookupValue.isRequired = true;
|
|
432
|
+
lookupValue.maxLength = 2000;
|
|
433
433
|
if (isAdd)
|
|
434
434
|
objectLookupOptions.push(lookupNameEN, lookupNameAR, lookupValue);
|
|
435
435
|
else
|
|
@@ -469,33 +469,33 @@ export class TabsComponent {
|
|
|
469
469
|
this.showAddLookupsTable = false;
|
|
470
470
|
this.AddWorkflowVariableForm = new FormGroup({});
|
|
471
471
|
this.AddWorkflowVariableFormOptions = new FormOptions();
|
|
472
|
-
this.AddWorkflowVariableFormOptions.
|
|
473
|
-
this.AddWorkflowVariableFormOptions.
|
|
474
|
-
this.AddWorkflowVariableFormOptions.
|
|
475
|
-
this.AddWorkflowVariableFormOptions.
|
|
472
|
+
this.AddWorkflowVariableFormOptions.formGroup = this.AddWorkflowVariableForm;
|
|
473
|
+
this.AddWorkflowVariableFormOptions.getModelFunction = this.getAddWFVariableModel;
|
|
474
|
+
this.AddWorkflowVariableFormOptions.serviceSubmitFunction = this.getAddWFVariableFunction;
|
|
475
|
+
this.AddWorkflowVariableFormOptions.pagingReference = this.WorkflowVariablePagingViewElement;
|
|
476
476
|
this.AddWFVariableName = new MultiLingualTextBoxOptions();
|
|
477
|
-
this.AddWFVariableName.
|
|
478
|
-
this.AddWFVariableName.
|
|
479
|
-
this.AddWFVariableName.
|
|
480
|
-
this.AddWFVariableName.
|
|
481
|
-
this.AddWFVariableName.
|
|
477
|
+
this.AddWFVariableName.name = "Name";
|
|
478
|
+
this.AddWFVariableName.arabicLabelKey = "NameInArabic";
|
|
479
|
+
this.AddWFVariableName.englishLabelKey = "NameInEnglish";
|
|
480
|
+
this.AddWFVariableName.isRequired = true;
|
|
481
|
+
this.AddWFVariableName.maxLength = 255;
|
|
482
482
|
this.AddWFVariableSysName = new TextBoxOptions();
|
|
483
|
-
this.AddWFVariableSysName.
|
|
484
|
-
this.AddWFVariableSysName.
|
|
485
|
-
this.AddWFVariableSysName.
|
|
486
|
-
this.AddWFVariableSysName.
|
|
487
|
-
this.AddWFVariableSysName.
|
|
483
|
+
this.AddWFVariableSysName.name = "SysName";
|
|
484
|
+
this.AddWFVariableSysName.labelKey = "SysName";
|
|
485
|
+
this.AddWFVariableSysName.type = InputType.Text;
|
|
486
|
+
this.AddWFVariableSysName.value = null;
|
|
487
|
+
this.AddWFVariableSysName.maxLength = 100;
|
|
488
488
|
this.AddWFVariableDataType = new DropdownOptions();
|
|
489
|
-
this.AddWFVariableDataType.
|
|
490
|
-
this.AddWFVariableDataType.
|
|
491
|
-
this.AddWFVariableDataType.
|
|
492
|
-
this.AddWFVariableDataType.
|
|
493
|
-
this.AddWFVariableDataType.
|
|
494
|
-
this.AddWFVariableDataType.
|
|
489
|
+
this.AddWFVariableDataType.name = "DataTypeItemID_GUID";
|
|
490
|
+
this.AddWFVariableDataType.labelKey = "DataType";
|
|
491
|
+
this.AddWFVariableDataType.dataSource = this.DataTypeList;
|
|
492
|
+
this.AddWFVariableDataType.singleSelection = true;
|
|
493
|
+
this.AddWFVariableDataType.allowSearchFilter = true;
|
|
494
|
+
this.AddWFVariableDataType.placeholder = "";
|
|
495
495
|
this.AddWFVariableConstant = new ToggleSlideOptions();
|
|
496
|
-
this.AddWFVariableConstant.
|
|
497
|
-
this.AddWFVariableConstant.
|
|
498
|
-
this.AddWFVariableConstant.
|
|
496
|
+
this.AddWFVariableConstant.name = "IsConstant";
|
|
497
|
+
this.AddWFVariableConstant.labelKey = "Constant";
|
|
498
|
+
this.AddWFVariableConstant.viewType = ControlLayout.Horizontal;
|
|
499
499
|
this.modalService.open(AddWorkflowVariableModal);
|
|
500
500
|
this.utilityService.stopBlockUI();
|
|
501
501
|
});
|
|
@@ -520,40 +520,40 @@ export class TabsComponent {
|
|
|
520
520
|
this.showEditLookupsTable = false;
|
|
521
521
|
this.EditWorkflowVariableForm = new FormGroup({});
|
|
522
522
|
this.EditWorkflowVariableFormOptions = new FormOptions();
|
|
523
|
-
this.EditWorkflowVariableFormOptions.
|
|
524
|
-
this.EditWorkflowVariableFormOptions.
|
|
525
|
-
this.EditWorkflowVariableFormOptions.
|
|
526
|
-
this.EditWorkflowVariableFormOptions.
|
|
527
|
-
this.EditWorkflowVariableFormOptions.
|
|
523
|
+
this.EditWorkflowVariableFormOptions.formGroup = this.EditWorkflowVariableForm;
|
|
524
|
+
this.EditWorkflowVariableFormOptions.getModelFunction = this.getEditWFVariableModel;
|
|
525
|
+
this.EditWorkflowVariableFormOptions.serviceSubmitFunction = this.getEditWFVariableFunction;
|
|
526
|
+
this.EditWorkflowVariableFormOptions.pagingReference = this.WorkflowVariablePagingViewElement;
|
|
527
|
+
this.EditWorkflowVariableFormOptions.pagingActionMode = PagingActionMode.Update;
|
|
528
528
|
let name = new EnglishArabicDTO();
|
|
529
|
-
name.
|
|
530
|
-
name.
|
|
529
|
+
name.arabic = workflowVariable.name.arabic;
|
|
530
|
+
name.english = workflowVariable.name.english;
|
|
531
531
|
this.EditWFVariableName = new MultiLingualTextBoxOptions();
|
|
532
|
-
this.EditWFVariableName.
|
|
533
|
-
this.EditWFVariableName.
|
|
534
|
-
this.EditWFVariableName.
|
|
535
|
-
this.EditWFVariableName.
|
|
536
|
-
this.EditWFVariableName.
|
|
537
|
-
this.EditWFVariableName.
|
|
532
|
+
this.EditWFVariableName.name = "Name";
|
|
533
|
+
this.EditWFVariableName.arabicLabelKey = "NameInArabic";
|
|
534
|
+
this.EditWFVariableName.englishLabelKey = "NameInEnglish";
|
|
535
|
+
this.EditWFVariableName.isRequired = true;
|
|
536
|
+
this.EditWFVariableName.value = name;
|
|
537
|
+
this.EditWFVariableName.maxLength = 255;
|
|
538
538
|
this.EditWFVariableSysName = new TextBoxOptions();
|
|
539
|
-
this.EditWFVariableSysName.
|
|
540
|
-
this.EditWFVariableSysName.
|
|
541
|
-
this.EditWFVariableSysName.
|
|
542
|
-
this.EditWFVariableSysName.
|
|
543
|
-
this.EditWFVariableSysName.
|
|
539
|
+
this.EditWFVariableSysName.name = "SysName";
|
|
540
|
+
this.EditWFVariableSysName.labelKey = "SysName";
|
|
541
|
+
this.EditWFVariableSysName.type = InputType.Text;
|
|
542
|
+
this.EditWFVariableSysName.value = workflowVariable.sysName;
|
|
543
|
+
this.EditWFVariableSysName.maxLength = 100;
|
|
544
544
|
this.EditWFVariableDataType = new DropdownOptions();
|
|
545
|
-
this.EditWFVariableDataType.
|
|
546
|
-
this.EditWFVariableDataType.
|
|
547
|
-
this.EditWFVariableDataType.
|
|
548
|
-
this.EditWFVariableDataType.
|
|
549
|
-
this.EditWFVariableDataType.
|
|
550
|
-
this.EditWFVariableDataType.
|
|
551
|
-
this.EditWFVariableDataType.
|
|
545
|
+
this.EditWFVariableDataType.name = "DataTypeItemID_GUID";
|
|
546
|
+
this.EditWFVariableDataType.labelKey = "DataType";
|
|
547
|
+
this.EditWFVariableDataType.dataSource = this.DataTypeList;
|
|
548
|
+
this.EditWFVariableDataType.singleSelection = true;
|
|
549
|
+
this.EditWFVariableDataType.allowSearchFilter = true;
|
|
550
|
+
this.EditWFVariableDataType.placeholder = "";
|
|
551
|
+
this.EditWFVariableDataType.selectedItems = workflowVariable.dataTypeItemID_GUID?.toLowerCase();
|
|
552
552
|
this.EditWFVariableConstant = new ToggleSlideOptions();
|
|
553
|
-
this.EditWFVariableConstant.
|
|
554
|
-
this.EditWFVariableConstant.
|
|
555
|
-
this.EditWFVariableConstant.
|
|
556
|
-
this.EditWFVariableConstant.
|
|
553
|
+
this.EditWFVariableConstant.name = "IsConstant";
|
|
554
|
+
this.EditWFVariableConstant.labelKey = "Constant";
|
|
555
|
+
this.EditWFVariableConstant.value = workflowVariable.isConstant;
|
|
556
|
+
this.EditWFVariableConstant.viewType = ControlLayout.Horizontal;
|
|
557
557
|
if (workflowVariable.dataTypeItemID_GUID == VariableDataType.SingleSelection || workflowVariable.dataTypeItemID_GUID == VariableDataType.MultiSelection) {
|
|
558
558
|
//Set Lookup Controls
|
|
559
559
|
this.setEditVariableLookups(workflowVariable.variableLookupDTOs);
|
|
@@ -567,32 +567,32 @@ export class TabsComponent {
|
|
|
567
567
|
for (let i = 0; i < existingLookups.length; i++) {
|
|
568
568
|
let objectAttributeOptions = [];
|
|
569
569
|
let lookupID = new TextBoxOptions();
|
|
570
|
-
lookupID.
|
|
571
|
-
lookupID.
|
|
572
|
-
lookupID.
|
|
573
|
-
lookupID.
|
|
570
|
+
lookupID.name = "EditLookupID" + i;
|
|
571
|
+
lookupID.hideLabel = true;
|
|
572
|
+
lookupID.type = InputType.Text;
|
|
573
|
+
lookupID.value = existingLookups[i].iD_GUID;
|
|
574
574
|
let lookupNameEN = new TextBoxOptions();
|
|
575
|
-
lookupNameEN.
|
|
576
|
-
lookupNameEN.
|
|
577
|
-
lookupNameEN.
|
|
578
|
-
lookupNameEN.
|
|
579
|
-
lookupNameEN.
|
|
580
|
-
lookupNameEN.
|
|
575
|
+
lookupNameEN.name = "EditLookupNameEN" + i;
|
|
576
|
+
lookupNameEN.hideLabel = true;
|
|
577
|
+
lookupNameEN.type = InputType.Text;
|
|
578
|
+
lookupNameEN.value = existingLookups[i].nameEN;
|
|
579
|
+
lookupNameEN.isRequired = true;
|
|
580
|
+
lookupNameEN.maxLength = 255;
|
|
581
581
|
let lookupNameAR = new TextBoxOptions();
|
|
582
|
-
lookupNameAR.
|
|
583
|
-
lookupNameAR.
|
|
584
|
-
lookupNameAR.
|
|
585
|
-
lookupNameAR.
|
|
586
|
-
lookupNameAR.
|
|
587
|
-
lookupNameAR.
|
|
588
|
-
lookupNameAR.
|
|
582
|
+
lookupNameAR.name = "EditLookupNameAR" + i;
|
|
583
|
+
lookupNameAR.hideLabel = true;
|
|
584
|
+
lookupNameAR.type = InputType.Text;
|
|
585
|
+
lookupNameAR.value = existingLookups[i].nameAR;
|
|
586
|
+
lookupNameAR.isRequired = true;
|
|
587
|
+
lookupNameAR.forceDirection = ForceDirection.Arabic;
|
|
588
|
+
lookupNameAR.maxLength = 255;
|
|
589
589
|
let lookupValue = new TextBoxOptions();
|
|
590
|
-
lookupValue.
|
|
591
|
-
lookupValue.
|
|
592
|
-
lookupValue.
|
|
593
|
-
lookupValue.
|
|
594
|
-
lookupValue.
|
|
595
|
-
lookupValue.
|
|
590
|
+
lookupValue.name = "EditLookupValue" + i;
|
|
591
|
+
lookupValue.hideLabel = true;
|
|
592
|
+
lookupValue.type = InputType.Text;
|
|
593
|
+
lookupValue.value = existingLookups[i].value;
|
|
594
|
+
lookupValue.isRequired = true;
|
|
595
|
+
lookupValue.maxLength = 2000;
|
|
596
596
|
objectAttributeOptions.push(lookupID, lookupNameEN, lookupNameAR, lookupValue);
|
|
597
597
|
this.editWFVariablesLookupOptions.push(objectAttributeOptions);
|
|
598
598
|
this.editLastLookupIndex += 1;
|
|
@@ -611,20 +611,20 @@ export class TabsComponent {
|
|
|
611
611
|
// this.IsworkflowActivityFilterLoaded = false;
|
|
612
612
|
this.utilityService.startBlockUI();
|
|
613
613
|
this.WorkflowActivityIdTextBox = new TextBoxOptions();
|
|
614
|
-
this.WorkflowActivityIdTextBox.
|
|
615
|
-
this.WorkflowActivityIdTextBox.
|
|
616
|
-
this.WorkflowActivityIdTextBox.
|
|
617
|
-
this.WorkflowActivityIdTextBox.
|
|
614
|
+
this.WorkflowActivityIdTextBox.name = "WorkflowActivityIdTextBox";
|
|
615
|
+
this.WorkflowActivityIdTextBox.hideLabel = true;
|
|
616
|
+
this.WorkflowActivityIdTextBox.type = InputType.Text;
|
|
617
|
+
this.WorkflowActivityIdTextBox.value = this.WorkflowId;
|
|
618
618
|
this.WorkflowActivityIdFilter = new FilterItem();
|
|
619
619
|
this.WorkflowActivityIdFilter.FormControlName = "WorkflowActivityIdTextBox";
|
|
620
620
|
this.WorkflowActivityIdFilter.ActionParameterName = "WfID";
|
|
621
621
|
this.WorkflowActivityIdFilter.IsFormControl = true;
|
|
622
622
|
this.WorkflowActivityIdFilter.FilterType = FilterType.TextBox;
|
|
623
623
|
this.ActivityPaging = new PagingOptions();
|
|
624
|
-
this.ActivityPaging.
|
|
625
|
-
this.ActivityPaging.
|
|
626
|
-
this.ActivityPaging.
|
|
627
|
-
this.ActivityPaging.
|
|
624
|
+
this.ActivityPaging.actionPostURL = this.ActivityApiUrl + 'GetWorkflowActivityListing';
|
|
625
|
+
this.ActivityPaging.onKeyPressFiltersControlNames = ["WorkflowActivityIdTextBox"];
|
|
626
|
+
this.ActivityPaging.filters = [this.WorkflowActivityIdFilter];
|
|
627
|
+
this.ActivityPaging.validationToken = this.authService.authorizationHeaderValue();
|
|
628
628
|
this.ShowWorkflowDetails = false;
|
|
629
629
|
this.IsFilterLoaded = false;
|
|
630
630
|
this.IsWorkflowVariableFilterLoaded = false;
|
|
@@ -649,68 +649,68 @@ export class TabsComponent {
|
|
|
649
649
|
this.activityVariablesList = resultObj.activityVariablesList;
|
|
650
650
|
this.addWorkflowVariabletoActivityForm = new FormGroup({});
|
|
651
651
|
this.addWorkflowVariabletoActivityFormOptions = new FormOptions();
|
|
652
|
-
this.addWorkflowVariabletoActivityFormOptions.
|
|
653
|
-
this.addWorkflowVariabletoActivityFormOptions.
|
|
654
|
-
this.addWorkflowVariabletoActivityFormOptions.
|
|
655
|
-
this.addWorkflowVariabletoActivityFormOptions.
|
|
656
|
-
this.addWorkflowVariabletoActivityFormOptions.
|
|
652
|
+
this.addWorkflowVariabletoActivityFormOptions.formGroup = this.addWorkflowVariabletoActivityForm;
|
|
653
|
+
this.addWorkflowVariabletoActivityFormOptions.getModelFunction = this.getaddWFVariabletoActivityModel;
|
|
654
|
+
this.addWorkflowVariabletoActivityFormOptions.serviceSubmitFunction = this.getaddWFVariabletoActivityFunction;
|
|
655
|
+
this.addWorkflowVariabletoActivityFormOptions.pagingReference = this.ActivityPagingViewElement;
|
|
656
|
+
this.addWorkflowVariabletoActivityFormOptions.pagingActionMode = PagingActionMode.Update;
|
|
657
657
|
for (let i = 0; i < model.activityVariableDTOs.length; i++) {
|
|
658
658
|
let currentVariable = model.activityVariableDTOs[i];
|
|
659
659
|
let objectVariableOptions = [];
|
|
660
660
|
let isSystem = currentVariable.isSystem;
|
|
661
661
|
let variableIsSystem = new TextBoxOptions(); //hidden
|
|
662
|
-
variableIsSystem.
|
|
663
|
-
variableIsSystem.
|
|
664
|
-
variableIsSystem.
|
|
665
|
-
variableIsSystem.
|
|
662
|
+
variableIsSystem.name = "variableIsSystem" + i;
|
|
663
|
+
variableIsSystem.hideLabel = true;
|
|
664
|
+
variableIsSystem.type = InputType.Text;
|
|
665
|
+
variableIsSystem.value = isSystem;
|
|
666
666
|
let variableIsEnabled = new CheckBoxOptions();
|
|
667
|
-
variableIsEnabled.
|
|
668
|
-
variableIsEnabled.
|
|
669
|
-
variableIsEnabled.
|
|
667
|
+
variableIsEnabled.name = "variableIsEnabled" + i;
|
|
668
|
+
variableIsEnabled.value = currentVariable.isEnabled;
|
|
669
|
+
variableIsEnabled.isDisabled = isSystem;
|
|
670
670
|
//hidden field
|
|
671
671
|
let variableIsEnabledHidden = new CheckBoxOptions();
|
|
672
|
-
variableIsEnabledHidden.
|
|
673
|
-
variableIsEnabledHidden.
|
|
672
|
+
variableIsEnabledHidden.name = "variableIsEnabledHidden" + i;
|
|
673
|
+
variableIsEnabledHidden.value = currentVariable.isEnabled;
|
|
674
674
|
let variableIsMandatory = new CheckBoxOptions();
|
|
675
|
-
variableIsMandatory.
|
|
676
|
-
variableIsMandatory.
|
|
677
|
-
variableIsMandatory.
|
|
675
|
+
variableIsMandatory.name = "variableIsMandatory" + i;
|
|
676
|
+
variableIsMandatory.value = currentVariable.isMandatory;
|
|
677
|
+
variableIsMandatory.isDisabled = isSystem;
|
|
678
678
|
//hidden field
|
|
679
679
|
let variableIsMandatoryHidden = new CheckBoxOptions();
|
|
680
|
-
variableIsMandatoryHidden.
|
|
681
|
-
variableIsMandatoryHidden.
|
|
680
|
+
variableIsMandatoryHidden.name = "variableIsMandatoryHidden" + i;
|
|
681
|
+
variableIsMandatoryHidden.value = currentVariable.isMandatory;
|
|
682
682
|
let variableIsVisible = new CheckBoxOptions();
|
|
683
|
-
variableIsVisible.
|
|
684
|
-
variableIsVisible.
|
|
685
|
-
variableIsVisible.
|
|
683
|
+
variableIsVisible.name = "variableIsVisible" + i;
|
|
684
|
+
variableIsVisible.value = currentVariable.isVisible;
|
|
685
|
+
variableIsVisible.isDisabled = isSystem;
|
|
686
686
|
//hidden field
|
|
687
687
|
let variableIsVisibleHidden = new CheckBoxOptions();
|
|
688
|
-
variableIsVisibleHidden.
|
|
689
|
-
variableIsVisibleHidden.
|
|
688
|
+
variableIsVisibleHidden.name = "variableIsVisibleHidden" + i;
|
|
689
|
+
variableIsVisibleHidden.value = currentVariable.isVisible;
|
|
690
690
|
objectVariableOptions.push(variableIsSystem, variableIsEnabled, variableIsEnabledHidden, variableIsMandatory, variableIsMandatoryHidden, variableIsVisible, variableIsVisibleHidden, isSystem);
|
|
691
691
|
if (isSystem) {
|
|
692
692
|
let variableName = new TextBoxOptions();
|
|
693
|
-
variableName.
|
|
694
|
-
variableName.
|
|
695
|
-
variableName.
|
|
696
|
-
variableName.
|
|
697
|
-
variableName.
|
|
693
|
+
variableName.name = "variableName" + i;
|
|
694
|
+
variableName.hideLabel = true;
|
|
695
|
+
variableName.isDisabled = true;
|
|
696
|
+
variableName.type = InputType.Text;
|
|
697
|
+
variableName.value = currentVariable.variableName;
|
|
698
698
|
let variableID = new TextBoxOptions(); //hidden
|
|
699
|
-
variableID.
|
|
700
|
-
variableID.
|
|
701
|
-
variableID.
|
|
702
|
-
variableID.
|
|
699
|
+
variableID.name = "variableID" + i;
|
|
700
|
+
variableID.hideLabel = true;
|
|
701
|
+
variableID.type = InputType.Text;
|
|
702
|
+
variableID.value = currentVariable.iD_GUID?.toLowerCase();
|
|
703
703
|
objectVariableOptions.push(variableName, variableID);
|
|
704
704
|
}
|
|
705
705
|
else {
|
|
706
706
|
let variableIDdropdown = new DropdownOptions();
|
|
707
|
-
variableIDdropdown.
|
|
708
|
-
variableIDdropdown.
|
|
709
|
-
variableIDdropdown.
|
|
710
|
-
variableIDdropdown.
|
|
711
|
-
variableIDdropdown.
|
|
712
|
-
variableIDdropdown.
|
|
713
|
-
variableIDdropdown.
|
|
707
|
+
variableIDdropdown.name = "variableIDdropdown";
|
|
708
|
+
variableIDdropdown.hideLabel = true;
|
|
709
|
+
variableIDdropdown.singleSelection = true;
|
|
710
|
+
variableIDdropdown.allowSearchFilter = true;
|
|
711
|
+
variableIDdropdown.isRequired = true;
|
|
712
|
+
variableIDdropdown.dataSource = this.activityVariablesList;
|
|
713
|
+
variableIDdropdown.selectedItems = currentVariable.iDGUID?.toLowerCase();
|
|
714
714
|
objectVariableOptions.push(variableIDdropdown);
|
|
715
715
|
}
|
|
716
716
|
this.activityWFVariableOptions.push(objectVariableOptions);
|
|
@@ -733,36 +733,36 @@ export class TabsComponent {
|
|
|
733
733
|
let index = this.lastActivityWFVariableIndex;
|
|
734
734
|
let objectVariableOptions = [];
|
|
735
735
|
let variableIDdropdown = new DropdownOptions();
|
|
736
|
-
variableIDdropdown.
|
|
737
|
-
variableIDdropdown.
|
|
738
|
-
variableIDdropdown.
|
|
739
|
-
variableIDdropdown.
|
|
740
|
-
variableIDdropdown.
|
|
741
|
-
variableIDdropdown.
|
|
736
|
+
variableIDdropdown.name = "variableIDdropdown" + index;
|
|
737
|
+
variableIDdropdown.hideLabel = true;
|
|
738
|
+
variableIDdropdown.singleSelection = true;
|
|
739
|
+
variableIDdropdown.allowSearchFilter = true;
|
|
740
|
+
variableIDdropdown.isRequired = true;
|
|
741
|
+
variableIDdropdown.dataSource = this.activityVariablesList;
|
|
742
742
|
let isSystem = false;
|
|
743
743
|
let variableIsSystem = new TextBoxOptions(); //hidden
|
|
744
|
-
variableIsSystem.
|
|
745
|
-
variableIsSystem.
|
|
746
|
-
variableIsSystem.
|
|
747
|
-
variableIsSystem.
|
|
744
|
+
variableIsSystem.name = "variableIsSystem" + index;
|
|
745
|
+
variableIsSystem.hideLabel = true;
|
|
746
|
+
variableIsSystem.type = InputType.Text;
|
|
747
|
+
variableIsSystem.value = isSystem;
|
|
748
748
|
let variableIsEnabled = new CheckBoxOptions();
|
|
749
|
-
variableIsEnabled.
|
|
750
|
-
variableIsEnabled.
|
|
749
|
+
variableIsEnabled.name = "variableIsEnabled" + index;
|
|
750
|
+
variableIsEnabled.value = false;
|
|
751
751
|
let variableIsEnabledHidden = new CheckBoxOptions();
|
|
752
|
-
variableIsEnabledHidden.
|
|
753
|
-
variableIsEnabledHidden.
|
|
752
|
+
variableIsEnabledHidden.name = "variableIsEnabledHidden" + index;
|
|
753
|
+
variableIsEnabledHidden.value = false;
|
|
754
754
|
let variableIsMandatory = new CheckBoxOptions();
|
|
755
|
-
variableIsMandatory.
|
|
756
|
-
variableIsMandatory.
|
|
755
|
+
variableIsMandatory.name = "variableIsMandatory" + index;
|
|
756
|
+
variableIsMandatory.value = false;
|
|
757
757
|
let variableIsMandatoryHidden = new CheckBoxOptions();
|
|
758
|
-
variableIsMandatoryHidden.
|
|
759
|
-
variableIsMandatoryHidden.
|
|
758
|
+
variableIsMandatoryHidden.name = "variableIsMandatoryHidden" + index;
|
|
759
|
+
variableIsMandatoryHidden.value = false;
|
|
760
760
|
let variableIsVisible = new CheckBoxOptions();
|
|
761
|
-
variableIsVisible.
|
|
762
|
-
variableIsVisible.
|
|
761
|
+
variableIsVisible.name = "variableIsVisible" + index;
|
|
762
|
+
variableIsVisible.value = false;
|
|
763
763
|
let variableIsVisibleHidden = new CheckBoxOptions();
|
|
764
|
-
variableIsVisibleHidden.
|
|
765
|
-
variableIsVisibleHidden.
|
|
764
|
+
variableIsVisibleHidden.name = "variableIsVisibleHidden" + index;
|
|
765
|
+
variableIsVisibleHidden.value = false;
|
|
766
766
|
objectVariableOptions.push(variableIsSystem, variableIsEnabled, variableIsEnabledHidden, variableIsMandatory, variableIsMandatoryHidden, variableIsVisible, variableIsVisibleHidden, isSystem, variableIDdropdown);
|
|
767
767
|
this.activityWFVariableOptions.push(objectVariableOptions);
|
|
768
768
|
this.lastActivityWFVariableIndex += 1;
|
|
@@ -772,7 +772,7 @@ export class TabsComponent {
|
|
|
772
772
|
this.requestHandlerService.destroyHandler();
|
|
773
773
|
}
|
|
774
774
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TabsComponent, deps: [{ token: i1.AuthService }, { token: i2.WorkflowService }, { token: i3.ActivatedRoute }, { token: i4.WorkflowVariablesService }, { token: i5.WorkflowActivityService }, { token: i6.PageInfoService }, { token: i7.NgbModal }, { token: i1.EnvironmentService }, { token: i1.BBSFTranslateService }, { token: i1.UtilityService }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
775
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: TabsComponent, selector: "lib-tabs", viewQueries: [{ propertyName: "publishConfirmationModalControl", first: true, predicate: ["publishConfirmationModalControl"], descendants: true }, { propertyName: "WFVersionPagingElement", first: true, predicate: ["WorkflowVersionPagingViewElement"], descendants: true }, { propertyName: "WorkflowVariablePagingViewElement", first: true, predicate: ["WorkflowVariablePagingViewElement"], descendants: true }, { propertyName: "ActivityPagingViewElement", first: true, predicate: ["ActivityPagingViewElement"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder\">\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"getDetails()\">{{utilityService.getResourceValue(\"Details\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0 justify-content-end\">\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" *ngIf=\"ShowWorkflowDetails&&!WorkflowDetails.isPublished\"\r\n id=\"btnPublish\" class=\"btn btn-sm btn-primary\" (click)=\"showPublishWFModal(WorkflowDetails.iD_GUID)\">\r\n {{utilityService.getResourceValue(\"PublishWorkflow\")}}\r\n\r\n </button>\r\n <!--<a class=\"btn btn-sm btn-light-primary\">\r\n {{utilityService.getResourceValue(\"Preview\")}}\r\n </a>-->\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <form [formGroup]=\"DetailsForm\" *ngIf=\"ShowWorkflowDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"NameMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"DescriptionMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"SysName\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Active\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Published\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n <!--Publish workflow confirmation-->\r\n <BBSF-ConfirmationModal *ngIf=\"publishControlLoaded\" [options]=\"publishWFConfirmationOptions\" id=\"publishConfirmationModalControl\" #publishConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeVersion()\">{{utilityService.getResourceValue(\"Versions\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVersionForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"WorkflowVersionForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"WorkflowIdTextBox\"\r\n [group]=\"WorkflowVersionForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\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(\"Change\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Current\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Published\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CreationDate\")}}</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 version of WorkflowVersionPagingResult\">\r\n <td>\r\n <a href=\"javascript:void(0)\"\r\n [routerLink]=\"['/Admin/Workflows/VersionInfo',version.iD_GUID]\"\r\n routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{version.changeStr}}</a>\r\n </td>\r\n <td>{{version.isCurrent}}</td>\r\n <td>{{version.isPublished}}</td>\r\n <td>{{version.creationDate}}</td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVersionPagingResult.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVersionListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"WorkflowVersionPaging\" [group]=\"WorkflowVersionForm\"\r\n #WorkflowVersionPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowVariables()\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVariableForm\">\r\n <BBSF-TextBox [options]=\"WorkflowVariablesearchTextBox\"\r\n [group]=\"WorkflowVariableForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"VerisonIdTextBox\"\r\n [group]=\"WorkflowVariableForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"showAddWorkflowVariableModal(AddWorkflowVariableModal)\">\r\n <i class=\" fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\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\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"DataType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"VariableType\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n\r\n\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let WorkflowVariable of WorkflowVariablePagingResult\">\r\n\r\n <td>\r\n <a href=\"javascript:void(0)\" class=\"text-dark\">{{WorkflowVariable.nameStr}}</a>\r\n\r\n </td>\r\n\r\n <td>\r\n {{WorkflowVariable.sysName}}\r\n </td>\r\n <td>{{WorkflowVariable.dataTypeItem}}</td>\r\n <td>{{WorkflowVariable.variableTypeItem}}</td>\r\n\r\n <td>\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\"\r\n (click)=\"showEditWorkflowVariableModal(WorkflowVariable.iD_GUID, EditWorkflowVariableModal)\">\r\n <i class=\"fa fa-edit\"\r\n aria-hidden=\"true\"></i>\r\n </a>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVariablePagingResult.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 </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVariableListResult($event)\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\" [options]=\"WorkflowVariablePaging\"\r\n [group]=\"WorkflowVariableForm\" #WorkflowVariablePagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n <!-- Add Modal -->\r\n <ng-template #AddWorkflowVariableModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddWFVariableName\" [group]=\"AddWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"AddWFVariableSysName\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,true)\" [options]=\"AddWFVariableDataType\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"AddWFVariableConstant\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showAddLookupsTable\">\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 table-w-control\">\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(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of addWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinAddMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseWorkflowVariableModal id=\"CloseWorkflowVariableModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </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 </div>\r\n </ng-template>\r\n\r\n <!--Edit Modal-->\r\n <ng-template #EditWorkflowVariableModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditWFVariableName\" [group]=\"EditWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditWFVariableSysName\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,false)\" [options]=\"EditWFVariableDataType\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"EditWFVariableConstant\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showEditLookupsTable\">\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 table-w-control\">\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(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of editWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[3]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,false)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinEditMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </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 #CloseEditWorkflowVariableModal id=\"CloseEditWorkflowVariableModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </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 </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowActivity()\">\r\n {{utilityService.getResourceValue(\"WorkflowActivities\")}}\r\n </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\">\r\n <form [formGroup]=\"workflowActivityForm\">\r\n <div id=\"filtersContainer\" data-isloaded=\"true\">\r\n <BBSF-TextBox [options]=\"WorkflowActivityIdTextBox\"\r\n [group]=\"workflowActivityForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\" [routerLink]=\"['/Admin/Workflows/AddActivity',VersionId]\">\r\n <i class=\"fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 mb-8\" *ngFor=\"let workflowActivity of ActivityPagingResult\">\r\n <div class=\"card bg-light-dark rounded\">\r\n <div class=\"card-header border-0 pt-9\">\r\n <div class=\"card-title m-0 fs-2 text-primary\">\r\n {{workflowActivity.typeNameStr}}\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" class=\"btn btn-primary btn-sm me-2 \" (click)=\"showAddWFVariablestoActivity(workflowActivity.versionID_GUID,workflowActivity.iD_GUID,wfActivityVariablesModal)\">\r\n <i class=\"fa fa-gear\" aria-hidden=\"true\">\r\n </i>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnAdd\" class=\"btn btn-light-primary btn-sm btn-icon me-2\" [routerLink]=\"['/Admin/Workflows/EditActivity',workflowActivity.iD_GUID]\">\r\n <i *ngIf=\"workflowActivity.isPublished\" class=\"fas fa-pen\"></i>\r\n <i *ngIf=\"!workflowActivity.isPublished\" class=\"fas fa-pen\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-9\">\r\n <div class=\"fs-6 fw-bolder text-dark\">{{utilityService.getResourceValue(\"WFOutcome\")}}</div>\r\n <div class=\"text-gray-400 fw-bold fs-5 mt-1 mb-7\">\r\n <ul class=\"list-unstyled\">\r\n\r\n <li>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n <ul id=\"horizontalmenu\">\r\n <li class=\"text-dark\" *ngFor=\"let item of workflowActivity.variables\">\r\n <i class=\"fa fa-gear\"></i>\r\n {{item.sysName}}\r\n\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n <div class=\" mb-5\">\r\n <div *ngFor=\"let item of workflowActivity.outcomes\">\r\n {{ item.nameEN }}: {{item.nextActvityName}}\r\n </div>\r\n </div>\r\n </div>\r\n <!--end:: Card body-->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setActivityListResult($event)\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\" [options]=\"ActivityPaging\"\r\n [group]=\"workflowActivityForm\" #ActivityPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n\r\n <ng-template #wfActivityVariablesModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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\">\r\n {{utilityService.getResourceValue(\"AddWorkflowVariables\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"addWorkflowVariabletoActivityFormOptions\">\r\n <div class=\"row\">\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 table-w-control\">\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(\"WorkflowVariables\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Enabled\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Mandatory\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Visible\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of activityWFVariableOptions;let i=index;\">\r\n\r\n <td>\r\n <!--hidden is system-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n\r\n <!--if is systm-->\r\n <div *ngIf=\"option[7];else variableNameDDL;\">\r\n <!--variavle name-->\r\n <BBSF-TextBox [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n <!--hidden variable id-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[9]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <!--variavle name ddl-->\r\n <ng-template #variableNameDDL>\r\n <BBSF-DropdownList [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-DropdownList>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <!--is enabled-->\r\n <BBSF-CheckBox [options]=\"option[1]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[2]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is mandatory-->\r\n <BBSF-CheckBox [options]=\"option[3]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[4]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is visible-->\r\n <BBSF-CheckBox [options]=\"option[5]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[6]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--if ! isSystem-->\r\n <a *ngIf=\"!option[7]\" class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteActivityWFVariable(option)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"5\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addNewActivityWFVariable()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\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\" class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </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 </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".nav.nav-tabs{background:#f7f8fa;border-bottom:0px}.nav-tabs .nav-item .nav-link{color:#494b74}.nav-tabs .nav-item .nav-link.active,.nav-tabs .nav-item .nav-link:active,.nav-tabs .nav-item .nav-link:hover{color:#494b74;font-weight:500}.workflow-tabs a.nav-link{padding:17px 25px}.kt-widget.kt-widget--user-profile-3.kt-widget.kt-widget--user-profile-3.workflow-activities{border-radius:15px;box-shadow:0 0 3px #dadada!important}.workflow-activities .kt-widget__progress{justify-content:flex-end;align-items:end}.workflow-activities .kt-widget__username{color:#494b74}.workflow-activities ul#horizontalmenu{color:#a4a4a4;list-style:outside}\n"], dependencies: [{ kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i10.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "component", type: i11.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i11.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange", "OnBlur"] }, { kind: "component", type: i11.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i11.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { kind: "component", type: i11.ToggleslideComponent, selector: "BBSF-Toggleslide", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i11.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i11.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["OnChange"] }, { kind: "component", type: i11.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i7.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i7.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i7.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i7.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i7.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i7.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i7.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i12.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i13.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
|
|
775
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: TabsComponent, selector: "lib-tabs", viewQueries: [{ propertyName: "publishConfirmationModalControl", first: true, predicate: ["publishConfirmationModalControl"], descendants: true }, { propertyName: "WFVersionPagingElement", first: true, predicate: ["WorkflowVersionPagingViewElement"], descendants: true }, { propertyName: "WorkflowVariablePagingViewElement", first: true, predicate: ["WorkflowVariablePagingViewElement"], descendants: true }, { propertyName: "ActivityPagingViewElement", first: true, predicate: ["ActivityPagingViewElement"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder\">\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"getDetails()\">{{utilityService.getResourceValue(\"Details\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0 justify-content-end\">\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" *ngIf=\"ShowWorkflowDetails&&!WorkflowDetails.isPublished\"\r\n id=\"btnPublish\" class=\"btn btn-sm btn-primary\" (click)=\"showPublishWFModal(WorkflowDetails.iD_GUID)\">\r\n {{utilityService.getResourceValue(\"PublishWorkflow\")}}\r\n\r\n </button>\r\n <!--<a class=\"btn btn-sm btn-light-primary\">\r\n {{utilityService.getResourceValue(\"Preview\")}}\r\n </a>-->\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <form [formGroup]=\"DetailsForm\" *ngIf=\"ShowWorkflowDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"NameMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"DescriptionMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"SysName\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Active\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Published\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n <!--Publish workflow confirmation-->\r\n <BBSF-ConfirmationModal *ngIf=\"publishControlLoaded\" [options]=\"publishWFConfirmationOptions\" id=\"publishConfirmationModalControl\" #publishConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeVersion()\">{{utilityService.getResourceValue(\"Versions\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVersionForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"WorkflowVersionForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"WorkflowIdTextBox\"\r\n [group]=\"WorkflowVersionForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\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(\"Change\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Current\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Published\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CreationDate\")}}</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 version of WorkflowVersionPagingResult\">\r\n <td>\r\n <a href=\"javascript:void(0)\"\r\n [routerLink]=\"['/Admin/Workflows/VersionInfo',version.iD_GUID]\"\r\n routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{version.changeStr}}</a>\r\n </td>\r\n <td>{{version.isCurrent}}</td>\r\n <td>{{version.isPublished}}</td>\r\n <td>{{version.creationDate}}</td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVersionPagingResult.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVersionListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"WorkflowVersionPaging\" [group]=\"WorkflowVersionForm\"\r\n #WorkflowVersionPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowVariables()\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVariableForm\">\r\n <BBSF-TextBox [options]=\"WorkflowVariablesearchTextBox\"\r\n [group]=\"WorkflowVariableForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"VerisonIdTextBox\"\r\n [group]=\"WorkflowVariableForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"showAddWorkflowVariableModal(AddWorkflowVariableModal)\">\r\n <i class=\" fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\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\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"DataType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"VariableType\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n\r\n\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let WorkflowVariable of WorkflowVariablePagingResult\">\r\n\r\n <td>\r\n <a href=\"javascript:void(0)\" class=\"text-dark\">{{WorkflowVariable.nameStr}}</a>\r\n\r\n </td>\r\n\r\n <td>\r\n {{WorkflowVariable.sysName}}\r\n </td>\r\n <td>{{WorkflowVariable.dataTypeItem}}</td>\r\n <td>{{WorkflowVariable.variableTypeItem}}</td>\r\n\r\n <td>\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\"\r\n (click)=\"showEditWorkflowVariableModal(WorkflowVariable.iD_GUID, EditWorkflowVariableModal)\">\r\n <i class=\"fa fa-edit\"\r\n aria-hidden=\"true\"></i>\r\n </a>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVariablePagingResult.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 </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVariableListResult($event)\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\" [options]=\"WorkflowVariablePaging\"\r\n [group]=\"WorkflowVariableForm\" #WorkflowVariablePagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n <!-- Add Modal -->\r\n <ng-template #AddWorkflowVariableModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddWFVariableName\" [group]=\"AddWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"AddWFVariableSysName\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,true)\" [options]=\"AddWFVariableDataType\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"AddWFVariableConstant\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showAddLookupsTable\">\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 table-w-control\">\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(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of addWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinAddMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseWorkflowVariableModal id=\"CloseWorkflowVariableModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </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 </div>\r\n </ng-template>\r\n\r\n <!--Edit Modal-->\r\n <ng-template #EditWorkflowVariableModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditWFVariableName\" [group]=\"EditWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditWFVariableSysName\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,false)\" [options]=\"EditWFVariableDataType\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"EditWFVariableConstant\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showEditLookupsTable\">\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 table-w-control\">\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(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of editWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[3]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,false)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinEditMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </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 #CloseEditWorkflowVariableModal id=\"CloseEditWorkflowVariableModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </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 </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowActivity()\">\r\n {{utilityService.getResourceValue(\"WorkflowActivities\")}}\r\n </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\">\r\n <form [formGroup]=\"workflowActivityForm\">\r\n <div id=\"filtersContainer\" data-isloaded=\"true\">\r\n <BBSF-TextBox [options]=\"WorkflowActivityIdTextBox\"\r\n [group]=\"workflowActivityForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\" [routerLink]=\"['/Admin/Workflows/AddActivity',VersionId]\">\r\n <i class=\"fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 mb-8\" *ngFor=\"let workflowActivity of ActivityPagingResult\">\r\n <div class=\"card bg-light-dark rounded\">\r\n <div class=\"card-header border-0 pt-9\">\r\n <div class=\"card-title m-0 fs-2 text-primary\">\r\n {{workflowActivity.typeNameStr}}\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" class=\"btn btn-primary btn-sm me-2 \" (click)=\"showAddWFVariablestoActivity(workflowActivity.versionID_GUID,workflowActivity.iD_GUID,wfActivityVariablesModal)\">\r\n <i class=\"fa fa-gear\" aria-hidden=\"true\">\r\n </i>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnAdd\" class=\"btn btn-light-primary btn-sm btn-icon me-2\" [routerLink]=\"['/Admin/Workflows/EditActivity',workflowActivity.iD_GUID]\">\r\n <i *ngIf=\"workflowActivity.isPublished\" class=\"fas fa-pen\"></i>\r\n <i *ngIf=\"!workflowActivity.isPublished\" class=\"fas fa-pen\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-9\">\r\n <div class=\"fs-6 fw-bolder text-dark\">{{utilityService.getResourceValue(\"WFOutcome\")}}</div>\r\n <div class=\"text-gray-400 fw-bold fs-5 mt-1 mb-7\">\r\n <ul class=\"list-unstyled\">\r\n\r\n <li>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n <ul id=\"horizontalmenu\">\r\n <li class=\"text-dark\" *ngFor=\"let item of workflowActivity.variables\">\r\n <i class=\"fa fa-gear\"></i>\r\n {{item.sysName}}\r\n\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n <div class=\" mb-5\">\r\n <div *ngFor=\"let item of workflowActivity.outcomes\">\r\n {{ item.nameEN }}: {{item.nextActvityName}}\r\n </div>\r\n </div>\r\n </div>\r\n <!--end:: Card body-->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setActivityListResult($event)\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\" [options]=\"ActivityPaging\"\r\n [group]=\"workflowActivityForm\" #ActivityPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n\r\n <ng-template #wfActivityVariablesModal 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\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\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\">\r\n {{utilityService.getResourceValue(\"AddWorkflowVariables\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"addWorkflowVariabletoActivityFormOptions\">\r\n <div class=\"row\">\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 table-w-control\">\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(\"WorkflowVariables\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Enabled\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Mandatory\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Visible\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of activityWFVariableOptions;let i=index;\">\r\n\r\n <td>\r\n <!--hidden is system-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n\r\n <!--if is systm-->\r\n <div *ngIf=\"option[7];else variableNameDDL;\">\r\n <!--variavle name-->\r\n <BBSF-TextBox [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n <!--hidden variable id-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[9]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <!--variavle name ddl-->\r\n <ng-template #variableNameDDL>\r\n <BBSF-DropdownList [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-DropdownList>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <!--is enabled-->\r\n <BBSF-CheckBox [options]=\"option[1]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[2]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is mandatory-->\r\n <BBSF-CheckBox [options]=\"option[3]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[4]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is visible-->\r\n <BBSF-CheckBox [options]=\"option[5]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[6]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--if ! isSystem-->\r\n <a *ngIf=\"!option[7]\" class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteActivityWFVariable(option)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"5\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addNewActivityWFVariable()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\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\" class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </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 </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".nav.nav-tabs{background:#f7f8fa;border-bottom:0px}.nav-tabs .nav-item .nav-link{color:#494b74}.nav-tabs .nav-item .nav-link.active,.nav-tabs .nav-item .nav-link:active,.nav-tabs .nav-item .nav-link:hover{color:#494b74;font-weight:500}.workflow-tabs a.nav-link{padding:17px 25px}.kt-widget.kt-widget--user-profile-3.kt-widget.kt-widget--user-profile-3.workflow-activities{border-radius:15px;box-shadow:0 0 3px #dadada!important}.workflow-activities .kt-widget__progress{justify-content:flex-end;align-items:end}.workflow-activities .kt-widget__username{color:#494b74}.workflow-activities ul#horizontalmenu{color:#a4a4a4;list-style:outside}\n"], dependencies: [{ kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i10.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "component", type: i11.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i11.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i11.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i11.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i11.ToggleslideComponent, selector: "BBSF-Toggleslide", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i11.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i11.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "component", type: i11.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i7.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i7.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i7.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i7.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i7.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i7.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i7.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i12.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i13.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
|
|
776
776
|
}
|
|
777
777
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TabsComponent, decorators: [{
|
|
778
778
|
type: Component,
|
|
@@ -790,4 +790,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
790
790
|
type: ViewChild,
|
|
791
791
|
args: ['ActivityPagingViewElement', { static: false }]
|
|
792
792
|
}] } });
|
|
793
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3dvcmtmbG93cy90YWJzL3RhYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy93b3JrZmxvd3MvdGFicy90YWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUErQyxNQUFNLHlCQUF5QixDQUFDO0FBR3BWLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUdyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFJckYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8sYUFBYTtJQStGeEIsdUJBQXVCO0lBR3ZCLFlBQW9CLFdBQXdCLEVBQVUsZUFBZ0MsRUFDNUUsY0FBOEIsRUFB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QUssRUFBRTtnQkF1Q04seUJBQXlCO3NCQUFuRixTQUFTO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb250cm9sTGF5b3V0LCBFbmdsaXNoQXJhYmljRFRPLCBGaWx0ZXJJdGVtLCBGaWx0ZXJUeXBlLCBJbnB1dFR5cGUsIE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zLCBQYWdpbmdPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgVG9nZ2xlU2xpZGVPcHRpb25zLCBEcm9wZG93bk9wdGlvbnMsIEZvcm1PcHRpb25zLCBQYWdpbmdBY3Rpb25Nb2RlLCBGb3JjZURpcmVjdGlvbiwgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zLCBDaGVja0JveE9wdGlvbnMsIENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCBQYWdpbmdDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFdvcmtmbG93U2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1dvcmtmbG93U2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBXRlZhcmlhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1dvcmtmbG93TW9kZWxzL1dGVmFyaWFibGVNb2RlbCc7XHJcbmltcG9ydCB7IFdvcmtmbG93VmFyaWFibGVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Xb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93QWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1dvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIEVudmlyb25tZW50U2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVmFyaWFibGVMb29rdXBNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvV29ya2Zsb3dNb2RlbHMvVmFyaWFibGVMb29rdXBNb2RlbCc7XHJcbmltcG9ydCB7IFdGQWN0aXZpdHlWYXJpYWJsZURUTywgV0ZBY3Rpdml0eVZhcmlhYmxlc01vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Xb3JrZmxvd01vZGVscy9XRkFjdGl2aXR5VmFyaWFibGVzTW9kZWwnO1xyXG5pbXBvcnQgeyBWYXJpYWJsZURhdGFUeXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbnN0YW50cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10YWJzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFicy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFicy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBQYWdldGl0bGU6IHN0cmluZyA9IFwiXCJcclxuXHJcbiAgLy9XRlxyXG4gIC8vIERldGFpbHMgQ29udHJvbHNcclxuICBEZXRhaWxzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFdvcmtmbG93RGV0YWlsczogYW55O1xyXG4gIFdvcmtmbG93SWQ6IHN0cmluZztcclxuICBOYW1lTXVsdGlsaW5ndWFsVGV4dEJveDogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94OiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucztcclxuICBBY3RpdmU6IFRleHRCb3hPcHRpb25zO1xyXG4gIFB1Ymxpc2hlZDogVGV4dEJveE9wdGlvbnM7XHJcbiAgU3lzTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgU2hvd1dvcmtmbG93RGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFZlcnNpb25JZDogc3RyaW5nXHJcbiAgLy9wdWJsaXNoIFdGICBNb2RlbCBDb250cm9sc1xyXG4gIHB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnM6IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucztcclxuICBwdWJsaXNoQ29udHJvbExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ3B1Ymxpc2hDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGlzaENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG4gIC8vU3RhcnQgV29ya0Zsb3cgVmVyc2lvblxyXG4gIFdvcmtGbG93VmVyc2lvbkFwaVVybCA9IFwiL2FwaS9hZG1pbi9XRlZlcnNpb24vXCJcclxuICBXb3JrZmxvd1ZlcnNpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgV29ya2Zsb3dJZFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIFdvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBXb3JrZmxvd1ZlcnNpb25QYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIFdvcmtmbG93SWRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdXb3JrZmxvd1ZlcnNpb25QYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBXRlZlcnNpb25QYWdpbmdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuICAvL0VuZCBXb3JrRmxvdyB2ZXJzaW9uXHJcblxyXG4gIC8vU3RhcnQgV29ya2Zsb3cgVmFyaWFibGVzXHJcbiAgLy9Xb3JrZmxvdyBWYXJpYWJsZXMgY29udHJvbHNcclxuICBXb3JrZmxvd1ZhcmlhYmxlQXBpVXJsID0gXCIvYXBpL2FkbWluL1dvcmtmbG93VmFyaWFibGUvXCJcclxuICBXb3JrZmxvd1ZhcmlhYmxlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFdvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBXb3JrZmxvd1ZhcmlhYmxlVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIFZlcmlzb25JZFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIFZlcmlzb25JZFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBEYXRhVHlwZUxpc3QgPSBbXTtcclxuICBXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIFdvcmtmbG93VmFyaWFibGVQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ1dvcmtmbG93VmFyaWFibGVQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuICAvL0FkZCBNb2RlbCBDb250cm9sc1xyXG4gIEFkZFdvcmtmbG93VmFyaWFibGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIEFkZFdGVmFyaWFibGVOYW1lOiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucztcclxuICBBZGRXRlZhcmlhYmxlU3lzTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgQWRkV0ZWYXJpYWJsZURhdGFUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkV0ZWYXJpYWJsZUNvbnN0YW50OiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgLy9XRiB2YXJpYWJsZSBsb29rdXBzXHJcbiAgYWRkV0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIHNob3dBZGRMb29rdXBzVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhZGRMYXN0TG9va3VwSW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIC8vRWRpdCBNb2RlbCBDb250cm9sc1xyXG4gIEVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnM7XHJcbiAgRWRpdFdGVmFyaWFibGVOYW1lOiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0V0ZWYXJpYWJsZVN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXRXRlZhcmlhYmxlRGF0YVR5cGU6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0V0ZWYXJpYWJsZUNvbnN0YW50OiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgV29ya2Zsb3dWYXJpYWJsZUlkOiBhbnlcclxuICAvL1dGIHZhcmlhYmxlIGxvb2t1cHNcclxuICBlZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIHNob3dFZGl0TG9va3Vwc1RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZWRpdExhc3RMb29rdXBJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgLy9FbmQgV29ya2Zsb3cgVmFyaWFibGVcclxuXHJcbiAgLy9zdHJhdCBXb3JrZmxvdyBBY3Rpdml0eVxyXG4gIC8vV29ya2Zsb3cgQWN0aXZpdHkgQ29udHJvbHNcclxuICBBY3Rpdml0eUFwaVVybCA9IFwiL2FwaS9hZG1pbi9Xb3JrZmxvd0FjdGl2aXR5L1wiXHJcbiAgQWN0aXZpdHlUeXBlTGlzdCA9IFtdO1xyXG4gIHdvcmtmbG93QWN0aXZpdHlGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIEFjdGl2aXR5UGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIEFjdGl2aXR5UGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIElzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ0FjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgQWN0aXZpdHlQYWdpbmdWaWV3RWxlbWVudDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG4gIC8vQWRkIFdGIHZhcmlhYmxlcyB0byBhY3Rpdml0eSBjb250cm9sc1xyXG4gIGFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnM7XHJcbiAgYWN0aXZpdHlJRDogc3RyaW5nO1xyXG4gIGFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgbGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIGFjdGl2aXR5VmFyaWFibGVzTGlzdCA9IFtdO1xyXG4gIC8vRW5kIFdvcmtmbG93IEFjdGl2aXR5XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBXb3JrZmxvd1NlcnZpY2U6IFdvcmtmbG93U2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIFdvcmtmbG93VmFyaWFibGVzU2VydmljZTogV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3b3JrZmxvd0FjdGl2aXR5U2VydmljZTogV29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UsIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsIHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZSkge1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgIHRoaXMuV29ya2Zsb3dJZCA9IHBhcmFtc1snaWQnXTtcclxuICAgICAgdGhpcy5WZXJzaW9uSWQgPSBwYXJhbXNbJ3ZpZCddO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMuZ2V0RGV0YWlscygpO1xyXG5cclxuICB9XHJcblxyXG4gIC8vV0YgZnVuY3Rpb25zXHJcbiAgZ2V0RGV0YWlscygpIHtcclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1NlcnZpY2UuZ2V0RGV0YWlscyh0aGlzLldvcmtmbG93SWQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuV29ya2Zsb3dEZXRhaWxzID0gcmVzdWx0IGFzIGFueVxyXG5cclxuICAgICAgdmFyIE5hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBOYW1lLkFyYWJpYyA9IHRoaXMuV29ya2Zsb3dEZXRhaWxzLm5hbWUuYXJhYmljO1xyXG4gICAgICBOYW1lLkVuZ2xpc2ggPSB0aGlzLldvcmtmbG93RGV0YWlscy5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICB0aGlzLlBhZ2V0aXRsZSA9IHRoaXMuV29ya2Zsb3dEZXRhaWxzLm5hbWVTdHJcclxuXHJcblxyXG4gICAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZVRpdGxlID0gdGhpcy5QYWdldGl0bGVcclxuICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93c1wiKSwgcGF0aDogJy9BZG1pbi9Xb3JrZmxvd3Mvd29ya2Zsb3cnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuXHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3ggPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5BcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCJcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5FbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIlxyXG4gICAgICB0aGlzLk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94LklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94Lk5hbWUgPSBcIk5hbWVcIjtcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5WYWx1ZSA9IE5hbWU7XHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3guSXNEaXNhYmxlZCA9IHRydWVcclxuXHJcblxyXG4gICAgICB2YXIgRGVzY3JpcHRpb24gPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBEZXNjcmlwdGlvbi5BcmFiaWMgPSB0aGlzLldvcmtmbG93RGV0YWlscy5kZXNjcmlwdGlvbi5hcmFiaWM7XHJcbiAgICAgIERlc2NyaXB0aW9uLkVuZ2xpc2ggPSB0aGlzLldvcmtmbG93RGV0YWlscy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveCA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5BcmFiaWNMYWJlbEtleSA9IFwiRGVzY3JpcHRpb25JbkFyYWJpY1wiXHJcbiAgICAgIHRoaXMuRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94LkVuZ2xpc2hMYWJlbEtleSA9IFwiRGVzY3JpcHRpb25JbkVuZ2xpc2hcIlxyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3guTmFtZSA9IFwiRGVzY3JpcHRpb25cIjtcclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3guVmFsdWUgPSBEZXNjcmlwdGlvbjtcclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3guSXNEaXNhYmxlZCA9IHRydWVcclxuXHJcbiAgICAgIHRoaXMuU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLlN5c05hbWUuTmFtZSA9IFwiU3lzTmFtZVwiXHJcbiAgICAgIHRoaXMuU3lzTmFtZS5MYWJlbEtleSA9IFwiU3lzTmFtZVwiXHJcbiAgICAgIHRoaXMuU3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5TeXNOYW1lLklzRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgIHRoaXMuU3lzTmFtZS5WYWx1ZSA9IHRoaXMuV29ya2Zsb3dEZXRhaWxzLnN5c05hbWVcclxuXHJcbiAgICAgIHRoaXMuQWN0aXZlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWN0aXZlLk5hbWUgPSBcIkFjdGl2ZVwiXHJcbiAgICAgIHRoaXMuQWN0aXZlLkxhYmVsS2V5ID0gXCJBY3RpdmVcIlxyXG4gICAgICB0aGlzLkFjdGl2ZS5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5BY3RpdmUuSXNEaXNhYmxlZCA9IHRydWVcclxuICAgICAgdGhpcy5BY3RpdmUuVmFsdWUgPSB0aGlzLldvcmtmbG93RGV0YWlscy5pc0FjdGl2ZVxyXG5cclxuICAgICAgdGhpcy5QdWJsaXNoZWQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5QdWJsaXNoZWQuTmFtZSA9IFwiUHVibGlzaGVkXCJcclxuICAgICAgdGhpcy5QdWJsaXNoZWQuTGFiZWxLZXkgPSBcIlB1Ymxpc2hlZFwiXHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgICB0aGlzLlB1Ymxpc2hlZC5Jc0Rpc2FibGVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLlB1Ymxpc2hlZC5WYWx1ZSA9IHRoaXMuV29ya2Zsb3dEZXRhaWxzLmlzUHVibGlzaGVkXHJcblxyXG4gICAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gZmFsc2VcclxuICAgICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IHRydWU7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vRGVsZXRlIHByb3ZpZGVyXHJcbiAgc2hvd1B1Ymxpc2hXRk1vZGFsKGlkOiBzdHJpbmcpIHtcclxuXHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2goaWQpO1xyXG5cclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucyA9IG5ldyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMoKTtcclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLnB1Ymxpc2hXb3JrRmxvdztcclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0TW9kZWwgPSBwYXJhbUFycmF5O1xyXG4gICAgdGhpcy5wdWJsaXNoV0ZDb25maXJtYXRpb25PcHRpb25zLkNvbmZpcm1hdGlvbkhlYWRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hXb3JrRmZsb3dcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuQ29uZmlybWF0aW9uQm9keSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hXb3JrRmZsb3dDb25maXJtYXRpb25cIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuU3VibWl0QnV0dG9uVGV4dCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuU3VjY2Vzc05vdGlmaWNhdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQdWJsaXNoZWRTdWNjZXNzZnVsbHlcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuT25TdWNjZXNzSGFuZGxlciA9IHRoaXMucHVibGlzaFdvcmtGbG93T25TdWNjZXNzO1xyXG5cclxuICAgIHRoaXMucHVibGlzaENvbnRyb2xMb2FkZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucHVibGlzaENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbC5zaG93TW9kYWwoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG4gIHB1Ymxpc2hXb3JrRmxvdyA9IChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLldvcmtmbG93U2VydmljZS5wdWJsaXNoV29ya0Zsb3coaWQpO1xyXG4gIH1cclxuICBwdWJsaXNoV29ya0Zsb3dPblN1Y2Nlc3MgPSAocmVzdWx0KSA9PiB7XHJcbiAgICB0aGlzLldvcmtmbG93RGV0YWlscy5pc1B1Ymxpc2hlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvL1dGIHZlcnNpb24gZnVuY3Rpb25zXHJcbiAgaW5pdGlhbGl6ZVZlcnNpb24oKSB7XHJcbiAgICB0aGlzLlNob3dXb3JrZmxvd0RldGFpbHMgPSBmYWxzZTtcclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICAvLyBUZXh0Qm94IGludGlcclxuXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5OYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0lkVGV4dEJveC5OYW1lID0gXCJXb3JrZmxvd0lkVGV4dEJveFwiXHJcbiAgICB0aGlzLldvcmtmbG93SWRUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLldvcmtmbG93SWRUZXh0Qm94LlZhbHVlID0gdGhpcy5Xb3JrZmxvd0lkXHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuV29ya2Zsb3dJZEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcIldvcmtmbG93SWRUZXh0Qm94XCJcclxuICAgIHRoaXMuV29ya2Zsb3dJZEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJXZklEXCJcclxuICAgIHRoaXMuV29ya2Zsb3dJZEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy5Xb3JrRmxvd1ZlcnNpb25BcGlVcmwgKyAnR2V0VmVyc2lvbnNMaXN0aW5nJztcclxuICAgIHRoaXMuV29ya2Zsb3dWZXJzaW9uUGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiLCBcIldvcmtmbG93SWRUZXh0Qm94XCJdXHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZy5GaWx0ZXJzID0gW3RoaXMuVGV4dElucHV0RmlsdGVyLCB0aGlzLldvcmtmbG93SWRGaWx0ZXJdXHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZy5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcblxyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG4gIHNldFdvcmtmbG93VmVyc2lvbkxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG5cclxuICB9XHJcblxyXG4gIC8vV0YgdmFyaWFibGVzIEZ1bmN0aW9uc1xyXG4gIHNldFdvcmtmbG93VmFyaWFibGVMaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nUmVzdWx0ID0gcmVzdWx0XHJcbiAgfVxyXG5cclxuICAvL2luaXRpYWxpemUgV0YgdmFyaWFibGVzIHBhZ2VcclxuICBpbml0aWFsaXplV29ya2Zsb3dWYXJpYWJsZXMoKSB7XHJcbiAgICAvLyBUZXh0Qm94IGluaXRcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3guTmFtZSA9IFwiV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3guUGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIilcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJXb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzZWFyY2hUZXh0XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRCb3guTmFtZSA9IFwiVmVyaXNvbklkVGV4dEJveFwiXHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0Qm94LlZhbHVlID0gdGhpcy5Xb3JrZmxvd0lkXHJcblxyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJWZXJpc29uSWRUZXh0Qm94XCJcclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInZlcnNpb25JRFwiXHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveFxyXG5cclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuV29ya2Zsb3dWYXJpYWJsZUFwaVVybCArICdHZXRWYXJpYWJsZUxpc3RpbmcnO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wiV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3hcIiwgXCJWZXJpc29uSWRUZXh0Qm94XCJdXHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmcuRmlsdGVycyA9IFt0aGlzLlRleHRJbnB1dEZpbHRlciwgdGhpcy5WZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXJdXHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmcuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG5cclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZCA9IHRydWVcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIC8vQWRkLEVkaXQgV0YgdmFyaWFibGUgc2hhcmVkIGZ1bmN0aW9uc1xyXG4gIFdGVmFyaWFibGVUeXBlT25DaGFuZ2UodHlwZTogc3RyaW5nLCBpc0FkZDogYm9vbGVhbikge1xyXG4gICAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChpc0FkZCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYWRkTGFzdExvb2t1cEluZGV4OyBpKyspIHtcclxuICAgICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJBZGRMb29rdXBOYW1lRU5cIiArIGkpO1xyXG4gICAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkFkZExvb2t1cE5hbWVBUlwiICsgaSk7XHJcbiAgICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKFwiTG9va3VwVmFsdWVcIiArIGkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWRkV0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuYWRkTGFzdExvb2t1cEluZGV4ID0gMDtcclxuICAgICAgaWYgKHR5cGUgPT0gVmFyaWFibGVEYXRhVHlwZS5TaW5nbGVTZWxlY3Rpb24gfHwgdHlwZSA9PSBWYXJpYWJsZURhdGFUeXBlLk11bHRpU2VsZWN0aW9uKVxyXG4gICAgICAgIHRoaXMuc2hvd0FkZExvb2t1cHNUYWJsZSA9IHRydWU7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLnNob3dBZGRMb29rdXBzVGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJFZGl0TG9va3VwSURcIiArIGkpO1xyXG4gICAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJFZGl0TG9va3VwTmFtZUVOXCIgKyBpKTtcclxuICAgICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKFwiRWRpdExvb2t1cE5hbWVBUlwiICsgaSk7XHJcbiAgICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkVkaXRMb29rdXBWYWx1ZVwiICsgaSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuZWRpdExhc3RMb29rdXBJbmRleCA9IDA7XHJcbiAgICAgIGlmICh0eXBlID09IFZhcmlhYmxlRGF0YVR5cGUuU2luZ2xlU2VsZWN0aW9uIHx8IHR5cGUgPT0gVmFyaWFibGVEYXRhVHlwZS5NdWx0aVNlbGVjdGlvbilcclxuICAgICAgICB0aGlzLnNob3dFZGl0TG9va3Vwc1RhYmxlID0gdHJ1ZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuc2hvd0VkaXRMb29rdXBzVGFibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgaW5pdGlhbGl6ZVdGVmFyaWFibGVMb29rdXBPcHRpb25zKGlzQWRkOiBib29sZWFuKSB7XHJcbiAgICBsZXQgbG9va3VwT3B0aW9uczogYW55W10gPSBbXTtcclxuICAgIGxldCBvYmplY3RMb29rdXBPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IGFjdGlvbkluZGljYXRlOiBzdHJpbmc7XHJcbiAgICBsZXQgaW5kZXg6IG51bWJlcjtcclxuICAgIGlmIChpc0FkZCkge1xyXG4gICAgICBhY3Rpb25JbmRpY2F0ZSA9IFwiQWRkXCI7XHJcbiAgICAgIGluZGV4ID0gdGhpcy5hZGRMYXN0TG9va3VwSW5kZXg7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYWN0aW9uSW5kaWNhdGUgPSBcIkVkaXRcIjtcclxuICAgICAgaW5kZXggPSB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXg7XHJcbiAgICB9XHJcbiAgICAvL0ZvciBlZGl0IG9ubHlcclxuICAgIGxldCBsb29rdXBJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgbG9va3VwSUQuTmFtZSA9IGFjdGlvbkluZGljYXRlICsgXCJMb29rdXBJRFwiICsgaW5kZXg7XHJcbiAgICBsb29rdXBJRC5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgbG9va3VwSUQuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG5cclxuICAgIGxldCBsb29rdXBOYW1lRU4gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIGxvb2t1cE5hbWVFTi5OYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkxvb2t1cE5hbWVFTlwiICsgaW5kZXg7XHJcbiAgICBsb29rdXBOYW1lRU4uSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIGxvb2t1cE5hbWVFTi5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBsb29rdXBOYW1lRU4uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICBsb29rdXBOYW1lRU4uTWF4TGVuZ3RoID0gMjU1O1xyXG5cclxuICAgIGxldCBsb29rdXBOYW1lQVIgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIGxvb2t1cE5hbWVBUi5OYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkxvb2t1cE5hbWVBUlwiICsgaW5kZXg7XHJcbiAgICBsb29rdXBOYW1lQVIuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIGxvb2t1cE5hbWVBUi5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBsb29rdXBOYW1lQVIuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICBsb29rdXBOYW1lQVIuTWF4TGVuZ3RoID0gMjU1O1xyXG5cclxuICAgIGxldCBsb29rdXBWYWx1ZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgbG9va3VwVmFsdWUuTmFtZSA9IGFjdGlvbkluZGljYXRlICsgXCJMb29rdXBWYWx1ZVwiICsgaW5kZXg7XHJcbiAgICBsb29rdXBWYWx1ZS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgbG9va3VwVmFsdWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgbG9va3VwVmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICBsb29rdXBWYWx1ZS5NYXhMZW5ndGggPSAyMDAwO1xyXG5cclxuICAgIGlmIChpc0FkZClcclxuICAgICAgb2JqZWN0TG9va3VwT3B0aW9ucy5wdXNoKGxvb2t1cE5hbWVFTiwgbG9va3VwTmFtZUFSLCBsb29rdXBWYWx1ZSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIG9iamVjdExvb2t1cE9wdGlvbnMucHVzaChsb29rdXBJRCwgbG9va3VwTmFtZUVOLCBsb29rdXBOYW1lQVIsIGxvb2t1cFZhbHVlKTtcclxuXHJcbiAgICBsb29rdXBPcHRpb25zLnB1c2gob2JqZWN0TG9va3VwT3B0aW9ucyk7XHJcblxyXG4gICAgaW5kZXggKz0gMTtcclxuICAgIHJldHVybiBbbG9va3VwT3B0aW9ucywgaW5kZXhdO1xyXG5cclxuICB9XHJcbiAgZGVsZXRlV0ZWYXJpYWJsZUxvb2t1cChkZWxldGVkTG9va3VwOiBhbnksIGlzQWRkOiBib29sZWFuKSB7XHJcbiAgICBpZiAoaXNBZGQpIHtcclxuICAgICAgbGV0IGRlbGV0ZWRMb29rdXBJbmRleDogbnVtYmVyID0gdGhpcy5hZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMuaW5kZXhPZihkZWxldGVkTG9va3VwKTtcclxuICAgICAgaWYgKGRlbGV0ZWRMb29rdXBJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLmFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5zcGxpY2UoZGVsZXRlZExvb2t1cEluZGV4LCAxKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRMb29rdXAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkTG9va3VwW2ldLk5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBkZWxldGVkTG9va3VwSW5kZXg6IG51bWJlciA9IHRoaXMuZWRpdFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5pbmRleE9mKGRlbGV0ZWRMb29rdXApO1xyXG4gICAgICBpZiAoZGVsZXRlZExvb2t1cEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuZWRpdFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5zcGxpY2UoZGVsZXRlZExvb2t1cEluZGV4LCAxKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRMb29rdXAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woZGVsZXRlZExvb2t1cFtpXS5OYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vQWRkIFdGIHZhcmlhYmxlXHJcbiAgc2hvd0FkZFdvcmtmbG93VmFyaWFibGVNb2RhbChBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVzU2VydmljZS5sb2FkQWRkRHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIHRoaXMuRGF0YVR5cGVMaXN0ID0gcmVzdWx0T2JqLmRhdGFUeXBlTGlzdDtcclxuXHJcbiAgICAgIHRoaXMuYWRkV0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuYWRkTGFzdExvb2t1cEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5zaG93QWRkTG9va3Vwc1RhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybVxyXG4gICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRXRlZhcmlhYmxlTW9kZWw7XHJcbiAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkV0ZWYXJpYWJsZUZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmdWaWV3RWxlbWVudFxyXG5cclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVOYW1lLk5hbWUgPSBcIk5hbWVcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZS5BcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZU5hbWUuRW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZU5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZU5hbWUuTWF4TGVuZ3RoID0gMjU1XHJcblxyXG5cclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVTeXNOYW1lLk5hbWUgPSBcIlN5c05hbWVcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZS5MYWJlbEtleSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVTeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZVN5c05hbWUuTWF4TGVuZ3RoID0gMTAwXHJcblxyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVEYXRhVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUuTmFtZSA9IFwiRGF0YVR5cGVJdGVtSURfR1VJRFwiXHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLkxhYmVsS2V5ID0gXCJEYXRhVHlwZVwiXHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLkRhdGFTb3VyY2UgPSB0aGlzLkRhdGFUeXBlTGlzdFxyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVEYXRhVHlwZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVEYXRhVHlwZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuXHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZUNvbnN0YW50ID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVDb25zdGFudC5OYW1lID0gXCJJc0NvbnN0YW50XCJcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlQ29uc3RhbnQuTGFiZWxLZXkgPSBcIkNvbnN0YW50XCJcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlQ29uc3RhbnQuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWxcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH1cclxuICBnZXRBZGRXRlZhcmlhYmxlTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgbGV0IGFkZE1vZGVsID0gbmV3IFdGVmFyaWFibGVNb2RlbCgpO1xyXG4gICAgYWRkTW9kZWwuTmFtZSA9IFJlc3VsdE1vZGVsLk5hbWVcclxuICAgIGFkZE1vZGVsLlN5c05hbWUgPSBSZXN1bHRNb2RlbC5TeXNOYW1lXHJcbiAgICBhZGRNb2RlbC5Xb3JrZmxvd1ZlcnNpb25JRF9HVUlEID0gdGhpcy5WZXJzaW9uSWRcclxuICAgIGFkZE1vZGVsLkRhdGFUeXBlSXRlbUlEX0dVSUQgPSBSZXN1bHRNb2RlbC5EYXRhVHlwZUl0ZW1JRF9HVUlEXHJcbiAgICBhZGRNb2RlbC5Jc0NvbnN0YW50ID0gUmVzdWx0TW9kZWwuSXNDb25zdGFudFxyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXg7IGorKykge1xyXG4gICAgICBsZXQgYWRkTG9va3VwTmFtZUVOID0gUmVzdWx0TW9kZWxbXCJBZGRMb29rdXBOYW1lRU5cIiArIGpdO1xyXG4gICAgICBpZiAoYWRkTG9va3VwTmFtZUVOID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBhZGRMb29rdXBOYW1lQVIgPSBSZXN1bHRNb2RlbFtcIkFkZExvb2t1cE5hbWVBUlwiICsgal07XHJcbiAgICAgIGxldCBhZGRMb29rdXBWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiQWRkTG9va3VwVmFsdWVcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cDogVmFyaWFibGVMb29rdXBNb2RlbCA9IG5ldyBWYXJpYWJsZUxvb2t1cE1vZGVsKCk7XHJcbiAgICAgIGxvb2t1cC5OYW1lRU4gPSBhZGRMb29rdXBOYW1lRU47XHJcbiAgICAgIGxvb2t1cC5OYW1lQVIgPSBhZGRMb29rdXBOYW1lQVI7XHJcbiAgICAgIGxvb2t1cC5WYWx1ZSA9IGFkZExvb2t1cFZhbHVlO1xyXG4gICAgICBhZGRNb2RlbC52YXJpYWJsZUxvb2t1cERUT3MucHVzaChsb29rdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChhZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcbiAgZ2V0QWRkV0ZWYXJpYWJsZUZ1bmN0aW9uID0gKEFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLldvcmtmbG93VmFyaWFibGVzU2VydmljZS5hZGRWYXJpYWJsZShBZGRNb2RlbClcclxuICB9XHJcbiAgYWRkV0ZWYXJpYWJsZUxvb2t1cGluQWRkTW9kZSgpIHtcclxuICAgIGxldCByZXN1bHQ6IGFueSA9IHRoaXMuaW5pdGlhbGl6ZVdGVmFyaWFibGVMb29rdXBPcHRpb25zKHRydWUpO1xyXG4gICAgdGhpcy5hZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSB0aGlzLmFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5jb25jYXQocmVzdWx0WzBdKTtcclxuICAgIHRoaXMuYWRkTGFzdExvb2t1cEluZGV4ID0gcmVzdWx0WzFdO1xyXG4gIH1cclxuXHJcbiAgLy9FZGl0IFdGIHZhcmlhYmxlXHJcbiAgc2hvd0VkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoV0ZWYXJpYWJsZUlEOiBzdHJpbmcsIEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVJZCA9IFdGVmFyaWFibGVJRDtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLmdldEVkaXRXb3JrRmxvd1ZhcmlhYmxlRGF0YShXRlZhcmlhYmxlSUQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgd29ya2Zsb3dWYXJpYWJsZSA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgd29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRF9HVUlEID0gd29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBsZXQgbGlzdHMgPSByZXN1bHRPYmoubGlzdHM7XHJcbiAgICAgIHRoaXMuRGF0YVR5cGVMaXN0ID0gbGlzdHMuZGF0YVR5cGVMaXN0O1xyXG5cclxuICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuZWRpdExhc3RMb29rdXBJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuc2hvd0VkaXRMb29rdXBzVGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVxyXG4gICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFdGVmFyaWFibGVNb2RlbDtcclxuICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFdGVmFyaWFibGVGdW5jdGlvbjtcclxuICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1ZpZXdFbGVtZW50XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5QYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGU7XHJcblxyXG4gICAgICBsZXQgbmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIG5hbWUuQXJhYmljID0gd29ya2Zsb3dWYXJpYWJsZS5uYW1lLmFyYWJpYztcclxuICAgICAgbmFtZS5FbmdsaXNoID0gd29ya2Zsb3dWYXJpYWJsZS5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZS5OYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZU5hbWUuRW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZS5WYWx1ZSA9IG5hbWU7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLk1heExlbmd0aCA9IDI1NTtcclxuXHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlU3lzTmFtZS5OYW1lID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLkxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZVN5c05hbWUuVmFsdWUgPSB3b3JrZmxvd1ZhcmlhYmxlLnN5c05hbWU7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLk1heExlbmd0aCA9IDEwMDtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVEYXRhVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLk5hbWUgPSBcIkRhdGFUeXBlSXRlbUlEX0dVSURcIlxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlRGF0YVR5cGUuTGFiZWxLZXkgPSBcIkRhdGFUeXBlXCJcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLkRhdGFTb3VyY2UgPSB0aGlzLkRhdGFUeXBlTGlzdFxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlRGF0YVR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLlNlbGVjdGVkSXRlbXMgPSB3b3JrZmxvd1ZhcmlhYmxlLmRhdGFUeXBlSXRlbUlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlQ29uc3RhbnQgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVDb25zdGFudC5OYW1lID0gXCJJc0NvbnN0YW50XCJcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZUNvbnN0YW50LkxhYmVsS2V5ID0gXCJDb25zdGFudFwiXHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVDb25zdGFudC5WYWx1ZSA9IHdvcmtmbG93VmFyaWFibGUuaXNDb25zdGFudFxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlQ29uc3RhbnQuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWxcclxuXHJcblxyXG4gICAgICBpZiAod29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRF9HVUlEID09IFZhcmlhYmxlRGF0YVR5cGUuU2luZ2xlU2VsZWN0aW9uIHx8IHdvcmtmbG93VmFyaWFibGUuZGF0YVR5cGVJdGVtSURfR1VJRCA9PSBWYXJpYWJsZURhdGFUeXBlLk11bHRpU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgLy9TZXQgTG9va3VwIENvbnRyb2xzXHJcbiAgICAgICAgdGhpcy5zZXRFZGl0VmFyaWFibGVMb29rdXBzKHdvcmtmbG93VmFyaWFibGUudmFyaWFibGVMb29rdXBEVE9zKTtcclxuICAgICAgICB0aGlzLnNob3dFZGl0TG9va3Vwc1RhYmxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldEVkaXRXRlZhcmlhYmxlTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBFZGl0TW9kZWwgPSBuZXcgV0ZWYXJpYWJsZU1vZGVsKCk7XHJcbiAgICBFZGl0TW9kZWwuSURfR1VJRCA9IHRoaXMuV29ya2Zsb3dWYXJpYWJsZUlkO1xyXG4gICAgRWRpdE1vZGVsLk5hbWUgPSBSZXN1bHRNb2RlbC5OYW1lXHJcbiAgICBFZGl0TW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLlN5c05hbWVcclxuICAgIEVkaXRNb2RlbC5Xb3JrZmxvd1ZlcnNpb25JRF9HVUlEID0gdGhpcy5WZXJzaW9uSWQ7XHJcbiAgICBFZGl0TW9kZWwuRGF0YVR5cGVJdGVtSURfR1VJRCA9IFJlc3VsdE1vZGVsLkRhdGFUeXBlSXRlbUlEX0dVSURcclxuICAgIEVkaXRNb2RlbC5Jc0NvbnN0YW50ID0gUmVzdWx0TW9kZWwuSXNDb25zdGFudFxyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5lZGl0TGFzdExvb2t1cEluZGV4OyBqKyspIHtcclxuICAgICAgbGV0IGVkaXRMb29rdXBJRCA9IFJlc3VsdE1vZGVsW1wiRWRpdExvb2t1cElEXCIgKyBqXTtcclxuICAgICAgaWYgKGVkaXRMb29rdXBJRCA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICBsZXQgZWRpdExvb2t1cE5hbWVFTiA9IFJlc3VsdE1vZGVsW1wiRWRpdExvb2t1cE5hbWVFTlwiICsgal07XHJcbiAgICAgIGxldCBlZGl0TG9va3VwTmFtZUFSID0gUmVzdWx0TW9kZWxbXCJFZGl0TG9va3VwTmFtZUFSXCIgKyBqXTtcclxuICAgICAgbGV0IGVkaXRMb29rdXBWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiRWRpdExvb2t1cFZhbHVlXCIgKyBqXTtcclxuXHJcbiAgICAgIGxldCBsb29rdXA6IFZhcmlhYmxlTG9va3VwTW9kZWwgPSBuZXcgVmFyaWFibGVMb29rdXBNb2RlbCgpO1xyXG4gICAgICBsb29rdXAuSURfR1VJRCA9IGVkaXRMb29rdXBJRDtcclxuICAgICAgbG9va3VwLk5hbWVFTiA9IGVkaXRMb29rdXBOYW1lRU47XHJcbiAgICAgIGxvb2t1cC5OYW1lQVIgPSBlZGl0TG9va3VwTmFtZUFSO1xyXG4gICAgICBsb29rdXAuVmFsdWUgPSBlZGl0TG9va3VwVmFsdWU7XHJcbiAgICAgIEVkaXRNb2RlbC52YXJpYWJsZUxvb2t1cERUT3MucHVzaChsb29rdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChFZGl0TW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG4gIGdldEVkaXRXRlZhcmlhYmxlRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLldvcmtmbG93VmFyaWFibGVzU2VydmljZS5lZGl0VmFyaWFibGUoRWRpdE1vZGVsKVxyXG4gIH1cclxuICBzZXRFZGl0VmFyaWFibGVMb29rdXBzKGV4aXN0aW5nTG9va3VwczogYW55W10pIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhpc3RpbmdMb29rdXBzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICBsZXQgb2JqZWN0QXR0cmlidXRlT3B0aW9uczogYW55W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBsb29rdXBJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBsb29rdXBJRC5OYW1lID0gXCJFZGl0TG9va3VwSURcIiArIGk7XHJcbiAgICAgIGxvb2t1cElELkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIGxvb2t1cElELlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgbG9va3VwSUQuVmFsdWUgPSBleGlzdGluZ0xvb2t1cHNbaV0uaURfR1VJRDtcclxuXHJcbiAgICAgIGxldCBsb29rdXBOYW1lRU4gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgbG9va3VwTmFtZUVOLk5hbWUgPSBcIkVkaXRMb29rdXBOYW1lRU5cIiArIGk7XHJcbiAgICAgIGxvb2t1cE5hbWVFTi5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBsb29rdXBOYW1lRU4uVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICBsb29rdXBOYW1lRU4uVmFsdWUgPSBleGlzdGluZ0xvb2t1cHNbaV0ubmFtZUVOO1xyXG4gICAgICBsb29rdXBOYW1lRU4uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIGxvb2t1cE5hbWVFTi5NYXhMZW5ndGggPSAyNTU7XHJcblxyXG5cclxuICAgICAgbGV0IGxvb2t1cE5hbWVBUiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBsb29rdXBOYW1lQVIuTmFtZSA9IFwiRWRpdExvb2t1cE5hbWVBUlwiICsgaTtcclxuICAgICAgbG9va3VwTmFtZUFSLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIGxvb2t1cE5hbWVBUi5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIGxvb2t1cE5hbWVBUi5WYWx1ZSA9IGV4aXN0aW5nTG9va3Vwc1tpXS5uYW1lQVI7XHJcbiAgICAgIGxvb2t1cE5hbWVBUi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgbG9va3VwTmFtZUFSLkZvcmNlRGlyZWN0aW9uID0gRm9yY2VEaXJlY3Rpb24uQXJhYmljO1xyXG4gICAgICBsb29rdXBOYW1lQVIuTWF4TGVuZ3RoID0gMjU1O1xyXG5cclxuICAgICAgbGV0IGxvb2t1cFZhbHVlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIGxvb2t1cFZhbHVlLk5hbWUgPSBcIkVkaXRMb29rdXBWYWx1ZVwiICsgaTtcclxuICAgICAgbG9va3VwVmFsdWUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgbG9va3VwVmFsdWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICBsb29rdXBWYWx1ZS5WYWx1ZSA9IGV4aXN0aW5nTG9va3Vwc1tpXS52YWx1ZTtcclxuICAgICAgbG9va3VwVmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIGxvb2t1cFZhbHVlLk1heExlbmd0aCA9IDIwMDA7XHJcblxyXG4gICAgICBvYmplY3RBdHRyaWJ1dGVPcHRpb25zLnB1c2gobG9va3VwSUQsIGxvb2t1cE5hbWVFTiwgbG9va3VwTmFtZUFSLCBsb29rdXBWYWx1ZSk7XHJcbiAgICAgIHRoaXMuZWRpdFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5wdXNoKG9iamVjdEF0dHJpYnV0ZU9wdGlvbnMpO1xyXG4gICAgICB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXggKz0gMTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG4gIGFkZFdGVmFyaWFibGVMb29rdXBpbkVkaXRNb2RlKCkge1xyXG4gICAgbGV0IHJlc3VsdDogYW55ID0gdGhpcy5pbml0aWFsaXplV0ZWYXJpYWJsZUxvb2t1cE9wdGlvbnMoZmFsc2UpO1xyXG4gICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLmNvbmNhdChyZXN1bHRbMF0pO1xyXG4gICAgdGhpcy5lZGl0TGFzdExvb2t1cEluZGV4ID0gcmVzdWx0WzFdO1xyXG4gIH1cclxuXHJcbiAgLy9XRiBBY3Rpdml0aXRpZXMgRnVuY3Rpb25zXHJcbiAgc2V0QWN0aXZpdHlMaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy5BY3Rpdml0eVBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVdvcmtmbG93QWN0aXZpdHkoKSB7XHJcbiAgICAvLyB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3guTmFtZSA9IFwiV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveFwiXHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94LlZhbHVlID0gdGhpcy5Xb3JrZmxvd0lkXHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJXb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94XCJcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcIldmSURcIlxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLkFjdGl2aXR5UGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuQWN0aXZpdHlQYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuQWN0aXZpdHlBcGlVcmwgKyAnR2V0V29ya2Zsb3dBY3Rpdml0eUxpc3RpbmcnO1xyXG4gICAgdGhpcy5BY3Rpdml0eVBhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIl1cclxuICAgIHRoaXMuQWN0aXZpdHlQYWdpbmcuRmlsdGVycyA9IFt0aGlzLldvcmtmbG93QWN0aXZpdHlJZEZpbHRlcl1cclxuICAgIHRoaXMuQWN0aXZpdHlQYWdpbmcuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG5cclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZCA9IGZhbHNlXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgIH0sIDEwKTtcclxuXHJcbiAgICAvL3RoaXMud29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UuTG9hZGRyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAvLyAgbGV0IEFjdGl2aXR5TGlzdCA9IHJlc3VsdCBhcyBhbnlcclxuICAgIC8vICB0aGlzLkFjdGl2aXR5VHlwZUxpc3QgPSBBY3Rpdml0eUxpc3RcclxuXHJcblxyXG4gICAgLy99KVxyXG4gIH1cclxuXHJcbiAgLy9BZGQgQWN0aXZpdHkgV0YgdmFyaWFibGVzXHJcbiAgc2hvd0FkZFdGVmFyaWFibGVzdG9BY3Rpdml0eSh2ZXJzaW9uSUQ6IHN0cmluZywgYWN0aXZpdHlJRDogc3RyaW5nLCB3ZlZhcmlhYmxlc01vZGFsOiBhbnkpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLmFjdGl2aXR5SUQgPSBhY3Rpdml0eUlEO1xyXG4gICAgdGhpcy5hY3Rpdml0eVdGVmFyaWFibGVPcHRpb25zID0gW107XHJcbiAgICB0aGlzLmxhc3RBY3Rpdml0eVdGVmFyaWFibGVJbmRleCA9IDA7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLmdldEFjdGl2aXR5V0ZWYXJpYWJsZXModmVyc2lvbklELCBhY3Rpdml0eUlEKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0T2JqID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgbGV0IG1vZGVsID0gcmVzdWx0T2JqLm1vZGVsO1xyXG4gICAgICB0aGlzLmFjdGl2aXR5VmFyaWFibGVzTGlzdCA9IHJlc3VsdE9iai5hY3Rpdml0eVZhcmlhYmxlc0xpc3Q7XHJcblxyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cclxuICAgICAgdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldGFkZFdGVmFyaWFibGV0b0FjdGl2aXR5TW9kZWw7XHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldGFkZFdGVmFyaWFibGV0b0FjdGl2aXR5RnVuY3Rpb247XHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLkFjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQ7XHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucy5QYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGU7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZGVsLmFjdGl2aXR5VmFyaWFibGVEVE9zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRWYXJpYWJsZSA9IG1vZGVsLmFjdGl2aXR5VmFyaWFibGVEVE9zW2ldO1xyXG4gICAgICAgIGxldCBvYmplY3RWYXJpYWJsZU9wdGlvbnM6IGFueVtdID0gW107XHJcblxyXG4gICAgICAgIGxldCBpc1N5c3RlbTogYm9vbGVhbiA9IGN1cnJlbnRWYXJpYWJsZS5pc1N5c3RlbTtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNTeXN0ZW0gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTsvL2hpZGRlblxyXG4gICAgICAgIHZhcmlhYmxlSXNTeXN0ZW0uTmFtZSA9IFwidmFyaWFibGVJc1N5c3RlbVwiICsgaTtcclxuICAgICAgICB2YXJpYWJsZUlzU3lzdGVtLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgICAgdmFyaWFibGVJc1N5c3RlbS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgdmFyaWFibGVJc1N5c3RlbS5WYWx1ZSA9IGlzU3lzdGVtO1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFibGVJc0VuYWJsZWQgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdmFyaWFibGVJc0VuYWJsZWQuTmFtZSA9IFwidmFyaWFibGVJc0VuYWJsZWRcIiArIGk7XHJcbiAgICAgICAgdmFyaWFibGVJc0VuYWJsZWQuVmFsdWUgPSBjdXJyZW50VmFyaWFibGUuaXNFbmFibGVkO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkLklzRGlzYWJsZWQgPSBpc1N5c3RlbTtcclxuXHJcbiAgICAgICAgLy9oaWRkZW4gZmllbGRcclxuICAgICAgICBsZXQgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4uTmFtZSA9IFwidmFyaWFibGVJc0VuYWJsZWRIaWRkZW5cIiArIGk7XHJcbiAgICAgICAgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4uVmFsdWUgPSBjdXJyZW50VmFyaWFibGUuaXNFbmFibGVkO1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFibGVJc01hbmRhdG9yeSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB2YXJpYWJsZUlzTWFuZGF0b3J5Lk5hbWUgPSBcInZhcmlhYmxlSXNNYW5kYXRvcnlcIiArIGk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeS5WYWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pc01hbmRhdG9yeTtcclxuICAgICAgICB2YXJpYWJsZUlzTWFuZGF0b3J5LklzRGlzYWJsZWQgPSBpc1N5c3RlbTtcclxuXHJcbiAgICAgICAgLy9oaWRkZW4gZmllbGRcclxuICAgICAgICBsZXQgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbiA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuLk5hbWUgPSBcInZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW5cIiArIGk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbi5WYWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pc01hbmRhdG9yeTtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNWaXNpYmxlID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlLk5hbWUgPSBcInZhcmlhYmxlSXNWaXNpYmxlXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlLlZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlzVmlzaWJsZTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZS5Jc0Rpc2FibGVkID0gaXNTeXN0ZW07XHJcblxyXG4gICAgICAgIC8vaGlkZGVuIGZpZWxkXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuLk5hbWUgPSBcInZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuLlZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlzVmlzaWJsZTtcclxuXHJcbiAgICAgICAgb2JqZWN0VmFyaWFibGVPcHRpb25zLnB1c2godmFyaWFibGVJc1N5c3RlbSwgdmFyaWFibGVJc0VuYWJsZWQsIHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuLCB2YXJpYWJsZUlzTWFuZGF0b3J5LCB2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuLFxyXG4gICAgICAgICAgdmFyaWFibGVJc1Zpc2libGUsIHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuLCBpc1N5c3RlbSk7XHJcblxyXG4gICAgICAgIGlmIChpc1N5c3RlbSkge1xyXG4gICAgICAgICAgbGV0IHZhcmlhYmxlTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgdmFyaWFibGVOYW1lLk5hbWUgPSBcInZhcmlhYmxlTmFtZVwiICsgaTtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVOYW1lLklzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS5WYWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS52YXJpYWJsZU5hbWU7XHJcblxyXG4gICAgICAgICAgbGV0IHZhcmlhYmxlSUQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTsvL2hpZGRlblxyXG4gICAgICAgICAgdmFyaWFibGVJRC5OYW1lID0gXCJ2YXJpYWJsZUlEXCIgKyBpO1xyXG4gICAgICAgICAgdmFyaWFibGVJRC5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVJRC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICB2YXJpYWJsZUlELlZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgb2JqZWN0VmFyaWFibGVPcHRpb25zLnB1c2godmFyaWFibGVOYW1lLCB2YXJpYWJsZUlEKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHZhcmlhYmxlSURkcm9wZG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5OYW1lID0gXCJ2YXJpYWJsZUlEZHJvcGRvd25cIjtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVJRGRyb3Bkb3duLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB2YXJpYWJsZUlEZHJvcGRvd24uQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVJRGRyb3Bkb3duLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVJRGRyb3Bkb3duLkRhdGFTb3VyY2UgPSB0aGlzLmFjdGl2aXR5VmFyaWFibGVzTGlzdDtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5TZWxlY3RlZEl0ZW1zID0gY3VycmVudFZhcmlhYmxlLmlER1VJRD8udG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICBvYmplY3RWYXJpYWJsZU9wdGlvbnMucHVzaCh2YXJpYWJsZUlEZHJvcGRvd24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMucHVzaChvYmplY3RWYXJpYWJsZU9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMubGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4ICs9IDE7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4od2ZWYXJpYWJsZXNNb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0YWRkV0ZWYXJpYWJsZXRvQWN0aXZpdHlNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm0udmFsdWU7XHJcbiAgICBsZXQgbW9kZWwgPSBuZXcgV0ZBY3Rpdml0eVZhcmlhYmxlc01vZGVsKCk7XHJcbiAgICBtb2RlbC5BY3Rpdml0eUlEX0dVSUQgPSB0aGlzLmFjdGl2aXR5SUQ7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMubGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4OyBqKyspIHtcclxuICAgICAgbGV0IHZhcmlhYmxlc0lzU3lzdGVtID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzU3lzdGVtXCIgKyBqXTtcclxuICAgICAgaWYgKHZhcmlhYmxlc0lzU3lzdGVtID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCB2YXJpYWJsZUlzRW5hYmxlZDogYm9vbGVhbjtcclxuICAgICAgbGV0IHZhcmlhYmxlSXNNYW5kYXRvcnk6IGJvb2xlYW47XHJcbiAgICAgIGxldCB2YXJpYWJsZUlzVmlzaWJsZTogYm9vbGVhbjtcclxuXHJcbiAgICAgIGxldCBhY3Rpdml0eVZhcmlhYmxlOiBXRkFjdGl2aXR5VmFyaWFibGVEVE8gPSBuZXcgV0ZBY3Rpdml0eVZhcmlhYmxlRFRPKCk7XHJcblxyXG4gICAgICBpZiAodmFyaWFibGVzSXNTeXN0ZW0pIHtcclxuICAgICAgICBsZXQgdmFyaWFibGVJRCA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJRFwiICsgal07XHJcbiAgICAgICAgYWN0aXZpdHlWYXJpYWJsZS5JRF9HVUlEID0gdmFyaWFibGVJRDtcclxuXHJcbiAgICAgICAgdmFyaWFibGVJc0VuYWJsZWQgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSXNFbmFibGVkSGlkZGVuXCIgKyBqXTtcclxuICAgICAgICB2YXJpYWJsZUlzTWFuZGF0b3J5ID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuXCIgKyBqXTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZSA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc1Zpc2libGVIaWRkZW5cIiArIGpdO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCB2YXJpYWJsZUlEID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlEZHJvcGRvd25cIiArIGpdO1xyXG4gICAgICAgIGFjdGl2aXR5VmFyaWFibGUuSURfR1VJRCA9IHZhcmlhYmxlSUQ7XHJcblxyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzRW5hYmxlZFwiICsgal07XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeSA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc01hbmRhdG9yeVwiICsgal07XHJcbiAgICAgICAgdmFyaWFibGVJc1Zpc2libGUgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSXNWaXNpYmxlXCIgKyBqXTtcclxuICAgICAgfVxyXG4gICAgICBhY3Rpdml0eVZhcmlhYmxlLklzU3lzdGVtID0gdmFyaWFibGVzSXNTeXN0ZW07XHJcbiAgICAgIGFjdGl2aXR5VmFyaWFibGUuSXNFbmFibGVkID0gdmFyaWFibGVJc0VuYWJsZWQ7XHJcbiAgICAgIGFjdGl2aXR5VmFyaWFibGUuSXNNYW5kYXRvcnkgPSB2YXJpYWJsZUlzTWFuZGF0b3J5O1xyXG4gICAgICBhY3Rpdml0eVZhcmlhYmxlLklzVmlzaWJsZSA9IHZhcmlhYmxlSXNWaXNpYmxlO1xyXG4gICAgICBtb2RlbC5hY3Rpdml0eVZhcmlhYmxlRFRPcy5wdXNoKGFjdGl2aXR5VmFyaWFibGUpO1xyXG4gICAgfVxyXG4gICAgcGFyYW1BcnJheS5wdXNoKG1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuICBnZXRhZGRXRlZhcmlhYmxldG9BY3Rpdml0eUZ1bmN0aW9uID0gKHZhcmlhYmxlc01vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLndvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLmFkZEFjdGl2aXR5V0ZWYXJpYWJsZXModmFyaWFibGVzTW9kZWwpXHJcbiAgfVxyXG4gIGRlbGV0ZUFjdGl2aXR5V0ZWYXJpYWJsZShkZWxldGVkVmFyaWFibGU6IGFueSkge1xyXG4gICAgbGV0IGRlbGV0ZWRWYXJpYWJsZUluZGV4OiBudW1iZXIgPSB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMuaW5kZXhPZihkZWxldGVkVmFyaWFibGUpO1xyXG4gICAgaWYgKGRlbGV0ZWRWYXJpYWJsZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMuc3BsaWNlKGRlbGV0ZWRWYXJpYWJsZUluZGV4LCAxKTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVkVmFyaWFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKGRlbGV0ZWRWYXJpYWJsZVtpXS5OYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBhZGROZXdBY3Rpdml0eVdGVmFyaWFibGUoKSB7XHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLmxhc3RBY3Rpdml0eVdGVmFyaWFibGVJbmRleDtcclxuXHJcbiAgICBsZXQgb2JqZWN0VmFyaWFibGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGxldCB2YXJpYWJsZUlEZHJvcGRvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB2YXJpYWJsZUlEZHJvcGRvd24uTmFtZSA9IFwidmFyaWFibGVJRGRyb3Bkb3duXCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSURkcm9wZG93bi5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB2YXJpYWJsZUlEZHJvcGRvd24uQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLkRhdGFTb3VyY2UgPSB0aGlzLmFjdGl2aXR5VmFyaWFibGVzTGlzdDtcclxuXHJcbiAgICBsZXQgaXNTeXN0ZW06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc1N5c3RlbSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpOy8vaGlkZGVuXHJcbiAgICB2YXJpYWJsZUlzU3lzdGVtLk5hbWUgPSBcInZhcmlhYmxlSXNTeXN0ZW1cIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc1N5c3RlbS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJc1N5c3RlbS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB2YXJpYWJsZUlzU3lzdGVtLlZhbHVlID0gaXNTeXN0ZW07XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNFbmFibGVkID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc0VuYWJsZWQuTmFtZSA9IFwidmFyaWFibGVJc0VuYWJsZWRcIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc0VuYWJsZWQuVmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbi5OYW1lID0gXCJ2YXJpYWJsZUlzRW5hYmxlZEhpZGRlblwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbi5WYWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCB2YXJpYWJsZUlzTWFuZGF0b3J5ID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc01hbmRhdG9yeS5OYW1lID0gXCJ2YXJpYWJsZUlzTWFuZGF0b3J5XCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSXNNYW5kYXRvcnkuVmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbiA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4uTmFtZSA9IFwidmFyaWFibGVJc01hbmRhdG9yeUhpZGRlblwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuLlZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNWaXNpYmxlID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc1Zpc2libGUuTmFtZSA9IFwidmFyaWFibGVJc1Zpc2libGVcIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc1Zpc2libGUuVmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc1Zpc2libGVIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi5OYW1lID0gXCJ2YXJpYWJsZUlzVmlzaWJsZUhpZGRlblwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi5WYWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIG9iamVjdFZhcmlhYmxlT3B0aW9ucy5wdXNoKHZhcmlhYmxlSXNTeXN0ZW0sIHZhcmlhYmxlSXNFbmFibGVkLCB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbiwgdmFyaWFibGVJc01hbmRhdG9yeSwgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbixcclxuICAgICAgdmFyaWFibGVJc1Zpc2libGUsIHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuLCBpc1N5c3RlbSwgdmFyaWFibGVJRGRyb3Bkb3duKTtcclxuXHJcbiAgICB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMucHVzaChvYmplY3RWYXJpYWJsZU9wdGlvbnMpO1xyXG4gICAgdGhpcy5sYXN0QWN0aXZpdHlXRlZhcmlhYmxlSW5kZXggKz0gMTtcclxuICB9XHJcblxyXG4gIC8vT24gZGVzdHJveVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICA8dWwgbmdiTmF2ICNuYXY9XCJuZ2JOYXZcIiBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzIG5hdi1saW5lLXRhYnMtMnggYm9yZGVyLXRyYW5zcGFyZW50IGZzLTUgZnctYm9sZGVyXCI+XHJcbiAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1hY3RpdmUtcHJpbWFyeSBtcy0wIG1lLTEwIHB5LTVcIiAoY2xpY2spPVwiZ2V0RGV0YWlscygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGV0YWlsc1wiKX19PC9hPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTUgcHgtMCAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIlNob3dXb3JrZmxvd0RldGFpbHMmJiFXb3JrZmxvd0RldGFpbHMuaXNQdWJsaXNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnRuUHVibGlzaFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzaG93UHVibGlzaFdGTW9kYWwoV29ya2Zsb3dEZXRhaWxzLmlEX0dVSUQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHVibGlzaFdvcmtmbG93XCIpfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPGEgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHJldmlld1wiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvYT4tLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJEZXRhaWxzRm9ybVwiICpuZ0lmPVwiU2hvd1dvcmtmbG93RGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJOYW1lTXVsdGlsaW5ndWFsVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJEZXRhaWxzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlN5c05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiUHVibGlzaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJEZXRhaWxzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuXHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwhLS1QdWJsaXNoIHdvcmtmbG93IGNvbmZpcm1hdGlvbi0tPlxyXG4gICAgICAgICAgPEJCU0YtQ29uZmlybWF0aW9uTW9kYWwgKm5nSWY9XCJwdWJsaXNoQ29udHJvbExvYWRlZFwiIFtvcHRpb25zXT1cInB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnNcIiBpZD1cInB1Ymxpc2hDb25maXJtYXRpb25Nb2RhbENvbnRyb2xcIiAjcHVibGlzaENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbD48L0JCU0YtQ29uZmlybWF0aW9uTW9kYWw+XHJcblxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1hY3RpdmUtcHJpbWFyeSBtcy0wIG1lLTEwIHB5LTVcIiAoY2xpY2spPVwiaW5pdGlhbGl6ZVZlcnNpb24oKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZlcnNpb25zXCIpfX08L2E+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJXb3JrZmxvd1ZlcnNpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJzZWFyY2hUZXh0Qm94XCIgW2dyb3VwXT1cIldvcmtmbG93VmVyc2lvbkZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIldvcmtmbG93SWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJXb3JrZmxvd1ZlcnNpb25Gb3JtXCIgW2hpZGRlbl09XCJ0cnVlXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tYmVnaW46OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDaGFuZ2VcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ3VycmVudFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQdWJsaXNoZWRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ3JlYXRpb25EYXRlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB2ZXJzaW9uIG9mIFdvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vV29ya2Zsb3dzL1ZlcnNpb25JbmZvJyx2ZXJzaW9uLmlEX0dVSURdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFya1wiPnt7dmVyc2lvbi5jaGFuZ2VTdHJ9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7dmVyc2lvbi5pc0N1cnJlbnR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3ZlcnNpb24uaXNQdWJsaXNoZWR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3ZlcnNpb24uY3JlYXRpb25EYXRlfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIldvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFdvcmtmbG93VmVyc2lvbkxpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIldvcmtmbG93VmVyc2lvblBhZ2luZ1wiIFtncm91cF09XCJXb3JrZmxvd1ZlcnNpb25Gb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjV29ya2Zsb3dWZXJzaW9uUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImluaXRpYWxpemVXb3JrZmxvd1ZhcmlhYmxlcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dWYXJpYWJsZXNcIil9fTwvYT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01IHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJJc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIldvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIldvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIldvcmtmbG93VmFyaWFibGVGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlZlcmlzb25JZFRleHRCb3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiV29ya2Zsb3dWYXJpYWJsZUZvcm1cIiBbaGlkZGVuXT1cInRydWVcIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRpdGxlPVwiQWRkXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0FkZFdvcmtmbG93VmFyaWFibGVNb2RhbChBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtcGx1c1wiPjwvaT4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU3lzTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEYXRhVHlwZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWYXJpYWJsZVR5cGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IFdvcmtmbG93VmFyaWFibGUgb2YgV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInRleHQtZGFya1wiPnt7V29ya2Zsb3dWYXJpYWJsZS5uYW1lU3RyfX08L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7V29ya2Zsb3dWYXJpYWJsZS5zeXNOYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7V29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW19fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e1dvcmtmbG93VmFyaWFibGUudmFyaWFibGVUeXBlSXRlbX19PC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgYnRuLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbChXb3JrZmxvd1ZhcmlhYmxlLmlEX0dVSUQsIEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFdvcmtmbG93VmFyaWFibGVMaXN0UmVzdWx0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkXCIgW29wdGlvbnNdPVwiV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIldvcmtmbG93VmFyaWFibGVGb3JtXCIgI1dvcmtmbG93VmFyaWFibGVQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICAgICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPCEtLWVuZDo6IFdpZGdldHMvQXBwbGljYXRpb25zL1VzZXIvUHJvZmlsZTMtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gQWRkIE1vZGFsIC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI0FkZFdvcmtmbG93VmFyaWFibGVNb2RhbCBsZXQtbW9kYWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dWYXJpYWJsZVwiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9uc1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiQWRkV0ZWYXJpYWJsZU5hbWVcIiBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiQWRkV0ZWYXJpYWJsZVN5c05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAoT25DaGFuZ2UpPVwiV0ZWYXJpYWJsZVR5cGVPbkNoYW5nZSgkZXZlbnQsdHJ1ZSlcIiBbb3B0aW9uc109XCJBZGRXRlZhcmlhYmxlRGF0YVR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiQWRkV0ZWYXJpYWJsZUNvbnN0YW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwic2hvd0FkZExvb2t1cHNUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyIHRhYmxlLXctY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZUVOXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lQVJcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZhbHVlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucztsZXQgaT1pbmRleDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzBdXCIgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMV1cIiBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblsyXVwiIFtncm91cF09XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtXCIgKGNsaWNrKT1cImRlbGV0ZVdGVmFyaWFibGVMb29rdXAob3B0aW9uLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtdHJhc2ggaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidy0xMDAgYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cImFkZFdGVmFyaWFibGVMb29rdXBpbkFkZE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZE5ld1JlY29yZFwiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICNDbG9zZVdvcmtmbG93VmFyaWFibGVNb2RhbCBpZD1cIkNsb3NlV29ya2Zsb3dWYXJpYWJsZU1vZGFsXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L0JCU0YtRm9ybT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS1FZGl0IE1vZGFsLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjRWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbCBsZXQtbW9kYWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVcIil9fVxyXG4gICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRXRlZhcmlhYmxlTmFtZVwiIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdFdGVmFyaWFibGVTeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IChPbkNoYW5nZSk9XCJXRlZhcmlhYmxlVHlwZU9uQ2hhbmdlKCRldmVudCxmYWxzZSlcIiBbb3B0aW9uc109XCJFZGl0V0ZWYXJpYWJsZURhdGFUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJFZGl0V0ZWYXJpYWJsZUNvbnN0YW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cInNob3dFZGl0TG9va3Vwc1RhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lRU5cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVBUlwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVmFsdWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZWRpdFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucztsZXQgaT1pbmRleDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzBdXCIgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMV1cIiBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMl1cIiBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bM11cIiBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LWRhbmdlciBidG4tc21cIiAoY2xpY2spPVwiZGVsZXRlV0ZWYXJpYWJsZUxvb2t1cChvcHRpb24sZmFsc2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtdHJhc2ggaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidy0xMDAgYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cImFkZFdGVmFyaWFibGVMb29rdXBpbkVkaXRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGROZXdSZWNvcmRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gI0Nsb3NlRWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbCBpZD1cIkNsb3NlRWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSAgbWUtM1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLUZvcm0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImluaXRpYWxpemVXb3JrZmxvd0FjdGl2aXR5KClcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dBY3Rpdml0aWVzXCIpfX1cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01IHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJJc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIndvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZmlsdGVyc0NvbnRhaW5lclwiIGRhdGEtaXNsb2FkZWQ9XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIndvcmtmbG93QWN0aXZpdHlGb3JtXCIgW2hpZGRlbl09XCJ0cnVlXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRpdGxlPVwiQWRkXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vV29ya2Zsb3dzL0FkZEFjdGl2aXR5JyxWZXJzaW9uSWRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzXCI+PC9pPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgbWItOFwiICpuZ0Zvcj1cImxldCB3b3JrZmxvd0FjdGl2aXR5IG9mIEFjdGl2aXR5UGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgYmctbGlnaHQtZGFyayByb3VuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBtLTAgZnMtMiB0ZXh0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e3dvcmtmbG93QWN0aXZpdHkudHlwZU5hbWVTdHJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtZS0yIFwiIChjbGljayk9XCJzaG93QWRkV0ZWYXJpYWJsZXN0b0FjdGl2aXR5KHdvcmtmbG93QWN0aXZpdHkudmVyc2lvbklEX0dVSUQsd29ya2Zsb3dBY3Rpdml0eS5pRF9HVUlELHdmQWN0aXZpdHlWYXJpYWJsZXNNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZ2VhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dWYXJpYWJsZXNcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYnRuQWRkXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LXByaW1hcnkgYnRuLXNtIGJ0bi1pY29uIG1lLTJcIiBbcm91dGVyTGlua109XCJbJy9BZG1pbi9Xb3JrZmxvd3MvRWRpdEFjdGl2aXR5Jyx3b3JrZmxvd0FjdGl2aXR5LmlEX0dVSURdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIndvcmtmbG93QWN0aXZpdHkuaXNQdWJsaXNoZWRcIiBjbGFzcz1cImZhcyBmYS1wZW5cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiF3b3JrZmxvd0FjdGl2aXR5LmlzUHVibGlzaGVkXCIgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgZnctYm9sZGVyIHRleHQtZGFya1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldGT3V0Y29tZVwiKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIGZ3LWJvbGQgZnMtNSBtdC0xIG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd1ZhcmlhYmxlc1wiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cImhvcml6b250YWxtZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1kYXJrXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd29ya2Zsb3dBY3Rpdml0eS52YXJpYWJsZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZ2VhclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5zeXNOYW1lfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiB3b3JrZmxvd0FjdGl2aXR5Lm91dGNvbWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWVFTiB9fToge3tpdGVtLm5leHRBY3R2aXR5TmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tZW5kOjogQ2FyZCBib2R5LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRBY3Rpdml0eUxpc3RSZXN1bHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJJc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWRcIiBbb3B0aW9uc109XCJBY3Rpdml0eVBhZ2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIndvcmtmbG93QWN0aXZpdHlGb3JtXCIgI0FjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3ZkFjdGl2aXR5VmFyaWFibGVzTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFdvcmtmbG93VmFyaWFibGVzXCIpfX1cclxuICAgICAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1PcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlciB0YWJsZS13LWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVzXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbmFibGVkXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJNYW5kYXRvcnlcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZpc2libGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYWN0aXZpdHlXRlZhcmlhYmxlT3B0aW9ucztsZXQgaT1pbmRleDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1oaWRkZW4gaXMgc3lzdGVtLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzBdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pZiBpcyBzeXN0bS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3B0aW9uWzddO2Vsc2UgdmFyaWFibGVOYW1lRERMO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS12YXJpYXZsZSBuYW1lLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bOF1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWhpZGRlbiB2YXJpYWJsZSBpZC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzldXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLXZhcmlhdmxlIG5hbWUgZGRsLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdmFyaWFibGVOYW1lRERMPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJvcHRpb25bOF1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pcyBlbmFibGVkLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvblsxXVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJvcHRpb25bMl1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pcyBtYW5kYXRvcnktLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwib3B0aW9uWzNdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvbls0XVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWlzIHZpc2libGUtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwib3B0aW9uWzVdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvbls2XVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWlmICEgaXNTeXN0ZW0tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhb3B0aW9uWzddXCIgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LWRhbmdlciBidG4tc21cIiAoY2xpY2spPVwiZGVsZXRlQWN0aXZpdHlXRlZhcmlhYmxlKG9wdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIiBmYSBmYS10cmFzaCBoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ3LTEwMCBidG4gYnRuLXN1Y2Nlc3NcIiAoY2xpY2spPVwiYWRkTmV3QWN0aXZpdHlXRlZhcmlhYmxlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGROZXdSZWNvcmRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSAgbWUtM1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLUZvcm0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgICA8ZGl2IFtuZ2JOYXZPdXRsZXRdPVwibmF2XCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG4iXX0=
|
|
793
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3dvcmtmbG93cy90YWJzL3RhYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy93b3JrZmxvd3MvdGFicy90YWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUErQyxNQUFNLHlCQUF5QixDQUFDO0FBR3BWLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUdyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFJckYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8sYUFBYTtJQStGeEIsdUJBQXVCO0lBR3ZCLFlBQW9CLFdBQXdCLEVBQVUsZUFBZ0MsRUFDNUUsY0FBOEIsRUFBVSx3QkFBa0QsRUFDMUYsdUJBQWdELEVBQVUsZUFBZ0MsRUFDMUYsWUFBc0IsRUFBVSxrQkFBc0MsRUFBVSxvQkFBMEMsRUFDM0gsY0FBOEIsRUFBVSxxQkFBNEM7UUFKekUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDNUUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUMxRiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzFGLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFVLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDM0gsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQXJHN0YsbUJBQW1CO1FBQ25CLGNBQVMsR0FBVyxFQUFFLENBQUE7UUFFdEIsSUFBSTtRQUNKLG1CQUFtQjtRQUNuQixnQkFBVyxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBUWhDLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUlyQyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFHdEMsd0JBQXdCO1FBQ3hCLDBCQUFxQixHQUFHLHVCQUF1QixDQUFBO1FBQy9DLHdCQUFtQixHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBR3hDLGdDQUEyQixHQUFVLEVBQUUsQ0FBQztRQUl4QyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxzQkFBc0I7UUFFdEIsMEJBQTBCO1FBQzFCLDZCQUE2QjtRQUM3QiwyQkFBc0IsR0FBRyw4QkFBOEIsQ0FBQTtRQUN2RCx5QkFBb0IsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUt6QyxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixpQ0FBNEIsR0FBVSxFQUFFLENBQUM7UUFFekMsbUNBQThCLEdBQVksS0FBSyxDQUFDO1FBSWhELG9CQUFvQjtRQUNwQiw0QkFBdUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxtQ0FBOEIsR0FBRyxJQUFJLFdBQVcsQ0FBQztRQUtqRCxxQkFBcUI7UUFDckIsZ0NBQTJCLEdBQVUsRUFBRSxDQUFDO1FBQ3hDLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUNyQyx1QkFBa0IsR0FBVyxDQUFDLENBQUM7UUFFL0IscUJBQXFCO1FBQ3JCLDZCQUF3QixHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLG9DQUErQixHQUFHLElBQUksV0FBVyxDQUFDO1FBTWxELHFCQUFxQjtRQUNyQixpQ0FBNEIsR0FBVSxFQUFFLENBQUM7UUFDekMseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQ3RDLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUVoQyx1QkFBdUI7UUFFdkIseUJBQXlCO1FBQ3pCLDRCQUE0QjtRQUM1QixtQkFBYyxHQUFHLDhCQUE4QixDQUFBO1FBQy9DLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0Qix5QkFBb0IsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUd6Qyx5QkFBb0IsR0FBVSxFQUFFLENBQUM7UUFFakMsbUNBQThCLEdBQVksS0FBSyxDQUFDO1FBR2hELHVDQUF1QztRQUN2QyxzQ0FBaUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RCw2Q0FBd0MsR0FBRyxJQUFJLFdBQVcsQ0FBQztRQUUzRCw4QkFBeUIsR0FBVSxFQUFFLENBQUM7UUFDdEMsZ0NBQTJCLEdBQVcsQ0FBQyxDQUFDO1FBQ3hDLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQThIM0Isb0JBQWUsR0FBRyxDQUFDLEVBQVUsRUFBbUIsRUFBRTtZQUNoRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQTtRQUNELDZCQUF3QixHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzFDLENBQUMsQ0FBQTtRQXlRRCwwQkFBcUIsR0FBRyxHQUFHLEVBQUU7WUFDM0IsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFZLENBQUM7WUFDNUQsSUFBSSxRQUFRLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNyQyxRQUFRLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUE7WUFDaEMsUUFBUSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFBO1lBQ3RDLFFBQVEsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFBO1lBQ2hELFFBQVEsQ0FBQyxtQkFBbUIsR0FBRyxXQUFXLENBQUMsbUJBQW1CLENBQUE7WUFDOUQsUUFBUSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFBO1lBRTVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hELElBQUksZUFBZSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekQsSUFBSSxlQUFlLElBQUksU0FBUztvQkFDOUIsU0FBUztnQkFFWCxJQUFJLGVBQWUsR0FBRyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELElBQUksY0FBYyxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFdkQsSUFBSSxNQUFNLEdBQXdCLElBQUksbUJBQW1CLEVBQUUsQ0FBQztnQkFDNUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztnQkFDOUIsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMxQztZQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUIsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFBO1FBQ0QsNkJBQXdCLEdBQUcsQ0FBQyxRQUFRLEVBQW1CLEVBQUU7WUFDdkQsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzVELENBQUMsQ0FBQTtRQTRFRCwyQkFBc0IsR0FBRyxHQUFHLEVBQUU7WUFDNUIsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFZLENBQUM7WUFDN0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN0QyxTQUFTLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUM1QyxTQUFTLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUE7WUFDakMsU0FBUyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFBO1lBQ3ZDLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2xELFNBQVMsQ0FBQyxtQkFBbUIsR0FBRyxXQUFXLENBQUMsbUJBQW1CLENBQUE7WUFDL0QsU0FBUyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFBO1lBRTdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pELElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELElBQUksWUFBWSxJQUFJLFNBQVM7b0JBQzNCLFNBQVM7Z0JBRVgsSUFBSSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELElBQUksZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLGVBQWUsR0FBRyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRXpELElBQUksTUFBTSxHQUF3QixJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQzVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO2dCQUM5QixNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDO2dCQUNqQyxNQUFNLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDO2dCQUNqQyxNQUFNLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztnQkFDL0IsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzQztZQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFBO1FBQ0QsOEJBQXlCLEdBQUcsQ0FBQyxTQUFTLEVBQW1CLEVBQUU7WUFDekQsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzlELENBQUMsQ0FBQTtRQW9NRCxvQ0FBK0IsR0FBRyxHQUFHLEVBQUU7WUFDckMsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUM7WUFDL0QsSUFBSSxLQUFLLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1lBQzNDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6RCxJQUFJLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxpQkFBaUIsSUFBSSxTQUFTO29CQUNoQyxTQUFTO2dCQUVYLElBQUksaUJBQTBCLENBQUM7Z0JBQy9CLElBQUksbUJBQTRCLENBQUM7Z0JBQ2pDLElBQUksaUJBQTBCLENBQUM7Z0JBRS9CLElBQUksZ0JBQWdCLEdBQTBCLElBQUkscUJBQXFCLEVBQUUsQ0FBQztnQkFFMUUsSUFBSSxpQkFBaUIsRUFBRTtvQkFDckIsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDL0MsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztvQkFFdEMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUMvRCxtQkFBbUIsR0FBRyxXQUFXLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ25FLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDaEU7cUJBQ0k7b0JBQ0gsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN2RCxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO29CQUV0QyxpQkFBaUIsR0FBRyxXQUFXLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3pELG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDN0QsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUMxRDtnQkFDRCxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLENBQUM7Z0JBQzlDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztnQkFDL0MsZ0JBQWdCLENBQUMsV0FBVyxHQUFHLG1CQUFtQixDQUFDO2dCQUNuRCxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7Z0JBQy9DLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUNuRDtZQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFBO1FBQ0QsdUNBQWtDLEdBQUcsQ0FBQyxjQUFjLEVBQW1CLEVBQUU7WUFDdkUsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDNUUsQ0FBQyxDQUFBO1FBN3ZCQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLFFBQVE7UUFDWixJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3pELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUVwQixDQUFDO0lBRUQsY0FBYztJQUNkLFVBQVU7UUFDUixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1FBQzNCLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUE7UUFDM0MsSUFBSSxDQUFDLDhCQUE4QixHQUFHLEtBQUssQ0FBQztRQUM1QyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFhLENBQUE7WUFFcEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRWpELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUE7WUFHN0MsZUFBZSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFBO1lBQzFDLGVBQWUsQ0FBQyxlQUFlLEdBQUc7Z0JBQ2hDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7Z0JBQ2pILEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFDM0QsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2dCQUNwSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7YUFFNUQsQ0FBQztZQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBRTVDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7WUFDaEUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7WUFDNUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUE7WUFDOUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDL0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFDM0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDMUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7WUFHOUMsSUFBSSxXQUFXLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQzdELFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQy9ELElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7WUFDdkUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQTtZQUMxRSxJQUFJLENBQUMsOEJBQThCLENBQUMsZUFBZSxHQUFHLHNCQUFzQixDQUFBO1lBQzVFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3RELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1lBQ3pELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO1lBQ3hELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1lBRXJELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUE7WUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFBO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUE7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFBO1lBRWpELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUE7WUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFBO1lBRWpELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUE7WUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFBO1lBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUE7WUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1lBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFBO1lBRXZELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1lBQzNCLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUE7WUFDM0MsSUFBSSxDQUFDLDhCQUE4QixHQUFHLEtBQUssQ0FBQztZQUc1QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFcEMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGlCQUFpQjtJQUNqQixrQkFBa0IsQ0FBQyxFQUFVO1FBRTNCLGdDQUFnQztRQUNoQyxJQUFJLFVBQVUsR0FBVSxFQUFFLENBQUM7UUFDM0IsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwQixJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQ25FLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQy9FLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUM7UUFDbEUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoSCxJQUFJLENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzFILElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDN0gsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUVuRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsK0JBQStCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkQsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQVFELHNCQUFzQjtJQUN0QixpQkFBaUI7UUFDZixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1FBQzNCLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUE7UUFDM0MsSUFBSSxDQUFDLDhCQUE4QixHQUFHLEtBQUssQ0FBQztRQUU1QyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ2xDLGVBQWU7UUFFZixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFBO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUE7UUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNyRixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7UUFHbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQTtRQUN0RCxJQUFJLENBQUMsZUFBZSxDQUFDLG1CQUFtQixHQUFHLFlBQVksQ0FBQTtRQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7UUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQTtRQUdwRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFBO1FBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQTtRQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUE7UUFFOUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQTtRQUMzRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFBO1FBQ2xELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO1FBQzFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQTtRQUVyRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztRQUM3RixJQUFJLENBQUMscUJBQXFCLENBQUMsNkJBQTZCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtRQUNqRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUNsRixJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtRQUV4RixJQUFJLENBQUMsOEJBQThCLEdBQUcsS0FBSyxDQUFBO1FBQzNDLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUM7UUFFNUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUVkLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUNELDRCQUE0QixDQUFDLE1BQU07UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsTUFBTSxDQUFBO0lBRTNDLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsNkJBQTZCLENBQUMsTUFBTTtRQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxNQUFNLENBQUE7SUFDNUMsQ0FBQztJQUVELDhCQUE4QjtJQUM5QiwyQkFBMkI7UUFDekIsZUFBZTtRQUNmLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLEdBQUcsK0JBQStCLENBQUE7UUFDekUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFBO1FBQ3hELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNyRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUdwRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsK0JBQStCLENBQUE7UUFDdEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsR0FBRyxZQUFZLENBQUE7UUFDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO1FBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUE7UUFFcEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQTtRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtRQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUE7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFBO1FBRTdDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLEdBQUcsa0JBQWtCLENBQUE7UUFDbEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLG1CQUFtQixHQUFHLFdBQVcsQ0FBQTtRQUMvRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtRQUNsRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUE7UUFFN0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsb0JBQW9CLENBQUM7UUFDL0YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLDZCQUE2QixHQUFHLENBQUMsK0JBQStCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtRQUNqSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUMzRixJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtRQUV6RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1FBQzNCLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUM7UUFDNUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUVkLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUE7WUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVwQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLHNCQUFzQixDQUFDLElBQVMsRUFBRSxLQUFjO1FBQzlDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUIsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMvRDtZQUNELElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztZQUM1QixJQUFJLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxlQUFlLElBQUksSUFBSSxJQUFJLGdCQUFnQixDQUFDLGNBQWM7Z0JBQ3JGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7O2dCQUVoQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1NBRXBDO2FBQ0k7WUFDSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNwRTtZQUNELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztZQUM3QixJQUFJLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxlQUFlLElBQUksSUFBSSxJQUFJLGdCQUFnQixDQUFDLGNBQWM7Z0JBQ3JGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7O2dCQUVqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQUNELGlDQUFpQyxDQUFDLEtBQWM7UUFDOUMsSUFBSSxhQUFhLEdBQVUsRUFBRSxDQUFDO1FBQzlCLElBQUksbUJBQW1CLEdBQVUsRUFBRSxDQUFDO1FBQ3BDLElBQUksY0FBc0IsQ0FBQztRQUMzQixJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLEtBQUssRUFBRTtZQUNULGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDdkIsS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUNqQzthQUNJO1lBQ0gsY0FBYyxHQUFHLE1BQU0sQ0FBQztZQUN4QixLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1NBQ2xDO1FBQ0QsZUFBZTtRQUNmLElBQUksUUFBUSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDcEMsUUFBUSxDQUFDLElBQUksR0FBRyxjQUFjLEdBQUcsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUNwRCxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMxQixRQUFRLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFFL0IsSUFBSSxZQUFZLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUN4QyxZQUFZLENBQUMsSUFBSSxHQUFHLGNBQWMsR0FBRyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVELFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzlCLFlBQVksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNuQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUMvQixZQUFZLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUU3QixJQUFJLFlBQVksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3hDLFlBQVksQ0FBQyxJQUFJLEdBQUcsY0FBYyxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUQsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDOUIsWUFBWSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ25DLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQy9CLFlBQVksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBRTdCLElBQUksV0FBVyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDdkMsV0FBVyxDQUFDLElBQUksR0FBRyxjQUFjLEdBQUcsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMxRCxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUM3QixXQUFXLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDbEMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDOUIsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFN0IsSUFBSSxLQUFLO1lBQ1AsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7O1lBRWxFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUU5RSxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFeEMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNYLE9BQU8sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFaEMsQ0FBQztJQUNELHNCQUFzQixDQUFDLGFBQWtCLEVBQUUsS0FBYztRQUN2RCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksa0JBQWtCLEdBQVcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6RixJQUFJLGtCQUFrQixLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDN0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ25FO2FBQ0Y7U0FDRjthQUNJO1lBQ0gsSUFBSSxrQkFBa0IsR0FBVyxJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzFGLElBQUksa0JBQWtCLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM3QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDcEU7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtJQUNqQiw0QkFBNEIsQ0FBQyx3QkFBd0I7UUFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwRSxJQUFJLFNBQVMsR0FBRyxNQUFhLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDO1lBRTNDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1lBRWpDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNoRCxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsOEJBQThCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQTtZQUM1RSxJQUFJLENBQUMsOEJBQThCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ2xGLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7WUFDMUYsSUFBSSxDQUFDLDhCQUE4QixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUE7WUFFNUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztZQUN2RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztZQUN6RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTtZQUd0QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztZQUMzQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUMvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDaEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDdkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUE7WUFFekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQTtZQUN2RCxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQTtZQUNoRCxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7WUFDekQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDbEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUNwRCxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUU1QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFBO1lBQzlDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO1lBQ2hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQTtZQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFHTCxDQUFDO0lBZ0NELDRCQUE0QjtRQUMxQixJQUFJLE1BQU0sR0FBUSxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDZCQUE2QixDQUFDLFlBQW9CLEVBQUUseUJBQXlCO1FBQzNFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsMkJBQTJCLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0YsSUFBSSxTQUFTLEdBQUcsTUFBYSxDQUFDO1lBQzlCLElBQUksZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUN2QyxnQkFBZ0IsQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUMzRixJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUV2QyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztZQUVsQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDakQsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLCtCQUErQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUE7WUFDOUUsSUFBSSxDQUFDLCtCQUErQixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztZQUNwRixJQUFJLENBQUMsK0JBQStCLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1lBQzVGLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFBO1lBQzdGLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7WUFFaEYsSUFBSSxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFN0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztZQUN4RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztZQUMxRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUd4QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztZQUM1QyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUNoRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDakQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDNUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFFM0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQTtZQUN4RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQTtZQUNqRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7WUFDMUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDbkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUNyRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBRWhHLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksR0FBRyxZQUFZLENBQUE7WUFDL0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUE7WUFDakQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUE7WUFDL0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFBO1lBRy9ELElBQUksZ0JBQWdCLENBQUMsbUJBQW1CLElBQUksZ0JBQWdCLENBQUMsZUFBZSxJQUFJLGdCQUFnQixDQUFDLG1CQUFtQixJQUFJLGdCQUFnQixDQUFDLGNBQWMsRUFBRTtnQkFDdkoscUJBQXFCO2dCQUNyQixJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDakUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQzthQUNsQztZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFtQ0Qsc0JBQXNCLENBQUMsZUFBc0I7UUFDM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFFL0MsSUFBSSxzQkFBc0IsR0FBVSxFQUFFLENBQUM7WUFFdkMsSUFBSSxRQUFRLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNwQyxRQUFRLENBQUMsSUFBSSxHQUFHLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDbkMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDMUIsUUFBUSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUU1QyxJQUFJLFlBQVksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLFlBQVksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzlCLFlBQVksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNuQyxZQUFZLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDL0MsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDL0IsWUFBWSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFHN0IsSUFBSSxZQUFZLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUN4QyxZQUFZLENBQUMsSUFBSSxHQUFHLGtCQUFrQixHQUFHLENBQUMsQ0FBQztZQUMzQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUM5QixZQUFZLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbkMsWUFBWSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQy9DLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQy9CLFlBQVksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUNwRCxZQUFZLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUU3QixJQUFJLFdBQVcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3ZDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzdCLFdBQVcsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNsQyxXQUFXLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDN0MsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDOUIsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFFN0Isc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDO1NBRS9CO0lBQ0gsQ0FBQztJQUNELDZCQUE2QjtRQUMzQixJQUFJLE1BQU0sR0FBUSxJQUFJLENBQUMsaUNBQWlDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLHFCQUFxQixDQUFDLE1BQU07UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQTtJQUNwQyxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLCtDQUErQztRQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ2xDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLENBQUE7UUFDakUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7UUFDL0MsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFBO1FBQ3BELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQTtRQUV0RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsZUFBZSxHQUFHLDJCQUEyQixDQUFBO1FBQzNFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUE7UUFDMUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7UUFDbEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFBO1FBRTdELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLDRCQUE0QixDQUFDO1FBQ3ZGLElBQUksQ0FBQyxjQUFjLENBQUMsNkJBQTZCLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO1FBQ2pGLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFDN0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1FBRWpGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUE7UUFDM0IsSUFBSSxDQUFDLDhCQUE4QixHQUFHLEtBQUssQ0FBQTtRQUUzQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQztZQUMzQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXBDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLHNFQUFzRTtRQUN0RSxvQ0FBb0M7UUFDcEMsd0NBQXdDO1FBR3hDLElBQUk7SUFDTixDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLDRCQUE0QixDQUFDLFNBQWlCLEVBQUUsVUFBa0IsRUFBRSxnQkFBcUI7UUFDdkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMseUJBQXlCLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM5RixJQUFJLFNBQVMsR0FBRyxNQUFhLENBQUM7WUFDOUIsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixDQUFDO1lBRTdELElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUMxRCxJQUFJLENBQUMsd0NBQXdDLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsd0NBQXdDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQTtZQUNoRyxJQUFJLENBQUMsd0NBQXdDLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDO1lBQ3RHLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUM7WUFDOUcsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7WUFDL0YsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUV6RixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUQsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLHFCQUFxQixHQUFVLEVBQUUsQ0FBQztnQkFFdEMsSUFBSSxRQUFRLEdBQVksZUFBZSxDQUFDLFFBQVEsQ0FBQztnQkFFakQsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDLENBQUEsUUFBUTtnQkFDcEQsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLGtCQUFrQixHQUFHLENBQUMsQ0FBQztnQkFDL0MsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDbEMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7Z0JBRWxDLElBQUksaUJBQWlCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDOUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLG1CQUFtQixHQUFHLENBQUMsQ0FBQztnQkFDakQsaUJBQWlCLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3BELGlCQUFpQixDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7Z0JBRXhDLGNBQWM7Z0JBQ2QsSUFBSSx1QkFBdUIsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwRCx1QkFBdUIsQ0FBQyxJQUFJLEdBQUcseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RCx1QkFBdUIsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztnQkFFMUQsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNoRCxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO2dCQUNyRCxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQztnQkFDeEQsbUJBQW1CLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztnQkFFMUMsY0FBYztnQkFDZCxJQUFJLHlCQUF5QixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3RELHlCQUF5QixDQUFDLElBQUksR0FBRywyQkFBMkIsR0FBRyxDQUFDLENBQUM7Z0JBQ2pFLHlCQUF5QixDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDO2dCQUU5RCxJQUFJLGlCQUFpQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQzlDLGlCQUFpQixDQUFDLElBQUksR0FBRyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7Z0JBQ2pELGlCQUFpQixDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO2dCQUNwRCxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO2dCQUV4QyxjQUFjO2dCQUNkLElBQUksdUJBQXVCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDcEQsdUJBQXVCLENBQUMsSUFBSSxHQUFHLHlCQUF5QixHQUFHLENBQUMsQ0FBQztnQkFDN0QsdUJBQXVCLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7Z0JBRTFELHFCQUFxQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSx5QkFBeUIsRUFDckksaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBRXhELElBQUksUUFBUSxFQUFFO29CQUNaLElBQUksWUFBWSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ3hDLFlBQVksQ0FBQyxJQUFJLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDdkMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzlCLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUMvQixZQUFZLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQ25DLFlBQVksQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQztvQkFFbEQsSUFBSSxVQUFVLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQyxDQUFBLFFBQVE7b0JBQzlDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztvQkFDbkMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzVCLFVBQVUsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztvQkFDakMsVUFBVSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO29CQUUxRCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2lCQUV0RDtxQkFDSTtvQkFDSCxJQUFJLGtCQUFrQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQy9DLGtCQUFrQixDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztvQkFDL0Msa0JBQWtCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDcEMsa0JBQWtCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDMUMsa0JBQWtCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO29CQUM1QyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUNyQyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO29CQUMzRCxrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFFekUscUJBQXFCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7aUJBQ2hEO2dCQUNELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLDJCQUEyQixJQUFJLENBQUMsQ0FBQzthQUV2QztZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUE2Q0Qsd0JBQXdCLENBQUMsZUFBb0I7UUFDM0MsSUFBSSxvQkFBb0IsR0FBVyxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzNGLElBQUksb0JBQW9CLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0U7U0FDRjtJQUNILENBQUM7SUFDRCx3QkFBd0I7UUFDdEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1FBRTdDLElBQUkscUJBQXFCLEdBQVUsRUFBRSxDQUFDO1FBRXRDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUMvQyxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ3ZELGtCQUFrQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDcEMsa0JBQWtCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUMxQyxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDNUMsa0JBQWtCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNyQyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBRTNELElBQUksUUFBUSxHQUFZLEtBQUssQ0FBQztRQUU5QixJQUFJLGdCQUFnQixHQUFHLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQSxRQUFRO1FBQ3BELGdCQUFnQixDQUFDLElBQUksR0FBRyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDbkQsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNsQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUN2QyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBRWxDLElBQUksaUJBQWlCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM5QyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ3JELGlCQUFpQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSx1QkFBdUIsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BELHVCQUF1QixDQUFDLElBQUksR0FBRyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFDakUsdUJBQXVCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUV0QyxJQUFJLG1CQUFtQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDaEQsbUJBQW1CLENBQUMsSUFBSSxHQUFHLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUN6RCxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWxDLElBQUkseUJBQXlCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN0RCx5QkFBeUIsQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO1FBQ3JFLHlCQUF5QixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFeEMsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzlDLGlCQUFpQixDQUFDLElBQUksR0FBRyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDckQsaUJBQWlCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVoQyxJQUFJLHVCQUF1QixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEQsdUJBQXVCLENBQUMsSUFBSSxHQUFHLHlCQUF5QixHQUFHLEtBQUssQ0FBQztRQUNqRSx1QkFBdUIsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRXRDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSx5QkFBeUIsRUFDckksaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQywyQkFBMkIsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFlBQVk7SUFDWixXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLENBQUM7OEdBcjZCVSxhQUFhO2tHQUFiLGFBQWEsbWtCQ3JCMUIsazFrQ0E2bUJBOzsyRkR4bEJhLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0UsVUFBVTtrWkF1QjZDLCtCQUErQjtzQkFBL0YsU0FBUzt1QkFBQyxpQ0FBaUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBWUcsc0JBQXNCO3NCQUF2RixTQUFTO3VCQUFDLGtDQUFrQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFnQkcsaUNBQWlDO3NCQUFuRyxTQUFTO3VCQUFDLG1DQUFtQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkF1Q04seUJBQXlCO3NCQUFuRixTQUFTO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb250cm9sTGF5b3V0LCBFbmdsaXNoQXJhYmljRFRPLCBGaWx0ZXJJdGVtLCBGaWx0ZXJUeXBlLCBJbnB1dFR5cGUsIE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zLCBQYWdpbmdPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgVG9nZ2xlU2xpZGVPcHRpb25zLCBEcm9wZG93bk9wdGlvbnMsIEZvcm1PcHRpb25zLCBQYWdpbmdBY3Rpb25Nb2RlLCBGb3JjZURpcmVjdGlvbiwgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zLCBDaGVja0JveE9wdGlvbnMsIENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCBQYWdpbmdDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFdvcmtmbG93U2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1dvcmtmbG93U2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBXRlZhcmlhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1dvcmtmbG93TW9kZWxzL1dGVmFyaWFibGVNb2RlbCc7XHJcbmltcG9ydCB7IFdvcmtmbG93VmFyaWFibGVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Xb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93QWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1dvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIEVudmlyb25tZW50U2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVmFyaWFibGVMb29rdXBNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvV29ya2Zsb3dNb2RlbHMvVmFyaWFibGVMb29rdXBNb2RlbCc7XHJcbmltcG9ydCB7IFdGQWN0aXZpdHlWYXJpYWJsZURUTywgV0ZBY3Rpdml0eVZhcmlhYmxlc01vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Xb3JrZmxvd01vZGVscy9XRkFjdGl2aXR5VmFyaWFibGVzTW9kZWwnO1xyXG5pbXBvcnQgeyBWYXJpYWJsZURhdGFUeXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbnN0YW50cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10YWJzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFicy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFicy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBQYWdldGl0bGU6IHN0cmluZyA9IFwiXCJcclxuXHJcbiAgLy9XRlxyXG4gIC8vIERldGFpbHMgQ29udHJvbHNcclxuICBEZXRhaWxzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFdvcmtmbG93RGV0YWlsczogYW55O1xyXG4gIFdvcmtmbG93SWQ6IHN0cmluZztcclxuICBOYW1lTXVsdGlsaW5ndWFsVGV4dEJveDogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94OiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucztcclxuICBBY3RpdmU6IFRleHRCb3hPcHRpb25zO1xyXG4gIFB1Ymxpc2hlZDogVGV4dEJveE9wdGlvbnM7XHJcbiAgU3lzTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgU2hvd1dvcmtmbG93RGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFZlcnNpb25JZDogc3RyaW5nXHJcbiAgLy9wdWJsaXNoIFdGICBNb2RlbCBDb250cm9sc1xyXG4gIHB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnM6IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucztcclxuICBwdWJsaXNoQ29udHJvbExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ3B1Ymxpc2hDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGlzaENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG4gIC8vU3RhcnQgV29ya0Zsb3cgVmVyc2lvblxyXG4gIFdvcmtGbG93VmVyc2lvbkFwaVVybCA9IFwiL2FwaS9hZG1pbi9XRlZlcnNpb24vXCJcclxuICBXb3JrZmxvd1ZlcnNpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgV29ya2Zsb3dJZFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIFdvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBXb3JrZmxvd1ZlcnNpb25QYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIFdvcmtmbG93SWRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdXb3JrZmxvd1ZlcnNpb25QYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBXRlZlcnNpb25QYWdpbmdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuICAvL0VuZCBXb3JrRmxvdyB2ZXJzaW9uXHJcblxyXG4gIC8vU3RhcnQgV29ya2Zsb3cgVmFyaWFibGVzXHJcbiAgLy9Xb3JrZmxvdyBWYXJpYWJsZXMgY29udHJvbHNcclxuICBXb3JrZmxvd1ZhcmlhYmxlQXBpVXJsID0gXCIvYXBpL2FkbWluL1dvcmtmbG93VmFyaWFibGUvXCJcclxuICBXb3JrZmxvd1ZhcmlhYmxlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFdvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBXb3JrZmxvd1ZhcmlhYmxlVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIFZlcmlzb25JZFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIFZlcmlzb25JZFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBEYXRhVHlwZUxpc3QgPSBbXTtcclxuICBXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIFdvcmtmbG93VmFyaWFibGVQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ1dvcmtmbG93VmFyaWFibGVQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuICAvL0FkZCBNb2RlbCBDb250cm9sc1xyXG4gIEFkZFdvcmtmbG93VmFyaWFibGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIEFkZFdGVmFyaWFibGVOYW1lOiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucztcclxuICBBZGRXRlZhcmlhYmxlU3lzTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgQWRkV0ZWYXJpYWJsZURhdGFUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkV0ZWYXJpYWJsZUNvbnN0YW50OiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgLy9XRiB2YXJpYWJsZSBsb29rdXBzXHJcbiAgYWRkV0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIHNob3dBZGRMb29rdXBzVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhZGRMYXN0TG9va3VwSW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIC8vRWRpdCBNb2RlbCBDb250cm9sc1xyXG4gIEVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnM7XHJcbiAgRWRpdFdGVmFyaWFibGVOYW1lOiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0V0ZWYXJpYWJsZVN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXRXRlZhcmlhYmxlRGF0YVR5cGU6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0V0ZWYXJpYWJsZUNvbnN0YW50OiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgV29ya2Zsb3dWYXJpYWJsZUlkOiBhbnlcclxuICAvL1dGIHZhcmlhYmxlIGxvb2t1cHNcclxuICBlZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIHNob3dFZGl0TG9va3Vwc1RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZWRpdExhc3RMb29rdXBJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgLy9FbmQgV29ya2Zsb3cgVmFyaWFibGVcclxuXHJcbiAgLy9zdHJhdCBXb3JrZmxvdyBBY3Rpdml0eVxyXG4gIC8vV29ya2Zsb3cgQWN0aXZpdHkgQ29udHJvbHNcclxuICBBY3Rpdml0eUFwaVVybCA9IFwiL2FwaS9hZG1pbi9Xb3JrZmxvd0FjdGl2aXR5L1wiXHJcbiAgQWN0aXZpdHlUeXBlTGlzdCA9IFtdO1xyXG4gIHdvcmtmbG93QWN0aXZpdHlGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIEFjdGl2aXR5UGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIEFjdGl2aXR5UGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIElzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ0FjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgQWN0aXZpdHlQYWdpbmdWaWV3RWxlbWVudDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG4gIC8vQWRkIFdGIHZhcmlhYmxlcyB0byBhY3Rpdml0eSBjb250cm9sc1xyXG4gIGFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnM7XHJcbiAgYWN0aXZpdHlJRDogc3RyaW5nO1xyXG4gIGFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgbGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIGFjdGl2aXR5VmFyaWFibGVzTGlzdCA9IFtdO1xyXG4gIC8vRW5kIFdvcmtmbG93IEFjdGl2aXR5XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBXb3JrZmxvd1NlcnZpY2U6IFdvcmtmbG93U2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIFdvcmtmbG93VmFyaWFibGVzU2VydmljZTogV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3b3JrZmxvd0FjdGl2aXR5U2VydmljZTogV29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UsIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsIHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZSkge1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgIHRoaXMuV29ya2Zsb3dJZCA9IHBhcmFtc1snaWQnXTtcclxuICAgICAgdGhpcy5WZXJzaW9uSWQgPSBwYXJhbXNbJ3ZpZCddO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMuZ2V0RGV0YWlscygpO1xyXG5cclxuICB9XHJcblxyXG4gIC8vV0YgZnVuY3Rpb25zXHJcbiAgZ2V0RGV0YWlscygpIHtcclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1NlcnZpY2UuZ2V0RGV0YWlscyh0aGlzLldvcmtmbG93SWQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuV29ya2Zsb3dEZXRhaWxzID0gcmVzdWx0IGFzIGFueVxyXG5cclxuICAgICAgdmFyIE5hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBOYW1lLmFyYWJpYyA9IHRoaXMuV29ya2Zsb3dEZXRhaWxzLm5hbWUuYXJhYmljO1xyXG4gICAgICBOYW1lLmVuZ2xpc2ggPSB0aGlzLldvcmtmbG93RGV0YWlscy5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICB0aGlzLlBhZ2V0aXRsZSA9IHRoaXMuV29ya2Zsb3dEZXRhaWxzLm5hbWVTdHJcclxuXHJcblxyXG4gICAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZVRpdGxlID0gdGhpcy5QYWdldGl0bGVcclxuICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93c1wiKSwgcGF0aDogJy9BZG1pbi9Xb3JrZmxvd3Mvd29ya2Zsb3cnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuXHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3ggPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5hcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCJcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIlxyXG4gICAgICB0aGlzLk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94LmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94Lm5hbWUgPSBcIk5hbWVcIjtcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC52YWx1ZSA9IE5hbWU7XHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3guaXNEaXNhYmxlZCA9IHRydWVcclxuXHJcblxyXG4gICAgICB2YXIgRGVzY3JpcHRpb24gPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBEZXNjcmlwdGlvbi5hcmFiaWMgPSB0aGlzLldvcmtmbG93RGV0YWlscy5kZXNjcmlwdGlvbi5hcmFiaWM7XHJcbiAgICAgIERlc2NyaXB0aW9uLmVuZ2xpc2ggPSB0aGlzLldvcmtmbG93RGV0YWlscy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveCA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5hcmFiaWNMYWJlbEtleSA9IFwiRGVzY3JpcHRpb25JbkFyYWJpY1wiXHJcbiAgICAgIHRoaXMuRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94LmVuZ2xpc2hMYWJlbEtleSA9IFwiRGVzY3JpcHRpb25JbkVuZ2xpc2hcIlxyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3gubmFtZSA9IFwiRGVzY3JpcHRpb25cIjtcclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3gudmFsdWUgPSBEZXNjcmlwdGlvbjtcclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3guaXNEaXNhYmxlZCA9IHRydWVcclxuXHJcbiAgICAgIHRoaXMuU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLlN5c05hbWUubmFtZSA9IFwiU3lzTmFtZVwiXHJcbiAgICAgIHRoaXMuU3lzTmFtZS5sYWJlbEtleSA9IFwiU3lzTmFtZVwiXHJcbiAgICAgIHRoaXMuU3lzTmFtZS50eXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5TeXNOYW1lLmlzRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgIHRoaXMuU3lzTmFtZS52YWx1ZSA9IHRoaXMuV29ya2Zsb3dEZXRhaWxzLnN5c05hbWVcclxuXHJcbiAgICAgIHRoaXMuQWN0aXZlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWN0aXZlLm5hbWUgPSBcIkFjdGl2ZVwiXHJcbiAgICAgIHRoaXMuQWN0aXZlLmxhYmVsS2V5ID0gXCJBY3RpdmVcIlxyXG4gICAgICB0aGlzLkFjdGl2ZS50eXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5BY3RpdmUuaXNEaXNhYmxlZCA9IHRydWVcclxuICAgICAgdGhpcy5BY3RpdmUudmFsdWUgPSB0aGlzLldvcmtmbG93RGV0YWlscy5pc0FjdGl2ZVxyXG5cclxuICAgICAgdGhpcy5QdWJsaXNoZWQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5QdWJsaXNoZWQubmFtZSA9IFwiUHVibGlzaGVkXCJcclxuICAgICAgdGhpcy5QdWJsaXNoZWQubGFiZWxLZXkgPSBcIlB1Ymxpc2hlZFwiXHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLnR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgICB0aGlzLlB1Ymxpc2hlZC5pc0Rpc2FibGVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLlB1Ymxpc2hlZC52YWx1ZSA9IHRoaXMuV29ya2Zsb3dEZXRhaWxzLmlzUHVibGlzaGVkXHJcblxyXG4gICAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gZmFsc2VcclxuICAgICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IHRydWU7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vRGVsZXRlIHByb3ZpZGVyXHJcbiAgc2hvd1B1Ymxpc2hXRk1vZGFsKGlkOiBzdHJpbmcpIHtcclxuXHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2goaWQpO1xyXG5cclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucyA9IG5ldyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMoKTtcclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLnB1Ymxpc2hXb3JrRmxvdztcclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucy5zZXJ2aWNlU3VibWl0TW9kZWwgPSBwYXJhbUFycmF5O1xyXG4gICAgdGhpcy5wdWJsaXNoV0ZDb25maXJtYXRpb25PcHRpb25zLmNvbmZpcm1hdGlvbkhlYWRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hXb3JrRmZsb3dcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuY29uZmlybWF0aW9uQm9keSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hXb3JrRmZsb3dDb25maXJtYXRpb25cIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuc3VibWl0QnV0dG9uVGV4dCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuc3VjY2Vzc05vdGlmaWNhdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQdWJsaXNoZWRTdWNjZXNzZnVsbHlcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMub25TdWNjZXNzSGFuZGxlciA9IHRoaXMucHVibGlzaFdvcmtGbG93T25TdWNjZXNzO1xyXG5cclxuICAgIHRoaXMucHVibGlzaENvbnRyb2xMb2FkZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucHVibGlzaENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbC5zaG93TW9kYWwoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG4gIHB1Ymxpc2hXb3JrRmxvdyA9IChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLldvcmtmbG93U2VydmljZS5wdWJsaXNoV29ya0Zsb3coaWQpO1xyXG4gIH1cclxuICBwdWJsaXNoV29ya0Zsb3dPblN1Y2Nlc3MgPSAocmVzdWx0KSA9PiB7XHJcbiAgICB0aGlzLldvcmtmbG93RGV0YWlscy5pc1B1Ymxpc2hlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvL1dGIHZlcnNpb24gZnVuY3Rpb25zXHJcbiAgaW5pdGlhbGl6ZVZlcnNpb24oKSB7XHJcbiAgICB0aGlzLlNob3dXb3JrZmxvd0RldGFpbHMgPSBmYWxzZTtcclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICAvLyBUZXh0Qm94IGludGlcclxuXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5uYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC50eXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5wbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LmhpZGVMYWJlbCA9IHRydWVcclxuXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0lkVGV4dEJveC5uYW1lID0gXCJXb3JrZmxvd0lkVGV4dEJveFwiXHJcbiAgICB0aGlzLldvcmtmbG93SWRUZXh0Qm94LmhpZGVMYWJlbCA9IHRydWVcclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLldvcmtmbG93SWRUZXh0Qm94LnZhbHVlID0gdGhpcy5Xb3JrZmxvd0lkXHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuV29ya2Zsb3dJZEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcIldvcmtmbG93SWRUZXh0Qm94XCJcclxuICAgIHRoaXMuV29ya2Zsb3dJZEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJXZklEXCJcclxuICAgIHRoaXMuV29ya2Zsb3dJZEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZy5hY3Rpb25Qb3N0VVJMID0gdGhpcy5Xb3JrRmxvd1ZlcnNpb25BcGlVcmwgKyAnR2V0VmVyc2lvbnNMaXN0aW5nJztcclxuICAgIHRoaXMuV29ya2Zsb3dWZXJzaW9uUGFnaW5nLm9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiLCBcIldvcmtmbG93SWRUZXh0Qm94XCJdXHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZy5maWx0ZXJzID0gW3RoaXMuVGV4dElucHV0RmlsdGVyLCB0aGlzLldvcmtmbG93SWRGaWx0ZXJdXHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZy52YWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcblxyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG4gIHNldFdvcmtmbG93VmVyc2lvbkxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG5cclxuICB9XHJcblxyXG4gIC8vV0YgdmFyaWFibGVzIEZ1bmN0aW9uc1xyXG4gIHNldFdvcmtmbG93VmFyaWFibGVMaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nUmVzdWx0ID0gcmVzdWx0XHJcbiAgfVxyXG5cclxuICAvL2luaXRpYWxpemUgV0YgdmFyaWFibGVzIHBhZ2VcclxuICBpbml0aWFsaXplV29ya2Zsb3dWYXJpYWJsZXMoKSB7XHJcbiAgICAvLyBUZXh0Qm94IGluaXRcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3gubmFtZSA9IFwiV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveC50eXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3gucGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIilcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3guaGlkZUxhYmVsID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJXb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzZWFyY2hUZXh0XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRCb3gubmFtZSA9IFwiVmVyaXNvbklkVGV4dEJveFwiXHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRCb3guaGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0Qm94LnR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0Qm94LnZhbHVlID0gdGhpcy5Xb3JrZmxvd0lkXHJcblxyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJWZXJpc29uSWRUZXh0Qm94XCJcclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInZlcnNpb25JRFwiXHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveFxyXG5cclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmcuYWN0aW9uUG9zdFVSTCA9IHRoaXMuV29ya2Zsb3dWYXJpYWJsZUFwaVVybCArICdHZXRWYXJpYWJsZUxpc3RpbmcnO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nLm9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wiV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3hcIiwgXCJWZXJpc29uSWRUZXh0Qm94XCJdXHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmcuZmlsdGVycyA9IFt0aGlzLlRleHRJbnB1dEZpbHRlciwgdGhpcy5WZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXJdXHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmcudmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG5cclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZCA9IHRydWVcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIC8vQWRkLEVkaXQgV0YgdmFyaWFibGUgc2hhcmVkIGZ1bmN0aW9uc1xyXG4gIFdGVmFyaWFibGVUeXBlT25DaGFuZ2UodHlwZTogYW55LCBpc0FkZDogYm9vbGVhbikge1xyXG4gICAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChpc0FkZCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYWRkTGFzdExvb2t1cEluZGV4OyBpKyspIHtcclxuICAgICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJBZGRMb29rdXBOYW1lRU5cIiArIGkpO1xyXG4gICAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkFkZExvb2t1cE5hbWVBUlwiICsgaSk7XHJcbiAgICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKFwiTG9va3VwVmFsdWVcIiArIGkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWRkV0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuYWRkTGFzdExvb2t1cEluZGV4ID0gMDtcclxuICAgICAgaWYgKHR5cGUgPT0gVmFyaWFibGVEYXRhVHlwZS5TaW5nbGVTZWxlY3Rpb24gfHwgdHlwZSA9PSBWYXJpYWJsZURhdGFUeXBlLk11bHRpU2VsZWN0aW9uKVxyXG4gICAgICAgIHRoaXMuc2hvd0FkZExvb2t1cHNUYWJsZSA9IHRydWU7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLnNob3dBZGRMb29rdXBzVGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJFZGl0TG9va3VwSURcIiArIGkpO1xyXG4gICAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJFZGl0TG9va3VwTmFtZUVOXCIgKyBpKTtcclxuICAgICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKFwiRWRpdExvb2t1cE5hbWVBUlwiICsgaSk7XHJcbiAgICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkVkaXRMb29rdXBWYWx1ZVwiICsgaSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuZWRpdExhc3RMb29rdXBJbmRleCA9IDA7XHJcbiAgICAgIGlmICh0eXBlID09IFZhcmlhYmxlRGF0YVR5cGUuU2luZ2xlU2VsZWN0aW9uIHx8IHR5cGUgPT0gVmFyaWFibGVEYXRhVHlwZS5NdWx0aVNlbGVjdGlvbilcclxuICAgICAgICB0aGlzLnNob3dFZGl0TG9va3Vwc1RhYmxlID0gdHJ1ZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuc2hvd0VkaXRMb29rdXBzVGFibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgaW5pdGlhbGl6ZVdGVmFyaWFibGVMb29rdXBPcHRpb25zKGlzQWRkOiBib29sZWFuKSB7XHJcbiAgICBsZXQgbG9va3VwT3B0aW9uczogYW55W10gPSBbXTtcclxuICAgIGxldCBvYmplY3RMb29rdXBPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IGFjdGlvbkluZGljYXRlOiBzdHJpbmc7XHJcbiAgICBsZXQgaW5kZXg6IG51bWJlcjtcclxuICAgIGlmIChpc0FkZCkge1xyXG4gICAgICBhY3Rpb25JbmRpY2F0ZSA9IFwiQWRkXCI7XHJcbiAgICAgIGluZGV4ID0gdGhpcy5hZGRMYXN0TG9va3VwSW5kZXg7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYWN0aW9uSW5kaWNhdGUgPSBcIkVkaXRcIjtcclxuICAgICAgaW5kZXggPSB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXg7XHJcbiAgICB9XHJcbiAgICAvL0ZvciBlZGl0IG9ubHlcclxuICAgIGxldCBsb29rdXBJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgbG9va3VwSUQubmFtZSA9IGFjdGlvbkluZGljYXRlICsgXCJMb29rdXBJRFwiICsgaW5kZXg7XHJcbiAgICBsb29rdXBJRC5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgbG9va3VwSUQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG5cclxuICAgIGxldCBsb29rdXBOYW1lRU4gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIGxvb2t1cE5hbWVFTi5uYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkxvb2t1cE5hbWVFTlwiICsgaW5kZXg7XHJcbiAgICBsb29rdXBOYW1lRU4uaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIGxvb2t1cE5hbWVFTi50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBsb29rdXBOYW1lRU4uaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICBsb29rdXBOYW1lRU4ubWF4TGVuZ3RoID0gMjU1O1xyXG5cclxuICAgIGxldCBsb29rdXBOYW1lQVIgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIGxvb2t1cE5hbWVBUi5uYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkxvb2t1cE5hbWVBUlwiICsgaW5kZXg7XHJcbiAgICBsb29rdXBOYW1lQVIuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIGxvb2t1cE5hbWVBUi50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBsb29rdXBOYW1lQVIuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICBsb29rdXBOYW1lQVIubWF4TGVuZ3RoID0gMjU1O1xyXG5cclxuICAgIGxldCBsb29rdXBWYWx1ZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgbG9va3VwVmFsdWUubmFtZSA9IGFjdGlvbkluZGljYXRlICsgXCJMb29rdXBWYWx1ZVwiICsgaW5kZXg7XHJcbiAgICBsb29rdXBWYWx1ZS5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgbG9va3VwVmFsdWUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgbG9va3VwVmFsdWUuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICBsb29rdXBWYWx1ZS5tYXhMZW5ndGggPSAyMDAwO1xyXG5cclxuICAgIGlmIChpc0FkZClcclxuICAgICAgb2JqZWN0TG9va3VwT3B0aW9ucy5wdXNoKGxvb2t1cE5hbWVFTiwgbG9va3VwTmFtZUFSLCBsb29rdXBWYWx1ZSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIG9iamVjdExvb2t1cE9wdGlvbnMucHVzaChsb29rdXBJRCwgbG9va3VwTmFtZUVOLCBsb29rdXBOYW1lQVIsIGxvb2t1cFZhbHVlKTtcclxuXHJcbiAgICBsb29rdXBPcHRpb25zLnB1c2gob2JqZWN0TG9va3VwT3B0aW9ucyk7XHJcblxyXG4gICAgaW5kZXggKz0gMTtcclxuICAgIHJldHVybiBbbG9va3VwT3B0aW9ucywgaW5kZXhdO1xyXG5cclxuICB9XHJcbiAgZGVsZXRlV0ZWYXJpYWJsZUxvb2t1cChkZWxldGVkTG9va3VwOiBhbnksIGlzQWRkOiBib29sZWFuKSB7XHJcbiAgICBpZiAoaXNBZGQpIHtcclxuICAgICAgbGV0IGRlbGV0ZWRMb29rdXBJbmRleDogbnVtYmVyID0gdGhpcy5hZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMuaW5kZXhPZihkZWxldGVkTG9va3VwKTtcclxuICAgICAgaWYgKGRlbGV0ZWRMb29rdXBJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLmFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5zcGxpY2UoZGVsZXRlZExvb2t1cEluZGV4LCAxKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRMb29rdXAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkTG9va3VwW2ldLk5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBkZWxldGVkTG9va3VwSW5kZXg6IG51bWJlciA9IHRoaXMuZWRpdFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5pbmRleE9mKGRlbGV0ZWRMb29rdXApO1xyXG4gICAgICBpZiAoZGVsZXRlZExvb2t1cEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuZWRpdFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5zcGxpY2UoZGVsZXRlZExvb2t1cEluZGV4LCAxKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRMb29rdXAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woZGVsZXRlZExvb2t1cFtpXS5OYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vQWRkIFdGIHZhcmlhYmxlXHJcbiAgc2hvd0FkZFdvcmtmbG93VmFyaWFibGVNb2RhbChBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVzU2VydmljZS5sb2FkQWRkRHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIHRoaXMuRGF0YVR5cGVMaXN0ID0gcmVzdWx0T2JqLmRhdGFUeXBlTGlzdDtcclxuXHJcbiAgICAgIHRoaXMuYWRkV0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuYWRkTGFzdExvb2t1cEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5zaG93QWRkTG9va3Vwc1RhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybVxyXG4gICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRXRlZhcmlhYmxlTW9kZWw7XHJcbiAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zLnNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkV0ZWYXJpYWJsZUZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5wYWdpbmdSZWZlcmVuY2UgPSB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmdWaWV3RWxlbWVudFxyXG5cclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVOYW1lLm5hbWUgPSBcIk5hbWVcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZS5hcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZU5hbWUuZW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZU5hbWUuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZU5hbWUubWF4TGVuZ3RoID0gMjU1XHJcblxyXG5cclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVTeXNOYW1lLm5hbWUgPSBcIlN5c05hbWVcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZS5sYWJlbEtleSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVTeXNOYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZS52YWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZVN5c05hbWUubWF4TGVuZ3RoID0gMTAwXHJcblxyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVEYXRhVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUubmFtZSA9IFwiRGF0YVR5cGVJdGVtSURfR1VJRFwiXHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLmxhYmVsS2V5ID0gXCJEYXRhVHlwZVwiXHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLmRhdGFTb3VyY2UgPSB0aGlzLkRhdGFUeXBlTGlzdFxyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVEYXRhVHlwZS5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVEYXRhVHlwZS5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLnBsYWNlaG9sZGVyID0gXCJcIjtcclxuXHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZUNvbnN0YW50ID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVDb25zdGFudC5uYW1lID0gXCJJc0NvbnN0YW50XCJcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlQ29uc3RhbnQubGFiZWxLZXkgPSBcIkNvbnN0YW50XCJcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlQ29uc3RhbnQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWxcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH1cclxuICBnZXRBZGRXRlZhcmlhYmxlTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgbGV0IGFkZE1vZGVsID0gbmV3IFdGVmFyaWFibGVNb2RlbCgpO1xyXG4gICAgYWRkTW9kZWwuTmFtZSA9IFJlc3VsdE1vZGVsLk5hbWVcclxuICAgIGFkZE1vZGVsLlN5c05hbWUgPSBSZXN1bHRNb2RlbC5TeXNOYW1lXHJcbiAgICBhZGRNb2RlbC5Xb3JrZmxvd1ZlcnNpb25JRF9HVUlEID0gdGhpcy5WZXJzaW9uSWRcclxuICAgIGFkZE1vZGVsLkRhdGFUeXBlSXRlbUlEX0dVSUQgPSBSZXN1bHRNb2RlbC5EYXRhVHlwZUl0ZW1JRF9HVUlEXHJcbiAgICBhZGRNb2RlbC5Jc0NvbnN0YW50ID0gUmVzdWx0TW9kZWwuSXNDb25zdGFudFxyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXg7IGorKykge1xyXG4gICAgICBsZXQgYWRkTG9va3VwTmFtZUVOID0gUmVzdWx0TW9kZWxbXCJBZGRMb29rdXBOYW1lRU5cIiArIGpdO1xyXG4gICAgICBpZiAoYWRkTG9va3VwTmFtZUVOID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBhZGRMb29rdXBOYW1lQVIgPSBSZXN1bHRNb2RlbFtcIkFkZExvb2t1cE5hbWVBUlwiICsgal07XHJcbiAgICAgIGxldCBhZGRMb29rdXBWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiQWRkTG9va3VwVmFsdWVcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cDogVmFyaWFibGVMb29rdXBNb2RlbCA9IG5ldyBWYXJpYWJsZUxvb2t1cE1vZGVsKCk7XHJcbiAgICAgIGxvb2t1cC5OYW1lRU4gPSBhZGRMb29rdXBOYW1lRU47XHJcbiAgICAgIGxvb2t1cC5OYW1lQVIgPSBhZGRMb29rdXBOYW1lQVI7XHJcbiAgICAgIGxvb2t1cC5WYWx1ZSA9IGFkZExvb2t1cFZhbHVlO1xyXG4gICAgICBhZGRNb2RlbC52YXJpYWJsZUxvb2t1cERUT3MucHVzaChsb29rdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChhZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcbiAgZ2V0QWRkV0ZWYXJpYWJsZUZ1bmN0aW9uID0gKEFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLldvcmtmbG93VmFyaWFibGVzU2VydmljZS5hZGRWYXJpYWJsZShBZGRNb2RlbClcclxuICB9XHJcbiAgYWRkV0ZWYXJpYWJsZUxvb2t1cGluQWRkTW9kZSgpIHtcclxuICAgIGxldCByZXN1bHQ6IGFueSA9IHRoaXMuaW5pdGlhbGl6ZVdGVmFyaWFibGVMb29rdXBPcHRpb25zKHRydWUpO1xyXG4gICAgdGhpcy5hZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSB0aGlzLmFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5jb25jYXQocmVzdWx0WzBdKTtcclxuICAgIHRoaXMuYWRkTGFzdExvb2t1cEluZGV4ID0gcmVzdWx0WzFdO1xyXG4gIH1cclxuXHJcbiAgLy9FZGl0IFdGIHZhcmlhYmxlXHJcbiAgc2hvd0VkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoV0ZWYXJpYWJsZUlEOiBzdHJpbmcsIEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVJZCA9IFdGVmFyaWFibGVJRDtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLmdldEVkaXRXb3JrRmxvd1ZhcmlhYmxlRGF0YShXRlZhcmlhYmxlSUQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgd29ya2Zsb3dWYXJpYWJsZSA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgd29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRF9HVUlEID0gd29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBsZXQgbGlzdHMgPSByZXN1bHRPYmoubGlzdHM7XHJcbiAgICAgIHRoaXMuRGF0YVR5cGVMaXN0ID0gbGlzdHMuZGF0YVR5cGVMaXN0O1xyXG5cclxuICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuZWRpdExhc3RMb29rdXBJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuc2hvd0VkaXRMb29rdXBzVGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5mb3JtR3JvdXAgPSB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVxyXG4gICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuZ2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFdGVmFyaWFibGVNb2RlbDtcclxuICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zLnNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFdGVmFyaWFibGVGdW5jdGlvbjtcclxuICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1ZpZXdFbGVtZW50XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5wYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGU7XHJcblxyXG4gICAgICBsZXQgbmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIG5hbWUuYXJhYmljID0gd29ya2Zsb3dWYXJpYWJsZS5uYW1lLmFyYWJpYztcclxuICAgICAgbmFtZS5lbmdsaXNoID0gd29ya2Zsb3dWYXJpYWJsZS5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZS5uYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLmFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZU5hbWUuZW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZS52YWx1ZSA9IG5hbWU7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLm1heExlbmd0aCA9IDI1NTtcclxuXHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlU3lzTmFtZS5uYW1lID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLmxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZVN5c05hbWUudmFsdWUgPSB3b3JrZmxvd1ZhcmlhYmxlLnN5c05hbWU7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLm1heExlbmd0aCA9IDEwMDtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVEYXRhVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLm5hbWUgPSBcIkRhdGFUeXBlSXRlbUlEX0dVSURcIlxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlRGF0YVR5cGUubGFiZWxLZXkgPSBcIkRhdGFUeXBlXCJcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLmRhdGFTb3VyY2UgPSB0aGlzLkRhdGFUeXBlTGlzdFxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlRGF0YVR5cGUuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLnBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLnNlbGVjdGVkSXRlbXMgPSB3b3JrZmxvd1ZhcmlhYmxlLmRhdGFUeXBlSXRlbUlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlQ29uc3RhbnQgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVDb25zdGFudC5uYW1lID0gXCJJc0NvbnN0YW50XCJcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZUNvbnN0YW50LmxhYmVsS2V5ID0gXCJDb25zdGFudFwiXHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVDb25zdGFudC52YWx1ZSA9IHdvcmtmbG93VmFyaWFibGUuaXNDb25zdGFudFxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlQ29uc3RhbnQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWxcclxuXHJcblxyXG4gICAgICBpZiAod29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRF9HVUlEID09IFZhcmlhYmxlRGF0YVR5cGUuU2luZ2xlU2VsZWN0aW9uIHx8IHdvcmtmbG93VmFyaWFibGUuZGF0YVR5cGVJdGVtSURfR1VJRCA9PSBWYXJpYWJsZURhdGFUeXBlLk11bHRpU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgLy9TZXQgTG9va3VwIENvbnRyb2xzXHJcbiAgICAgICAgdGhpcy5zZXRFZGl0VmFyaWFibGVMb29rdXBzKHdvcmtmbG93VmFyaWFibGUudmFyaWFibGVMb29rdXBEVE9zKTtcclxuICAgICAgICB0aGlzLnNob3dFZGl0TG9va3Vwc1RhYmxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldEVkaXRXRlZhcmlhYmxlTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBFZGl0TW9kZWwgPSBuZXcgV0ZWYXJpYWJsZU1vZGVsKCk7XHJcbiAgICBFZGl0TW9kZWwuSURfR1VJRCA9IHRoaXMuV29ya2Zsb3dWYXJpYWJsZUlkO1xyXG4gICAgRWRpdE1vZGVsLk5hbWUgPSBSZXN1bHRNb2RlbC5OYW1lXHJcbiAgICBFZGl0TW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLlN5c05hbWVcclxuICAgIEVkaXRNb2RlbC5Xb3JrZmxvd1ZlcnNpb25JRF9HVUlEID0gdGhpcy5WZXJzaW9uSWQ7XHJcbiAgICBFZGl0TW9kZWwuRGF0YVR5cGVJdGVtSURfR1VJRCA9IFJlc3VsdE1vZGVsLkRhdGFUeXBlSXRlbUlEX0dVSURcclxuICAgIEVkaXRNb2RlbC5Jc0NvbnN0YW50ID0gUmVzdWx0TW9kZWwuSXNDb25zdGFudFxyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5lZGl0TGFzdExvb2t1cEluZGV4OyBqKyspIHtcclxuICAgICAgbGV0IGVkaXRMb29rdXBJRCA9IFJlc3VsdE1vZGVsW1wiRWRpdExvb2t1cElEXCIgKyBqXTtcclxuICAgICAgaWYgKGVkaXRMb29rdXBJRCA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICBsZXQgZWRpdExvb2t1cE5hbWVFTiA9IFJlc3VsdE1vZGVsW1wiRWRpdExvb2t1cE5hbWVFTlwiICsgal07XHJcbiAgICAgIGxldCBlZGl0TG9va3VwTmFtZUFSID0gUmVzdWx0TW9kZWxbXCJFZGl0TG9va3VwTmFtZUFSXCIgKyBqXTtcclxuICAgICAgbGV0IGVkaXRMb29rdXBWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiRWRpdExvb2t1cFZhbHVlXCIgKyBqXTtcclxuXHJcbiAgICAgIGxldCBsb29rdXA6IFZhcmlhYmxlTG9va3VwTW9kZWwgPSBuZXcgVmFyaWFibGVMb29rdXBNb2RlbCgpO1xyXG4gICAgICBsb29rdXAuSURfR1VJRCA9IGVkaXRMb29rdXBJRDtcclxuICAgICAgbG9va3VwLk5hbWVFTiA9IGVkaXRMb29rdXBOYW1lRU47XHJcbiAgICAgIGxvb2t1cC5OYW1lQVIgPSBlZGl0TG9va3VwTmFtZUFSO1xyXG4gICAgICBsb29rdXAuVmFsdWUgPSBlZGl0TG9va3VwVmFsdWU7XHJcbiAgICAgIEVkaXRNb2RlbC52YXJpYWJsZUxvb2t1cERUT3MucHVzaChsb29rdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChFZGl0TW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG4gIGdldEVkaXRXRlZhcmlhYmxlRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLldvcmtmbG93VmFyaWFibGVzU2VydmljZS5lZGl0VmFyaWFibGUoRWRpdE1vZGVsKVxyXG4gIH1cclxuICBzZXRFZGl0VmFyaWFibGVMb29rdXBzKGV4aXN0aW5nTG9va3VwczogYW55W10pIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhpc3RpbmdMb29rdXBzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICBsZXQgb2JqZWN0QXR0cmlidXRlT3B0aW9uczogYW55W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBsb29rdXBJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBsb29rdXBJRC5uYW1lID0gXCJFZGl0TG9va3VwSURcIiArIGk7XHJcbiAgICAgIGxvb2t1cElELmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIGxvb2t1cElELnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgbG9va3VwSUQudmFsdWUgPSBleGlzdGluZ0xvb2t1cHNbaV0uaURfR1VJRDtcclxuXHJcbiAgICAgIGxldCBsb29rdXBOYW1lRU4gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgbG9va3VwTmFtZUVOLm5hbWUgPSBcIkVkaXRMb29rdXBOYW1lRU5cIiArIGk7XHJcbiAgICAgIGxvb2t1cE5hbWVFTi5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBsb29rdXBOYW1lRU4udHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICBsb29rdXBOYW1lRU4udmFsdWUgPSBleGlzdGluZ0xvb2t1cHNbaV0ubmFtZUVOO1xyXG4gICAgICBsb29rdXBOYW1lRU4uaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIGxvb2t1cE5hbWVFTi5tYXhMZW5ndGggPSAyNTU7XHJcblxyXG5cclxuICAgICAgbGV0IGxvb2t1cE5hbWVBUiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBsb29rdXBOYW1lQVIubmFtZSA9IFwiRWRpdExvb2t1cE5hbWVBUlwiICsgaTtcclxuICAgICAgbG9va3VwTmFtZUFSLmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIGxvb2t1cE5hbWVBUi50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIGxvb2t1cE5hbWVBUi52YWx1ZSA9IGV4aXN0aW5nTG9va3Vwc1tpXS5uYW1lQVI7XHJcbiAgICAgIGxvb2t1cE5hbWVBUi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgbG9va3VwTmFtZUFSLmZvcmNlRGlyZWN0aW9uID0gRm9yY2VEaXJlY3Rpb24uQXJhYmljO1xyXG4gICAgICBsb29rdXBOYW1lQVIubWF4TGVuZ3RoID0gMjU1O1xyXG5cclxuICAgICAgbGV0IGxvb2t1cFZhbHVlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIGxvb2t1cFZhbHVlLm5hbWUgPSBcIkVkaXRMb29rdXBWYWx1ZVwiICsgaTtcclxuICAgICAgbG9va3VwVmFsdWUuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgbG9va3VwVmFsdWUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICBsb29rdXBWYWx1ZS52YWx1ZSA9IGV4aXN0aW5nTG9va3Vwc1tpXS52YWx1ZTtcclxuICAgICAgbG9va3VwVmFsdWUuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIGxvb2t1cFZhbHVlLm1heExlbmd0aCA9IDIwMDA7XHJcblxyXG4gICAgICBvYmplY3RBdHRyaWJ1dGVPcHRpb25zLnB1c2gobG9va3VwSUQsIGxvb2t1cE5hbWVFTiwgbG9va3VwTmFtZUFSLCBsb29rdXBWYWx1ZSk7XHJcbiAgICAgIHRoaXMuZWRpdFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5wdXNoKG9iamVjdEF0dHJpYnV0ZU9wdGlvbnMpO1xyXG4gICAgICB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXggKz0gMTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG4gIGFkZFdGVmFyaWFibGVMb29rdXBpbkVkaXRNb2RlKCkge1xyXG4gICAgbGV0IHJlc3VsdDogYW55ID0gdGhpcy5pbml0aWFsaXplV0ZWYXJpYWJsZUxvb2t1cE9wdGlvbnMoZmFsc2UpO1xyXG4gICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLmNvbmNhdChyZXN1bHRbMF0pO1xyXG4gICAgdGhpcy5lZGl0TGFzdExvb2t1cEluZGV4ID0gcmVzdWx0WzFdO1xyXG4gIH1cclxuXHJcbiAgLy9XRiBBY3Rpdml0aXRpZXMgRnVuY3Rpb25zXHJcbiAgc2V0QWN0aXZpdHlMaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy5BY3Rpdml0eVBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVdvcmtmbG93QWN0aXZpdHkoKSB7XHJcbiAgICAvLyB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3gubmFtZSA9IFwiV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveFwiXHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3guaGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94LnR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94LnZhbHVlID0gdGhpcy5Xb3JrZmxvd0lkXHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJXb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94XCJcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcIldmSURcIlxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLkFjdGl2aXR5UGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuQWN0aXZpdHlQYWdpbmcuYWN0aW9uUG9zdFVSTCA9IHRoaXMuQWN0aXZpdHlBcGlVcmwgKyAnR2V0V29ya2Zsb3dBY3Rpdml0eUxpc3RpbmcnO1xyXG4gICAgdGhpcy5BY3Rpdml0eVBhZ2luZy5vbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIl1cclxuICAgIHRoaXMuQWN0aXZpdHlQYWdpbmcuZmlsdGVycyA9IFt0aGlzLldvcmtmbG93QWN0aXZpdHlJZEZpbHRlcl1cclxuICAgIHRoaXMuQWN0aXZpdHlQYWdpbmcudmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG5cclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZCA9IGZhbHNlXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgIH0sIDEwKTtcclxuXHJcbiAgICAvL3RoaXMud29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UuTG9hZGRyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAvLyAgbGV0IEFjdGl2aXR5TGlzdCA9IHJlc3VsdCBhcyBhbnlcclxuICAgIC8vICB0aGlzLkFjdGl2aXR5VHlwZUxpc3QgPSBBY3Rpdml0eUxpc3RcclxuXHJcblxyXG4gICAgLy99KVxyXG4gIH1cclxuXHJcbiAgLy9BZGQgQWN0aXZpdHkgV0YgdmFyaWFibGVzXHJcbiAgc2hvd0FkZFdGVmFyaWFibGVzdG9BY3Rpdml0eSh2ZXJzaW9uSUQ6IHN0cmluZywgYWN0aXZpdHlJRDogc3RyaW5nLCB3ZlZhcmlhYmxlc01vZGFsOiBhbnkpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLmFjdGl2aXR5SUQgPSBhY3Rpdml0eUlEO1xyXG4gICAgdGhpcy5hY3Rpdml0eVdGVmFyaWFibGVPcHRpb25zID0gW107XHJcbiAgICB0aGlzLmxhc3RBY3Rpdml0eVdGVmFyaWFibGVJbmRleCA9IDA7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLmdldEFjdGl2aXR5V0ZWYXJpYWJsZXModmVyc2lvbklELCBhY3Rpdml0eUlEKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0T2JqID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgbGV0IG1vZGVsID0gcmVzdWx0T2JqLm1vZGVsO1xyXG4gICAgICB0aGlzLmFjdGl2aXR5VmFyaWFibGVzTGlzdCA9IHJlc3VsdE9iai5hY3Rpdml0eVZhcmlhYmxlc0xpc3Q7XHJcblxyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cclxuICAgICAgdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1PcHRpb25zLmdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldGFkZFdGVmFyaWFibGV0b0FjdGl2aXR5TW9kZWw7XHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldGFkZFdGVmFyaWFibGV0b0FjdGl2aXR5RnVuY3Rpb247XHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucy5wYWdpbmdSZWZlcmVuY2UgPSB0aGlzLkFjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQ7XHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucy5wYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGU7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZGVsLmFjdGl2aXR5VmFyaWFibGVEVE9zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRWYXJpYWJsZSA9IG1vZGVsLmFjdGl2aXR5VmFyaWFibGVEVE9zW2ldO1xyXG4gICAgICAgIGxldCBvYmplY3RWYXJpYWJsZU9wdGlvbnM6IGFueVtdID0gW107XHJcblxyXG4gICAgICAgIGxldCBpc1N5c3RlbTogYm9vbGVhbiA9IGN1cnJlbnRWYXJpYWJsZS5pc1N5c3RlbTtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNTeXN0ZW0gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTsvL2hpZGRlblxyXG4gICAgICAgIHZhcmlhYmxlSXNTeXN0ZW0ubmFtZSA9IFwidmFyaWFibGVJc1N5c3RlbVwiICsgaTtcclxuICAgICAgICB2YXJpYWJsZUlzU3lzdGVtLmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgICAgdmFyaWFibGVJc1N5c3RlbS50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgdmFyaWFibGVJc1N5c3RlbS52YWx1ZSA9IGlzU3lzdGVtO1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFibGVJc0VuYWJsZWQgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdmFyaWFibGVJc0VuYWJsZWQubmFtZSA9IFwidmFyaWFibGVJc0VuYWJsZWRcIiArIGk7XHJcbiAgICAgICAgdmFyaWFibGVJc0VuYWJsZWQudmFsdWUgPSBjdXJyZW50VmFyaWFibGUuaXNFbmFibGVkO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkLmlzRGlzYWJsZWQgPSBpc1N5c3RlbTtcclxuXHJcbiAgICAgICAgLy9oaWRkZW4gZmllbGRcclxuICAgICAgICBsZXQgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4ubmFtZSA9IFwidmFyaWFibGVJc0VuYWJsZWRIaWRkZW5cIiArIGk7XHJcbiAgICAgICAgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4udmFsdWUgPSBjdXJyZW50VmFyaWFibGUuaXNFbmFibGVkO1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFibGVJc01hbmRhdG9yeSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB2YXJpYWJsZUlzTWFuZGF0b3J5Lm5hbWUgPSBcInZhcmlhYmxlSXNNYW5kYXRvcnlcIiArIGk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeS52YWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pc01hbmRhdG9yeTtcclxuICAgICAgICB2YXJpYWJsZUlzTWFuZGF0b3J5LmlzRGlzYWJsZWQgPSBpc1N5c3RlbTtcclxuXHJcbiAgICAgICAgLy9oaWRkZW4gZmllbGRcclxuICAgICAgICBsZXQgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbiA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuLm5hbWUgPSBcInZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW5cIiArIGk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbi52YWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pc01hbmRhdG9yeTtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNWaXNpYmxlID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlLm5hbWUgPSBcInZhcmlhYmxlSXNWaXNpYmxlXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlLnZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlzVmlzaWJsZTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZS5pc0Rpc2FibGVkID0gaXNTeXN0ZW07XHJcblxyXG4gICAgICAgIC8vaGlkZGVuIGZpZWxkXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuLm5hbWUgPSBcInZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuLnZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlzVmlzaWJsZTtcclxuXHJcbiAgICAgICAgb2JqZWN0VmFyaWFibGVPcHRpb25zLnB1c2godmFyaWFibGVJc1N5c3RlbSwgdmFyaWFibGVJc0VuYWJsZWQsIHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuLCB2YXJpYWJsZUlzTWFuZGF0b3J5LCB2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuLFxyXG4gICAgICAgICAgdmFyaWFibGVJc1Zpc2libGUsIHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuLCBpc1N5c3RlbSk7XHJcblxyXG4gICAgICAgIGlmIChpc1N5c3RlbSkge1xyXG4gICAgICAgICAgbGV0IHZhcmlhYmxlTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgdmFyaWFibGVOYW1lLm5hbWUgPSBcInZhcmlhYmxlTmFtZVwiICsgaTtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVOYW1lLmlzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVOYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS52YWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS52YXJpYWJsZU5hbWU7XHJcblxyXG4gICAgICAgICAgbGV0IHZhcmlhYmxlSUQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTsvL2hpZGRlblxyXG4gICAgICAgICAgdmFyaWFibGVJRC5uYW1lID0gXCJ2YXJpYWJsZUlEXCIgKyBpO1xyXG4gICAgICAgICAgdmFyaWFibGVJRC5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVJRC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICB2YXJpYWJsZUlELnZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgb2JqZWN0VmFyaWFibGVPcHRpb25zLnB1c2godmFyaWFibGVOYW1lLCB2YXJpYWJsZUlEKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHZhcmlhYmxlSURkcm9wZG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5uYW1lID0gXCJ2YXJpYWJsZUlEZHJvcGRvd25cIjtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVJRGRyb3Bkb3duLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB2YXJpYWJsZUlEZHJvcGRvd24uYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVJRGRyb3Bkb3duLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVJRGRyb3Bkb3duLmRhdGFTb3VyY2UgPSB0aGlzLmFjdGl2aXR5VmFyaWFibGVzTGlzdDtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5zZWxlY3RlZEl0ZW1zID0gY3VycmVudFZhcmlhYmxlLmlER1VJRD8udG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICBvYmplY3RWYXJpYWJsZU9wdGlvbnMucHVzaCh2YXJpYWJsZUlEZHJvcGRvd24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMucHVzaChvYmplY3RWYXJpYWJsZU9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMubGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4ICs9IDE7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4od2ZWYXJpYWJsZXNNb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0YWRkV0ZWYXJpYWJsZXRvQWN0aXZpdHlNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm0udmFsdWU7XHJcbiAgICBsZXQgbW9kZWwgPSBuZXcgV0ZBY3Rpdml0eVZhcmlhYmxlc01vZGVsKCk7XHJcbiAgICBtb2RlbC5BY3Rpdml0eUlEX0dVSUQgPSB0aGlzLmFjdGl2aXR5SUQ7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMubGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4OyBqKyspIHtcclxuICAgICAgbGV0IHZhcmlhYmxlc0lzU3lzdGVtID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzU3lzdGVtXCIgKyBqXTtcclxuICAgICAgaWYgKHZhcmlhYmxlc0lzU3lzdGVtID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCB2YXJpYWJsZUlzRW5hYmxlZDogYm9vbGVhbjtcclxuICAgICAgbGV0IHZhcmlhYmxlSXNNYW5kYXRvcnk6IGJvb2xlYW47XHJcbiAgICAgIGxldCB2YXJpYWJsZUlzVmlzaWJsZTogYm9vbGVhbjtcclxuXHJcbiAgICAgIGxldCBhY3Rpdml0eVZhcmlhYmxlOiBXRkFjdGl2aXR5VmFyaWFibGVEVE8gPSBuZXcgV0ZBY3Rpdml0eVZhcmlhYmxlRFRPKCk7XHJcblxyXG4gICAgICBpZiAodmFyaWFibGVzSXNTeXN0ZW0pIHtcclxuICAgICAgICBsZXQgdmFyaWFibGVJRCA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJRFwiICsgal07XHJcbiAgICAgICAgYWN0aXZpdHlWYXJpYWJsZS5JRF9HVUlEID0gdmFyaWFibGVJRDtcclxuXHJcbiAgICAgICAgdmFyaWFibGVJc0VuYWJsZWQgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSXNFbmFibGVkSGlkZGVuXCIgKyBqXTtcclxuICAgICAgICB2YXJpYWJsZUlzTWFuZGF0b3J5ID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuXCIgKyBqXTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZSA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc1Zpc2libGVIaWRkZW5cIiArIGpdO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCB2YXJpYWJsZUlEID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlEZHJvcGRvd25cIiArIGpdO1xyXG4gICAgICAgIGFjdGl2aXR5VmFyaWFibGUuSURfR1VJRCA9IHZhcmlhYmxlSUQ7XHJcblxyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzRW5hYmxlZFwiICsgal07XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeSA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc01hbmRhdG9yeVwiICsgal07XHJcbiAgICAgICAgdmFyaWFibGVJc1Zpc2libGUgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSXNWaXNpYmxlXCIgKyBqXTtcclxuICAgICAgfVxyXG4gICAgICBhY3Rpdml0eVZhcmlhYmxlLklzU3lzdGVtID0gdmFyaWFibGVzSXNTeXN0ZW07XHJcbiAgICAgIGFjdGl2aXR5VmFyaWFibGUuSXNFbmFibGVkID0gdmFyaWFibGVJc0VuYWJsZWQ7XHJcbiAgICAgIGFjdGl2aXR5VmFyaWFibGUuSXNNYW5kYXRvcnkgPSB2YXJpYWJsZUlzTWFuZGF0b3J5O1xyXG4gICAgICBhY3Rpdml0eVZhcmlhYmxlLklzVmlzaWJsZSA9IHZhcmlhYmxlSXNWaXNpYmxlO1xyXG4gICAgICBtb2RlbC5hY3Rpdml0eVZhcmlhYmxlRFRPcy5wdXNoKGFjdGl2aXR5VmFyaWFibGUpO1xyXG4gICAgfVxyXG4gICAgcGFyYW1BcnJheS5wdXNoKG1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuICBnZXRhZGRXRlZhcmlhYmxldG9BY3Rpdml0eUZ1bmN0aW9uID0gKHZhcmlhYmxlc01vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLndvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLmFkZEFjdGl2aXR5V0ZWYXJpYWJsZXModmFyaWFibGVzTW9kZWwpXHJcbiAgfVxyXG4gIGRlbGV0ZUFjdGl2aXR5V0ZWYXJpYWJsZShkZWxldGVkVmFyaWFibGU6IGFueSkge1xyXG4gICAgbGV0IGRlbGV0ZWRWYXJpYWJsZUluZGV4OiBudW1iZXIgPSB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMuaW5kZXhPZihkZWxldGVkVmFyaWFibGUpO1xyXG4gICAgaWYgKGRlbGV0ZWRWYXJpYWJsZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMuc3BsaWNlKGRlbGV0ZWRWYXJpYWJsZUluZGV4LCAxKTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVkVmFyaWFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKGRlbGV0ZWRWYXJpYWJsZVtpXS5OYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBhZGROZXdBY3Rpdml0eVdGVmFyaWFibGUoKSB7XHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLmxhc3RBY3Rpdml0eVdGVmFyaWFibGVJbmRleDtcclxuXHJcbiAgICBsZXQgb2JqZWN0VmFyaWFibGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGxldCB2YXJpYWJsZUlEZHJvcGRvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB2YXJpYWJsZUlEZHJvcGRvd24ubmFtZSA9IFwidmFyaWFibGVJRGRyb3Bkb3duXCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSURkcm9wZG93bi5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB2YXJpYWJsZUlEZHJvcGRvd24uYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLmRhdGFTb3VyY2UgPSB0aGlzLmFjdGl2aXR5VmFyaWFibGVzTGlzdDtcclxuXHJcbiAgICBsZXQgaXNTeXN0ZW06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc1N5c3RlbSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpOy8vaGlkZGVuXHJcbiAgICB2YXJpYWJsZUlzU3lzdGVtLm5hbWUgPSBcInZhcmlhYmxlSXNTeXN0ZW1cIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc1N5c3RlbS5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJc1N5c3RlbS50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB2YXJpYWJsZUlzU3lzdGVtLnZhbHVlID0gaXNTeXN0ZW07XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNFbmFibGVkID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc0VuYWJsZWQubmFtZSA9IFwidmFyaWFibGVJc0VuYWJsZWRcIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc0VuYWJsZWQudmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbi5uYW1lID0gXCJ2YXJpYWJsZUlzRW5hYmxlZEhpZGRlblwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbi52YWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCB2YXJpYWJsZUlzTWFuZGF0b3J5ID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc01hbmRhdG9yeS5uYW1lID0gXCJ2YXJpYWJsZUlzTWFuZGF0b3J5XCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSXNNYW5kYXRvcnkudmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbiA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4ubmFtZSA9IFwidmFyaWFibGVJc01hbmRhdG9yeUhpZGRlblwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuLnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNWaXNpYmxlID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc1Zpc2libGUubmFtZSA9IFwidmFyaWFibGVJc1Zpc2libGVcIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc1Zpc2libGUudmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc1Zpc2libGVIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi5uYW1lID0gXCJ2YXJpYWJsZUlzVmlzaWJsZUhpZGRlblwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi52YWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIG9iamVjdFZhcmlhYmxlT3B0aW9ucy5wdXNoKHZhcmlhYmxlSXNTeXN0ZW0sIHZhcmlhYmxlSXNFbmFibGVkLCB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbiwgdmFyaWFibGVJc01hbmRhdG9yeSwgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbixcclxuICAgICAgdmFyaWFibGVJc1Zpc2libGUsIHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuLCBpc1N5c3RlbSwgdmFyaWFibGVJRGRyb3Bkb3duKTtcclxuXHJcbiAgICB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMucHVzaChvYmplY3RWYXJpYWJsZU9wdGlvbnMpO1xyXG4gICAgdGhpcy5sYXN0QWN0aXZpdHlXRlZhcmlhYmxlSW5kZXggKz0gMTtcclxuICB9XHJcblxyXG4gIC8vT24gZGVzdHJveVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICA8dWwgbmdiTmF2ICNuYXY9XCJuZ2JOYXZcIiBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzIG5hdi1saW5lLXRhYnMtMnggYm9yZGVyLXRyYW5zcGFyZW50IGZzLTUgZnctYm9sZGVyXCI+XHJcbiAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1hY3RpdmUtcHJpbWFyeSBtcy0wIG1lLTEwIHB5LTVcIiAoY2xpY2spPVwiZ2V0RGV0YWlscygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGV0YWlsc1wiKX19PC9hPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTUgcHgtMCAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIlNob3dXb3JrZmxvd0RldGFpbHMmJiFXb3JrZmxvd0RldGFpbHMuaXNQdWJsaXNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnRuUHVibGlzaFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzaG93UHVibGlzaFdGTW9kYWwoV29ya2Zsb3dEZXRhaWxzLmlEX0dVSUQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHVibGlzaFdvcmtmbG93XCIpfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPGEgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHJldmlld1wiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvYT4tLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJEZXRhaWxzRm9ybVwiICpuZ0lmPVwiU2hvd1dvcmtmbG93RGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJOYW1lTXVsdGlsaW5ndWFsVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJEZXRhaWxzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlN5c05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiUHVibGlzaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJEZXRhaWxzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuXHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwhLS1QdWJsaXNoIHdvcmtmbG93IGNvbmZpcm1hdGlvbi0tPlxyXG4gICAgICAgICAgPEJCU0YtQ29uZmlybWF0aW9uTW9kYWwgKm5nSWY9XCJwdWJsaXNoQ29udHJvbExvYWRlZFwiIFtvcHRpb25zXT1cInB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnNcIiBpZD1cInB1Ymxpc2hDb25maXJtYXRpb25Nb2RhbENvbnRyb2xcIiAjcHVibGlzaENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbD48L0JCU0YtQ29uZmlybWF0aW9uTW9kYWw+XHJcblxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1hY3RpdmUtcHJpbWFyeSBtcy0wIG1lLTEwIHB5LTVcIiAoY2xpY2spPVwiaW5pdGlhbGl6ZVZlcnNpb24oKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZlcnNpb25zXCIpfX08L2E+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJXb3JrZmxvd1ZlcnNpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJzZWFyY2hUZXh0Qm94XCIgW2dyb3VwXT1cIldvcmtmbG93VmVyc2lvbkZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIldvcmtmbG93SWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJXb3JrZmxvd1ZlcnNpb25Gb3JtXCIgW2hpZGRlbl09XCJ0cnVlXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tYmVnaW46OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDaGFuZ2VcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ3VycmVudFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQdWJsaXNoZWRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ3JlYXRpb25EYXRlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB2ZXJzaW9uIG9mIFdvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vV29ya2Zsb3dzL1ZlcnNpb25JbmZvJyx2ZXJzaW9uLmlEX0dVSURdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFya1wiPnt7dmVyc2lvbi5jaGFuZ2VTdHJ9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7dmVyc2lvbi5pc0N1cnJlbnR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3ZlcnNpb24uaXNQdWJsaXNoZWR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3ZlcnNpb24uY3JlYXRpb25EYXRlfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIldvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFdvcmtmbG93VmVyc2lvbkxpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIldvcmtmbG93VmVyc2lvblBhZ2luZ1wiIFtncm91cF09XCJXb3JrZmxvd1ZlcnNpb25Gb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjV29ya2Zsb3dWZXJzaW9uUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImluaXRpYWxpemVXb3JrZmxvd1ZhcmlhYmxlcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dWYXJpYWJsZXNcIil9fTwvYT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01IHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJJc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIldvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIldvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIldvcmtmbG93VmFyaWFibGVGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlZlcmlzb25JZFRleHRCb3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiV29ya2Zsb3dWYXJpYWJsZUZvcm1cIiBbaGlkZGVuXT1cInRydWVcIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRpdGxlPVwiQWRkXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0FkZFdvcmtmbG93VmFyaWFibGVNb2RhbChBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtcGx1c1wiPjwvaT4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU3lzTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEYXRhVHlwZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWYXJpYWJsZVR5cGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IFdvcmtmbG93VmFyaWFibGUgb2YgV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInRleHQtZGFya1wiPnt7V29ya2Zsb3dWYXJpYWJsZS5uYW1lU3RyfX08L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7V29ya2Zsb3dWYXJpYWJsZS5zeXNOYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7V29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW19fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e1dvcmtmbG93VmFyaWFibGUudmFyaWFibGVUeXBlSXRlbX19PC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgYnRuLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbChXb3JrZmxvd1ZhcmlhYmxlLmlEX0dVSUQsIEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFdvcmtmbG93VmFyaWFibGVMaXN0UmVzdWx0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkXCIgW29wdGlvbnNdPVwiV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIldvcmtmbG93VmFyaWFibGVGb3JtXCIgI1dvcmtmbG93VmFyaWFibGVQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICAgICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPCEtLWVuZDo6IFdpZGdldHMvQXBwbGljYXRpb25zL1VzZXIvUHJvZmlsZTMtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gQWRkIE1vZGFsIC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI0FkZFdvcmtmbG93VmFyaWFibGVNb2RhbCBsZXQtbW9kYWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dWYXJpYWJsZVwiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9uc1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiQWRkV0ZWYXJpYWJsZU5hbWVcIiBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiQWRkV0ZWYXJpYWJsZVN5c05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAoT25DaGFuZ2UpPVwiV0ZWYXJpYWJsZVR5cGVPbkNoYW5nZSgkZXZlbnQsdHJ1ZSlcIiBbb3B0aW9uc109XCJBZGRXRlZhcmlhYmxlRGF0YVR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiQWRkV0ZWYXJpYWJsZUNvbnN0YW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwic2hvd0FkZExvb2t1cHNUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyIHRhYmxlLXctY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZUVOXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lQVJcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZhbHVlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucztsZXQgaT1pbmRleDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzBdXCIgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMV1cIiBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblsyXVwiIFtncm91cF09XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtXCIgKGNsaWNrKT1cImRlbGV0ZVdGVmFyaWFibGVMb29rdXAob3B0aW9uLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtdHJhc2ggaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidy0xMDAgYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cImFkZFdGVmFyaWFibGVMb29rdXBpbkFkZE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZE5ld1JlY29yZFwiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICNDbG9zZVdvcmtmbG93VmFyaWFibGVNb2RhbCBpZD1cIkNsb3NlV29ya2Zsb3dWYXJpYWJsZU1vZGFsXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L0JCU0YtRm9ybT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS1FZGl0IE1vZGFsLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjRWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbCBsZXQtbW9kYWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVcIil9fVxyXG4gICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRXRlZhcmlhYmxlTmFtZVwiIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdFdGVmFyaWFibGVTeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IChPbkNoYW5nZSk9XCJXRlZhcmlhYmxlVHlwZU9uQ2hhbmdlKCRldmVudCxmYWxzZSlcIiBbb3B0aW9uc109XCJFZGl0V0ZWYXJpYWJsZURhdGFUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJFZGl0V0ZWYXJpYWJsZUNvbnN0YW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cInNob3dFZGl0TG9va3Vwc1RhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lRU5cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVBUlwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVmFsdWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZWRpdFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucztsZXQgaT1pbmRleDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzBdXCIgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMV1cIiBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMl1cIiBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bM11cIiBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LWRhbmdlciBidG4tc21cIiAoY2xpY2spPVwiZGVsZXRlV0ZWYXJpYWJsZUxvb2t1cChvcHRpb24sZmFsc2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtdHJhc2ggaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidy0xMDAgYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cImFkZFdGVmFyaWFibGVMb29rdXBpbkVkaXRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGROZXdSZWNvcmRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gI0Nsb3NlRWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbCBpZD1cIkNsb3NlRWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSAgbWUtM1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLUZvcm0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImluaXRpYWxpemVXb3JrZmxvd0FjdGl2aXR5KClcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dBY3Rpdml0aWVzXCIpfX1cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01IHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJJc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIndvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZmlsdGVyc0NvbnRhaW5lclwiIGRhdGEtaXNsb2FkZWQ9XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIndvcmtmbG93QWN0aXZpdHlGb3JtXCIgW2hpZGRlbl09XCJ0cnVlXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRpdGxlPVwiQWRkXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vV29ya2Zsb3dzL0FkZEFjdGl2aXR5JyxWZXJzaW9uSWRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzXCI+PC9pPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgbWItOFwiICpuZ0Zvcj1cImxldCB3b3JrZmxvd0FjdGl2aXR5IG9mIEFjdGl2aXR5UGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgYmctbGlnaHQtZGFyayByb3VuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBtLTAgZnMtMiB0ZXh0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e3dvcmtmbG93QWN0aXZpdHkudHlwZU5hbWVTdHJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtZS0yIFwiIChjbGljayk9XCJzaG93QWRkV0ZWYXJpYWJsZXN0b0FjdGl2aXR5KHdvcmtmbG93QWN0aXZpdHkudmVyc2lvbklEX0dVSUQsd29ya2Zsb3dBY3Rpdml0eS5pRF9HVUlELHdmQWN0aXZpdHlWYXJpYWJsZXNNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZ2VhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dWYXJpYWJsZXNcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYnRuQWRkXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LXByaW1hcnkgYnRuLXNtIGJ0bi1pY29uIG1lLTJcIiBbcm91dGVyTGlua109XCJbJy9BZG1pbi9Xb3JrZmxvd3MvRWRpdEFjdGl2aXR5Jyx3b3JrZmxvd0FjdGl2aXR5LmlEX0dVSURdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIndvcmtmbG93QWN0aXZpdHkuaXNQdWJsaXNoZWRcIiBjbGFzcz1cImZhcyBmYS1wZW5cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiF3b3JrZmxvd0FjdGl2aXR5LmlzUHVibGlzaGVkXCIgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgZnctYm9sZGVyIHRleHQtZGFya1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldGT3V0Y29tZVwiKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIGZ3LWJvbGQgZnMtNSBtdC0xIG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd1ZhcmlhYmxlc1wiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cImhvcml6b250YWxtZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1kYXJrXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd29ya2Zsb3dBY3Rpdml0eS52YXJpYWJsZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZ2VhclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5zeXNOYW1lfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiB3b3JrZmxvd0FjdGl2aXR5Lm91dGNvbWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWVFTiB9fToge3tpdGVtLm5leHRBY3R2aXR5TmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tZW5kOjogQ2FyZCBib2R5LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRBY3Rpdml0eUxpc3RSZXN1bHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJJc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWRcIiBbb3B0aW9uc109XCJBY3Rpdml0eVBhZ2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIndvcmtmbG93QWN0aXZpdHlGb3JtXCIgI0FjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3ZkFjdGl2aXR5VmFyaWFibGVzTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFdvcmtmbG93VmFyaWFibGVzXCIpfX1cclxuICAgICAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1PcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlciB0YWJsZS13LWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVzXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbmFibGVkXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJNYW5kYXRvcnlcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZpc2libGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYWN0aXZpdHlXRlZhcmlhYmxlT3B0aW9ucztsZXQgaT1pbmRleDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1oaWRkZW4gaXMgc3lzdGVtLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzBdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pZiBpcyBzeXN0bS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3B0aW9uWzddO2Vsc2UgdmFyaWFibGVOYW1lRERMO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS12YXJpYXZsZSBuYW1lLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bOF1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWhpZGRlbiB2YXJpYWJsZSBpZC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzldXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLXZhcmlhdmxlIG5hbWUgZGRsLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdmFyaWFibGVOYW1lRERMPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJvcHRpb25bOF1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pcyBlbmFibGVkLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvblsxXVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJvcHRpb25bMl1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pcyBtYW5kYXRvcnktLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwib3B0aW9uWzNdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvbls0XVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWlzIHZpc2libGUtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwib3B0aW9uWzVdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvbls2XVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWlmICEgaXNTeXN0ZW0tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhb3B0aW9uWzddXCIgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LWRhbmdlciBidG4tc21cIiAoY2xpY2spPVwiZGVsZXRlQWN0aXZpdHlXRlZhcmlhYmxlKG9wdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIiBmYSBmYS10cmFzaCBoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ3LTEwMCBidG4gYnRuLXN1Y2Nlc3NcIiAoY2xpY2spPVwiYWRkTmV3QWN0aXZpdHlXRlZhcmlhYmxlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGROZXdSZWNvcmRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSAgbWUtM1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLUZvcm0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgICA8ZGl2IFtuZ2JOYXZPdXRsZXRdPVwibmF2XCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG4iXX0=
|