@bnsights/bbsf-admin-portal 1.0.4 → 1.0.8

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.
Files changed (150) hide show
  1. package/bnsights-bbsf-admin-portal-1.0.8.tgz +0 -0
  2. package/bundles/bnsights-bbsf-admin-portal.umd.js +8335 -3660
  3. package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
  4. package/esm2015/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.js +2 -2
  5. package/esm2015/lib/Pages/account/account-routing.module.js +9 -1
  6. package/esm2015/lib/Pages/account/account.component.js +15 -6
  7. package/esm2015/lib/Pages/account/account.module.js +19 -8
  8. package/esm2015/lib/Pages/account/activation/activation.component.js +91 -0
  9. package/esm2015/lib/Pages/account/forgot-password/forgot-password.component.js +54 -0
  10. package/esm2015/lib/Pages/account/rest-password/rest-password.component.js +89 -0
  11. package/esm2015/lib/Pages/account/upload-license/upload-license.component.js +70 -0
  12. package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +203 -184
  13. package/esm2015/lib/Pages/core/authentication/auth.guard.js +10 -4
  14. package/esm2015/lib/Pages/core/authentication/auth.service.js +1 -2
  15. package/esm2015/lib/Pages/departments/department/department.component.js +12 -9
  16. package/esm2015/lib/Pages/departments/department-info/department-info.component.js +1 -1
  17. package/esm2015/lib/Pages/departments/departments.module.js +6 -4
  18. package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +9 -9
  19. package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +9 -9
  20. package/esm2015/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.js +9 -9
  21. package/esm2015/lib/Pages/home/home.component.js +2 -2
  22. package/esm2015/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.js +1 -1
  23. package/esm2015/lib/Pages/jobs/jobs/jobs.component.js +1 -1
  24. package/esm2015/lib/Pages/localizations/localizations.component.js +10 -11
  25. package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +10 -10
  26. package/esm2015/lib/Pages/lookups/lookup-group/lookup-group.component.js +5 -5
  27. package/esm2015/lib/Pages/lookups/lookup-item/lookup-item.component.js +5 -5
  28. package/esm2015/lib/Pages/notifications/add/add.component.js +11 -13
  29. package/esm2015/lib/Pages/notifications/edit/edit.component.js +11 -13
  30. package/esm2015/lib/Pages/notifications/master-layouts/master-layouts.component.js +1 -1
  31. package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +5 -5
  32. package/esm2015/lib/Pages/notifications/templates/templates.component.js +9 -9
  33. package/esm2015/lib/Pages/providers/provider/provider.component.js +2 -1
  34. package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +78 -84
  35. package/esm2015/lib/Pages/roles/permission-set-info/permission-set-info.component.js +1 -1
  36. package/esm2015/lib/Pages/roles/permissions/permissions.component.js +5 -5
  37. package/esm2015/lib/Pages/roles/permissionsets/permissionsets.component.js +5 -5
  38. package/esm2015/lib/Pages/sectors/department-info/department-info.component.js +1 -1
  39. package/esm2015/lib/Pages/sectors/sector/sector.component.js +5 -5
  40. package/esm2015/lib/Pages/sectors/sector-info/sector-info.component.js +1 -1
  41. package/esm2015/lib/Pages/shared/Enums/ConditionRHSType.js +6 -0
  42. package/esm2015/lib/Pages/shared/Enums/ConfigurationScope.js +8 -0
  43. package/esm2015/lib/Pages/shared/Enums/ConfigurationType.js +8 -0
  44. package/esm2015/lib/Pages/shared/Enums/ConfigurationValueSource.js +6 -0
  45. package/esm2015/lib/Pages/shared/Enums/WFActivityType.js +12 -0
  46. package/esm2015/lib/Pages/shared/Enums/WFVariableDataType.js +14 -0
  47. package/esm2015/lib/Pages/shared/Services/AccountService.service.js +41 -0
  48. package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +1 -1
  49. package/esm2015/lib/Pages/shared/Services/WorkFlowVersionService.service.js +24 -0
  50. package/esm2015/lib/Pages/shared/Services/WorkflowActivityService.service.js +32 -5
  51. package/esm2015/lib/Pages/shared/Services/WorkflowInstanceService.service.js +24 -0
  52. package/esm2015/lib/Pages/shared/Services/WorkflowLogVariablesService.service.js +24 -0
  53. package/esm2015/lib/Pages/shared/Services/WorkflowService.service.js +12 -4
  54. package/esm2015/lib/Pages/shared/Services/WorkflowVariablesService.service.js +12 -6
  55. package/esm2015/lib/Pages/shared/models/AccountModels/forgotPasswordModel.js +6 -0
  56. package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentModel.js +3 -2
  57. package/esm2015/lib/Pages/shared/models/UserModels/ActivationModel.js +3 -0
  58. package/esm2015/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.js +8 -0
  59. package/esm2015/lib/Pages/users/users.component.js +7 -6
  60. package/esm2015/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.js +535 -0
  61. package/esm2015/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.js +852 -0
  62. package/esm2015/lib/Pages/workflows/instance-info/instance-info.component.js +309 -0
  63. package/esm2015/lib/Pages/workflows/tabs/tabs.component.js +611 -430
  64. package/esm2015/lib/Pages/workflows/version-info/version-info.component.js +143 -0
  65. package/esm2015/lib/Pages/workflows/workflow/workflow.component.js +136 -148
  66. package/esm2015/lib/Pages/workflows/workflows-routing.module.js +9 -1
  67. package/esm2015/lib/Pages/workflows/workflows.module.js +7 -3
  68. package/esm2015/lib/masterlayout.component.js +1 -2
  69. package/esm2015/lib/masterlayout.module.js +2 -4
  70. package/esm2015/public-api.js +2 -1
  71. package/fesm2015/bnsights-bbsf-admin-portal.js +7678 -3098
  72. package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
  73. package/lib/Pages/account/account.component.d.ts +5 -1
  74. package/lib/Pages/account/account.module.d.ts +11 -6
  75. package/lib/Pages/account/activation/activation.component.d.ts +32 -0
  76. package/lib/Pages/account/forgot-password/forgot-password.component.d.ts +23 -0
  77. package/lib/Pages/account/rest-password/rest-password.component.d.ts +32 -0
  78. package/lib/Pages/account/upload-license/upload-license.component.d.ts +25 -0
  79. package/lib/Pages/configurations/configuration/configuration.component.d.ts +12 -8
  80. package/lib/Pages/core/authentication/auth.guard.d.ts +1 -0
  81. package/lib/Pages/departments/department/department.component.d.ts +3 -2
  82. package/lib/Pages/departments/department-info/department-info.component.d.ts +1 -1
  83. package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +1 -1
  84. package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +1 -1
  85. package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +1 -1
  86. package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +1 -1
  87. package/lib/Pages/jobs/jobs/jobs.component.d.ts +6 -6
  88. package/lib/Pages/localizations/localizations.component.d.ts +1 -1
  89. package/lib/Pages/lookups/lookup/lookup.component.d.ts +1 -1
  90. package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +1 -1
  91. package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +1 -1
  92. package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +1 -1
  93. package/lib/Pages/notifications/templates/templates.component.d.ts +1 -1
  94. package/lib/Pages/providers/provider/provider.component.d.ts +1 -1
  95. package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +12 -15
  96. package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +1 -1
  97. package/lib/Pages/roles/permissions/permissions.component.d.ts +1 -1
  98. package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +1 -1
  99. package/lib/Pages/sectors/department-info/department-info.component.d.ts +1 -1
  100. package/lib/Pages/sectors/sector/sector.component.d.ts +1 -1
  101. package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +1 -1
  102. package/lib/Pages/shared/Enums/ConditionRHSType.d.ts +4 -0
  103. package/lib/Pages/shared/Enums/ConfigurationScope.d.ts +5 -0
  104. package/lib/Pages/shared/Enums/ConfigurationType.d.ts +6 -0
  105. package/lib/Pages/shared/Enums/ConfigurationValueSource.d.ts +4 -0
  106. package/lib/Pages/shared/Enums/WFActivityType.d.ts +10 -0
  107. package/lib/Pages/shared/Enums/WFVariableDataType.d.ts +12 -0
  108. package/lib/Pages/shared/Services/AccountService.service.d.ts +17 -0
  109. package/lib/Pages/shared/Services/ActiveDirectoryService.service.d.ts +8 -8
  110. package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +7 -7
  111. package/lib/Pages/shared/Services/DepartmentService.service.d.ts +7 -7
  112. package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +5 -5
  113. package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +8 -8
  114. package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +5 -5
  115. package/lib/Pages/shared/Services/JobsService.service.d.ts +1 -1
  116. package/lib/Pages/shared/Services/LicenseService.service.d.ts +2 -2
  117. package/lib/Pages/shared/Services/LogsService.d.ts +1 -1
  118. package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +4 -4
  119. package/lib/Pages/shared/Services/LookupService.service.d.ts +14 -14
  120. package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +8 -8
  121. package/lib/Pages/shared/Services/PermissionsService.service.d.ts +5 -5
  122. package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +6 -6
  123. package/lib/Pages/shared/Services/SectorService.service.d.ts +7 -7
  124. package/lib/Pages/shared/Services/TemplateService.service.d.ts +20 -20
  125. package/lib/Pages/shared/Services/WorkFlowVersionService.service.d.ts +10 -0
  126. package/lib/Pages/shared/Services/WorkflowActivityService.service.d.ts +9 -3
  127. package/lib/Pages/shared/Services/WorkflowInstanceService.service.d.ts +10 -0
  128. package/lib/Pages/shared/Services/WorkflowLogVariablesService.service.d.ts +10 -0
  129. package/lib/Pages/shared/Services/WorkflowService.service.d.ts +5 -3
  130. package/lib/Pages/shared/Services/WorkflowVariablesService.service.d.ts +5 -4
  131. package/lib/Pages/shared/Services/localizationsService.service .d.ts +12 -12
  132. package/lib/Pages/shared/Services/provider.service.d.ts +10 -10
  133. package/lib/Pages/shared/Services/userService.service.d.ts +14 -14
  134. package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -0
  135. package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +9 -8
  136. package/lib/Pages/shared/models/UserModels/ActivationModel.d.ts +10 -0
  137. package/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.d.ts +13 -0
  138. package/lib/Pages/users/users.component.d.ts +1 -1
  139. package/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.d.ts +77 -0
  140. package/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.d.ts +83 -0
  141. package/lib/Pages/workflows/instance-info/instance-info.component.d.ts +81 -0
  142. package/lib/Pages/workflows/tabs/tabs.component.d.ts +73 -80
  143. package/lib/Pages/workflows/version-info/version-info.component.d.ts +41 -0
  144. package/lib/Pages/workflows/workflow/workflow.component.d.ts +26 -29
  145. package/lib/Pages/workflows/workflows.module.d.ts +19 -15
  146. package/package.json +5 -3
  147. package/public-api.d.ts +1 -0
  148. package/src/lib/assets/sass/core/components/_variables.scss +1 -1
  149. package/src/lib/assets/sass/custom-styles-rtl.scss +5 -0
  150. package/src/lib/assets/sass/custom-styles.scss +38 -0
@@ -0,0 +1,309 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component } from '@angular/core';
3
+ import { FormGroup } from '@angular/forms';
4
+ import { EnglishArabicDTO, FilterItem, FilterType, InputType, MultiLingualTextBoxOptions, PagingOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
5
+ import { PageInfoService } from '../../../../public-api';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@bnsights/bbsf-utilities";
8
+ import * as i2 from "../../shared/Services/WorkflowInstanceService.service";
9
+ import * as i3 from "@angular/router";
10
+ import * as i4 from "../../../../public-api";
11
+ import * as i5 from "../../shared/Services/WorkflowLogVariablesService.service";
12
+ import * as i6 from "@ng-bootstrap/ng-bootstrap";
13
+ import * as i7 from "ng-block-ui";
14
+ import * as i8 from "@bnsights/bbsf-controls";
15
+ import * as i9 from "../../empty-data/empty-data.component";
16
+ import * as i10 from "@angular/material/menu";
17
+ import * as i11 from "@angular/common";
18
+ import * as i12 from "@angular/forms";
19
+ import * as i13 from "ng-inline-svg";
20
+ export class InstanceInfoComponent {
21
+ //End WorkFlow errors
22
+ constructor(authService, workFlowInstanceService, activatedRoute, pageInfoService, bbsfTranslateService, utilityService, wfLogVariablesService, modalService, requestHandlerService) {
23
+ this.authService = authService;
24
+ this.workFlowInstanceService = workFlowInstanceService;
25
+ this.activatedRoute = activatedRoute;
26
+ this.pageInfoService = pageInfoService;
27
+ this.bbsfTranslateService = bbsfTranslateService;
28
+ this.utilityService = utilityService;
29
+ this.wfLogVariablesService = wfLogVariablesService;
30
+ this.modalService = modalService;
31
+ this.requestHandlerService = requestHandlerService;
32
+ // Details Controls
33
+ this.detailsForm = new FormGroup({});
34
+ this.showInstanceDetails = false;
35
+ //Start WorkFlow variables
36
+ this.workFlowVariablesApiUrl = "/api/admin/WorkflowInstanceVariable/";
37
+ this.workflowVariablesForm = new FormGroup({});
38
+ this.workFlowVariablesPagingResult = [];
39
+ this.isWFVariablesFilterLoaded = false;
40
+ //End WorkFlow variables
41
+ //Start WorkFlow tasks
42
+ this.workFlowTasksApiUrl = "/api/admin/WorkflowInstanceTask/";
43
+ this.tasksForm = new FormGroup({});
44
+ this.tasksPagingResult = [];
45
+ this.isWFTasksFilterLoaded = false;
46
+ //End WorkFlow tasks
47
+ //Start WorkFlow errors
48
+ this.workFlowErrorsApiUrl = "/api/admin/WorkflowInstanceError/";
49
+ this.errorsForm = new FormGroup({});
50
+ this.errorsPagingResult = [];
51
+ this.isWFErrorsFilterLoaded = false;
52
+ //End WorkFlow errors
53
+ //Start WorkFlow logs
54
+ this.workFlowLogsApiUrl = "/api/admin/WorkflowLog/";
55
+ this.logsForm = new FormGroup({});
56
+ this.logsPagingResult = [];
57
+ this.isWFLogsFilterLoaded = false;
58
+ //End WorkFlow errors
59
+ //Start WorkFlow log variables
60
+ this.logVariablesPagingResult = [];
61
+ this.activatedRoute.params.subscribe(params => {
62
+ this.instanceID = params['id'];
63
+ });
64
+ }
65
+ ngOnInit() {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ this.bbsfTranslateService.onLangChange.subscribe((event) => {
68
+ this.ngOnInit();
69
+ });
70
+ this.getDetails();
71
+ });
72
+ }
73
+ //WF instance functions
74
+ getDetails() {
75
+ this.showInstanceDetails = false;
76
+ this.isWFVariablesFilterLoaded = false;
77
+ this.workFlowInstanceService.getDetails(this.instanceID).subscribe((result) => {
78
+ this.instanceDetails = result;
79
+ var Name = new EnglishArabicDTO();
80
+ Name.Arabic = this.instanceDetails.name.arabic;
81
+ Name.English = this.instanceDetails.name.english;
82
+ PageInfoService.PageTitle = this.instanceDetails.nameStr;
83
+ PageInfoService.PageBreadcrumbs = [
84
+ { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
85
+ { title: '', path: '', isSeparator: true, isActive: false },
86
+ { title: this.utilityService.getResourceValue("WorkFlows"), path: '/Admin/Workflows/workflow', isSeparator: false, isActive: false },
87
+ { title: '', path: '', isSeparator: true, isActive: false },
88
+ { title: this.instanceDetails.workflowNameStr, path: `/Admin/Workflows/tabs/${this.instanceDetails.workFlowID}/${this.instanceDetails.versionID}`, isSeparator: false, isActive: false },
89
+ { title: '', path: '', isSeparator: true, isActive: false },
90
+ { title: this.instanceDetails.versionNameStr, path: `/Admin/Workflows/VersionInfo/${this.instanceDetails.versionIDEnc}`, isSeparator: false, isActive: false },
91
+ { title: '', path: '', isSeparator: true, isActive: false }
92
+ ];
93
+ this.pageInfoService.calculateTitle();
94
+ this.pageInfoService.calculateBreadcrumbs();
95
+ this.instanceName = new MultiLingualTextBoxOptions();
96
+ this.instanceName.Name = "instanceName";
97
+ this.instanceName.ArabicLabelKey = "NameInArabic";
98
+ this.instanceName.EnglishLabelKey = "NameInEnglish";
99
+ this.instanceName.Value = Name;
100
+ this.instanceName.IsDisabled = true;
101
+ this.instanceCreator = new TextBoxOptions();
102
+ this.instanceCreator.Name = "instanceCreator";
103
+ this.instanceCreator.LabelKey = "CreatedBy";
104
+ this.instanceCreator.Type = InputType.Text;
105
+ this.instanceCreator.IsDisabled = true;
106
+ this.instanceCreator.Value = this.instanceDetails.createdBy;
107
+ this.instanceStatus = new TextBoxOptions();
108
+ this.instanceStatus.Name = "instanceStatus";
109
+ this.instanceStatus.LabelKey = "Status";
110
+ this.instanceStatus.Type = InputType.Text;
111
+ this.instanceStatus.IsDisabled = true;
112
+ this.instanceStatus.Value = this.instanceDetails.instanceStatus;
113
+ this.isWFVariablesFilterLoaded = false;
114
+ this.showInstanceDetails = true;
115
+ this.utilityService.stopBlockUI();
116
+ });
117
+ }
118
+ //WF variables function
119
+ initializeWFVariables() {
120
+ this.showInstanceDetails = false;
121
+ this.isWFVariablesFilterLoaded = false;
122
+ this.isWFTasksFilterLoaded = false;
123
+ this.utilityService.startBlockUI();
124
+ // TextBox inti
125
+ this.searchVariablesTextBox = new TextBoxOptions();
126
+ this.searchVariablesTextBox.Name = "searchVariablesTextBox";
127
+ this.searchVariablesTextBox.Type = InputType.Text;
128
+ this.searchVariablesTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
129
+ this.searchVariablesTextBox.HideLabel = true;
130
+ this.variablesTextInputFilter = new FilterItem();
131
+ this.variablesTextInputFilter.FormControlName = "searchVariablesTextBox";
132
+ this.variablesTextInputFilter.ActionParameterName = "searchText";
133
+ this.variablesTextInputFilter.IsFormControl = true;
134
+ this.variablesTextInputFilter.FilterType = FilterType.TextBox;
135
+ this.variablesInstanceIdTextBox = new TextBoxOptions();
136
+ this.variablesInstanceIdTextBox.Name = "variablesInstanceIdTextBox";
137
+ this.variablesInstanceIdTextBox.HideLabel = true;
138
+ this.variablesInstanceIdTextBox.Type = InputType.Text;
139
+ this.variablesInstanceIdTextBox.Value = this.instanceID;
140
+ this.variableInstanceIdFilter = new FilterItem();
141
+ this.variableInstanceIdFilter.FormControlName = "variablesInstanceIdTextBox";
142
+ this.variableInstanceIdFilter.ActionParameterName = "instanceID";
143
+ this.variableInstanceIdFilter.IsFormControl = true;
144
+ this.variableInstanceIdFilter.FilterType = FilterType.TextBox;
145
+ this.WorkflowVariablesPaging = new PagingOptions();
146
+ this.WorkflowVariablesPaging.ActionPostURL = this.workFlowVariablesApiUrl + 'GetInstanceVariablesListing';
147
+ this.WorkflowVariablesPaging.OnKeyPressFiltersControlNames = ["searchVariablesTextBox", "variablesInstanceIdTextBox"];
148
+ this.WorkflowVariablesPaging.Filters = [this.variablesTextInputFilter, this.variableInstanceIdFilter];
149
+ this.WorkflowVariablesPaging.ValidationToken = this.authService.authorizationHeaderValue();
150
+ setTimeout(() => {
151
+ this.isWFVariablesFilterLoaded = true;
152
+ this.utilityService.stopBlockUI();
153
+ }, 10);
154
+ }
155
+ setWorkflowVariablesListResult(result) {
156
+ this.utilityService.stopBlockUI();
157
+ this.workFlowVariablesPagingResult = result;
158
+ }
159
+ //WF tasks function
160
+ initializeTasks() {
161
+ this.showInstanceDetails = false;
162
+ this.isWFVariablesFilterLoaded = false;
163
+ this.isWFTasksFilterLoaded = false;
164
+ this.utilityService.startBlockUI();
165
+ // TextBox inti
166
+ this.searchTasksTextBox = new TextBoxOptions();
167
+ this.searchTasksTextBox.Name = "searchTasksTextBox";
168
+ this.searchTasksTextBox.Type = InputType.Text;
169
+ this.searchTasksTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
170
+ this.searchTasksTextBox.HideLabel = true;
171
+ this.taskTextInputFilter = new FilterItem();
172
+ this.taskTextInputFilter.FormControlName = "searchTasksTextBox";
173
+ this.taskTextInputFilter.ActionParameterName = "searchText";
174
+ this.taskTextInputFilter.IsFormControl = true;
175
+ this.taskTextInputFilter.FilterType = FilterType.TextBox;
176
+ this.taskInstanceIdTextBox = new TextBoxOptions();
177
+ this.taskInstanceIdTextBox.Name = "taskInstanceIdTextBox";
178
+ this.taskInstanceIdTextBox.HideLabel = true;
179
+ this.taskInstanceIdTextBox.Type = InputType.Text;
180
+ this.taskInstanceIdTextBox.Value = this.instanceID;
181
+ this.taskInstanceIdFilter = new FilterItem();
182
+ this.taskInstanceIdFilter.FormControlName = "taskInstanceIdTextBox";
183
+ this.taskInstanceIdFilter.ActionParameterName = "instanceID";
184
+ this.taskInstanceIdFilter.IsFormControl = true;
185
+ this.taskInstanceIdFilter.FilterType = FilterType.TextBox;
186
+ this.WorkflowTasksPaging = new PagingOptions();
187
+ this.WorkflowTasksPaging.ActionPostURL = this.workFlowTasksApiUrl + 'GetInstanceTasksListing';
188
+ this.WorkflowTasksPaging.OnKeyPressFiltersControlNames = ["searchTasksTextBox", "taskInstanceIdTextBox"];
189
+ this.WorkflowTasksPaging.Filters = [this.taskTextInputFilter, this.taskInstanceIdFilter];
190
+ this.WorkflowTasksPaging.ValidationToken = this.authService.authorizationHeaderValue();
191
+ setTimeout(() => {
192
+ this.isWFTasksFilterLoaded = true;
193
+ this.utilityService.stopBlockUI();
194
+ }, 10);
195
+ }
196
+ setWorkflowTasksListResult(result) {
197
+ this.utilityService.stopBlockUI();
198
+ this.tasksPagingResult = result;
199
+ }
200
+ //WF errors function
201
+ initializeErrors() {
202
+ this.showInstanceDetails = false;
203
+ this.isWFVariablesFilterLoaded = false;
204
+ this.isWFTasksFilterLoaded = false;
205
+ this.isWFErrorsFilterLoaded = false;
206
+ this.utilityService.startBlockUI();
207
+ // TextBox inti
208
+ this.searchErrorsTextBox = new TextBoxOptions();
209
+ this.searchErrorsTextBox.Name = "searchErrorsTextBox";
210
+ this.searchErrorsTextBox.Type = InputType.Text;
211
+ this.searchErrorsTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
212
+ this.searchErrorsTextBox.HideLabel = true;
213
+ this.errorTextInputFilter = new FilterItem();
214
+ this.errorTextInputFilter.FormControlName = "searchErrorsTextBox";
215
+ this.errorTextInputFilter.ActionParameterName = "searchText";
216
+ this.errorTextInputFilter.IsFormControl = true;
217
+ this.errorTextInputFilter.FilterType = FilterType.TextBox;
218
+ this.errorInstanceIdTextBox = new TextBoxOptions();
219
+ this.errorInstanceIdTextBox.Name = "errorInstanceIdTextBox";
220
+ this.errorInstanceIdTextBox.HideLabel = true;
221
+ this.errorInstanceIdTextBox.Type = InputType.Text;
222
+ this.errorInstanceIdTextBox.Value = this.instanceID;
223
+ this.errorInstanceIdFilter = new FilterItem();
224
+ this.errorInstanceIdFilter.FormControlName = "errorInstanceIdTextBox";
225
+ this.errorInstanceIdFilter.ActionParameterName = "instanceID";
226
+ this.errorInstanceIdFilter.IsFormControl = true;
227
+ this.errorInstanceIdFilter.FilterType = FilterType.TextBox;
228
+ this.WorkflowErrorsPaging = new PagingOptions();
229
+ this.WorkflowErrorsPaging.ActionPostURL = this.workFlowErrorsApiUrl + 'GetInstanceErrorsListing';
230
+ this.WorkflowErrorsPaging.OnKeyPressFiltersControlNames = ["searchErrorsTextBox", "errorInstanceIdTextBox"];
231
+ this.WorkflowErrorsPaging.Filters = [this.errorTextInputFilter, this.errorInstanceIdFilter];
232
+ this.WorkflowErrorsPaging.ValidationToken = this.authService.authorizationHeaderValue();
233
+ setTimeout(() => {
234
+ this.isWFErrorsFilterLoaded = true;
235
+ this.utilityService.stopBlockUI();
236
+ }, 10);
237
+ }
238
+ setWorkflowErrorsListResult(result) {
239
+ this.utilityService.stopBlockUI();
240
+ this.errorsPagingResult = result;
241
+ }
242
+ //WF logs function
243
+ initializeLogs() {
244
+ this.showInstanceDetails = false;
245
+ this.isWFVariablesFilterLoaded = false;
246
+ this.isWFTasksFilterLoaded = false;
247
+ this.isWFErrorsFilterLoaded = false;
248
+ this.isWFLogsFilterLoaded = false;
249
+ this.utilityService.startBlockUI();
250
+ // TextBox inti
251
+ this.searchLogsTextBox = new TextBoxOptions();
252
+ this.searchLogsTextBox.Name = "searchLogsTextBox";
253
+ this.searchLogsTextBox.Type = InputType.Text;
254
+ this.searchLogsTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
255
+ this.searchLogsTextBox.HideLabel = true;
256
+ this.logTextInputFilter = new FilterItem();
257
+ this.logTextInputFilter.FormControlName = "searchLogsTextBox";
258
+ this.logTextInputFilter.ActionParameterName = "searchText";
259
+ this.logTextInputFilter.IsFormControl = true;
260
+ this.logTextInputFilter.FilterType = FilterType.TextBox;
261
+ this.logInstanceIdTextBox = new TextBoxOptions();
262
+ this.logInstanceIdTextBox.Name = "logInstanceIdTextBox";
263
+ this.logInstanceIdTextBox.HideLabel = true;
264
+ this.logInstanceIdTextBox.Type = InputType.Text;
265
+ this.logInstanceIdTextBox.Value = this.instanceID;
266
+ this.logInstanceIdFilter = new FilterItem();
267
+ this.logInstanceIdFilter.FormControlName = "logInstanceIdTextBox";
268
+ this.logInstanceIdFilter.ActionParameterName = "instanceID";
269
+ this.logInstanceIdFilter.IsFormControl = true;
270
+ this.logInstanceIdFilter.FilterType = FilterType.TextBox;
271
+ this.WorkflowLogsPaging = new PagingOptions();
272
+ this.WorkflowLogsPaging.ActionPostURL = this.workFlowLogsApiUrl + 'GetInstanceLogsListing';
273
+ this.WorkflowLogsPaging.OnKeyPressFiltersControlNames = ["searchLogsTextBox", "logInstanceIdTextBox"];
274
+ this.WorkflowLogsPaging.Filters = [this.logTextInputFilter, this.logInstanceIdFilter];
275
+ this.WorkflowLogsPaging.ValidationToken = this.authService.authorizationHeaderValue();
276
+ setTimeout(() => {
277
+ this.isWFLogsFilterLoaded = true;
278
+ this.utilityService.stopBlockUI();
279
+ }, 10);
280
+ }
281
+ setWorkflowLogsListResult(result) {
282
+ this.utilityService.stopBlockUI();
283
+ this.logsPagingResult = result;
284
+ }
285
+ showLogVariables(logID, logVariablesModal) {
286
+ this.utilityService.startBlockUI();
287
+ this.wfLogVariablesService.getLogVariables(logID).subscribe((result) => {
288
+ let logVariablesList = result;
289
+ this.logVariablesPagingResult = logVariablesList;
290
+ this.modalService.open(logVariablesModal);
291
+ this.utilityService.stopBlockUI();
292
+ });
293
+ }
294
+ //On destroy
295
+ ngOnDestroy() {
296
+ this.requestHandlerService.destroyHandler();
297
+ }
298
+ }
299
+ InstanceInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: InstanceInfoComponent, deps: [{ token: i1.AuthService }, { token: i2.WorkflowInstanceService }, { token: i3.ActivatedRoute }, { token: i4.PageInfoService }, { token: i1.BBSFTranslateService }, { token: i1.UtilityService }, { token: i5.WorkflowLogVariablesService }, { token: i6.NgbModal }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
300
+ InstanceInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: InstanceInfoComponent, selector: "lib-instance-info", 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-body py-3 px-0\">\r\n <form [formGroup]=\"detailsForm\" *ngIf=\"showInstanceDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"instanceName\"\r\n [group]=\"detailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"instanceCreator\"\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]=\"instanceStatus\"\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 </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)=\"initializeWFVariables()\">{{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\" *ngIf=\"isWFVariablesFilterLoaded\">\r\n <form [formGroup]=\"workflowVariablesForm\">\r\n <BBSF-TextBox [options]=\"searchVariablesTextBox\" [group]=\"workflowVariablesForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"variablesInstanceIdTextBox\"\r\n [group]=\"workflowVariablesForm\" [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::variables 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(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"DataType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</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 variable of workFlowVariablesPagingResult\">\r\n <td>\r\n <span class=\"text-dark\">{{variable.nameStr}}</span>\r\n </td>\r\n <td>{{variable.dataTypeItem}}</td>\r\n <td>{{variable.value}}</td>\r\n </tr>\r\n <tr *ngIf=\"workFlowVariablesPagingResult.length == 0\">\r\n <td colspan=\"3\">\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::variables list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVariablesListResult($event)\" *ngIf=\"isWFVariablesFilterLoaded\"\r\n [options]=\"WorkflowVariablesPaging\" [group]=\"workflowVariablesForm\"\r\n #workflowVariablesPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\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)=\"initializeTasks()\">{{utilityService.getResourceValue(\"Tasks\")}}</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=\"isWFTasksFilterLoaded\">\r\n <form [formGroup]=\"tasksForm\">\r\n <BBSF-TextBox [options]=\"searchTasksTextBox\" [group]=\"tasksForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"taskInstanceIdTextBox\"\r\n [group]=\"tasksForm\" [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::variables 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(\"ActivityName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"IsCompleted\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CreationDate\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Type\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"AssignedTo\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CompletedBy\")}}</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 task of tasksPagingResult\">\r\n <td>\r\n <span class=\"text-dark\">{{task.activity}}</span>\r\n </td>\r\n <td>\r\n <span *ngIf=\"task.IsCompleted; else notCompleted\">{{utilityService.getResourceValue(\"Yes\")}}</span>\r\n <ng-template #notCompleted>\r\n <span>{{utilityService.getResourceValue(\"No\")}}</span>\r\n </ng-template>\r\n </td>\r\n <td>{{task.creationDate}}</td>\r\n <td>{{task.taskCorrelationType}}</td>\r\n <td>{{task.assignedTo}}</td>\r\n <td>{{task.completedBy}}</td>\r\n\r\n </tr>\r\n <tr *ngIf=\"tasksPagingResult.length == 0\">\r\n <td colspan=\"6\">\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::variables list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowTasksListResult($event)\" *ngIf=\"isWFTasksFilterLoaded\"\r\n [options]=\"WorkflowTasksPaging\" [group]=\"tasksForm\"\r\n #workflowTasksPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\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)=\"initializeErrors()\">{{utilityService.getResourceValue(\"Errors\")}}</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=\"isWFErrorsFilterLoaded\">\r\n <form [formGroup]=\"errorsForm\">\r\n <BBSF-TextBox [options]=\"searchErrorsTextBox\" [group]=\"errorsForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"errorInstanceIdTextBox\"\r\n [group]=\"errorsForm\" [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::variables 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(\"ActivityName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"InstanceName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ErrorMsg\")}}</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 error of errorsPagingResult\">\r\n <td>\r\n <span class=\"text-dark\">{{error.activityName}}</span>\r\n </td>\r\n <td>{{error.instanceName}}</td>\r\n <td>{{error.error}}</td>\r\n\r\n </tr>\r\n <tr *ngIf=\"errorsPagingResult.length == 0\">\r\n <td colspan=\"3\">\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::variables list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowErrorsListResult($event)\" *ngIf=\"isWFErrorsFilterLoaded\"\r\n [options]=\"WorkflowErrorsPaging\" [group]=\"errorsForm\"\r\n #workflowErrorsPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\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)=\"initializeLogs()\">{{utilityService.getResourceValue(\"Logs\")}}</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=\"isWFLogsFilterLoaded\">\r\n <form [formGroup]=\"logsForm\">\r\n <BBSF-TextBox [options]=\"searchLogsTextBox\" [group]=\"logsForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"logInstanceIdTextBox\"\r\n [group]=\"logsForm\" [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::variables 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(\"Activity\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Descision\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CompletedBy\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CreationDate\")}}</th>\r\n <th class=\"min-w-150px\"></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 log of logsPagingResult\">\r\n <td>\r\n <span class=\"text-dark\">{{log.activityName}}</span>\r\n </td>\r\n <td>{{log.outcomeName}}</td>\r\n <td>{{log.completedBy}}</td>\r\n <td>{{log.created}}</td>\r\n <td>{{log.created}}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showLogVariables(log.idEncrypted, LogVariablesModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"LogVariables\")}}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"logsPagingResult.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::variables list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowLogsListResult($event)\" *ngIf=\"isWFLogsFilterLoaded\"\r\n [options]=\"WorkflowLogsPaging\" [group]=\"logsForm\"\r\n #workflowLogsPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!--Log variables Modal-->\r\n <ng-template #LogVariablesModal 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\">{{utilityService.getResourceValue(\"LogVariables\")}}</h1>\r\n </div>\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(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"VariableType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</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 logVar of logVariablesPagingResult\">\r\n <td>\r\n <span class=\"text-dark\">{{logVar.variableName}}</span>\r\n </td>\r\n <td>{{logVar.variableType}}</td>\r\n <td>{{logVar.variableValue}}</td>\r\n </tr>\r\n <tr *ngIf=\"logVariablesPagingResult.length == 0\">\r\n <td colspan=\"3\">\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 <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\r\n {{utilityService.getResourceValue(\"Close\")}}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </li>\r\n\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [""], components: [{ type: i7.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i8.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i9.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i8.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i10.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i6.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }], directives: [{ type: i6.NgbNav, selector: "[ngbNav]", inputs: ["animation", "destroyOnHide", "orientation", "roles", "keyboard", "activeId"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { type: i6.NgbNavItem, selector: "[ngbNavItem]", inputs: ["disabled", "domId", "destroyOnHide", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { type: i6.NgbNavLink, selector: "a[ngbNavLink]" }, { type: i6.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i12.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i12.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i6.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i13.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: InstanceInfoComponent, decorators: [{
302
+ type: Component,
303
+ args: [{
304
+ selector: 'lib-instance-info',
305
+ templateUrl: './instance-info.component.html',
306
+ styleUrls: ['./instance-info.component.css']
307
+ }]
308
+ }], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.WorkflowInstanceService }, { type: i3.ActivatedRoute }, { type: i4.PageInfoService }, { type: i1.BBSFTranslateService }, { type: i1.UtilityService }, { type: i5.WorkflowLogVariablesService }, { type: i6.NgbModal }, { type: i1.RequestHandlerService }]; } });
309
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3dvcmtmbG93cy9pbnN0YW5jZS1pbmZvL2luc3RhbmNlLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy93b3JrZmxvd3MvaW5zdGFuY2UtaW5mby9pbnN0YW5jZS1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pKLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBU3pELE1BQU0sT0FBTyxxQkFBcUI7SUE2RGhDLHFCQUFxQjtJQUVyQixZQUFvQixXQUF3QixFQUFVLHVCQUFnRCxFQUM1RixjQUE4QixFQUFVLGVBQWdDLEVBQVUsb0JBQTBDLEVBQzdILGNBQThCLEVBQVUscUJBQWtELEVBQ3pGLFlBQXNCLEVBQVUscUJBQTRDO1FBSGxFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUM1RixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBVSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzdILG1CQUFjLEdBQWQsY0FBYyxDQUFn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SSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLENBQUM7O21IQW5YVSxxQkFBcUI7dUdBQXJCLHFCQUFxQix5RENmbEMsbzlrQkFtVkE7NEZEcFVhLHFCQUFxQjtrQkFMakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixXQUFXLEVBQUUsZ0NBQWdDO29CQUM3QyxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztpQkFDN0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRW5nbGlzaEFyYWJpY0RUTywgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGFnaW5nT3B0aW9ucywgVGV4dEJveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9wdWJsaWMtYXBpJztcclxuaW1wb3J0IHsgV29ya2Zsb3dJbnN0YW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvU2VydmljZXMvV29ya2Zsb3dJbnN0YW5jZVNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93TG9nVmFyaWFibGVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Xb3JrZmxvd0xvZ1ZhcmlhYmxlc1NlcnZpY2Uuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1pbnN0YW5jZS1pbmZvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5zdGFuY2UtaW5mby5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW5zdGFuY2UtaW5mby5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEluc3RhbmNlSW5mb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8gRGV0YWlscyBDb250cm9sc1xyXG4gIGRldGFpbHNGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgaW5zdGFuY2VEZXRhaWxzOiBhbnk7XHJcbiAgaW5zdGFuY2VJRDogc3RyaW5nO1xyXG4gIGluc3RhbmNlTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgaW5zdGFuY2VDcmVhdG9yOiBUZXh0Qm94T3B0aW9ucztcclxuICBpbnN0YW5jZVN0YXR1czogVGV4dEJveE9wdGlvbnM7XHJcbiAgc2hvd0luc3RhbmNlRGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvL1N0YXJ0IFdvcmtGbG93IHZhcmlhYmxlc1xyXG4gIHdvcmtGbG93VmFyaWFibGVzQXBpVXJsID0gXCIvYXBpL2FkbWluL1dvcmtmbG93SW5zdGFuY2VWYXJpYWJsZS9cIlxyXG4gIHdvcmtmbG93VmFyaWFibGVzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHZhcmlhYmxlc0luc3RhbmNlSWRUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICB2YXJpYWJsZUluc3RhbmNlSWRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgc2VhcmNoVmFyaWFibGVzVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgdmFyaWFibGVzVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIHdvcmtGbG93VmFyaWFibGVzUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIFdvcmtmbG93VmFyaWFibGVzUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIGlzV0ZWYXJpYWJsZXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvL0VuZCBXb3JrRmxvdyB2YXJpYWJsZXNcclxuXHJcbiAgLy9TdGFydCBXb3JrRmxvdyB0YXNrc1xyXG4gIHdvcmtGbG93VGFza3NBcGlVcmwgPSBcIi9hcGkvYWRtaW4vV29ya2Zsb3dJbnN0YW5jZVRhc2svXCJcclxuICB0YXNrc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBzZWFyY2hUYXNrc1RleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIHRhc2tUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgdGFza0luc3RhbmNlSWRUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICB0YXNrSW5zdGFuY2VJZEZpbHRlcjogRmlsdGVySXRlbTtcclxuICB0YXNrc1BhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBXb3JrZmxvd1Rhc2tzUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIGlzV0ZUYXNrc0ZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vRW5kIFdvcmtGbG93IHRhc2tzXHJcblxyXG4gIC8vU3RhcnQgV29ya0Zsb3cgZXJyb3JzXHJcbiAgd29ya0Zsb3dFcnJvcnNBcGlVcmwgPSBcIi9hcGkvYWRtaW4vV29ya2Zsb3dJbnN0YW5jZUVycm9yL1wiXHJcbiAgZXJyb3JzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNlYXJjaEVycm9yc1RleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIGVycm9yVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIGVycm9ySW5zdGFuY2VJZFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIGVycm9ySW5zdGFuY2VJZEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBlcnJvcnNQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgV29ya2Zsb3dFcnJvcnNQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgaXNXRkVycm9yc0ZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vRW5kIFdvcmtGbG93IGVycm9yc1xyXG5cclxuICAvL1N0YXJ0IFdvcmtGbG93IGxvZ3NcclxuICB3b3JrRmxvd0xvZ3NBcGlVcmwgPSBcIi9hcGkvYWRtaW4vV29ya2Zsb3dMb2cvXCJcclxuICBsb2dzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNlYXJjaExvZ3NUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBsb2dUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgbG9nSW5zdGFuY2VJZFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIGxvZ0luc3RhbmNlSWRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgbG9nc1BhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBXb3JrZmxvd0xvZ3NQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgaXNXRkxvZ3NGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvL0VuZCBXb3JrRmxvdyBlcnJvcnNcclxuXHJcbiAgLy9TdGFydCBXb3JrRmxvdyBsb2cgdmFyaWFibGVzXHJcbiAgbG9nVmFyaWFibGVzUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIGxvZ0lEOiBzdHJpbmc7XHJcbiAgLy9FbmQgV29ya0Zsb3cgZXJyb3JzXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIHdvcmtGbG93SW5zdGFuY2VTZXJ2aWNlOiBXb3JrZmxvd0luc3RhbmNlU2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLCBwcml2YXRlIGJic2ZUcmFuc2xhdGVTZXJ2aWNlOiBCQlNGVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgd2ZMb2dWYXJpYWJsZXNTZXJ2aWNlOiBXb3JrZmxvd0xvZ1ZhcmlhYmxlc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2UpIHtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLmluc3RhbmNlSUQgPSBwYXJhbXNbJ2lkJ107XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5nZXREZXRhaWxzKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy9XRiBpbnN0YW5jZSBmdW5jdGlvbnNcclxuICBnZXREZXRhaWxzKCkge1xyXG4gICAgdGhpcy5zaG93SW5zdGFuY2VEZXRhaWxzID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV0ZWYXJpYWJsZXNGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG5cclxuICAgIHRoaXMud29ya0Zsb3dJbnN0YW5jZVNlcnZpY2UuZ2V0RGV0YWlscyh0aGlzLmluc3RhbmNlSUQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2VEZXRhaWxzID0gcmVzdWx0IGFzIGFueVxyXG5cclxuICAgICAgdmFyIE5hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBOYW1lLkFyYWJpYyA9IHRoaXMuaW5zdGFuY2VEZXRhaWxzLm5hbWUuYXJhYmljO1xyXG4gICAgICBOYW1lLkVuZ2xpc2ggPSB0aGlzLmluc3RhbmNlRGV0YWlscy5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZVRpdGxlID0gdGhpcy5pbnN0YW5jZURldGFpbHMubmFtZVN0cjtcclxuICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtGbG93c1wiKSwgcGF0aDogJy9BZG1pbi9Xb3JrZmxvd3Mvd29ya2Zsb3cnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6IHRoaXMuaW5zdGFuY2VEZXRhaWxzLndvcmtmbG93TmFtZVN0ciwgcGF0aDogYC9BZG1pbi9Xb3JrZmxvd3MvdGFicy8ke3RoaXMuaW5zdGFuY2VEZXRhaWxzLndvcmtGbG93SUR9LyR7dGhpcy5pbnN0YW5jZURldGFpbHMudmVyc2lvbklEfWAsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0aXRsZTogdGhpcy5pbnN0YW5jZURldGFpbHMudmVyc2lvbk5hbWVTdHIsIHBhdGg6IGAvQWRtaW4vV29ya2Zsb3dzL1ZlcnNpb25JbmZvLyR7dGhpcy5pbnN0YW5jZURldGFpbHMudmVyc2lvbklERW5jfWAsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlIH1cclxuICAgICAgXTtcclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuXHJcblxyXG4gICAgICB0aGlzLmluc3RhbmNlTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmluc3RhbmNlTmFtZS5OYW1lID0gXCJpbnN0YW5jZU5hbWVcIjtcclxuICAgICAgdGhpcy5pbnN0YW5jZU5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiXHJcbiAgICAgIHRoaXMuaW5zdGFuY2VOYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiXHJcbiAgICAgIHRoaXMuaW5zdGFuY2VOYW1lLlZhbHVlID0gTmFtZTtcclxuICAgICAgdGhpcy5pbnN0YW5jZU5hbWUuSXNEaXNhYmxlZCA9IHRydWVcclxuXHJcbiAgICAgIHRoaXMuaW5zdGFuY2VDcmVhdG9yID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2VDcmVhdG9yLk5hbWUgPSBcImluc3RhbmNlQ3JlYXRvclwiXHJcbiAgICAgIHRoaXMuaW5zdGFuY2VDcmVhdG9yLkxhYmVsS2V5ID0gXCJDcmVhdGVkQnlcIlxyXG4gICAgICB0aGlzLmluc3RhbmNlQ3JlYXRvci5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5pbnN0YW5jZUNyZWF0b3IuSXNEaXNhYmxlZCA9IHRydWVcclxuICAgICAgdGhpcy5pbnN0YW5jZUNyZWF0b3IuVmFsdWUgPSB0aGlzLmluc3RhbmNlRGV0YWlscy5jcmVhdGVkQnlcclxuXHJcbiAgICAgIHRoaXMuaW5zdGFuY2VTdGF0dXMgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5pbnN0YW5jZVN0YXR1cy5OYW1lID0gXCJpbnN0YW5jZVN0YXR1c1wiXHJcbiAgICAgIHRoaXMuaW5zdGFuY2VTdGF0dXMuTGFiZWxLZXkgPSBcIlN0YXR1c1wiXHJcbiAgICAgIHRoaXMuaW5zdGFuY2VTdGF0dXMuVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICAgIHRoaXMuaW5zdGFuY2VTdGF0dXMuSXNEaXNhYmxlZCA9IHRydWVcclxuICAgICAgdGhpcy5pbnN0YW5jZVN0YXR1cy5WYWx1ZSA9IHRoaXMuaW5zdGFuY2VEZXRhaWxzLmluc3RhbmNlU3RhdHVzXHJcblxyXG4gICAgICB0aGlzLmlzV0ZWYXJpYWJsZXNGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLnNob3dJbnN0YW5jZURldGFpbHMgPSB0cnVlO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL1dGIHZhcmlhYmxlcyBmdW5jdGlvblxyXG4gIGluaXRpYWxpemVXRlZhcmlhYmxlcygpIHtcclxuICAgIHRoaXMuc2hvd0luc3RhbmNlRGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dGVmFyaWFibGVzRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV0ZUYXNrc0ZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICAvLyBUZXh0Qm94IGludGlcclxuXHJcbiAgICB0aGlzLnNlYXJjaFZhcmlhYmxlc1RleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoVmFyaWFibGVzVGV4dEJveC5OYW1lID0gXCJzZWFyY2hWYXJpYWJsZXNUZXh0Qm94XCJcclxuICAgIHRoaXMuc2VhcmNoVmFyaWFibGVzVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuc2VhcmNoVmFyaWFibGVzVGV4dEJveC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKVxyXG4gICAgdGhpcy5zZWFyY2hWYXJpYWJsZXNUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuXHJcblxyXG4gICAgdGhpcy52YXJpYWJsZXNUZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy52YXJpYWJsZXNUZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hWYXJpYWJsZXNUZXh0Qm94XCJcclxuICAgIHRoaXMudmFyaWFibGVzVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgdGhpcy52YXJpYWJsZXNUZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMudmFyaWFibGVzVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcblxyXG4gICAgdGhpcy52YXJpYWJsZXNJbnN0YW5jZUlkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy52YXJpYWJsZXNJbnN0YW5jZUlkVGV4dEJveC5OYW1lID0gXCJ2YXJpYWJsZXNJbnN0YW5jZUlkVGV4dEJveFwiXHJcbiAgICB0aGlzLnZhcmlhYmxlc0luc3RhbmNlSWRUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuICAgIHRoaXMudmFyaWFibGVzSW5zdGFuY2VJZFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLnZhcmlhYmxlc0luc3RhbmNlSWRUZXh0Qm94LlZhbHVlID0gdGhpcy5pbnN0YW5jZUlEXHJcblxyXG4gICAgdGhpcy52YXJpYWJsZUluc3RhbmNlSWRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy52YXJpYWJsZUluc3RhbmNlSWRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJ2YXJpYWJsZXNJbnN0YW5jZUlkVGV4dEJveFwiXHJcbiAgICB0aGlzLnZhcmlhYmxlSW5zdGFuY2VJZEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJpbnN0YW5jZUlEXCJcclxuICAgIHRoaXMudmFyaWFibGVJbnN0YW5jZUlkRmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLnZhcmlhYmxlSW5zdGFuY2VJZEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc1BhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVzUGFnaW5nLkFjdGlvblBvc3RVUkwgPSB0aGlzLndvcmtGbG93VmFyaWFibGVzQXBpVXJsICsgJ0dldEluc3RhbmNlVmFyaWFibGVzTGlzdGluZyc7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVzUGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVmFyaWFibGVzVGV4dEJveFwiLCBcInZhcmlhYmxlc0luc3RhbmNlSWRUZXh0Qm94XCJdXHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVzUGFnaW5nLkZpbHRlcnMgPSBbdGhpcy52YXJpYWJsZXNUZXh0SW5wdXRGaWx0ZXIsIHRoaXMudmFyaWFibGVJbnN0YW5jZUlkRmlsdGVyXVxyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc1BhZ2luZy5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmlzV0ZWYXJpYWJsZXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRXb3JrZmxvd1ZhcmlhYmxlc0xpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB0aGlzLndvcmtGbG93VmFyaWFibGVzUGFnaW5nUmVzdWx0ID0gcmVzdWx0XHJcblxyXG4gIH1cclxuXHJcbiAgLy9XRiB0YXNrcyBmdW5jdGlvblxyXG4gIGluaXRpYWxpemVUYXNrcygpIHtcclxuICAgIHRoaXMuc2hvd0luc3RhbmNlRGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dGVmFyaWFibGVzRmlsdGVyTG9hZGVkID0gZmFsc2VcclxuICAgIHRoaXMuaXNXRlRhc2tzRmlsdGVyTG9hZGVkID0gZmFsc2VcclxuXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICAvLyBUZXh0Qm94IGludGlcclxuXHJcbiAgICB0aGlzLnNlYXJjaFRhc2tzVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5zZWFyY2hUYXNrc1RleHRCb3guTmFtZSA9IFwic2VhcmNoVGFza3NUZXh0Qm94XCJcclxuICAgIHRoaXMuc2VhcmNoVGFza3NUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUYXNrc1RleHRCb3guUGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIilcclxuICAgIHRoaXMuc2VhcmNoVGFza3NUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuXHJcblxyXG4gICAgdGhpcy50YXNrVGV4dElucHV0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMudGFza1RleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInNlYXJjaFRhc2tzVGV4dEJveFwiXHJcbiAgICB0aGlzLnRhc2tUZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiXHJcbiAgICB0aGlzLnRhc2tUZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMudGFza1RleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG5cclxuICAgIHRoaXMudGFza0luc3RhbmNlSWRUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnRhc2tJbnN0YW5jZUlkVGV4dEJveC5OYW1lID0gXCJ0YXNrSW5zdGFuY2VJZFRleHRCb3hcIlxyXG4gICAgdGhpcy50YXNrSW5zdGFuY2VJZFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy50YXNrSW5zdGFuY2VJZFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLnRhc2tJbnN0YW5jZUlkVGV4dEJveC5WYWx1ZSA9IHRoaXMuaW5zdGFuY2VJRFxyXG5cclxuICAgIHRoaXMudGFza0luc3RhbmNlSWRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy50YXNrSW5zdGFuY2VJZEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInRhc2tJbnN0YW5jZUlkVGV4dEJveFwiXHJcbiAgICB0aGlzLnRhc2tJbnN0YW5jZUlkRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcImluc3RhbmNlSURcIlxyXG4gICAgdGhpcy50YXNrSW5zdGFuY2VJZEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy50YXNrSW5zdGFuY2VJZEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd1Rhc2tzUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dUYXNrc1BhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy53b3JrRmxvd1Rhc2tzQXBpVXJsICsgJ0dldEluc3RhbmNlVGFza3NMaXN0aW5nJztcclxuICAgIHRoaXMuV29ya2Zsb3dUYXNrc1BhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRhc2tzVGV4dEJveFwiLCBcInRhc2tJbnN0YW5jZUlkVGV4dEJveFwiXVxyXG4gICAgdGhpcy5Xb3JrZmxvd1Rhc2tzUGFnaW5nLkZpbHRlcnMgPSBbdGhpcy50YXNrVGV4dElucHV0RmlsdGVyLCB0aGlzLnRhc2tJbnN0YW5jZUlkRmlsdGVyXVxyXG4gICAgdGhpcy5Xb3JrZmxvd1Rhc2tzUGFnaW5nLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuaXNXRlRhc2tzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0V29ya2Zsb3dUYXNrc0xpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB0aGlzLnRhc2tzUGFnaW5nUmVzdWx0ID0gcmVzdWx0XHJcblxyXG4gIH1cclxuXHJcbiAgLy9XRiBlcnJvcnMgZnVuY3Rpb25cclxuICBpbml0aWFsaXplRXJyb3JzKCkge1xyXG4gICAgdGhpcy5zaG93SW5zdGFuY2VEZXRhaWxzID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV0ZWYXJpYWJsZXNGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5pc1dGVGFza3NGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5pc1dGRXJyb3JzRmlsdGVyTG9hZGVkID0gZmFsc2VcclxuXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICAvLyBUZXh0Qm94IGludGlcclxuXHJcbiAgICB0aGlzLnNlYXJjaEVycm9yc1RleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoRXJyb3JzVGV4dEJveC5OYW1lID0gXCJzZWFyY2hFcnJvcnNUZXh0Qm94XCJcclxuICAgIHRoaXMuc2VhcmNoRXJyb3JzVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuc2VhcmNoRXJyb3JzVGV4dEJveC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKVxyXG4gICAgdGhpcy5zZWFyY2hFcnJvcnNUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuXHJcblxyXG4gICAgdGhpcy5lcnJvclRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLmVycm9yVGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoRXJyb3JzVGV4dEJveFwiXHJcbiAgICB0aGlzLmVycm9yVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgdGhpcy5lcnJvclRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5lcnJvclRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG5cclxuICAgIHRoaXMuZXJyb3JJbnN0YW5jZUlkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5lcnJvckluc3RhbmNlSWRUZXh0Qm94Lk5hbWUgPSBcImVycm9ySW5zdGFuY2VJZFRleHRCb3hcIlxyXG4gICAgdGhpcy5lcnJvckluc3RhbmNlSWRUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuICAgIHRoaXMuZXJyb3JJbnN0YW5jZUlkVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuZXJyb3JJbnN0YW5jZUlkVGV4dEJveC5WYWx1ZSA9IHRoaXMuaW5zdGFuY2VJRFxyXG5cclxuICAgIHRoaXMuZXJyb3JJbnN0YW5jZUlkRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuZXJyb3JJbnN0YW5jZUlkRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwiZXJyb3JJbnN0YW5jZUlkVGV4dEJveFwiXHJcbiAgICB0aGlzLmVycm9ySW5zdGFuY2VJZEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJpbnN0YW5jZUlEXCJcclxuICAgIHRoaXMuZXJyb3JJbnN0YW5jZUlkRmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLmVycm9ySW5zdGFuY2VJZEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd0Vycm9yc1BhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93RXJyb3JzUGFnaW5nLkFjdGlvblBvc3RVUkwgPSB0aGlzLndvcmtGbG93RXJyb3JzQXBpVXJsICsgJ0dldEluc3RhbmNlRXJyb3JzTGlzdGluZyc7XHJcbiAgICB0aGlzLldvcmtmbG93RXJyb3JzUGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoRXJyb3JzVGV4dEJveFwiLCBcImVycm9ySW5zdGFuY2VJZFRleHRCb3hcIl1cclxuICAgIHRoaXMuV29ya2Zsb3dFcnJvcnNQYWdpbmcuRmlsdGVycyA9IFt0aGlzLmVycm9yVGV4dElucHV0RmlsdGVyLCB0aGlzLmVycm9ySW5zdGFuY2VJZEZpbHRlcl1cclxuICAgIHRoaXMuV29ya2Zsb3dFcnJvcnNQYWdpbmcuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5pc1dGRXJyb3JzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0V29ya2Zsb3dFcnJvcnNMaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgdGhpcy5lcnJvcnNQYWdpbmdSZXN1bHQgPSByZXN1bHRcclxuXHJcbiAgfVxyXG5cclxuICAvL1dGIGxvZ3MgZnVuY3Rpb25cclxuICBpbml0aWFsaXplTG9ncygpIHtcclxuICAgIHRoaXMuc2hvd0luc3RhbmNlRGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dGVmFyaWFibGVzRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV0ZUYXNrc0ZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dGRXJyb3JzRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV0ZMb2dzRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG5cclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKClcclxuICAgIC8vIFRleHRCb3ggaW50aVxyXG5cclxuICAgIHRoaXMuc2VhcmNoTG9nc1RleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoTG9nc1RleHRCb3guTmFtZSA9IFwic2VhcmNoTG9nc1RleHRCb3hcIlxyXG4gICAgdGhpcy5zZWFyY2hMb2dzVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuc2VhcmNoTG9nc1RleHRCb3guUGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIilcclxuICAgIHRoaXMuc2VhcmNoTG9nc1RleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG5cclxuXHJcbiAgICB0aGlzLmxvZ1RleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLmxvZ1RleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInNlYXJjaExvZ3NUZXh0Qm94XCJcclxuICAgIHRoaXMubG9nVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgdGhpcy5sb2dUZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMubG9nVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcblxyXG4gICAgdGhpcy5sb2dJbnN0YW5jZUlkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5sb2dJbnN0YW5jZUlkVGV4dEJveC5OYW1lID0gXCJsb2dJbnN0YW5jZUlkVGV4dEJveFwiXHJcbiAgICB0aGlzLmxvZ0luc3RhbmNlSWRUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuICAgIHRoaXMubG9nSW5zdGFuY2VJZFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLmxvZ0luc3RhbmNlSWRUZXh0Qm94LlZhbHVlID0gdGhpcy5pbnN0YW5jZUlEXHJcblxyXG4gICAgdGhpcy5sb2dJbnN0YW5jZUlkRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMubG9nSW5zdGFuY2VJZEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcImxvZ0luc3RhbmNlSWRUZXh0Qm94XCJcclxuICAgIHRoaXMubG9nSW5zdGFuY2VJZEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJpbnN0YW5jZUlEXCJcclxuICAgIHRoaXMubG9nSW5zdGFuY2VJZEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5sb2dJbnN0YW5jZUlkRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLldvcmtmbG93TG9nc1BhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93TG9nc1BhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy53b3JrRmxvd0xvZ3NBcGlVcmwgKyAnR2V0SW5zdGFuY2VMb2dzTGlzdGluZyc7XHJcbiAgICB0aGlzLldvcmtmbG93TG9nc1BhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaExvZ3NUZXh0Qm94XCIsIFwibG9nSW5zdGFuY2VJZFRleHRCb3hcIl1cclxuICAgIHRoaXMuV29ya2Zsb3dMb2dzUGFnaW5nLkZpbHRlcnMgPSBbdGhpcy5sb2dUZXh0SW5wdXRGaWx0ZXIsIHRoaXMubG9nSW5zdGFuY2VJZEZpbHRlcl1cclxuICAgIHRoaXMuV29ya2Zsb3dMb2dzUGFnaW5nLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuaXNXRkxvZ3NGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG5cclxuICBzZXRXb3JrZmxvd0xvZ3NMaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgdGhpcy5sb2dzUGFnaW5nUmVzdWx0ID0gcmVzdWx0XHJcblxyXG4gIH1cclxuXHJcbiAgc2hvd0xvZ1ZhcmlhYmxlcyhsb2dJRDogc3RyaW5nLCBsb2dWYXJpYWJsZXNNb2RhbDogYW55KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG5cclxuICAgIHRoaXMud2ZMb2dWYXJpYWJsZXNTZXJ2aWNlLmdldExvZ1ZhcmlhYmxlcyhsb2dJRCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IGxvZ1ZhcmlhYmxlc0xpc3QgPSByZXN1bHQgYXMgYW55W107XHJcbiAgICAgIHRoaXMubG9nVmFyaWFibGVzUGFnaW5nUmVzdWx0ID0gbG9nVmFyaWFibGVzTGlzdDtcclxuICAgICBcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihsb2dWYXJpYWJsZXNNb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLy9PbiBkZXN0cm95XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgPHVsIG5nYk5hdiAjbmF2PVwibmdiTmF2XCIgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFicyBuYXYtbGluZS10YWJzLTJ4IGJvcmRlci10cmFuc3BhcmVudCBmcy01IGZ3LWJvbGRlclwiPlxyXG4gICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImdldERldGFpbHMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRldGFpbHNcIil9fTwvYT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImRldGFpbHNGb3JtXCIgKm5nSWY9XCJzaG93SW5zdGFuY2VEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cImluc3RhbmNlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJkZXRhaWxzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiaW5zdGFuY2VDcmVhdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJkZXRhaWxzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJpbnN0YW5jZVN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiZGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcblxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tZW5kOjogV2lkZ2V0cy9BcHBsaWNhdGlvbnMvVXNlci9Qcm9maWxlMy0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJpbml0aWFsaXplV0ZWYXJpYWJsZXMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtGbG93VmFyaWFibGVzXCIpfX08L2E+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiaXNXRlZhcmlhYmxlc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIndvcmtmbG93VmFyaWFibGVzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVmFyaWFibGVzVGV4dEJveFwiIFtncm91cF09XCJ3b3JrZmxvd1ZhcmlhYmxlc0Zvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInZhcmlhYmxlc0luc3RhbmNlSWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJ3b3JrZmxvd1ZhcmlhYmxlc0Zvcm1cIiBbaGlkZGVuXT1cInRydWVcIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6dmFyaWFibGVzIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEYXRhVHlwZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWYWx1ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdmFyaWFibGUgb2Ygd29ya0Zsb3dWYXJpYWJsZXNQYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYXJrXCI+e3t2YXJpYWJsZS5uYW1lU3RyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3ZhcmlhYmxlLmRhdGFUeXBlSXRlbX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7dmFyaWFibGUudmFsdWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwid29ya0Zsb3dWYXJpYWJsZXNQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OnZhcmlhYmxlcyBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFdvcmtmbG93VmFyaWFibGVzTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJpc1dGVmFyaWFibGVzRmlsdGVyTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJXb3JrZmxvd1ZhcmlhYmxlc1BhZ2luZ1wiIFtncm91cF09XCJ3b3JrZmxvd1ZhcmlhYmxlc0Zvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICN3b3JrZmxvd1ZhcmlhYmxlc1BhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1hY3RpdmUtcHJpbWFyeSBtcy0wIG1lLTEwIHB5LTVcIiAoY2xpY2spPVwiaW5pdGlhbGl6ZVRhc2tzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUYXNrc1wiKX19PC9hPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTUgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIiAqbmdJZj1cImlzV0ZUYXNrc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInRhc2tzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGFza3NUZXh0Qm94XCIgW2dyb3VwXT1cInRhc2tzRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwidGFza0luc3RhbmNlSWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJ0YXNrc0Zvcm1cIiBbaGlkZGVuXT1cInRydWVcIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6dmFyaWFibGVzIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZpdHlOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIklzQ29tcGxldGVkXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNyZWF0aW9uRGF0ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUeXBlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFzc2lnbmVkVG9cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ29tcGxldGVkQnlcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHRhc2sgb2YgdGFza3NQYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYXJrXCI+e3t0YXNrLmFjdGl2aXR5fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhc2suSXNDb21wbGV0ZWQ7IGVsc2Ugbm90Q29tcGxldGVkXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiWWVzXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RDb21wbGV0ZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOb1wiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3Rhc2suY3JlYXRpb25EYXRlfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3t0YXNrLnRhc2tDb3JyZWxhdGlvblR5cGV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3Rhc2suYXNzaWduZWRUb319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7dGFzay5jb21wbGV0ZWRCeX19PC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwidGFza3NQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OnZhcmlhYmxlcyBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFdvcmtmbG93VGFza3NMaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cImlzV0ZUYXNrc0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiV29ya2Zsb3dUYXNrc1BhZ2luZ1wiIFtncm91cF09XCJ0YXNrc0Zvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICN3b3JrZmxvd1Rhc2tzUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJpbml0aWFsaXplRXJyb3JzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFcnJvcnNcIil9fTwvYT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01IHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJpc1dGRXJyb3JzRmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZXJyb3JzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoRXJyb3JzVGV4dEJveFwiIFtncm91cF09XCJlcnJvcnNGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJlcnJvckluc3RhbmNlSWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJlcnJvcnNGb3JtXCIgW2hpZGRlbl09XCJ0cnVlXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tYmVnaW46OnZhcmlhYmxlcyBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2aXR5TmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJJbnN0YW5jZU5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRXJyb3JNc2dcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGVycm9yIG9mIGVycm9yc1BhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e2Vycm9yLmFjdGl2aXR5TmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tlcnJvci5pbnN0YW5jZU5hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2Vycm9yLmVycm9yfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJlcnJvcnNQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OnZhcmlhYmxlcyBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFdvcmtmbG93RXJyb3JzTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJpc1dGRXJyb3JzRmlsdGVyTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJXb3JrZmxvd0Vycm9yc1BhZ2luZ1wiIFtncm91cF09XCJlcnJvcnNGb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjd29ya2Zsb3dFcnJvcnNQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICAgICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImluaXRpYWxpemVMb2dzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJMb2dzXCIpfX08L2E+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiaXNXRkxvZ3NGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJsb2dzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoTG9nc1RleHRCb3hcIiBbZ3JvdXBdPVwibG9nc0Zvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cImxvZ0luc3RhbmNlSWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJsb2dzRm9ybVwiIFtoaWRkZW5dPVwidHJ1ZVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjp2YXJpYWJsZXMgbGlzdC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpdml0eVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZXNjaXNpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ29tcGxldGVkQnlcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ3JlYXRpb25EYXRlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGxvZyBvZiBsb2dzUGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFya1wiPnt7bG9nLmFjdGl2aXR5TmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tsb2cub3V0Y29tZU5hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2xvZy5jb21wbGV0ZWRCeX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7bG9nLmNyZWF0ZWR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2xvZy5jcmVhdGVkfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBuZ2JEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0xvZ1ZhcmlhYmxlcyhsb2cuaWRFbmNyeXB0ZWQsIExvZ1ZhcmlhYmxlc01vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJMb2dWYXJpYWJsZXNcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cImxvZ3NQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OnZhcmlhYmxlcyBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFdvcmtmbG93TG9nc0xpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiaXNXRkxvZ3NGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIldvcmtmbG93TG9nc1BhZ2luZ1wiIFtncm91cF09XCJsb2dzRm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3dvcmtmbG93TG9nc1BhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDwhLS1Mb2cgdmFyaWFibGVzIE1vZGFsLS0+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI0xvZ1ZhcmlhYmxlc01vZGFsIGxldC1tb2RhbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkxvZ1ZhcmlhYmxlc1wiKX19PC9oMT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZhcmlhYmxlVHlwZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZhbHVlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGxvZ1ZhciBvZiBsb2dWYXJpYWJsZXNQYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFya1wiPnt7bG9nVmFyLnZhcmlhYmxlTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7bG9nVmFyLnZhcmlhYmxlVHlwZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3tsb2dWYXIudmFyaWFibGVWYWx1ZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwibG9nVmFyaWFibGVzUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPlxyXG4gICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2xvc2VcIil9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9saT5cclxuXHJcbiAgICAgIDwvdWw+XHJcbiAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19