@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
@@ -1,32 +1,32 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { Component, ViewChild } from '@angular/core';
3
3
  import { FormGroup } from '@angular/forms';
4
- import { ControlLayout, EnglishArabicDTO, FilterItem, FilterType, ForceDirection, InputType, MultiLingualTextBoxOptions, PagingOptions, TextBoxOptions, ToggleSlideOptions, DropdownOptions } from '@bnsights/bbsf-controls';
4
+ import { ControlLayout, EnglishArabicDTO, FilterItem, FilterType, InputType, MultiLingualTextBoxOptions, PagingOptions, TextBoxOptions, ToggleSlideOptions, DropdownOptions, FormOptions, PagingActionMode, ForceDirection, ConfirmationModalOptions, CheckBoxOptions } from '@bnsights/bbsf-controls';
5
5
  import { WFVariableModel } from '../../shared/models/WorkflowModels/WFVariableModel';
6
- import { WFActivityModel } from '../../shared/models/WorkflowModels/WFActivityModel';
7
6
  import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
7
+ import { VariableLookupModel } from '../../shared/models/WorkflowModels/VariableLookupModel';
8
+ import { WFVariableDataType } from '../../shared/Enums/WFVariableDataType';
9
+ import { WFActivityVariableDTO, WFActivityVariablesModel } from '../../shared/models/WorkflowModels/WFActivityVariablesModel';
8
10
  import * as i0 from "@angular/core";
9
- import * as i1 from "../../shared/Services/data.service";
10
- import * as i2 from "@bnsights/bbsf-utilities";
11
- import * as i3 from "./../../shared/Services/WorkflowService.service";
12
- import * as i4 from "@angular/router";
13
- import * as i5 from "../../shared/Services/WorkflowVariablesService.service";
14
- import * as i6 from "../../shared/Services/WorkflowActivityService.service";
15
- import * as i7 from "../../../_metronic/core/services/page-info.service";
16
- import * as i8 from "@ng-bootstrap/ng-bootstrap";
17
- import * as i9 from "ng-block-ui";
18
- import * as i10 from "@bnsights/bbsf-controls";
19
- import * as i11 from "../../empty-data/empty-data.component";
20
- import * as i12 from "@angular/common";
21
- import * as i13 from "@angular/forms";
22
- import * as i14 from "ng-inline-svg";
11
+ import * as i1 from "@bnsights/bbsf-utilities";
12
+ import * as i2 from "./../../shared/Services/WorkflowService.service";
13
+ import * as i3 from "@angular/router";
14
+ import * as i4 from "../../shared/Services/WorkflowVariablesService.service";
15
+ import * as i5 from "../../shared/Services/WorkflowActivityService.service";
16
+ import * as i6 from "../../../_metronic/core/services/page-info.service";
17
+ import * as i7 from "@ng-bootstrap/ng-bootstrap";
18
+ import * as i8 from "ng-block-ui";
19
+ import * as i9 from "@bnsights/bbsf-controls";
20
+ import * as i10 from "../../empty-data/empty-data.component";
21
+ import * as i11 from "@angular/common";
22
+ import * as i12 from "@angular/forms";
23
+ import * as i13 from "ng-inline-svg";
23
24
  export class TabsComponent {
24
- constructor(dataServices, authService, WorkflowService, activatedRoute, router, WorkflowVariablesService, workflowActivityService, pageInfoService, modalService, environmentService, bbsfTranslateService, utilityService) {
25
- this.dataServices = dataServices;
25
+ //End Workflow Activity
26
+ constructor(authService, WorkflowService, activatedRoute, WorkflowVariablesService, workflowActivityService, pageInfoService, modalService, environmentService, bbsfTranslateService, utilityService, requestHandlerService) {
26
27
  this.authService = authService;
27
28
  this.WorkflowService = WorkflowService;
28
29
  this.activatedRoute = activatedRoute;
29
- this.router = router;
30
30
  this.WorkflowVariablesService = WorkflowVariablesService;
31
31
  this.workflowActivityService = workflowActivityService;
32
32
  this.pageInfoService = pageInfoService;
@@ -34,48 +34,158 @@ export class TabsComponent {
34
34
  this.environmentService = environmentService;
35
35
  this.bbsfTranslateService = bbsfTranslateService;
36
36
  this.utilityService = utilityService;
37
- this.ApiUrl = "/api/admin/WFVersion/";
38
- this.SubheaderTitle = "";
39
- this.ShowToolbar = false;
40
- this.ShowbreadCrumb = true;
41
- this.Url = "/Admin/Workflows";
42
- this.BreadcrumbTitle = this.utilityService.getResourceValue('Workflows');
37
+ this.requestHandlerService = requestHandlerService;
38
+ this.Pagetitle = "";
39
+ //WF
40
+ // Details Controls
43
41
  this.DetailsForm = new FormGroup({});
44
42
  this.ShowWorkflowDetails = false;
45
- this.WorkflowActivityForm = new FormGroup({});
46
- this.showFilter = false;
47
- this.WorkflowActivityPagingResult = [];
43
+ this.publishControlLoaded = false;
44
+ //Start WorkFlow Version
45
+ this.WorkFlowVersionApiUrl = "/api/admin/WFVersion/";
46
+ this.WorkflowVersionForm = new FormGroup({});
47
+ this.WorkflowVersionPagingResult = [];
48
48
  this.IsFilterLoaded = false;
49
- this.ShowWorkflowVersion = false;
50
- //strat Workflow Variables
49
+ //End WorkFlow version
50
+ //Start Workflow Variables
51
+ //Workflow Variables controls
51
52
  this.WorkflowVariableApiUrl = "/api/admin/WorkflowVariable/";
52
- this.DataTypeList = [];
53
53
  this.WorkflowVariableForm = new FormGroup({});
54
- this.WorkflowVariableshowFilter = false;
54
+ this.DataTypeList = [];
55
55
  this.WorkflowVariablePagingResult = [];
56
56
  this.IsWorkflowVariableFilterLoaded = false;
57
- this.ShowWorkflowVariables = false;
58
- this.Pagetitle = "";
59
57
  //Add Model Controls
60
58
  this.AddWorkflowVariableForm = new FormGroup({});
59
+ this.AddWorkflowVariableFormOptions = new FormOptions;
60
+ //WF variable lookups
61
+ this.addWFVariablesLookupOptions = [];
62
+ this.showAddLookupsTable = false;
63
+ this.addLastLookupIndex = 0;
61
64
  //Edit Model Controls
62
65
  this.EditWorkflowVariableForm = new FormGroup({});
66
+ this.EditWorkflowVariableFormOptions = new FormOptions;
67
+ //WF variable lookups
68
+ this.editWFVariablesLookupOptions = [];
69
+ this.showEditLookupsTable = false;
70
+ this.editLastLookupIndex = 0;
63
71
  //End Workflow Variable
64
72
  //strat Workflow Activity
73
+ //Workflow Activity Controls
65
74
  this.ActivityApiUrl = "/api/admin/WorkflowActivity/";
66
75
  this.ActivityTypeList = [];
67
76
  this.workflowActivityForm = new FormGroup({});
68
- this.workflowActivityShowFilter = false;
69
77
  this.ActivityPagingResult = [];
70
78
  this.IsworkflowActivityFilterLoaded = false;
71
- this.ShowWorkflowActivity = false;
72
- //Add Model Controls
73
- this.AddworkflowActivityForm = new FormGroup({});
74
- //Edit Model Controls
75
- this.EditworkflowActivityForm = new FormGroup({});
76
- //End Workflow Activity
77
- // Decorator wires up blockUI instance
78
- this.ShowPageContent = false;
79
+ //Add WF variables to activity controls
80
+ this.addWorkflowVariabletoActivityForm = new FormGroup({});
81
+ this.addWorkflowVariabletoActivityFormOptions = new FormOptions;
82
+ this.activityWFVariableOptions = [];
83
+ this.lastActivityWFVariableIndex = 0;
84
+ this.activityVariablesList = [];
85
+ this.publishWorkFlow = (id) => {
86
+ return this.WorkflowService.publishWorkFlow(id);
87
+ };
88
+ this.publishWorkFlowOnSuccess = (result) => {
89
+ this.WorkflowDetails.isPublished = true;
90
+ };
91
+ this.getAddWFVariableModel = () => {
92
+ let paramArray = [];
93
+ let ResultModel = this.AddWorkflowVariableForm.value;
94
+ let addModel = new WFVariableModel();
95
+ addModel.Name.English = ResultModel.AddWFVariableName.English;
96
+ addModel.Name.Arabic = ResultModel.AddWFVariableName.Arabic;
97
+ addModel.SysName = ResultModel.AddWFVariableSysName;
98
+ addModel.WorkflowVersionID = Number(this.VersionId);
99
+ addModel.DataTypeItemID = ResultModel.AddWFVariableDataType != null ? Number(ResultModel.AddWFVariableDataType) : null;
100
+ addModel.IsConstant = ResultModel.AddWFVariableConstant;
101
+ for (let j = 0; j < this.addLastLookupIndex; j++) {
102
+ let addLookupNameEN = ResultModel["AddLookupNameEN" + j];
103
+ if (addLookupNameEN == undefined)
104
+ continue;
105
+ let addLookupNameAR = ResultModel["AddLookupNameAR" + j];
106
+ let addLookupValue = ResultModel["AddLookupValue" + j];
107
+ let lookup = new VariableLookupModel();
108
+ lookup.NameEN = addLookupNameEN;
109
+ lookup.NameAR = addLookupNameAR;
110
+ lookup.Value = addLookupValue;
111
+ addModel.variableLookupDTOs.push(lookup);
112
+ }
113
+ paramArray.push(addModel);
114
+ return paramArray;
115
+ };
116
+ this.getAddWFVariableFunction = (AddModel) => {
117
+ return this.WorkflowVariablesService.addVariable(AddModel);
118
+ };
119
+ this.getEditWFVariableModel = () => {
120
+ let paramArray = [];
121
+ let ResultModel = this.EditWorkflowVariableForm.value;
122
+ let EditModel = new WFVariableModel();
123
+ EditModel.ID = Number(this.WorkflowVariableId);
124
+ EditModel.Name.English = ResultModel.EditWFVariableName.English;
125
+ EditModel.Name.Arabic = ResultModel.EditWFVariableName.Arabic;
126
+ EditModel.SysName = ResultModel.EditWFVariableSysName;
127
+ EditModel.WorkflowVersionID = Number(this.VersionId);
128
+ EditModel.DataTypeItemID = ResultModel.EditWFVariableDataType != null ? Number(ResultModel.EditWFVariableDataType) : null;
129
+ EditModel.IsConstant = ResultModel.EditWFVariableConstant;
130
+ for (let j = 0; j < this.editLastLookupIndex; j++) {
131
+ let editLookupID = ResultModel["EditLookupID" + j];
132
+ if (editLookupID == undefined)
133
+ continue;
134
+ let editLookupNameEN = ResultModel["EditLookupNameEN" + j];
135
+ let editLookupNameAR = ResultModel["EditLookupNameAR" + j];
136
+ let editLookupValue = ResultModel["EditLookupValue" + j];
137
+ let lookup = new VariableLookupModel();
138
+ lookup.ID = editLookupID;
139
+ lookup.NameEN = editLookupNameEN;
140
+ lookup.NameAR = editLookupNameAR;
141
+ lookup.Value = editLookupValue;
142
+ EditModel.variableLookupDTOs.push(lookup);
143
+ }
144
+ paramArray.push(EditModel);
145
+ return paramArray;
146
+ };
147
+ this.getEditWFVariableFunction = (EditModel) => {
148
+ return this.WorkflowVariablesService.editVariable(EditModel);
149
+ };
150
+ this.getaddWFVariabletoActivityModel = () => {
151
+ let paramArray = [];
152
+ let ResultModel = this.addWorkflowVariabletoActivityForm.value;
153
+ let model = new WFActivityVariablesModel();
154
+ model.ActivityID = this.activityID;
155
+ for (let j = 0; j < this.lastActivityWFVariableIndex; j++) {
156
+ let variablesIsSystem = ResultModel["variableIsSystem" + j];
157
+ if (variablesIsSystem == undefined)
158
+ continue;
159
+ let variableIsEnabled;
160
+ let variableIsMandatory;
161
+ let variableIsVisible;
162
+ let activityVariable = new WFActivityVariableDTO();
163
+ if (variablesIsSystem) {
164
+ let variableID = ResultModel["variableID" + j];
165
+ activityVariable.ID = variableID;
166
+ variableIsEnabled = ResultModel["variableIsEnabledHidden" + j];
167
+ variableIsMandatory = ResultModel["variableIsMandatoryHidden" + j];
168
+ variableIsVisible = ResultModel["variableIsVisibleHidden" + j];
169
+ }
170
+ else {
171
+ let variableID = ResultModel["variableIDdropdown" + j];
172
+ activityVariable.ID = variableID != null ? Number(variableID) : null;
173
+ variableIsEnabled = ResultModel["variableIsEnabled" + j];
174
+ variableIsMandatory = ResultModel["variableIsMandatory" + j];
175
+ variableIsVisible = ResultModel["variableIsVisible" + j];
176
+ }
177
+ activityVariable.IsSystem = variablesIsSystem;
178
+ activityVariable.IsEnabled = variableIsEnabled;
179
+ activityVariable.IsMandatory = variableIsMandatory;
180
+ activityVariable.IsVisible = variableIsVisible;
181
+ model.activityVariableDTOs.push(activityVariable);
182
+ }
183
+ paramArray.push(model);
184
+ return paramArray;
185
+ };
186
+ this.getaddWFVariabletoActivityFunction = (variablesModel) => {
187
+ return this.workflowActivityService.addActivityWFVariables(variablesModel);
188
+ };
79
189
  this.activatedRoute.params.subscribe(params => {
80
190
  this.WorkflowId = params['id'];
81
191
  this.VersionId = params['vid'];
@@ -83,41 +193,25 @@ export class TabsComponent {
83
193
  }
84
194
  ngOnInit() {
85
195
  return __awaiter(this, void 0, void 0, function* () {
86
- this.ShowPageContent = true;
87
196
  this.bbsfTranslateService.onLangChange.subscribe((event) => {
88
- this.ShowPageContent = false;
89
- this.language = event.lang;
90
197
  this.ngOnInit();
91
198
  });
92
- this.language = yield this.utilityService.getCurrentLanguage();
93
199
  this.ProductionMode = this.environmentService.getProductionMode();
94
200
  this.getDetails();
95
201
  });
96
202
  }
203
+ //WF functions
97
204
  getDetails() {
98
205
  this.ShowWorkflowDetails = false;
99
- this.ShowWorkflowVersion = false;
100
- this.ShowWorkflowActivity = false;
101
- this.ShowWorkflowVariables = false;
102
206
  this.IsFilterLoaded = false;
103
207
  this.IsWorkflowVariableFilterLoaded = false;
104
208
  this.IsworkflowActivityFilterLoaded = false;
105
- this.WorkflowService.GetDetails(this.WorkflowId).subscribe((result) => {
209
+ this.WorkflowService.getDetails(this.WorkflowId).subscribe((result) => {
106
210
  this.WorkflowDetails = result;
107
- this.NameMultilingualTextBox = new MultiLingualTextBoxOptions();
108
- this.NameMultilingualTextBox.ArabicLabelKey = "NameInArabic";
109
- this.NameMultilingualTextBox.EnglishLabelKey = "NameInEnglish";
110
- this.NameMultilingualTextBox.IsRequired = true;
111
- this.NameMultilingualTextBox.Name = "Name";
112
211
  var Name = new EnglishArabicDTO();
113
212
  Name.Arabic = this.WorkflowDetails.name.arabic;
114
213
  Name.English = this.WorkflowDetails.name.english;
115
- if (this.language == 'en') {
116
- this.Pagetitle = Name.English;
117
- }
118
- else {
119
- this.Pagetitle = Name.Arabic;
120
- }
214
+ this.Pagetitle = this.WorkflowDetails.nameStr;
121
215
  PageInfoService.PageTitle = this.Pagetitle;
122
216
  PageInfoService.PageBreadcrumbs = [
123
217
  { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
@@ -127,16 +221,21 @@ export class TabsComponent {
127
221
  ];
128
222
  this.pageInfoService.calculateTitle();
129
223
  this.pageInfoService.calculateBreadcrumbs();
224
+ this.NameMultilingualTextBox = new MultiLingualTextBoxOptions();
225
+ this.NameMultilingualTextBox.ArabicLabelKey = "NameInArabic";
226
+ this.NameMultilingualTextBox.EnglishLabelKey = "NameInEnglish";
227
+ this.NameMultilingualTextBox.IsRequired = true;
228
+ this.NameMultilingualTextBox.Name = "Name";
130
229
  this.NameMultilingualTextBox.Value = Name;
131
230
  this.NameMultilingualTextBox.IsDisabled = true;
231
+ var Description = new EnglishArabicDTO();
232
+ Description.Arabic = this.WorkflowDetails.description.arabic;
233
+ Description.English = this.WorkflowDetails.description.english;
132
234
  this.DescriptionMultilingualTextBox = new MultiLingualTextBoxOptions();
133
235
  this.DescriptionMultilingualTextBox.ArabicLabelKey = "DescriptionInArabic";
134
236
  this.DescriptionMultilingualTextBox.EnglishLabelKey = "DescriptionInEnglish";
135
237
  this.DescriptionMultilingualTextBox.IsRequired = true;
136
238
  this.DescriptionMultilingualTextBox.Name = "Description";
137
- var Description = new EnglishArabicDTO();
138
- Description.Arabic = this.WorkflowDetails.description.arabicValue;
139
- Description.English = this.WorkflowDetails.description.englishValue;
140
239
  this.DescriptionMultilingualTextBox.Value = Description;
141
240
  this.DescriptionMultilingualTextBox.IsDisabled = true;
142
241
  this.SysName = new TextBoxOptions();
@@ -157,9 +256,6 @@ export class TabsComponent {
157
256
  this.Published.Type = InputType.Text;
158
257
  this.Published.IsDisabled = true;
159
258
  this.Published.Value = this.WorkflowDetails.isPublished;
160
- this.ShowWorkflowVersion = false;
161
- this.ShowWorkflowActivity = false;
162
- this.ShowWorkflowVariables = false;
163
259
  this.IsFilterLoaded = false;
164
260
  this.IsWorkflowVariableFilterLoaded = false;
165
261
  this.IsworkflowActivityFilterLoaded = false;
@@ -169,11 +265,27 @@ export class TabsComponent {
169
265
  this.utilityService.stopBlockUI();
170
266
  });
171
267
  }
172
- GetVersions() {
268
+ //Delete provider
269
+ showPublishWFModal(id) {
270
+ //array sent to service function
271
+ let paramArray = [];
272
+ paramArray.push(id);
273
+ this.publishWFConfirmationOptions = new ConfirmationModalOptions();
274
+ this.publishWFConfirmationOptions.ServiceSubmitFunction = this.publishWorkFlow;
275
+ this.publishWFConfirmationOptions.ServiceSubmitModel = paramArray;
276
+ this.publishWFConfirmationOptions.ConfirmationHeader = this.utilityService.getResourceValue("PublishWorkFflow");
277
+ this.publishWFConfirmationOptions.ConfirmationBody = this.utilityService.getResourceValue("PublishWorkFflowConfirmation");
278
+ this.publishWFConfirmationOptions.SubmitButtonText = this.utilityService.getResourceValue("Publish");
279
+ this.publishWFConfirmationOptions.SuccessNotificationMessage = this.utilityService.getResourceValue("PublishedSuccessfully");
280
+ this.publishWFConfirmationOptions.OnSuccessHandler = this.publishWorkFlowOnSuccess;
281
+ this.publishControlLoaded = true;
282
+ setTimeout(() => {
283
+ this.publishConfirmationModalControl.showModal();
284
+ }, 200);
285
+ }
286
+ //WF version functions
287
+ initializeVersion() {
173
288
  this.ShowWorkflowDetails = false;
174
- this.ShowWorkflowVersion = false;
175
- this.ShowWorkflowActivity = false;
176
- this.ShowWorkflowVariables = false;
177
289
  this.IsFilterLoaded = false;
178
290
  this.IsWorkflowVariableFilterLoaded = false;
179
291
  this.IsworkflowActivityFilterLoaded = false;
@@ -199,15 +311,11 @@ export class TabsComponent {
199
311
  this.WorkflowIdFilter.ActionParameterName = "WfID";
200
312
  this.WorkflowIdFilter.IsFormControl = true;
201
313
  this.WorkflowIdFilter.FilterType = FilterType.TextBox;
202
- this.WorkflowActivityPaging = new PagingOptions();
203
- this.WorkflowActivityPaging.ActionPostURL = this.environmentService.getApiUrl() + this.ApiUrl + 'GetVersionsListing';
204
- this.WorkflowActivityPaging.OnKeyPressFiltersControlNames = ["searchTextBox", "WorkflowIdTextBox"];
205
- this.WorkflowActivityPaging.Filters = [this.TextInputFilter, this.WorkflowIdFilter];
206
- this.WorkflowActivityPaging.ValidationToken = this.authService.authorizationHeaderValue();
207
- this.ShowWorkflowDetails = false;
208
- this.ShowWorkflowVersion = true;
209
- this.ShowWorkflowActivity = false;
210
- this.ShowWorkflowVariables = false;
314
+ this.WorkflowVersionPaging = new PagingOptions();
315
+ this.WorkflowVersionPaging.ActionPostURL = this.WorkFlowVersionApiUrl + 'GetVersionsListing';
316
+ this.WorkflowVersionPaging.OnKeyPressFiltersControlNames = ["searchTextBox", "WorkflowIdTextBox"];
317
+ this.WorkflowVersionPaging.Filters = [this.TextInputFilter, this.WorkflowIdFilter];
318
+ this.WorkflowVersionPaging.ValidationToken = this.authService.authorizationHeaderValue();
211
319
  this.IsWorkflowVariableFilterLoaded = false;
212
320
  this.IsworkflowActivityFilterLoaded = false;
213
321
  setTimeout(() => {
@@ -215,372 +323,454 @@ export class TabsComponent {
215
323
  this.utilityService.stopBlockUI();
216
324
  }, 10);
217
325
  }
218
- setWorkflowActivityListResult(result) {
326
+ setWorkflowVersionListResult(result) {
219
327
  this.utilityService.stopBlockUI();
220
- this.WorkflowActivityPagingResult = result;
221
- }
222
- resetFilters() {
223
- this.WorkflowActivityForm.controls["searchTextBox"].setValue(null);
224
- let element = this.input;
225
- element.ReinitializePaging();
328
+ this.WorkflowVersionPagingResult = result;
226
329
  }
227
330
  //WF variables Functions
228
331
  setWorkflowVariableListResult(result) {
229
332
  this.utilityService.stopBlockUI();
230
333
  this.WorkflowVariablePagingResult = result;
231
334
  }
232
- resetWorkflowVariableFilters() {
233
- this.WorkflowVariableForm.controls["searchTextBox"].setValue(null);
234
- let element = this.WorkflowVariablePagingViewElement;
235
- this.utilityService.stopBlockUI();
236
- element.ReinitializePaging();
335
+ //initialize WF variables page
336
+ initializeWorkflowVariables() {
337
+ // TextBox init
338
+ this.WorkflowVariablesearchTextBox = new TextBoxOptions();
339
+ this.WorkflowVariablesearchTextBox.Name = "WorkflowVariablesearchTextBox";
340
+ this.WorkflowVariablesearchTextBox.Type = InputType.Text;
341
+ this.WorkflowVariablesearchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
342
+ this.WorkflowVariablesearchTextBox.HideLabel = true;
343
+ this.TextInputFilter = new FilterItem();
344
+ this.TextInputFilter.FormControlName = "WorkflowVariablesearchTextBox";
345
+ this.TextInputFilter.ActionParameterName = "searchText";
346
+ this.TextInputFilter.IsFormControl = true;
347
+ this.TextInputFilter.FilterType = FilterType.TextBox;
348
+ this.VerisonIdTextBox = new TextBoxOptions();
349
+ this.VerisonIdTextBox.Name = "VerisonIdTextBox";
350
+ this.VerisonIdTextBox.HideLabel = true;
351
+ this.VerisonIdTextBox.Type = InputType.Text;
352
+ this.VerisonIdTextBox.Value = this.WorkflowId;
353
+ this.VerisonIdTextInputFilter = new FilterItem();
354
+ this.VerisonIdTextInputFilter.FormControlName = "VerisonIdTextBox";
355
+ this.VerisonIdTextInputFilter.ActionParameterName = "versionID";
356
+ this.VerisonIdTextInputFilter.IsFormControl = true;
357
+ this.VerisonIdTextInputFilter.FilterType = FilterType.TextBox;
358
+ this.WorkflowVariablePaging = new PagingOptions();
359
+ this.WorkflowVariablePaging.ActionPostURL = this.WorkflowVariableApiUrl + 'GetVariableListing';
360
+ this.WorkflowVariablePaging.OnKeyPressFiltersControlNames = ["WorkflowVariablesearchTextBox", "VerisonIdTextBox"];
361
+ this.WorkflowVariablePaging.Filters = [this.TextInputFilter, this.VerisonIdTextInputFilter];
362
+ this.WorkflowVariablePaging.ValidationToken = this.authService.authorizationHeaderValue();
363
+ this.ShowWorkflowDetails = false;
364
+ this.IsFilterLoaded = false;
365
+ this.IsworkflowActivityFilterLoaded = false;
366
+ setTimeout(() => {
367
+ this.IsWorkflowVariableFilterLoaded = true;
368
+ this.utilityService.stopBlockUI();
369
+ }, 10);
237
370
  }
238
- LoadWorkflowVariables() {
239
- this.WorkflowVariablesService.Loaddropdowns().subscribe((result) => {
240
- let DataTypeList = result;
241
- this.DataTypeList = DataTypeList;
242
- // TextBox inti
243
- this.WorkflowVariablesearchTextBox = new TextBoxOptions();
244
- this.WorkflowVariablesearchTextBox.Name = "WorkflowVariablesearchTextBox";
245
- this.WorkflowVariablesearchTextBox.Type = InputType.Text;
246
- this.WorkflowVariablesearchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
247
- this.WorkflowVariablesearchTextBox.HideLabel = true;
248
- this.TextInputFilter = new FilterItem();
249
- this.TextInputFilter.FormControlName = "WorkflowVariablesearchTextBox";
250
- this.TextInputFilter.ActionParameterName = "searchText";
251
- this.TextInputFilter.IsFormControl = true;
252
- this.TextInputFilter.FilterType = FilterType.TextBox;
253
- this.VerisonIdTextBox = new TextBoxOptions();
254
- this.VerisonIdTextBox.Name = "VerisonIdTextBox";
255
- this.VerisonIdTextBox.HideLabel = true;
256
- this.VerisonIdTextBox.Type = InputType.Text;
257
- this.VerisonIdTextBox.Value = this.WorkflowId;
258
- this.VerisonIdTextInputFilter = new FilterItem();
259
- this.VerisonIdTextInputFilter.FormControlName = "VerisonIdTextBox";
260
- this.VerisonIdTextInputFilter.ActionParameterName = "versionID";
261
- this.VerisonIdTextInputFilter.IsFormControl = true;
262
- this.VerisonIdTextInputFilter.FilterType = FilterType.TextBox;
263
- this.WorkflowVariablePaging = new PagingOptions();
264
- this.WorkflowVariablePaging.ActionPostURL = this.environmentService.getApiUrl() + this.WorkflowVariableApiUrl + 'GetVariableListing';
265
- this.WorkflowVariablePaging.OnKeyPressFiltersControlNames = ["WorkflowVariablesearchTextBox", "VerisonIdTextBox"];
266
- this.WorkflowVariablePaging.Filters = [this.TextInputFilter, this.VerisonIdTextInputFilter];
267
- this.WorkflowVariablePaging.ValidationToken = this.authService.authorizationHeaderValue();
268
- this.ShowWorkflowDetails = false;
269
- this.ShowWorkflowVersion = false;
270
- this.ShowWorkflowActivity = false;
271
- this.ShowWorkflowVariables = true;
272
- this.IsFilterLoaded = false;
273
- this.IsworkflowActivityFilterLoaded = false;
274
- setTimeout(() => {
275
- this.IsWorkflowVariableFilterLoaded = true;
276
- this.utilityService.stopBlockUI();
277
- }, 10);
278
- });
371
+ //Add,Edit WF variable shared functions
372
+ WFVariableTypeOnChange(type, isAdd) {
373
+ debugger;
374
+ if (isAdd) {
375
+ for (let i = 0; i < this.addLastLookupIndex; i++) {
376
+ this.AddWorkflowVariableForm.removeControl("AddLookupNameEN" + i);
377
+ this.AddWorkflowVariableForm.removeControl("AddLookupNameAR" + i);
378
+ this.AddWorkflowVariableForm.removeControl("LookupValue" + i);
379
+ }
380
+ this.addWFVariablesLookupOptions = [];
381
+ this.addLastLookupIndex = 0;
382
+ if (type == WFVariableDataType.SingleSelection || type == WFVariableDataType.MultiSelection)
383
+ this.showAddLookupsTable = true;
384
+ else
385
+ this.showAddLookupsTable = false;
386
+ }
387
+ else {
388
+ for (let i = 0; i < this.editLastLookupIndex; i++) {
389
+ this.EditWorkflowVariableForm.removeControl("EditLookupID" + i);
390
+ this.EditWorkflowVariableForm.removeControl("EditLookupNameEN" + i);
391
+ this.EditWorkflowVariableForm.removeControl("EditLookupNameAR" + i);
392
+ this.EditWorkflowVariableForm.removeControl("EditLookupValue" + i);
393
+ }
394
+ this.editWFVariablesLookupOptions = [];
395
+ this.editLastLookupIndex = 0;
396
+ if (type == 23003 || type == 23004)
397
+ this.showEditLookupsTable = true;
398
+ else
399
+ this.showEditLookupsTable = false;
400
+ }
279
401
  }
280
- showAddWorkflowVariableModal(AddWorkflowVariableModal) {
281
- this.utilityService.startBlockUI();
282
- this.AddWorkflowVariableForm = new FormGroup({});
283
- this.NameInEnglish = new TextBoxOptions();
284
- this.NameInEnglish.Name = "NameInEnglish";
285
- this.NameInEnglish.LabelKey = "NameInEnglish";
286
- this.NameInEnglish.Type = InputType.Text;
287
- this.NameInEnglish.Value = null;
288
- this.NameInEnglish.IsRequired = true;
289
- this.NameInArabic = new TextBoxOptions();
290
- this.NameInArabic.Name = "NameInArabic";
291
- this.NameInArabic.LabelKey = "NameInArabic";
292
- this.NameInArabic.Type = InputType.Text;
293
- this.NameInArabic.Value = null;
294
- this.NameInArabic.IsRequired = true;
295
- this.NameInArabic.ForceDirection = ForceDirection.Arabic;
296
- this.SysNameWorkflowVariable = new TextBoxOptions();
297
- this.SysNameWorkflowVariable.Name = "SysName";
298
- this.SysNameWorkflowVariable.LabelKey = "SysName";
299
- this.SysNameWorkflowVariable.Type = InputType.Text;
300
- this.SysNameWorkflowVariable.Value = null;
301
- this.DataType = new DropdownOptions();
302
- this.DataType.Name = "DataType";
303
- this.DataType.LabelKey = "DataType";
304
- this.DataType.DataSource = this.DataTypeList;
305
- this.DataType.SingleSelection = true;
306
- this.DataType.AllowSearchFilter = true;
307
- this.DataType.Placeholder = "";
308
- this.modalService.open(AddWorkflowVariableModal);
309
- this.utilityService.stopBlockUI();
310
- this.Constant = new ToggleSlideOptions();
311
- this.Constant.Name = "Constant";
312
- this.Constant.LabelKey = "Constant";
313
- this.Constant.ViewType = ControlLayout.Horizontal;
402
+ initializeWFVariableLookupOptions(isAdd) {
403
+ let lookupOptions = [];
404
+ let objectLookupOptions = [];
405
+ let actionIndicate;
406
+ let index;
407
+ if (isAdd) {
408
+ actionIndicate = "Add";
409
+ index = this.addLastLookupIndex;
410
+ }
411
+ else {
412
+ actionIndicate = "Edit";
413
+ index = this.editLastLookupIndex;
414
+ }
415
+ //For edit only
416
+ let lookupID = new TextBoxOptions();
417
+ lookupID.Name = actionIndicate + "LookupID" + index;
418
+ lookupID.HideLabel = true;
419
+ lookupID.Type = InputType.Text;
420
+ lookupID.Value = 0;
421
+ let lookupNameEN = new TextBoxOptions();
422
+ lookupNameEN.Name = actionIndicate + "LookupNameEN" + index;
423
+ lookupNameEN.HideLabel = true;
424
+ lookupNameEN.Type = InputType.Text;
425
+ lookupNameEN.IsRequired = true;
426
+ let lookupNameAR = new TextBoxOptions();
427
+ lookupNameAR.Name = actionIndicate + "LookupNameAR" + index;
428
+ lookupNameAR.HideLabel = true;
429
+ lookupNameAR.Type = InputType.Text;
430
+ lookupNameAR.IsRequired = true;
431
+ let lookupValue = new TextBoxOptions();
432
+ lookupValue.Name = actionIndicate + "LookupValue" + index;
433
+ lookupValue.HideLabel = true;
434
+ lookupValue.Type = InputType.Text;
435
+ lookupValue.IsRequired = true;
436
+ if (isAdd)
437
+ objectLookupOptions.push(lookupNameEN, lookupNameAR, lookupValue);
438
+ else
439
+ objectLookupOptions.push(lookupID, lookupNameEN, lookupNameAR, lookupValue);
440
+ lookupOptions.push(objectLookupOptions);
441
+ index += 1;
442
+ return [lookupOptions, index];
314
443
  }
315
- addWorkflowVariable() {
316
- if (this.AddWorkflowVariableForm.invalid) {
317
- return;
444
+ deleteWFVariableLookup(deletedLookup, isAdd) {
445
+ if (isAdd) {
446
+ let deletedLookupIndex = this.addWFVariablesLookupOptions.indexOf(deletedLookup);
447
+ if (deletedLookupIndex !== -1) {
448
+ this.addWFVariablesLookupOptions.splice(deletedLookupIndex, 1);
449
+ for (var i = 0; i < deletedLookup.length; i++) {
450
+ this.AddWorkflowVariableForm.removeControl(deletedLookup[i].Name);
451
+ }
452
+ }
318
453
  }
319
454
  else {
320
- this.utilityService.startBlockUI();
321
- let ResultModel = this.AddWorkflowVariableForm.value;
322
- //console.log(ResultModel)
323
- let addModel = new WFVariableModel();
324
- addModel.Name.English = ResultModel.NameInEnglish;
325
- addModel.Name.Arabic = ResultModel.EnglishValue;
326
- addModel.SysName = ResultModel.SysName;
327
- addModel.WorkflowVersionID = Number(this.VersionId);
328
- addModel.DataTypeItemID = ResultModel.DataType != null ? Number(ResultModel.DataType) : null;
329
- addModel.IsConstant = ResultModel.Constant;
330
- this.WorkflowVariablesService.AddVariable(addModel).subscribe((result) => {
331
- this.modalService.dismissAll();
332
- let element = this.WorkflowVariablePagingViewElement;
333
- element.ReinitializePaging();
334
- }, (error) => {
335
- });
455
+ let deletedLookupIndex = this.editWFVariablesLookupOptions.indexOf(deletedLookup);
456
+ if (deletedLookupIndex !== -1) {
457
+ this.editWFVariablesLookupOptions.splice(deletedLookupIndex, 1);
458
+ for (var i = 0; i < deletedLookup.length; i++) {
459
+ this.EditWorkflowVariableForm.removeControl(deletedLookup[i].Name);
460
+ }
461
+ }
336
462
  }
337
463
  }
338
- showEditWorkflowVariableModal(WorkflowVariable, EditWorkflowVariableModal) {
464
+ //Add WF variable
465
+ showAddWorkflowVariableModal(AddWorkflowVariableModal) {
339
466
  this.utilityService.startBlockUI();
340
- this.EditWorkflowVariableForm = new FormGroup({});
341
- this.WorkflowVariableId = WorkflowVariable.id;
342
- this.EditNameInEnglish = new TextBoxOptions();
343
- this.EditNameInEnglish.Name = "EditNameInEnglish";
344
- this.EditNameInEnglish.LabelKey = "NameInEnglish";
345
- this.EditNameInEnglish.Type = InputType.Text;
346
- this.EditNameInEnglish.Value = WorkflowVariable.name.english;
347
- this.EditNameInEnglish.IsRequired = true;
348
- this.EditNameInArabic = new TextBoxOptions();
349
- this.EditNameInArabic.Name = "EditNameInArabic";
350
- this.EditNameInArabic.LabelKey = "NameInArabic";
351
- this.EditNameInArabic.Type = InputType.Text;
352
- this.EditNameInArabic.Value = WorkflowVariable.name.arabic;
353
- this.EditNameInArabic.IsRequired = true;
354
- this.EditNameInArabic.ForceDirection = ForceDirection.Arabic;
355
- this.EditSysNameWorkflowVariable = new TextBoxOptions();
356
- this.EditSysNameWorkflowVariable.Name = "EditSysName";
357
- this.EditSysNameWorkflowVariable.LabelKey = "SysName";
358
- this.EditSysNameWorkflowVariable.Type = InputType.Text;
359
- this.EditSysNameWorkflowVariable.Value = WorkflowVariable.sysName;
360
- this.EditDataType = new DropdownOptions();
361
- this.EditDataType.Name = "EditDataType";
362
- this.EditDataType.LabelKey = "DataType";
363
- this.EditDataType.DataSource = this.DataTypeList;
364
- this.EditDataType.SingleSelection = true;
365
- this.EditDataType.AllowSearchFilter = true;
366
- this.EditDataType.Placeholder = "";
367
- this.EditDataType.SelectedItems = this.DataTypeList.filter((item) => { return parseInt(item.key) == WorkflowVariable.dataTypeItemID; }).map((item) => item.key)[0];
368
- ;
369
- this.EditConstant = new ToggleSlideOptions();
370
- this.EditConstant.Name = "EditConstant";
371
- this.EditConstant.LabelKey = "Constant";
372
- this.EditConstant.Value = WorkflowVariable.isConstant;
373
- this.EditConstant.ViewType = ControlLayout.Horizontal;
374
- this.modalService.open(EditWorkflowVariableModal);
375
- this.utilityService.stopBlockUI();
467
+ this.WorkflowVariablesService.loadAddDropdowns().subscribe((result) => {
468
+ let resultObj = result;
469
+ this.DataTypeList = resultObj.dataTypeList;
470
+ this.addWFVariablesLookupOptions = [];
471
+ this.addLastLookupIndex = 0;
472
+ this.showAddLookupsTable = false;
473
+ this.AddWorkflowVariableForm = new FormGroup({});
474
+ this.AddWorkflowVariableFormOptions = new FormOptions();
475
+ this.AddWorkflowVariableFormOptions.FormGroup = this.AddWorkflowVariableForm;
476
+ this.AddWorkflowVariableFormOptions.GetModelFunction = this.getAddWFVariableModel;
477
+ this.AddWorkflowVariableFormOptions.ServiceSubmitFunction = this.getAddWFVariableFunction;
478
+ this.AddWorkflowVariableFormOptions.PagingReference = this.WorkflowVariablePagingViewElement;
479
+ this.AddWFVariableName = new MultiLingualTextBoxOptions();
480
+ this.AddWFVariableName.Name = "AddWFVariableName";
481
+ this.AddWFVariableName.ArabicLabelKey = "NameInArabic";
482
+ this.AddWFVariableName.EnglishLabelKey = "NameInEnglish";
483
+ this.AddWFVariableName.IsRequired = true;
484
+ this.AddWFVariableSysName = new TextBoxOptions();
485
+ this.AddWFVariableSysName.Name = "AddWFVariableSysName";
486
+ this.AddWFVariableSysName.LabelKey = "SysName";
487
+ this.AddWFVariableSysName.Type = InputType.Text;
488
+ this.AddWFVariableSysName.Value = null;
489
+ this.AddWFVariableDataType = new DropdownOptions();
490
+ this.AddWFVariableDataType.Name = "AddWFVariableDataType";
491
+ this.AddWFVariableDataType.LabelKey = "DataType";
492
+ this.AddWFVariableDataType.DataSource = this.DataTypeList;
493
+ this.AddWFVariableDataType.SingleSelection = true;
494
+ this.AddWFVariableDataType.AllowSearchFilter = true;
495
+ this.AddWFVariableDataType.Placeholder = "";
496
+ this.AddWFVariableConstant = new ToggleSlideOptions();
497
+ this.AddWFVariableConstant.Name = "AddWFVariableConstant";
498
+ this.AddWFVariableConstant.LabelKey = "Constant";
499
+ this.AddWFVariableConstant.ViewType = ControlLayout.Horizontal;
500
+ this.modalService.open(AddWorkflowVariableModal);
501
+ this.utilityService.stopBlockUI();
502
+ });
376
503
  }
377
- editWorkflowVariable() {
378
- if (this.EditWorkflowVariableForm.invalid) {
379
- return;
380
- }
381
- else {
382
- this.utilityService.startBlockUI();
383
- let ResultModel = this.EditWorkflowVariableForm.value;
384
- let EditModel = new WFVariableModel();
385
- EditModel.ID = Number(this.WorkflowVariableId);
386
- EditModel.Name.English = ResultModel.EditNameInEnglish;
387
- EditModel.Name.Arabic = ResultModel.EditNameInArabic;
388
- EditModel.SysName = ResultModel.EditSysName;
389
- EditModel.WorkflowVersionID = Number(this.VersionId);
390
- EditModel.DataTypeItemID = ResultModel.EditDataType != null ? Number(ResultModel.EditDataType) : null;
391
- EditModel.IsConstant = ResultModel.EditConstant;
392
- this.WorkflowVariablesService.EditVariable(EditModel).subscribe((result) => {
393
- this.modalService.dismissAll();
394
- let element = this.WorkflowVariablePagingViewElement;
395
- element.UpdatePaging();
396
- }, (error) => {
397
- });
504
+ addWFVariableLookupinAddMode() {
505
+ let result = this.initializeWFVariableLookupOptions(true);
506
+ this.addWFVariablesLookupOptions = this.addWFVariablesLookupOptions.concat(result[0]);
507
+ this.addLastLookupIndex = result[1];
508
+ }
509
+ //Edit WF variable
510
+ showEditWorkflowVariableModal(WFVariableID, WFVariableIDEnc, EditWorkflowVariableModal) {
511
+ this.utilityService.startBlockUI();
512
+ this.WorkflowVariableId = WFVariableID;
513
+ this.WorkflowVariablesService.getEditWorkFlowVariableData(WFVariableIDEnc).subscribe((result) => {
514
+ let resultObj = result;
515
+ let workflowVariable = resultObj.model;
516
+ let lists = resultObj.lists;
517
+ this.DataTypeList = lists.dataTypeList;
518
+ this.editWFVariablesLookupOptions = [];
519
+ this.editLastLookupIndex = 0;
520
+ this.showEditLookupsTable = false;
521
+ this.EditWorkflowVariableForm = new FormGroup({});
522
+ this.EditWorkflowVariableFormOptions = new FormOptions();
523
+ this.EditWorkflowVariableFormOptions.FormGroup = this.EditWorkflowVariableForm;
524
+ this.EditWorkflowVariableFormOptions.GetModelFunction = this.getEditWFVariableModel;
525
+ this.EditWorkflowVariableFormOptions.ServiceSubmitFunction = this.getEditWFVariableFunction;
526
+ this.EditWorkflowVariableFormOptions.PagingReference = this.WorkflowVariablePagingViewElement;
527
+ this.EditWorkflowVariableFormOptions.PagingActionMode = PagingActionMode.Update;
528
+ let name = new EnglishArabicDTO();
529
+ name.Arabic = workflowVariable.name.arabic;
530
+ name.English = workflowVariable.name.english;
531
+ this.EditWFVariableName = new MultiLingualTextBoxOptions();
532
+ this.EditWFVariableName.Name = "EditWFVariableName";
533
+ this.EditWFVariableName.ArabicLabelKey = "NameInArabic";
534
+ this.EditWFVariableName.EnglishLabelKey = "NameInEnglish";
535
+ this.EditWFVariableName.IsRequired = true;
536
+ this.EditWFVariableName.Value = name;
537
+ this.EditWFVariableSysName = new TextBoxOptions();
538
+ this.EditWFVariableSysName.Name = "EditWFVariableSysName";
539
+ this.EditWFVariableSysName.LabelKey = "SysName";
540
+ this.EditWFVariableSysName.Type = InputType.Text;
541
+ this.EditWFVariableSysName.Value = workflowVariable.sysName;
542
+ this.EditWFVariableDataType = new DropdownOptions();
543
+ this.EditWFVariableDataType.Name = "EditWFVariableDataType";
544
+ this.EditWFVariableDataType.LabelKey = "DataType";
545
+ this.EditWFVariableDataType.DataSource = this.DataTypeList;
546
+ this.EditWFVariableDataType.SingleSelection = true;
547
+ this.EditWFVariableDataType.AllowSearchFilter = true;
548
+ this.EditWFVariableDataType.Placeholder = "";
549
+ this.EditWFVariableDataType.SelectedItems = this.DataTypeList.filter((item) => { return parseInt(item.key) == workflowVariable.dataTypeItemID; }).map((item) => item.key)[0];
550
+ ;
551
+ this.EditWFVariableConstant = new ToggleSlideOptions();
552
+ this.EditWFVariableConstant.Name = "EditWFVariableConstant";
553
+ this.EditWFVariableConstant.LabelKey = "Constant";
554
+ this.EditWFVariableConstant.Value = workflowVariable.isConstant;
555
+ this.EditWFVariableConstant.ViewType = ControlLayout.Horizontal;
556
+ if (workflowVariable.dataTypeItemID == 23003 || workflowVariable.dataTypeItemID == 23004) {
557
+ //Set Lookup Controls
558
+ this.setEditVariableLookups(workflowVariable.variableLookupDTOs);
559
+ this.showEditLookupsTable = true;
560
+ }
561
+ this.modalService.open(EditWorkflowVariableModal);
562
+ this.utilityService.stopBlockUI();
563
+ });
564
+ }
565
+ setEditVariableLookups(existingLookups) {
566
+ for (let i = 0; i < existingLookups.length; i++) {
567
+ let objectAttributeOptions = [];
568
+ let lookupID = new TextBoxOptions();
569
+ lookupID.Name = "EditLookupID" + i;
570
+ lookupID.HideLabel = true;
571
+ lookupID.Type = InputType.Text;
572
+ lookupID.Value = existingLookups[i].id;
573
+ let lookupNameEN = new TextBoxOptions();
574
+ lookupNameEN.Name = "EditLookupNameEN" + i;
575
+ lookupNameEN.HideLabel = true;
576
+ lookupNameEN.Type = InputType.Text;
577
+ lookupNameEN.Value = existingLookups[i].nameEN;
578
+ lookupNameEN.IsRequired = true;
579
+ let lookupNameAR = new TextBoxOptions();
580
+ lookupNameAR.Name = "EditLookupNameAR" + i;
581
+ lookupNameAR.HideLabel = true;
582
+ lookupNameAR.Type = InputType.Text;
583
+ lookupNameAR.Value = existingLookups[i].nameAR;
584
+ lookupNameAR.IsRequired = true;
585
+ lookupNameAR.ForceDirection = ForceDirection.Arabic;
586
+ let lookupValue = new TextBoxOptions();
587
+ lookupValue.Name = "EditLookupValue" + i;
588
+ lookupValue.HideLabel = true;
589
+ lookupValue.Type = InputType.Text;
590
+ lookupValue.Value = existingLookups[i].value;
591
+ lookupValue.IsRequired = true;
592
+ objectAttributeOptions.push(lookupID, lookupNameEN, lookupNameAR, lookupValue);
593
+ this.editWFVariablesLookupOptions.push(objectAttributeOptions);
594
+ this.editLastLookupIndex += 1;
398
595
  }
399
596
  }
597
+ addWFVariableLookupinEditMode() {
598
+ let result = this.initializeWFVariableLookupOptions(false);
599
+ this.editWFVariablesLookupOptions = this.editWFVariablesLookupOptions.concat(result[0]);
600
+ this.editLastLookupIndex = result[1];
601
+ }
400
602
  //WF Activitities Functions
401
603
  setActivityListResult(result) {
402
604
  this.ActivityPagingResult = result;
403
605
  }
404
- resetworkflowActivityFilters() {
405
- this.workflowActivityForm.controls["searchTextBox"].setValue(null);
406
- let element = this.ActivityPagingViewElement;
407
- element.ReinitializePaging();
408
- }
409
- LoadworkflowActivity() {
606
+ initializeWorkflowActivity() {
410
607
  // this.IsworkflowActivityFilterLoaded = false;
411
608
  this.utilityService.startBlockUI();
412
- this.workflowActivityService.Loaddropdowns().subscribe((result) => {
413
- let ActivityList = result;
414
- this.ActivityTypeList = ActivityList;
415
- this.WorkflowActivityIdTextBox = new TextBoxOptions();
416
- this.WorkflowActivityIdTextBox.Name = "WorkflowActivityIdTextBox";
417
- this.WorkflowActivityIdTextBox.HideLabel = true;
418
- this.WorkflowActivityIdTextBox.Type = InputType.Text;
419
- this.WorkflowActivityIdTextBox.Value = this.WorkflowId;
420
- this.WorkflowActivityIdFilter = new FilterItem();
421
- this.WorkflowActivityIdFilter.FormControlName = "WorkflowActivityIdTextBox";
422
- this.WorkflowActivityIdFilter.ActionParameterName = "WfID";
423
- this.WorkflowActivityIdFilter.IsFormControl = true;
424
- this.WorkflowActivityIdFilter.FilterType = FilterType.TextBox;
425
- this.ActivityPaging = new PagingOptions();
426
- this.ActivityPaging.ActionPostURL = this.environmentService.getApiUrl() + this.ActivityApiUrl + 'GetWorkflowActivityListing';
427
- this.ActivityPaging.OnKeyPressFiltersControlNames = ["WorkflowActivityIdTextBox"];
428
- this.ActivityPaging.Filters = [this.WorkflowActivityIdFilter];
429
- this.ActivityPaging.ValidationToken = this.authService.authorizationHeaderValue();
430
- this.ShowWorkflowDetails = false;
431
- this.ShowWorkflowVersion = false;
432
- this.ShowWorkflowActivity = true;
433
- this.ShowWorkflowVariables = false;
434
- this.IsFilterLoaded = false;
435
- this.IsWorkflowVariableFilterLoaded = false;
436
- setTimeout(() => {
437
- this.IsworkflowActivityFilterLoaded = true;
438
- this.utilityService.stopBlockUI();
439
- }, 10);
440
- });
609
+ this.WorkflowActivityIdTextBox = new TextBoxOptions();
610
+ this.WorkflowActivityIdTextBox.Name = "WorkflowActivityIdTextBox";
611
+ this.WorkflowActivityIdTextBox.HideLabel = true;
612
+ this.WorkflowActivityIdTextBox.Type = InputType.Text;
613
+ this.WorkflowActivityIdTextBox.Value = this.WorkflowId;
614
+ this.WorkflowActivityIdFilter = new FilterItem();
615
+ this.WorkflowActivityIdFilter.FormControlName = "WorkflowActivityIdTextBox";
616
+ this.WorkflowActivityIdFilter.ActionParameterName = "WfID";
617
+ this.WorkflowActivityIdFilter.IsFormControl = true;
618
+ this.WorkflowActivityIdFilter.FilterType = FilterType.TextBox;
619
+ this.ActivityPaging = new PagingOptions();
620
+ this.ActivityPaging.ActionPostURL = this.ActivityApiUrl + 'GetWorkflowActivityListing';
621
+ this.ActivityPaging.OnKeyPressFiltersControlNames = ["WorkflowActivityIdTextBox"];
622
+ this.ActivityPaging.Filters = [this.WorkflowActivityIdFilter];
623
+ this.ActivityPaging.ValidationToken = this.authService.authorizationHeaderValue();
624
+ this.ShowWorkflowDetails = false;
625
+ this.IsFilterLoaded = false;
626
+ this.IsWorkflowVariableFilterLoaded = false;
627
+ setTimeout(() => {
628
+ this.IsworkflowActivityFilterLoaded = true;
629
+ this.utilityService.stopBlockUI();
630
+ }, 10);
631
+ //this.workflowActivityService.Loaddropdowns().subscribe((result) => {
632
+ // let ActivityList = result as any
633
+ // this.ActivityTypeList = ActivityList
634
+ //})
441
635
  }
442
- showAddworkflowActivityModal(AddWorkflowActivityModal) {
636
+ //Add Activity WF variables
637
+ showAddWFVariablestoActivity(versionID, activityID, wfVariablesModal) {
443
638
  this.utilityService.startBlockUI();
444
- this.AddworkflowActivityForm = new FormGroup({});
445
- this.workflowActivityNameInEnglish = new TextBoxOptions();
446
- this.workflowActivityNameInEnglish.Name = "NameInEnglish";
447
- this.workflowActivityNameInEnglish.LabelKey = "NameInEnglish";
448
- this.workflowActivityNameInEnglish.Type = InputType.Text;
449
- this.workflowActivityNameInEnglish.Value = null;
450
- this.workflowActivityNameInEnglish.IsRequired = true;
451
- this.workflowActivityNameInArabic = new TextBoxOptions();
452
- this.workflowActivityNameInArabic.Name = "NameInArabic";
453
- this.workflowActivityNameInArabic.LabelKey = "NameInArabic";
454
- this.workflowActivityNameInArabic.Type = InputType.Text;
455
- this.workflowActivityNameInArabic.Value = null;
456
- this.workflowActivityNameInArabic.IsRequired = true;
457
- this.workflowActivityNameInArabic.ForceDirection = ForceDirection.Arabic;
458
- this.workflowActivityDescriptionInEnglish = new TextBoxOptions();
459
- this.workflowActivityDescriptionInEnglish.Name = "DescriptionInEnglish";
460
- this.workflowActivityDescriptionInEnglish.LabelKey = "DescriptionInEnglish";
461
- this.workflowActivityDescriptionInEnglish.Type = InputType.Text;
462
- this.workflowActivityDescriptionInEnglish.Value = null;
463
- this.workflowActivityDescriptionInEnglish.IsRequired = true;
464
- this.workflowActivityDescriptionInArabic = new TextBoxOptions();
465
- this.workflowActivityDescriptionInArabic.Name = "DescriptionInArabic";
466
- this.workflowActivityDescriptionInArabic.LabelKey = "DescriptionInArabic";
467
- this.workflowActivityDescriptionInArabic.Type = InputType.Text;
468
- this.workflowActivityDescriptionInArabic.Value = null;
469
- this.workflowActivityDescriptionInArabic.IsRequired = true;
470
- this.workflowActivityDescriptionInArabic.ForceDirection = ForceDirection.Arabic;
471
- this.workflowActivitySysName = new TextBoxOptions();
472
- this.workflowActivitySysName.Name = "SysName";
473
- this.workflowActivitySysName.LabelKey = "SysName";
474
- this.workflowActivitySysName.Type = InputType.Text;
475
- this.workflowActivitySysName.Value = null;
476
- this.ActivityType = new DropdownOptions();
477
- this.ActivityType.Name = "ActivityType";
478
- this.ActivityType.LabelKey = "ActivityType";
479
- this.ActivityType.DataSource = this.ActivityTypeList;
480
- this.ActivityType.SingleSelection = true;
481
- this.ActivityType.AllowSearchFilter = true;
482
- this.ActivityType.Placeholder = "";
483
- this.modalService.open(AddWorkflowActivityModal);
484
- this.utilityService.stopBlockUI();
639
+ this.activityID = activityID;
640
+ this.activityWFVariableOptions = [];
641
+ this.lastActivityWFVariableIndex = 0;
642
+ this.workflowActivityService.getActivityWFVariables(versionID, activityID).subscribe((result) => {
643
+ let resultObj = result;
644
+ let model = resultObj.model;
645
+ this.activityVariablesList = resultObj.activityVariablesList;
646
+ this.addWorkflowVariabletoActivityForm = new FormGroup({});
647
+ this.addWorkflowVariabletoActivityFormOptions = new FormOptions();
648
+ this.addWorkflowVariabletoActivityFormOptions.FormGroup = this.addWorkflowVariabletoActivityForm;
649
+ this.addWorkflowVariabletoActivityFormOptions.GetModelFunction = this.getaddWFVariabletoActivityModel;
650
+ this.addWorkflowVariabletoActivityFormOptions.ServiceSubmitFunction = this.getaddWFVariabletoActivityFunction;
651
+ this.addWorkflowVariabletoActivityFormOptions.PagingReference = this.ActivityPagingViewElement;
652
+ this.addWorkflowVariabletoActivityFormOptions.PagingActionMode = PagingActionMode.Update;
653
+ for (let i = 0; i < model.activityVariableDTOs.length; i++) {
654
+ let currentVariable = model.activityVariableDTOs[i];
655
+ let objectVariableOptions = [];
656
+ let isSystem = currentVariable.isSystem;
657
+ let variableIsSystem = new TextBoxOptions(); //hidden
658
+ variableIsSystem.Name = "variableIsSystem" + i;
659
+ variableIsSystem.HideLabel = true;
660
+ variableIsSystem.Type = InputType.Text;
661
+ variableIsSystem.Value = isSystem;
662
+ let variableIsEnabled = new CheckBoxOptions();
663
+ variableIsEnabled.Name = "variableIsEnabled" + i;
664
+ variableIsEnabled.Value = currentVariable.isEnabled;
665
+ variableIsEnabled.IsDisabled = isSystem;
666
+ //hidden field
667
+ let variableIsEnabledHidden = new CheckBoxOptions();
668
+ variableIsEnabledHidden.Name = "variableIsEnabledHidden" + i;
669
+ variableIsEnabledHidden.Value = currentVariable.isEnabled;
670
+ let variableIsMandatory = new CheckBoxOptions();
671
+ variableIsMandatory.Name = "variableIsMandatory" + i;
672
+ variableIsMandatory.Value = currentVariable.isMandatory;
673
+ variableIsMandatory.IsDisabled = isSystem;
674
+ //hidden field
675
+ let variableIsMandatoryHidden = new CheckBoxOptions();
676
+ variableIsMandatoryHidden.Name = "variableIsMandatoryHidden" + i;
677
+ variableIsMandatoryHidden.Value = currentVariable.isMandatory;
678
+ let variableIsVisible = new CheckBoxOptions();
679
+ variableIsVisible.Name = "variableIsVisible" + i;
680
+ variableIsVisible.Value = currentVariable.isVisible;
681
+ variableIsVisible.IsDisabled = isSystem;
682
+ //hidden field
683
+ let variableIsVisibleHidden = new CheckBoxOptions();
684
+ variableIsVisibleHidden.Name = "variableIsVisibleHidden" + i;
685
+ variableIsVisibleHidden.Value = currentVariable.isVisible;
686
+ objectVariableOptions.push(variableIsSystem, variableIsEnabled, variableIsEnabledHidden, variableIsMandatory, variableIsMandatoryHidden, variableIsVisible, variableIsVisibleHidden, isSystem);
687
+ if (isSystem) {
688
+ let variableName = new TextBoxOptions();
689
+ variableName.Name = "variableName" + i;
690
+ variableName.HideLabel = true;
691
+ variableName.IsDisabled = true;
692
+ variableName.Type = InputType.Text;
693
+ variableName.Value = currentVariable.variableName;
694
+ let variableID = new TextBoxOptions(); //hidden
695
+ variableID.Name = "variableID" + i;
696
+ variableID.HideLabel = true;
697
+ variableID.Type = InputType.Text;
698
+ variableID.Value = currentVariable.id;
699
+ objectVariableOptions.push(variableName, variableID);
700
+ }
701
+ else {
702
+ let variableIDdropdown = new DropdownOptions();
703
+ variableIDdropdown.Name = "variableIDdropdown";
704
+ variableIDdropdown.HideLabel = true;
705
+ variableIDdropdown.SingleSelection = true;
706
+ variableIDdropdown.AllowSearchFilter = true;
707
+ variableIDdropdown.IsRequired = true;
708
+ variableIDdropdown.DataSource = this.activityVariablesList;
709
+ variableIDdropdown.SelectedItems = this.activityVariablesList.filter((item) => { return parseInt(item.key) == currentVariable.id; }).map((item) => item.key)[0];
710
+ ;
711
+ objectVariableOptions.push(variableIDdropdown);
712
+ }
713
+ this.activityWFVariableOptions.push(objectVariableOptions);
714
+ this.lastActivityWFVariableIndex += 1;
715
+ }
716
+ this.modalService.open(wfVariablesModal);
717
+ this.utilityService.stopBlockUI();
718
+ });
485
719
  }
486
- addworkflowActivity() {
487
- if (this.AddworkflowActivityForm.invalid) {
488
- return;
489
- }
490
- else {
491
- this.utilityService.startBlockUI();
492
- let ResultModel = this.AddworkflowActivityForm.value;
493
- //console.log(ResultModel)
494
- let addModel = new WFActivityModel();
495
- addModel.Name.English = ResultModel.NameInEnglish;
496
- addModel.Name.Arabic = ResultModel.NameInArabic;
497
- addModel.Description.English = ResultModel.DescriptionInEnglish;
498
- addModel.Description.Arabic = ResultModel.DescriptionInArabic;
499
- addModel.SysName = ResultModel.SysName;
500
- addModel.VersionID = Number(this.VersionId);
501
- addModel.ActivityTypeItemID = ResultModel.ActivityType != null ? Number(ResultModel.ActivityType) : null;
502
- this.workflowActivityService.AddWorkflowActivity(addModel).subscribe((result) => {
503
- this.modalService.dismissAll();
504
- let element = this.ActivityPagingViewElement;
505
- element.ReinitializePaging();
506
- }, (error) => {
507
- });
720
+ deleteActivityWFVariable(deletedVariable) {
721
+ let deletedVariableIndex = this.activityWFVariableOptions.indexOf(deletedVariable);
722
+ if (deletedVariableIndex !== -1) {
723
+ this.activityWFVariableOptions.splice(deletedVariableIndex, 1);
724
+ for (var i = 0; i < deletedVariable.length; i++) {
725
+ this.addWorkflowVariabletoActivityForm.removeControl(deletedVariable[i].Name);
726
+ }
508
727
  }
509
728
  }
510
- showEditworkflowActivityModal(workflowActivity, EditWorkflowActivityModal) {
511
- this.EditworkflowActivityForm = new FormGroup({});
512
- //console.log (workflowActivity);
513
- this.workflowActivityId = workflowActivity.id;
514
- this.EditworkflowActivityNameInEnglish = new TextBoxOptions();
515
- this.EditworkflowActivityNameInEnglish.Name = "EditNameInEnglish";
516
- this.EditworkflowActivityNameInEnglish.LabelKey = "NameInEnglish";
517
- this.EditworkflowActivityNameInEnglish.Type = InputType.Text;
518
- this.EditworkflowActivityNameInEnglish.Value = workflowActivity.name.english;
519
- this.EditworkflowActivityNameInEnglish.IsRequired = true;
520
- this.EditworkflowActivityNameInArabic = new TextBoxOptions();
521
- this.EditworkflowActivityNameInArabic.Name = "EditNameInArabic";
522
- this.EditworkflowActivityNameInArabic.LabelKey = "NameInArabic";
523
- this.EditworkflowActivityNameInArabic.Type = InputType.Text;
524
- this.EditworkflowActivityNameInArabic.Value = workflowActivity.name.arabic;
525
- this.EditworkflowActivityNameInArabic.IsRequired = true;
526
- this.EditworkflowActivityNameInArabic.ForceDirection = ForceDirection.Arabic;
527
- this.EditworkflowActivityDescriptionInEnglish = new TextBoxOptions();
528
- this.EditworkflowActivityDescriptionInEnglish.Name = "EditDescriptionInEnglish";
529
- this.EditworkflowActivityDescriptionInEnglish.LabelKey = "DescriptionInEnglish";
530
- this.EditworkflowActivityDescriptionInEnglish.Type = InputType.Text;
531
- this.EditworkflowActivityDescriptionInEnglish.Value = workflowActivity.description != null ? workflowActivity.description.english : "";
532
- this.EditworkflowActivityDescriptionInEnglish.IsRequired = true;
533
- this.EditworkflowActivityDescriptionInArabic = new TextBoxOptions();
534
- this.EditworkflowActivityDescriptionInArabic.Name = "EditDescriptionInArabic";
535
- this.EditworkflowActivityDescriptionInArabic.LabelKey = "DescriptionInArabic";
536
- this.EditworkflowActivityDescriptionInArabic.Type = InputType.Text;
537
- this.EditworkflowActivityDescriptionInArabic.Value = workflowActivity.description != null ? workflowActivity.description.arabic : "";
538
- this.EditworkflowActivityDescriptionInArabic.IsRequired = true;
539
- this.EditworkflowActivityDescriptionInArabic.ForceDirection = ForceDirection.Arabic;
540
- this.EditworkflowActivitySysName = new TextBoxOptions();
541
- this.EditworkflowActivitySysName.Name = "EditSysName";
542
- this.EditworkflowActivitySysName.LabelKey = "SysName";
543
- this.EditworkflowActivitySysName.Type = InputType.Text;
544
- this.EditworkflowActivitySysName.Value = workflowActivity.sysName;
545
- this.EditActivityType = new DropdownOptions();
546
- this.EditActivityType.Name = "EditActivityType";
547
- this.EditActivityType.LabelKey = "ActivityType";
548
- this.EditActivityType.DataSource = this.ActivityTypeList;
549
- this.EditActivityType.SingleSelection = true;
550
- this.EditActivityType.AllowSearchFilter = true;
551
- this.EditActivityType.Placeholder = "";
552
- this.EditActivityType.SelectedItems = this.ActivityTypeList.filter((item) => { return parseInt(item.key) == workflowActivity.activityTypeItemID; }).map((item) => item.key)[0];
553
- ;
554
- this.modalService.open(EditWorkflowActivityModal);
555
- this.utilityService.stopBlockUI();
729
+ addNewActivityWFVariable() {
730
+ let index = this.lastActivityWFVariableIndex;
731
+ let objectVariableOptions = [];
732
+ let variableIDdropdown = new DropdownOptions();
733
+ variableIDdropdown.Name = "variableIDdropdown" + index;
734
+ variableIDdropdown.HideLabel = true;
735
+ variableIDdropdown.SingleSelection = true;
736
+ variableIDdropdown.AllowSearchFilter = true;
737
+ variableIDdropdown.IsRequired = true;
738
+ variableIDdropdown.DataSource = this.activityVariablesList;
739
+ let isSystem = false;
740
+ let variableIsSystem = new TextBoxOptions(); //hidden
741
+ variableIsSystem.Name = "variableIsSystem" + index;
742
+ variableIsSystem.HideLabel = true;
743
+ variableIsSystem.Type = InputType.Text;
744
+ variableIsSystem.Value = isSystem;
745
+ let variableIsEnabled = new CheckBoxOptions();
746
+ variableIsEnabled.Name = "variableIsEnabled" + index;
747
+ variableIsEnabled.Value = false;
748
+ let variableIsEnabledHidden = new CheckBoxOptions();
749
+ variableIsEnabledHidden.Name = "variableIsEnabledHidden" + index;
750
+ variableIsEnabledHidden.Value = false;
751
+ let variableIsMandatory = new CheckBoxOptions();
752
+ variableIsMandatory.Name = "variableIsMandatory" + index;
753
+ variableIsMandatory.Value = false;
754
+ let variableIsMandatoryHidden = new CheckBoxOptions();
755
+ variableIsMandatoryHidden.Name = "variableIsMandatoryHidden" + index;
756
+ variableIsMandatoryHidden.Value = false;
757
+ let variableIsVisible = new CheckBoxOptions();
758
+ variableIsVisible.Name = "variableIsVisible" + index;
759
+ variableIsVisible.Value = false;
760
+ let variableIsVisibleHidden = new CheckBoxOptions();
761
+ variableIsVisibleHidden.Name = "variableIsVisibleHidden" + index;
762
+ variableIsVisibleHidden.Value = false;
763
+ objectVariableOptions.push(variableIsSystem, variableIsEnabled, variableIsEnabledHidden, variableIsMandatory, variableIsMandatoryHidden, variableIsVisible, variableIsVisibleHidden, isSystem, variableIDdropdown);
764
+ this.activityWFVariableOptions.push(objectVariableOptions);
765
+ this.lastActivityWFVariableIndex += 1;
556
766
  }
557
- editworkflowActivity() {
558
- if (this.EditworkflowActivityForm.invalid) {
559
- return;
560
- }
561
- else {
562
- this.utilityService.startBlockUI();
563
- let ResultModel = this.EditworkflowActivityForm.value;
564
- let EditModel = new WFActivityModel();
565
- EditModel.ID = Number(this.workflowActivityId);
566
- EditModel.Name.English = ResultModel.EditNameInEnglish;
567
- EditModel.Name.Arabic = ResultModel.EditNameInArabic;
568
- EditModel.Description.English = ResultModel.EditDescriptionInEnglish;
569
- EditModel.Description.Arabic = ResultModel.EditDescriptionInArabic;
570
- EditModel.SysName = ResultModel.EditSysName;
571
- EditModel.VersionID = Number(this.VersionId);
572
- EditModel.ActivityTypeItemID = ResultModel.EditActivityType != null ? Number(ResultModel.EditActivityType) : null;
573
- this.workflowActivityService.EditActivity(EditModel).subscribe((result) => {
574
- this.modalService.dismissAll();
575
- let element = this.ActivityPagingViewElement;
576
- element.UpdatePaging();
577
- }, (error) => {
578
- });
579
- }
767
+ //On destroy
768
+ ngOnDestroy() {
769
+ this.requestHandlerService.destroyHandler();
580
770
  }
581
771
  }
582
- TabsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TabsComponent, deps: [{ token: i1.DataSecretService }, { token: i2.AuthService }, { token: i3.WorkflowService }, { token: i4.ActivatedRoute }, { token: i4.Router }, { token: i5.WorkflowVariablesService }, { token: i6.WorkflowActivityService }, { token: i7.PageInfoService }, { token: i8.NgbModal }, { token: i2.EnvironmentService }, { token: i2.BBSFTranslateService }, { token: i2.UtilityService }], target: i0.ɵɵFactoryTarget.Component });
583
- TabsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: TabsComponent, selector: "lib-tabs", viewQueries: [{ propertyName: "input", first: true, predicate: ["WorkflowActivityPagingViewElement"], descendants: true }, { propertyName: "WorkflowVariablePagingViewElement", first: true, predicate: ["WorkflowVariablePagingViewElement"], descendants: true }, { propertyName: "CloseWorkflowVariableModal", first: true, predicate: ["CloseWorkflowVariableModal"], descendants: true }, { propertyName: "CloseEditWorkflowVariableModal", first: true, predicate: ["CloseEditWorkflowVariableModal"], descendants: true }, { propertyName: "ActivityPagingViewElement", first: true, predicate: ["ActivityPagingViewElement"], descendants: true }, { propertyName: "CloseworkflowActivityModal", first: true, predicate: ["CloseworkflowActivityModal"], descendants: true }, { propertyName: "CloseEditworkflowActivityModal", first: true, predicate: ["CloseEditworkflowActivityModal"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder\">\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"getDetails()\">{{utilityService.getResourceValue(\"Details\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0 justify-content-end\">\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" *ngIf=\"WorkflowDetails.isPublished\"\r\n id=\"btnPublish\" class=\"btn btn-sm btn-primary\">\r\n {{utilityService.getResourceValue(\"PublishWorkflow\")}}\r\n\r\n </button>\r\n <!--<a class=\"btn btn-sm btn-light-primary\">\r\n {{utilityService.getResourceValue(\"Preview\")}}\r\n </a>-->\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <form [formGroup]=\"DetailsForm\" *ngIf=\"ShowWorkflowDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"NameMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"DescriptionMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"SysName\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Active\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Published\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n </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)=\"GetVersions()\">{{utilityService.getResourceValue(\"Versions\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"WorkflowActivityForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"WorkflowActivityForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"WorkflowIdTextBox\"\r\n [group]=\"WorkflowActivityForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Change\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Current\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Published\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CreationDate\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let Activity of WorkflowActivityPagingResult\">\r\n <td>\r\n <a *ngIf=\"language=='en'\" href=\"javascript:void(0)\"\r\n [routerLink]=\"['/Admin/Workflows/tabs',Activity.id]\"\r\n routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{Activity.change.current}}</a>\r\n <a *ngIf=\"language=='ar'\" href=\"javascript:void(0)\"\r\n [routerLink]=\"['/Admin/Workflows/tabs',Activity.id]\"\r\n routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{Activity.change.current}}</a>\r\n </td>\r\n <td>{{Activity.isCurrent}}</td>\r\n <td>{{Activity.isPublished}}</td>\r\n <td>{{Activity.creationDate}}</td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowActivityPagingResult.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowActivityListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"WorkflowActivityPaging\" [group]=\"WorkflowActivityForm\"\r\n #WorkflowActivityPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"LoadWorkflowVariables()\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVariableForm\">\r\n <BBSF-TextBox [options]=\"WorkflowVariablesearchTextBox\"\r\n [group]=\"WorkflowVariableForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"VerisonIdTextBox\"\r\n [group]=\"WorkflowVariableForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"showAddWorkflowVariableModal(AddWorkflowVariableModal)\">\r\n <i class=\" fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th *ngIf=\"!ProductionMode\" class=\"min-w-150px\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"DataType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"VariableType\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n\r\n\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let WorkflowVariable of WorkflowVariablePagingResult\">\r\n\r\n <td>\r\n <a *ngIf=\"language=='en'\" href=\"javascript:void(0)\"\r\n class=\"text-dark\">{{WorkflowVariable.name.english}}</a>\r\n <a *ngIf=\"language=='ar'\" href=\"javascript:void(0)\"\r\n class=\"text-dark\">{{WorkflowVariable.name.arabic}}</a>\r\n\r\n </td>\r\n\r\n <td *ngIf=\"!ProductionMode\">\r\n {{WorkflowVariable.sysName}}\r\n </td>\r\n <td>{{WorkflowVariable.dataTypeItem}}</td>\r\n <td>{{WorkflowVariable.variableTypeItem}}</td>\r\n\r\n <td>\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\"\r\n (click)=\"showEditWorkflowVariableModal(WorkflowVariable, EditWorkflowVariableModal)\">\r\n <i class=\"fa fa-edit\"\r\n aria-hidden=\"true\"></i>\r\n </a>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVariablePagingResult.length == 0\">\r\n <td [attr.colspan]=\"ProductionMode ? '4' : '5'\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVariableListResult($event)\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\" [options]=\"WorkflowVariablePaging\"\r\n [group]=\"WorkflowVariableForm\" #WorkflowVariablePagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n <!-- Add Modal -->\r\n <ng-template #AddWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n\r\n <form [formGroup]=\"AddWorkflowVariableForm\"\r\n (ngSubmit)=\"addWorkflowVariable()\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"NameInEnglish\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"NameInArabic\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\" *ngIf=\"!ProductionMode\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"SysNameWorkflowVariable\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"DataType\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"Constant\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseWorkflowVariableModal id=\"CloseWorkflowVariableModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </ng-template>\r\n \r\n <!--Edit Modal-->\r\n <ng-template #EditWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n <form [formGroup]=\"EditWorkflowVariableForm\"\r\n (ngSubmit)=\"editWorkflowVariable()\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditNameInEnglish\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditNameInArabic\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\" *ngIf=\"!ProductionMode\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditSysNameWorkflowVariable\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditDataType\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"EditConstant\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditWorkflowVariableModal id=\"CloseEditWorkflowVariableModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"LoadworkflowActivity()\">\r\n {{utilityService.getResourceValue(\"WorkflowActivities\")}}\r\n </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\">\r\n <form [formGroup]=\"workflowActivityForm\">\r\n <div id=\"filtersContainer\" data-isloaded=\"true\">\r\n <BBSF-TextBox [options]=\"WorkflowActivityIdTextBox\"\r\n [group]=\"workflowActivityForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"showAddworkflowActivityModal(AddWorkflowActivityModal)\">\r\n <i class=\"fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}} \r\n\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 mb-8\" *ngFor=\"let workflowActivity of ActivityPagingResult\">\r\n <div class=\"card bg-light-dark rounded\">\r\n <div class=\"card-header border-0 pt-9\">\r\n <div class=\"card-title m-0 fs-2 text-primary\">\r\n {{workflowActivity.typeName.current}}\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" id=\"btnAdd\"\r\n class=\"btn btn-primary btn-sm me-2 \">\r\n <i class=\"fa fa-gear\" aria-hidden=\"true\">\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n </i>\r\n </button>\r\n <button *ngIf=\"workflowActivity.isPublished\" type=\"button\"\r\n id=\"btnAdd\"\r\n class=\"btn btn-light-primary btn-sm btn-icon me-2\"\r\n (click)=\"showEditworkflowActivityModal(workflowActivity, EditWorkflowActivityModal)\">\r\n <i class=\"fas fa-pen\"></i>\r\n </button>\r\n <button type=\"button\" *ngIf=\"!workflowActivity.isPublished\"\r\n id=\"btnAdd\"\r\n class=\"btn btn-light-primary btn-sm btn-icon me-2\"\r\n (click)=\"showEditworkflowActivityModal(workflowActivity,EditWorkflowActivityModal)\">\r\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-9\">\r\n <div class=\"fs-6 fw-bolder text-dark\">{{utilityService.getResourceValue(\"WFOutcome\")}}</div>\r\n <div class=\"text-gray-400 fw-bold fs-5 mt-1 mb-7\">\r\n <ul class=\"list-unstyled\">\r\n\r\n <li>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n <ul id=\"horizontalmenu\">\r\n <li class=\"text-dark\" *ngFor=\"let item of workflowActivity.variables\">\r\n <i class=\"fa fa-gear\"></i>\r\n {{item.sysName}}\r\n\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n <div class=\" mb-5\">\r\n <div *ngFor=\"let item of workflowActivity.outcomes\">\r\n {{ item.nameEN }}: {{item.nextActvityName}}\r\n </div>\r\n </div>\r\n </div>\r\n <!--end:: Card body-->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setActivityListResult($event)\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\" [options]=\"ActivityPaging\"\r\n [group]=\"workflowActivityForm\" #ActivityPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n <!-- Add Modal -->\r\n <ng-template #AddWorkflowActivityModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"WorkflowActivity\")}}\r\n\r\n </h1>\r\n </div>\r\n\r\n <form [formGroup]=\"AddworkflowActivityForm\"\r\n (ngSubmit)=\"addworkflowActivity()\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"workflowActivityNameInEnglish\"\r\n [group]=\"AddworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"workflowActivityNameInArabic\"\r\n [group]=\"AddworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"workflowActivityDescriptionInEnglish\"\r\n [group]=\"AddworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"workflowActivityDescriptionInArabic\"\r\n [group]=\"AddworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"!ProductionMode\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"workflowActivitySysName\"\r\n [group]=\"AddworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"ActivityType\"\r\n [group]=\"AddworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseworkflowActivityModal id=\"CloseworkflowActivityModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n\r\n \r\n <!--Edit Modal-->\r\n <ng-template #EditWorkflowActivityModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"WorkflowActivity\")}}\r\n </h1>\r\n </div>\r\n <form [formGroup]=\"EditworkflowActivityForm\"\r\n (ngSubmit)=\"editworkflowActivity()\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditworkflowActivityNameInEnglish\"\r\n [group]=\"EditworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditworkflowActivityNameInArabic\"\r\n [group]=\"EditworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditworkflowActivityDescriptionInEnglish\"\r\n [group]=\"EditworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditworkflowActivityDescriptionInArabic\"\r\n [group]=\"EditworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\" *ngIf=\"!ProductionMode\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditworkflowActivitySysName\"\r\n [group]=\"EditworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditActivityType\"\r\n [group]=\"EditworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditworkflowActivityModal id=\"CloseEditworkflowActivityModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n\r\n", styles: [".nav.nav-tabs{background:#f7f8fa;border-bottom:0px}.nav-tabs .nav-item .nav-link{color:#494b74}.nav-tabs .nav-item .nav-link.active,.nav-tabs .nav-item .nav-link:active,.nav-tabs .nav-item .nav-link:hover{color:#494b74;font-weight:500}.workflow-tabs a.nav-link{padding:17px 25px}.kt-widget.kt-widget--user-profile-3.kt-widget.kt-widget--user-profile-3.workflow-activities{border-radius:15px;box-shadow:0 0 3px #dadada!important}.workflow-activities .kt-widget__progress{justify-content:flex-end;align-items:end}.workflow-activities .kt-widget__username{color:#494b74}.workflow-activities ul#horizontalmenu{color:#a4a4a4;list-style:outside}\n"], components: [{ type: i9.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i10.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i10.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i11.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i10.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i10.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i10.ɵj, selector: "BBSF-Toggleslide", inputs: ["group", "options"] }, { type: i8.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }], directives: [{ type: i8.NgbNav, selector: "[ngbNav]", inputs: ["animation", "destroyOnHide", "orientation", "roles", "keyboard", "activeId"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { type: i8.NgbNavItem, selector: "[ngbNavItem]", inputs: ["disabled", "domId", "destroyOnHide", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { type: i8.NgbNavLink, selector: "a[ngbNavLink]" }, { type: i8.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i13.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i13.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i14.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
772
+ TabsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TabsComponent, deps: [{ token: i1.AuthService }, { token: i2.WorkflowService }, { token: i3.ActivatedRoute }, { token: i4.WorkflowVariablesService }, { token: i5.WorkflowActivityService }, { token: i6.PageInfoService }, { token: i7.NgbModal }, { token: i1.EnvironmentService }, { token: i1.BBSFTranslateService }, { token: i1.UtilityService }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
773
+ TabsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: TabsComponent, selector: "lib-tabs", viewQueries: [{ propertyName: "publishConfirmationModalControl", first: true, predicate: ["publishConfirmationModalControl"], descendants: true }, { propertyName: "WFVersionPagingElement", first: true, predicate: ["WorkflowVersionPagingViewElement"], descendants: true }, { propertyName: "WorkflowVariablePagingViewElement", first: true, predicate: ["WorkflowVariablePagingViewElement"], descendants: true }, { propertyName: "ActivityPagingViewElement", first: true, predicate: ["ActivityPagingViewElement"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder\">\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"getDetails()\">{{utilityService.getResourceValue(\"Details\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0 justify-content-end\">\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" *ngIf=\"!WorkflowDetails.isPublished\"\r\n id=\"btnPublish\" class=\"btn btn-sm btn-primary\" (click)=\"showPublishWFModal(WorkflowDetails.idEncrypted)\">\r\n {{utilityService.getResourceValue(\"PublishWorkflow\")}}\r\n\r\n </button>\r\n <!--<a class=\"btn btn-sm btn-light-primary\">\r\n {{utilityService.getResourceValue(\"Preview\")}}\r\n </a>-->\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <form [formGroup]=\"DetailsForm\" *ngIf=\"ShowWorkflowDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"NameMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"DescriptionMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"SysName\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Active\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Published\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n <!--Publish workflow confirmation-->\r\n <BBSF-ConfirmationModal *ngIf=\"publishControlLoaded\" [options]=\"publishWFConfirmationOptions\" id=\"publishConfirmationModalControl\" #publishConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeVersion()\">{{utilityService.getResourceValue(\"Versions\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVersionForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"WorkflowVersionForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"WorkflowIdTextBox\"\r\n [group]=\"WorkflowVersionForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Change\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Current\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Published\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CreationDate\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let version of WorkflowVersionPagingResult\">\r\n <td>\r\n <a href=\"javascript:void(0)\"\r\n [routerLink]=\"['/Admin/Workflows/VersionInfo',version.idEncrypted]\"\r\n routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{version.changeStr}}</a>\r\n </td>\r\n <td>{{version.isCurrent}}</td>\r\n <td>{{version.isPublished}}</td>\r\n <td>{{version.creationDate}}</td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVersionPagingResult.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVersionListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"WorkflowVersionPaging\" [group]=\"WorkflowVersionForm\"\r\n #WorkflowVersionPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowVariables()\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVariableForm\">\r\n <BBSF-TextBox [options]=\"WorkflowVariablesearchTextBox\"\r\n [group]=\"WorkflowVariableForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"VerisonIdTextBox\"\r\n [group]=\"WorkflowVariableForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"showAddWorkflowVariableModal(AddWorkflowVariableModal)\">\r\n <i class=\" fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th *ngIf=\"!ProductionMode\" class=\"min-w-150px\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"DataType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"VariableType\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n\r\n\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let WorkflowVariable of WorkflowVariablePagingResult\">\r\n\r\n <td>\r\n <a href=\"javascript:void(0)\" class=\"text-dark\">{{WorkflowVariable.nameStr}}</a>\r\n\r\n </td>\r\n\r\n <td *ngIf=\"!ProductionMode\">\r\n {{WorkflowVariable.sysName}}\r\n </td>\r\n <td>{{WorkflowVariable.dataTypeItem}}</td>\r\n <td>{{WorkflowVariable.variableTypeItem}}</td>\r\n\r\n <td>\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\"\r\n (click)=\"showEditWorkflowVariableModal(WorkflowVariable.id,WorkflowVariable.idEncrypted, EditWorkflowVariableModal)\">\r\n <i class=\"fa fa-edit\"\r\n aria-hidden=\"true\"></i>\r\n </a>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVariablePagingResult.length == 0\">\r\n <td [attr.colspan]=\"ProductionMode ? '4' : '5'\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVariableListResult($event)\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\" [options]=\"WorkflowVariablePaging\"\r\n [group]=\"WorkflowVariableForm\" #WorkflowVariablePagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n <!-- Add Modal -->\r\n <ng-template #AddWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddWFVariableName\" [group]=\"AddWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\" *ngIf=\"!ProductionMode\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"AddWFVariableSysName\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,true)\" [options]=\"AddWFVariableDataType\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"AddWFVariableConstant\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showAddLookupsTable\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of addWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinAddMode()\">AddNewRecord</button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseWorkflowVariableModal id=\"CloseWorkflowVariableModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n \r\n <!--Edit Modal-->\r\n <ng-template #EditWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditWFVariableName\" [group]=\"EditWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"!ProductionMode\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditWFVariableSysName\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,false)\" [options]=\"EditWFVariableDataType\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"EditWFVariableConstant\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showEditLookupsTable\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of editWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[3]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,false)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinEditMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditWorkflowVariableModal id=\"CloseEditWorkflowVariableModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowActivity()\">\r\n {{utilityService.getResourceValue(\"WorkflowActivities\")}}\r\n </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\">\r\n <form [formGroup]=\"workflowActivityForm\">\r\n <div id=\"filtersContainer\" data-isloaded=\"true\">\r\n <BBSF-TextBox [options]=\"WorkflowActivityIdTextBox\"\r\n [group]=\"workflowActivityForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\" [routerLink]=\"['/Admin/Workflows/AddActivity',VersionId]\">\r\n <i class=\"fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 mb-8\" *ngFor=\"let workflowActivity of ActivityPagingResult\">\r\n <div class=\"card bg-light-dark rounded\">\r\n <div class=\"card-header border-0 pt-9\">\r\n <div class=\"card-title m-0 fs-2 text-primary\">\r\n {{workflowActivity.typeNameStr}}\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" class=\"btn btn-primary btn-sm me-2 \" (click)=\"showAddWFVariablestoActivity(workflowActivity.versionID,workflowActivity.id,wfActivityVariablesModal)\">\r\n <i class=\"fa fa-gear\" aria-hidden=\"true\">\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n </i>\r\n </button>\r\n <button type=\"button\" id=\"btnAdd\" class=\"btn btn-light-primary btn-sm btn-icon me-2\" [routerLink]=\"['/Admin/Workflows/EditActivity',workflowActivity.idEncrypted]\">\r\n <i *ngIf=\"workflowActivity.isPublished\" class=\"fas fa-pen\"></i>\r\n <i *ngIf=\"!workflowActivity.isPublished\" class=\"fas fa-pen\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-9\">\r\n <div class=\"fs-6 fw-bolder text-dark\">{{utilityService.getResourceValue(\"WFOutcome\")}}</div>\r\n <div class=\"text-gray-400 fw-bold fs-5 mt-1 mb-7\">\r\n <ul class=\"list-unstyled\">\r\n\r\n <li>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n <ul id=\"horizontalmenu\">\r\n <li class=\"text-dark\" *ngFor=\"let item of workflowActivity.variables\">\r\n <i class=\"fa fa-gear\"></i>\r\n {{item.sysName}}\r\n\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n <div class=\" mb-5\">\r\n <div *ngFor=\"let item of workflowActivity.outcomes\">\r\n {{ item.nameEN }}: {{item.nextActvityName}}\r\n </div>\r\n </div>\r\n </div>\r\n <!--end:: Card body-->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setActivityListResult($event)\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\" [options]=\"ActivityPaging\"\r\n [group]=\"workflowActivityForm\" #ActivityPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n\r\n <ng-template #wfActivityVariablesModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"AddWorkflowVariables\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"addWorkflowVariabletoActivityFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Enabled\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Mandatory\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Visible\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of activityWFVariableOptions;let i=index;\">\r\n\r\n <td>\r\n <!--hidden is system-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n\r\n <!--if is systm-->\r\n <div *ngIf=\"option[7];else variableNameDDL;\">\r\n <!--variavle name-->\r\n <BBSF-TextBox [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n <!--hidden variable id-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[9]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <!--variavle name ddl-->\r\n <ng-template #variableNameDDL>\r\n <BBSF-DropdownList [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-DropdownList>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <!--is enabled-->\r\n <BBSF-CheckBox [options]=\"option[1]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[2]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is mandatory-->\r\n <BBSF-CheckBox [options]=\"option[3]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[4]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is visible-->\r\n <BBSF-CheckBox [options]=\"option[5]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[6]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--if ! isSystem-->\r\n <a *ngIf=\"!option[7]\" class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteActivityWFVariable(option)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"5\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addNewActivityWFVariable()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n\r\n", styles: [".nav.nav-tabs{background:#f7f8fa;border-bottom:0px}.nav-tabs .nav-item .nav-link{color:#494b74}.nav-tabs .nav-item .nav-link.active,.nav-tabs .nav-item .nav-link:active,.nav-tabs .nav-item .nav-link:hover{color:#494b74;font-weight:500}.workflow-tabs a.nav-link{padding:17px 25px}.kt-widget.kt-widget--user-profile-3.kt-widget.kt-widget--user-profile-3.workflow-activities{border-radius:15px;box-shadow:0 0 3px #dadada!important}.workflow-activities .kt-widget__progress{justify-content:flex-end;align-items:end}.workflow-activities .kt-widget__username{color:#494b74}.workflow-activities ul#horizontalmenu{color:#a4a4a4;list-style:outside}\n"], components: [{ type: i8.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i9.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i9.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i9.ɵw, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { type: i10.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i9.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i9.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i9.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i9.ɵj, selector: "BBSF-Toggleslide", inputs: ["group", "options"] }, { type: i9.ɵg, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i7.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }], directives: [{ type: i7.NgbNav, selector: "[ngbNav]", inputs: ["animation", "destroyOnHide", "orientation", "roles", "keyboard", "activeId"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { type: i7.NgbNavItem, selector: "[ngbNavItem]", inputs: ["disabled", "domId", "destroyOnHide", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { type: i7.NgbNavLink, selector: "a[ngbNavLink]" }, { type: i7.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: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i13.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { type: i3.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["routerLink", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }] });
584
774
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TabsComponent, decorators: [{
585
775
  type: Component,
586
776
  args: [{
@@ -588,26 +778,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
588
778
  templateUrl: './tabs.component.html',
589
779
  styleUrls: ['./tabs.component.css']
590
780
  }]
591
- }], ctorParameters: function () { return [{ type: i1.DataSecretService }, { type: i2.AuthService }, { type: i3.WorkflowService }, { type: i4.ActivatedRoute }, { type: i4.Router }, { type: i5.WorkflowVariablesService }, { type: i6.WorkflowActivityService }, { type: i7.PageInfoService }, { type: i8.NgbModal }, { type: i2.EnvironmentService }, { type: i2.BBSFTranslateService }, { type: i2.UtilityService }]; }, propDecorators: { input: [{
781
+ }], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.WorkflowService }, { type: i3.ActivatedRoute }, { type: i4.WorkflowVariablesService }, { type: i5.WorkflowActivityService }, { type: i6.PageInfoService }, { type: i7.NgbModal }, { type: i1.EnvironmentService }, { type: i1.BBSFTranslateService }, { type: i1.UtilityService }, { type: i1.RequestHandlerService }]; }, propDecorators: { publishConfirmationModalControl: [{
592
782
  type: ViewChild,
593
- args: ['WorkflowActivityPagingViewElement', { static: false }]
783
+ args: ['publishConfirmationModalControl', { static: false }]
784
+ }], WFVersionPagingElement: [{
785
+ type: ViewChild,
786
+ args: ['WorkflowVersionPagingViewElement', { static: false }]
594
787
  }], WorkflowVariablePagingViewElement: [{
595
788
  type: ViewChild,
596
789
  args: ['WorkflowVariablePagingViewElement', { static: false }]
597
- }], CloseWorkflowVariableModal: [{
598
- type: ViewChild,
599
- args: ['CloseWorkflowVariableModal', { static: false }]
600
- }], CloseEditWorkflowVariableModal: [{
601
- type: ViewChild,
602
- args: ['CloseEditWorkflowVariableModal', { static: false }]
603
790
  }], ActivityPagingViewElement: [{
604
791
  type: ViewChild,
605
792
  args: ['ActivityPagingViewElement', { static: false }]
606
- }], CloseworkflowActivityModal: [{
607
- type: ViewChild,
608
- args: ['CloseworkflowActivityModal', { static: false }]
609
- }], CloseEditworkflowActivityModal: [{
610
- type: ViewChild,
611
- args: ['CloseEditworkflowActivityModal', { static: false }]
612
793
  }] } });
613
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3dvcmtmbG93cy90YWJzL3RhYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy93b3JrZmxvd3MvdGFicy90YWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFzQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJN04sT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBR3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTckYsTUFBTSxPQUFPLGFBQWE7SUFxSHhCLFlBQW9CLFlBQStCLEVBQVUsV0FBd0IsRUFBVSxlQUFnQyxFQUFVLGNBQThCLEVBQVUsTUFBYyxFQUFVLHdCQUFrRCxFQUFVLHVCQUFnRCxFQUFVLGVBQWdDLEVBQVUsWUFBc0IsRUFBVSxrQkFBc0MsRUFBVSxvQkFBMEMsRUFDMWQsY0FBOEI7UUFEbkIsaUJBQVksR0FBWixZQUFZLENBQW1CO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxv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QVUsRUFBRSxDQUFDO2dCQUMvQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMseUJBQWdDLENBQUM7Z0JBQ3BELE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUViLENBQUMsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDOzsyR0ExdEJVLGFBQWE7K0ZBQWIsYUFBYSwwNkJDbkIxQix3MWhDQThtQkE7NEZEM2xCYSxhQUFhO2tCQUx6QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO29CQUNwQixXQUFXLEVBQUUsdUJBQXVCO29CQUNwQyxTQUFTLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7cWJBdUJvRSxLQUFLO3NCQUF2RSxTQUFTO3VCQUFDLG1DQUFtQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkEyQkUsaUNBQWlDO3NCQUFuRyxTQUFTO3VCQUFDLG1DQUFtQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFVTCwwQkFBMEI7c0JBQXJGLFNBQVM7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQVVNLDhCQUE4QjtzQkFBN0YsU0FBUzt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBa0JILHlCQUF5QjtzQkFBbkYsU0FBUzt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBVUcsMEJBQTBCO3NCQUFyRixTQUFTO3VCQUFDLDRCQUE0QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFXTSw4QkFBOEI7c0JBQTdGLFNBQVM7dUJBQUMsZ0NBQWdDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnRyb2xMYXlvdXQsIEVuZ2xpc2hBcmFiaWNEVE8sIEZpbHRlckl0ZW0sIEZpbHRlclR5cGUsIEZvcmNlRGlyZWN0aW9uLCBJbnB1dFR5cGUsIE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zLCBQYWdpbmdPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgVG9nZ2xlU2xpZGVPcHRpb25zLCBEcm9wZG93bk9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IERhdGFTZWNyZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL2RhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93U2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1dvcmtmbG93U2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFdGVmFyaWFibGVNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvV29ya2Zsb3dNb2RlbHMvV0ZWYXJpYWJsZU1vZGVsJztcclxuaW1wb3J0IHsgV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1dvcmtmbG93VmFyaWFibGVzU2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvU2VydmljZXMvV29ya2Zsb3dBY3Rpdml0eVNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFdGQWN0aXZpdHlNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvV29ya2Zsb3dNb2RlbHMvV0ZBY3Rpdml0eU1vZGVsJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRhYnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJzLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFic0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEFwaVVybDogc3RyaW5nID0gXCIvYXBpL2FkbWluL1dGVmVyc2lvbi9cIlxyXG4gIFN1YmhlYWRlclRpdGxlID0gXCJcIjtcclxuICBTaG93VG9vbGJhciA9IGZhbHNlO1xyXG4gIFNob3dicmVhZENydW1iID0gdHJ1ZTtcclxuICBVcmw6IHN0cmluZyA9IFwiL0FkbWluL1dvcmtmbG93c1wiXHJcbiAgQnJlYWRjcnVtYlRpdGxlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdXb3JrZmxvd3MnKTtcclxuICBEZXRhaWxzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFByb2R1Y3Rpb25Nb2RlOiBib29sZWFuO1xyXG4gIFdvcmtmbG93RGV0YWlsczogYW55O1xyXG4gIFdvcmtmbG93SWQ6IHN0cmluZztcclxuICBsYW5ndWFnZTogc3RyaW5nO1xyXG4gIC8vIERldGFpbHMgQ29udHJvbHNcclxuICBOYW1lTXVsdGlsaW5ndWFsVGV4dEJveDogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94OiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucztcclxuICBBY3RpdmU6IFRleHRCb3hPcHRpb25zO1xyXG4gIFB1Ymxpc2hlZDogVGV4dEJveE9wdGlvbnM7XHJcbiAgU3lzTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgU2hvd1dvcmtmbG93RGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFZlcnNpb25JZDogc3RyaW5nXHJcbiAgLy9BY3Rpdml0eSBDb250cm9sc1xyXG4gIEBWaWV3Q2hpbGQoJ1dvcmtmbG93QWN0aXZpdHlQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBpbnB1dDogRWxlbWVudFJlZjtcclxuICBXb3JrZmxvd0FjdGl2aXR5Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFdvcmtmbG93SWRUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBzaG93RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgV29ya2Zsb3dBY3Rpdml0eVBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBXb3JrZmxvd0FjdGl2aXR5UGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBXb3JrZmxvd0lkRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgU2hvd1dvcmtmbG93VmVyc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vc3RyYXQgV29ya2Zsb3cgVmFyaWFibGVzXHJcblxyXG4gIFdvcmtmbG93VmFyaWFibGVBcGlVcmwgPSBcIi9hcGkvYWRtaW4vV29ya2Zsb3dWYXJpYWJsZS9cIlxyXG4gIFdvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBEYXRhVHlwZUxpc3QgPSBbXTtcclxuICBXb3JrZmxvd1ZhcmlhYmxlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFdvcmtmbG93VmFyaWFibGVzaG93RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIFdvcmtmbG93VmFyaWFibGVUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgU2hvd1dvcmtmbG93VmFyaWFibGVzOiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgVmVyaXNvbklkVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgVmVyaXNvbklkVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIFBhZ2V0aXRsZTogc3RyaW5nID0gXCJcIlxyXG4gIEBWaWV3Q2hpbGQoJ1dvcmtmbG93VmFyaWFibGVQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8vQWRkIE1vZGVsIENvbnRyb2xzXHJcbiAgQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBOYW1lSW5FbmdsaXNoOiBUZXh0Qm94T3B0aW9ucztcclxuICBOYW1lSW5BcmFiaWM6IFRleHRCb3hPcHRpb25zO1xyXG4gIFN5c05hbWVXb3JrZmxvd1ZhcmlhYmxlOiBUZXh0Qm94T3B0aW9ucztcclxuICBEYXRhVHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIElzQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1Mb2FkZWQ6IGJvb2xlYW47XHJcbiAgQ29uc3RhbnQ6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICBAVmlld0NoaWxkKCdDbG9zZVdvcmtmbG93VmFyaWFibGVNb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZVdvcmtmbG93VmFyaWFibGVNb2RhbDogRWxlbWVudFJlZjtcclxuXHJcbiAgLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdE5hbWVJbkVuZ2xpc2g6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXROYW1lSW5BcmFiaWM6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXRTeXNOYW1lV29ya2Zsb3dWYXJpYWJsZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdERhdGFUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdENvbnN0YW50OiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgV29ya2Zsb3dWYXJpYWJsZUlkOiBhbnlcclxuICBAVmlld0NoaWxkKCdDbG9zZUVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ2xvc2VFZGl0V29ya2Zsb3dWYXJpYWJsZU1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICAvL0VuZCBXb3JrZmxvdyBWYXJpYWJsZVxyXG5cclxuXHJcblxyXG4gIC8vc3RyYXQgV29ya2Zsb3cgQWN0aXZpdHlcclxuXHJcbiAgQWN0aXZpdHlBcGlVcmwgPSBcIi9hcGkvYWRtaW4vV29ya2Zsb3dBY3Rpdml0eS9cIlxyXG4gIEFjdGl2aXR5VHlwZUxpc3QgPSBbXTtcclxuICB3b3JrZmxvd0FjdGl2aXR5Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHdvcmtmbG93QWN0aXZpdHlTaG93RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQWN0aXZpdHlQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgQWN0aXZpdHlQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgU2hvd1dvcmtmbG93QWN0aXZpdHk6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIFdvcmtmbG93QWN0aXZpdHlJZFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIFdvcmtmbG93QWN0aXZpdHlJZEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBAVmlld0NoaWxkKCdBY3Rpdml0eVBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIEFjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8vQWRkIE1vZGVsIENvbnRyb2xzXHJcbiAgQWRkd29ya2Zsb3dBY3Rpdml0eUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICB3b3JrZmxvd0FjdGl2aXR5TmFtZUluRW5nbGlzaDogVGV4dEJveE9wdGlvbnM7XHJcbiAgd29ya2Zsb3dBY3Rpdml0eU5hbWVJbkFyYWJpYzogVGV4dEJveE9wdGlvbnM7XHJcbiAgd29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5FbmdsaXNoOiBUZXh0Qm94T3B0aW9ucztcclxuICB3b3JrZmxvd0FjdGl2aXR5RGVzY3JpcHRpb25JbkFyYWJpYzogVGV4dEJveE9wdGlvbnM7XHJcbiAgd29ya2Zsb3dBY3Rpdml0eVN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEFjdGl2aXR5VHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIEBWaWV3Q2hpbGQoJ0Nsb3Nld29ya2Zsb3dBY3Rpdml0eU1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3Nld29ya2Zsb3dBY3Rpdml0eU1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBFZGl0d29ya2Zsb3dBY3Rpdml0eU5hbWVJbkVuZ2xpc2g6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXR3b3JrZmxvd0FjdGl2aXR5TmFtZUluQXJhYmljOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0d29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5FbmdsaXNoOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0d29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5BcmFiaWM6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXR3b3JrZmxvd0FjdGl2aXR5U3lzTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdEFjdGl2aXR5VHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIHdvcmtmbG93QWN0aXZpdHlJZDogbnVtYmVyXHJcbiAgQFZpZXdDaGlsZCgnQ2xvc2VFZGl0d29ya2Zsb3dBY3Rpdml0eU1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlRWRpdHdvcmtmbG93QWN0aXZpdHlNb2RhbDogRWxlbWVudFJlZjtcclxuXHJcbiAgLy9FbmQgV29ya2Zsb3cgQWN0aXZpdHlcclxuXHJcblxyXG5cclxuICAvLyBEZWNvcmF0b3Igd2lyZXMgdXAgYmxvY2tVSSBpbnN0YW5jZVxyXG4gIFNob3dQYWdlQ29udGVudDpib29sZWFuPWZhbHNlXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YVNlcnZpY2VzOiBEYXRhU2VjcmV0U2VydmljZSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHByaXZhdGUgV29ya2Zsb3dTZXJ2aWNlOiBXb3JrZmxvd1NlcnZpY2UsIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIFdvcmtmbG93VmFyaWFibGVzU2VydmljZTogV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLCBwcml2YXRlIHdvcmtmbG93QWN0aXZpdHlTZXJ2aWNlOiBXb3JrZmxvd0FjdGl2aXR5U2VydmljZSwgcHJpdmF0ZSBwYWdlSW5mb1NlcnZpY2U6IFBhZ2VJbmZvU2VydmljZSwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLCBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLCBwcml2YXRlIGJic2ZUcmFuc2xhdGVTZXJ2aWNlOiBCQlNGVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UpIHtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLldvcmtmbG93SWQgPSBwYXJhbXNbJ2lkJ107XHJcbiAgICAgIHRoaXMuVmVyc2lvbklkID0gcGFyYW1zWyd2aWQnXTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudD10cnVlO1xyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCk9PntcclxuICAgICAgdGhpcy5TaG93UGFnZUNvbnRlbnQ9ZmFsc2U7XHJcbiAgICAgIHRoaXMubGFuZ3VhZ2UgPSBldmVudC5sYW5nO1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5sYW5ndWFnZSA9ICBhd2FpdCB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xyXG4gICAgdGhpcy5Qcm9kdWN0aW9uTW9kZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldFByb2R1Y3Rpb25Nb2RlKClcclxuICAgIHRoaXMuZ2V0RGV0YWlscygpO1xyXG5cclxuICB9XHJcblxyXG4gIGdldERldGFpbHMoKSB7XHJcbiAgICB0aGlzLlNob3dXb3JrZmxvd0RldGFpbHMgPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd1dvcmtmbG93VmVyc2lvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93V29ya2Zsb3dBY3Rpdml0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93V29ya2Zsb3dWYXJpYWJsZXMgPSBmYWxzZTtcclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuV29ya2Zsb3dTZXJ2aWNlLkdldERldGFpbHModGhpcy5Xb3JrZmxvd0lkKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLldvcmtmbG93RGV0YWlscyA9IHJlc3VsdCBhcyBhbnlcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveCA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94LkFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIlxyXG4gICAgICB0aGlzLk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94LkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiXHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3guSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3guTmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgICB2YXIgTmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIE5hbWUuQXJhYmljID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMubmFtZS5hcmFiaWM7XHJcbiAgICAgIE5hbWUuRW5nbGlzaCA9IHRoaXMuV29ya2Zsb3dEZXRhaWxzLm5hbWUuZW5nbGlzaDtcclxuICAgICAgaWYgKHRoaXMubGFuZ3VhZ2UgPT0gJ2VuJykge1xyXG4gICAgICAgIHRoaXMuUGFnZXRpdGxlID0gTmFtZS5FbmdsaXNoXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5QYWdldGl0bGUgPSBOYW1lLkFyYWJpY1xyXG4gICAgICB9XHJcblxyXG4gICAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZVRpdGxlID0gdGhpcy5QYWdldGl0bGVcclxuICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93c1wiKSwgcGF0aDogJy9BZG1pbi9Xb3JrZmxvd3Mvd29ya2Zsb3cnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuXHJcblxyXG4gICAgICB0aGlzLk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94LlZhbHVlID0gTmFtZTtcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5Jc0Rpc2FibGVkID0gdHJ1ZVxyXG5cclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3ggPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3guQXJhYmljTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uSW5BcmFiaWNcIlxyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5FbmdsaXNoTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uSW5FbmdsaXNoXCJcclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3guSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94Lk5hbWUgPSBcIkRlc2NyaXB0aW9uXCI7XHJcbiAgICAgIHZhciBEZXNjcmlwdGlvbiA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIERlc2NyaXB0aW9uLkFyYWJpYyA9IHRoaXMuV29ya2Zsb3dEZXRhaWxzLmRlc2NyaXB0aW9uLmFyYWJpY1ZhbHVlO1xyXG4gICAgICBEZXNjcmlwdGlvbi5FbmdsaXNoID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMuZGVzY3JpcHRpb24uZW5nbGlzaFZhbHVlO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5WYWx1ZSA9IERlc2NyaXB0aW9uO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5Jc0Rpc2FibGVkID0gdHJ1ZVxyXG5cclxuICAgICAgdGhpcy5TeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuU3lzTmFtZS5OYW1lID0gXCJTeXNOYW1lXCJcclxuICAgICAgdGhpcy5TeXNOYW1lLkxhYmVsS2V5ID0gXCJTeXNOYW1lXCJcclxuICAgICAgdGhpcy5TeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgICB0aGlzLlN5c05hbWUuSXNEaXNhYmxlZCA9IHRydWVcclxuICAgICAgdGhpcy5TeXNOYW1lLlZhbHVlID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMuc3lzTmFtZVxyXG5cclxuICAgICAgdGhpcy5BY3RpdmUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BY3RpdmUuTmFtZSA9IFwiQWN0aXZlXCJcclxuICAgICAgdGhpcy5BY3RpdmUuTGFiZWxLZXkgPSBcIkFjdGl2ZVwiXHJcbiAgICAgIHRoaXMuQWN0aXZlLlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgICB0aGlzLkFjdGl2ZS5Jc0Rpc2FibGVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLkFjdGl2ZS5WYWx1ZSA9IHRoaXMuV29ya2Zsb3dEZXRhaWxzLmlzQWN0aXZlXHJcblxyXG4gICAgICB0aGlzLlB1Ymxpc2hlZCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLlB1Ymxpc2hlZC5OYW1lID0gXCJQdWJsaXNoZWRcIlxyXG4gICAgICB0aGlzLlB1Ymxpc2hlZC5MYWJlbEtleSA9IFwiUHVibGlzaGVkXCJcclxuICAgICAgdGhpcy5QdWJsaXNoZWQuVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLklzRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLlZhbHVlID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMuaXNQdWJsaXNoZWRcclxuXHJcbiAgICAgIHRoaXMuU2hvd1dvcmtmbG93VmVyc2lvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLlNob3dXb3JrZmxvd0FjdGl2aXR5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuU2hvd1dvcmtmbG93VmFyaWFibGVzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG5cclxuICAgICAgdGhpcy5TaG93V29ya2Zsb3dEZXRhaWxzID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgXHJcbiAgR2V0VmVyc2lvbnMoKSB7XHJcbiAgICB0aGlzLlNob3dXb3JrZmxvd0RldGFpbHMgPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd1dvcmtmbG93VmVyc2lvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93V29ya2Zsb3dBY3Rpdml0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93V29ya2Zsb3dWYXJpYWJsZXMgPSBmYWxzZTtcclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICAvLyBUZXh0Qm94IGludGlcclxuXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5OYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0lkVGV4dEJveC5OYW1lID0gXCJXb3JrZmxvd0lkVGV4dEJveFwiXHJcbiAgICB0aGlzLldvcmtmbG93SWRUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLldvcmtmbG93SWRUZXh0Qm94LlZhbHVlID0gdGhpcy5Xb3JrZmxvd0lkXHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuV29ya2Zsb3dJZEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcIldvcmtmbG93SWRUZXh0Qm94XCJcclxuICAgIHRoaXMuV29ya2Zsb3dJZEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJXZklEXCJcclxuICAgIHRoaXMuV29ya2Zsb3dJZEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlQYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5UGFnaW5nLkFjdGlvblBvc3RVUkwgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIHRoaXMuQXBpVXJsICsgJ0dldFZlcnNpb25zTGlzdGluZyc7XHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlQYWdpbmcuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJzZWFyY2hUZXh0Qm94XCIsIFwiV29ya2Zsb3dJZFRleHRCb3hcIl1cclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eVBhZ2luZy5GaWx0ZXJzID0gW3RoaXMuVGV4dElucHV0RmlsdGVyLCB0aGlzLldvcmtmbG93SWRGaWx0ZXJdXHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlQYWdpbmcuVmFsaWRhdGlvblRva2VuID10aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcblxyXG4gICAgdGhpcy5TaG93V29ya2Zsb3dEZXRhaWxzID0gZmFsc2U7XHJcbiAgICB0aGlzLlNob3dXb3JrZmxvd1ZlcnNpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5TaG93V29ya2Zsb3dBY3Rpdml0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93V29ya2Zsb3dWYXJpYWJsZXMgPSBmYWxzZTtcclxuICAgIHRoaXMuSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkID0gZmFsc2VcclxuICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgc2V0V29ya2Zsb3dBY3Rpdml0eUxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlQYWdpbmdSZXN1bHQgPSByZXN1bHRcclxuICB9XHJcblxyXG4gIHJlc2V0RmlsdGVycygpIHtcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUZvcm0uY29udHJvbHNbXCJzZWFyY2hUZXh0Qm94XCJdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvL1dGIHZhcmlhYmxlcyBGdW5jdGlvbnNcclxuXHJcbiAgc2V0V29ya2Zsb3dWYXJpYWJsZUxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nUmVzdWx0ID0gcmVzdWx0XHJcbiAgfVxyXG4gIHJlc2V0V29ya2Zsb3dWYXJpYWJsZUZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVGb3JtLmNvbnRyb2xzW1wic2VhcmNoVGV4dEJveFwiXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQgYXMgYW55O1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuXHJcbiAgfVxyXG4gIExvYWRXb3JrZmxvd1ZhcmlhYmxlcygpIHtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLkxvYWRkcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cclxuXHJcbiAgICAgIGxldCBEYXRhVHlwZUxpc3QgPSByZXN1bHQgYXMgYW55XHJcbiAgICAgIHRoaXMuRGF0YVR5cGVMaXN0ID0gRGF0YVR5cGVMaXN0XHJcblxyXG4gICAgICAvLyBUZXh0Qm94IGludGlcclxuICAgICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLldvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94Lk5hbWUgPSBcIldvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94XCJcclxuICAgICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKVxyXG4gICAgICB0aGlzLldvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcIldvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94XCJcclxuICAgICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiXHJcbiAgICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICAgIHRoaXMuVmVyaXNvbklkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLlZlcmlzb25JZFRleHRCb3guTmFtZSA9IFwiVmVyaXNvbklkVGV4dEJveFwiXHJcbiAgICAgIHRoaXMuVmVyaXNvbklkVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICAgIHRoaXMuVmVyaXNvbklkVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5WZXJpc29uSWRUZXh0Qm94LlZhbHVlID0gdGhpcy5Xb3JrZmxvd0lkXHJcblxyXG4gICAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgIHRoaXMuVmVyaXNvbklkVGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwiVmVyaXNvbklkVGV4dEJveFwiXHJcbiAgICAgIHRoaXMuVmVyaXNvbklkVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInZlcnNpb25JRFwiXHJcbiAgICAgIHRoaXMuVmVyaXNvbklkVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICAgIHRoaXMuVmVyaXNvbklkVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyB0aGlzLldvcmtmbG93VmFyaWFibGVBcGlVcmwgKyAnR2V0VmFyaWFibGVMaXN0aW5nJztcclxuICAgICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wiV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3hcIiwgXCJWZXJpc29uSWRUZXh0Qm94XCJdXHJcbiAgICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZy5GaWx0ZXJzID0gW3RoaXMuVGV4dElucHV0RmlsdGVyLCB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlcl1cclxuICAgICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLlNob3dXb3JrZmxvd1ZlcnNpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5TaG93V29ya2Zsb3dBY3Rpdml0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLlNob3dXb3JrZmxvd1ZhcmlhYmxlcyA9IHRydWU7XHJcbiAgICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSB0cnVlXHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgICAgfSwgMTApO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNob3dBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoQWRkV29ya2Zsb3dWYXJpYWJsZU1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcblxyXG4gICAgdGhpcy5OYW1lSW5FbmdsaXNoID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLk5hbWVJbkVuZ2xpc2guTmFtZSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgdGhpcy5OYW1lSW5FbmdsaXNoLkxhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLk5hbWVJbkVuZ2xpc2guVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5OYW1lSW5FbmdsaXNoLlZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuTmFtZUluRW5nbGlzaC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5OYW1lSW5BcmFiaWMgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuTmFtZUluQXJhYmljLk5hbWUgPSBcIk5hbWVJbkFyYWJpY1wiO1xyXG4gICAgdGhpcy5OYW1lSW5BcmFiaWMuTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiO1xyXG4gICAgdGhpcy5OYW1lSW5BcmFiaWMuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5OYW1lSW5BcmFiaWMuVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5OYW1lSW5BcmFiaWMuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLk5hbWVJbkFyYWJpYy5Gb3JjZURpcmVjdGlvbiA9IEZvcmNlRGlyZWN0aW9uLkFyYWJpYztcclxuXHJcbiAgICB0aGlzLlN5c05hbWVXb3JrZmxvd1ZhcmlhYmxlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLlN5c05hbWVXb3JrZmxvd1ZhcmlhYmxlLk5hbWUgPSBcIlN5c05hbWVcIjtcclxuICAgIHRoaXMuU3lzTmFtZVdvcmtmbG93VmFyaWFibGUuTGFiZWxLZXkgPSBcIlN5c05hbWVcIjtcclxuICAgIHRoaXMuU3lzTmFtZVdvcmtmbG93VmFyaWFibGUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5TeXNOYW1lV29ya2Zsb3dWYXJpYWJsZS5WYWx1ZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5EYXRhVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuRGF0YVR5cGUuTmFtZSA9IFwiRGF0YVR5cGVcIlxyXG4gICAgdGhpcy5EYXRhVHlwZS5MYWJlbEtleSA9IFwiRGF0YVR5cGVcIlxyXG4gICAgdGhpcy5EYXRhVHlwZS5EYXRhU291cmNlID0gdGhpcy5EYXRhVHlwZUxpc3RcclxuICAgIHRoaXMuRGF0YVR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuRGF0YVR5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5EYXRhVHlwZS5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFkZFdvcmtmbG93VmFyaWFibGVNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgdGhpcy5Db25zdGFudCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgIHRoaXMuQ29uc3RhbnQuTmFtZSA9IFwiQ29uc3RhbnRcIlxyXG4gICAgdGhpcy5Db25zdGFudC5MYWJlbEtleSA9IFwiQ29uc3RhbnRcIlxyXG4gICAgdGhpcy5Db25zdGFudC5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbFxyXG5cclxuICB9XHJcbiAgYWRkV29ya2Zsb3dWYXJpYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcblxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtLnZhbHVlO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKFJlc3VsdE1vZGVsKVxyXG4gICAgICBsZXQgYWRkTW9kZWwgPSBuZXcgV0ZWYXJpYWJsZU1vZGVsKCk7XHJcbiAgICAgIGFkZE1vZGVsLk5hbWUuRW5nbGlzaCA9IFJlc3VsdE1vZGVsLk5hbWVJbkVuZ2xpc2hcclxuICAgICAgYWRkTW9kZWwuTmFtZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5FbmdsaXNoVmFsdWVcclxuICAgICAgYWRkTW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLlN5c05hbWVcclxuICAgICAgYWRkTW9kZWwuV29ya2Zsb3dWZXJzaW9uSUQgPSBOdW1iZXIodGhpcy5WZXJzaW9uSWQpO1xyXG4gICAgICBhZGRNb2RlbC5EYXRhVHlwZUl0ZW1JRCA9IFJlc3VsdE1vZGVsLkRhdGFUeXBlICE9IG51bGwgPyBOdW1iZXIoUmVzdWx0TW9kZWwuRGF0YVR5cGUpIDogbnVsbFxyXG4gICAgICBhZGRNb2RlbC5Jc0NvbnN0YW50ID0gUmVzdWx0TW9kZWwuQ29uc3RhbnRcclxuICAgICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2UuQWRkVmFyaWFibGUoIGFkZE1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1ZpZXdFbGVtZW50IGFzIGFueTtcclxuICAgICAgICBlbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgIFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0VkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoV29ya2Zsb3dWYXJpYWJsZTogYW55LCBFZGl0V29ya2Zsb3dWYXJpYWJsZU1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KVxyXG5cclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZUlkID0gV29ya2Zsb3dWYXJpYWJsZS5pZFxyXG5cclxuICAgIHRoaXMuRWRpdE5hbWVJbkVuZ2xpc2ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuRWRpdE5hbWVJbkVuZ2xpc2guTmFtZSA9IFwiRWRpdE5hbWVJbkVuZ2xpc2hcIjtcclxuICAgIHRoaXMuRWRpdE5hbWVJbkVuZ2xpc2guTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgIHRoaXMuRWRpdE5hbWVJbkVuZ2xpc2guVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5FZGl0TmFtZUluRW5nbGlzaC5WYWx1ZSA9IFdvcmtmbG93VmFyaWFibGUubmFtZS5lbmdsaXNoO1xyXG4gICAgdGhpcy5FZGl0TmFtZUluRW5nbGlzaC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5FZGl0TmFtZUluQXJhYmljID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLkVkaXROYW1lSW5BcmFiaWMuTmFtZSA9IFwiRWRpdE5hbWVJbkFyYWJpY1wiO1xyXG4gICAgdGhpcy5FZGl0TmFtZUluQXJhYmljLkxhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgIHRoaXMuRWRpdE5hbWVJbkFyYWJpYy5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLkVkaXROYW1lSW5BcmFiaWMuVmFsdWUgPSBXb3JrZmxvd1ZhcmlhYmxlLm5hbWUuYXJhYmljO1xyXG4gICAgdGhpcy5FZGl0TmFtZUluQXJhYmljLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5FZGl0TmFtZUluQXJhYmljLkZvcmNlRGlyZWN0aW9uID0gRm9yY2VEaXJlY3Rpb24uQXJhYmljO1xyXG5cclxuICAgIHRoaXMuRWRpdFN5c05hbWVXb3JrZmxvd1ZhcmlhYmxlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLkVkaXRTeXNOYW1lV29ya2Zsb3dWYXJpYWJsZS5OYW1lID0gXCJFZGl0U3lzTmFtZVwiO1xyXG4gICAgdGhpcy5FZGl0U3lzTmFtZVdvcmtmbG93VmFyaWFibGUuTGFiZWxLZXkgPSBcIlN5c05hbWVcIjtcclxuICAgIHRoaXMuRWRpdFN5c05hbWVXb3JrZmxvd1ZhcmlhYmxlLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuRWRpdFN5c05hbWVXb3JrZmxvd1ZhcmlhYmxlLlZhbHVlID0gV29ya2Zsb3dWYXJpYWJsZS5zeXNOYW1lO1xyXG5cclxuICAgIHRoaXMuRWRpdERhdGFUeXBlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5FZGl0RGF0YVR5cGUuTmFtZSA9IFwiRWRpdERhdGFUeXBlXCJcclxuICAgIHRoaXMuRWRpdERhdGFUeXBlLkxhYmVsS2V5ID0gXCJEYXRhVHlwZVwiXHJcbiAgICB0aGlzLkVkaXREYXRhVHlwZS5EYXRhU291cmNlID0gdGhpcy5EYXRhVHlwZUxpc3RcclxuICAgIHRoaXMuRWRpdERhdGFUeXBlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLkVkaXREYXRhVHlwZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICB0aGlzLkVkaXREYXRhVHlwZS5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICB0aGlzLkVkaXREYXRhVHlwZS5TZWxlY3RlZEl0ZW1zID0gdGhpcy5EYXRhVHlwZUxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0gV29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgIHRoaXMuRWRpdENvbnN0YW50ID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgdGhpcy5FZGl0Q29uc3RhbnQuTmFtZSA9IFwiRWRpdENvbnN0YW50XCJcclxuICAgIHRoaXMuRWRpdENvbnN0YW50LkxhYmVsS2V5ID0gXCJDb25zdGFudFwiXHJcbiAgICB0aGlzLkVkaXRDb25zdGFudC5WYWx1ZSA9IFdvcmtmbG93VmFyaWFibGUuaXNDb25zdGFudFxyXG4gICAgdGhpcy5FZGl0Q29uc3RhbnQuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWxcclxuXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcbiAgZWRpdFdvcmtmbG93VmFyaWFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0udmFsdWU7XHJcbiAgICAgIGxldCBFZGl0TW9kZWwgPSBuZXcgV0ZWYXJpYWJsZU1vZGVsKCk7XHJcbiAgICAgIEVkaXRNb2RlbC5JRCA9IE51bWJlcih0aGlzLldvcmtmbG93VmFyaWFibGVJZCk7XHJcbiAgICAgIEVkaXRNb2RlbC5OYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5FZGl0TmFtZUluRW5nbGlzaFxyXG4gICAgICBFZGl0TW9kZWwuTmFtZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5FZGl0TmFtZUluQXJhYmljXHJcbiAgICAgIEVkaXRNb2RlbC5TeXNOYW1lID0gUmVzdWx0TW9kZWwuRWRpdFN5c05hbWVcclxuICAgICAgRWRpdE1vZGVsLldvcmtmbG93VmVyc2lvbklEID0gTnVtYmVyKHRoaXMuVmVyc2lvbklkKTtcclxuICAgICAgRWRpdE1vZGVsLkRhdGFUeXBlSXRlbUlEID0gUmVzdWx0TW9kZWwuRWRpdERhdGFUeXBlICE9IG51bGwgPyBOdW1iZXIoUmVzdWx0TW9kZWwuRWRpdERhdGFUeXBlKSA6IG51bGxcclxuICAgICAgRWRpdE1vZGVsLklzQ29uc3RhbnQgPSBSZXN1bHRNb2RlbC5FZGl0Q29uc3RhbnRcclxuXHJcbiAgICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLkVkaXRWYXJpYWJsZShFZGl0TW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQgYXMgYW55O1xyXG4gICAgICAgIGVsZW1lbnQuVXBkYXRlUGFnaW5nKCk7XHJcbiAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICBcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy9XRiBBY3Rpdml0aXRpZXMgRnVuY3Rpb25zXHJcblxyXG5cclxuICBzZXRBY3Rpdml0eUxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLkFjdGl2aXR5UGFnaW5nUmVzdWx0ID0gcmVzdWx0XHJcbiAgfVxyXG4gIHJlc2V0d29ya2Zsb3dBY3Rpdml0eUZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlGb3JtLmNvbnRyb2xzW1wic2VhcmNoVGV4dEJveFwiXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5BY3Rpdml0eVBhZ2luZ1ZpZXdFbGVtZW50IGFzIGFueTtcclxuICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgTG9hZHdvcmtmbG93QWN0aXZpdHkoKSB7XHJcbiAgICAvLyB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcblxyXG4gICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5U2VydmljZS5Mb2FkZHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuXHJcblxyXG4gICAgICBsZXQgQWN0aXZpdHlMaXN0ID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLkFjdGl2aXR5VHlwZUxpc3QgPSBBY3Rpdml0eUxpc3RcclxuXHJcbiAgICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3guTmFtZSA9IFwiV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveFwiXHJcbiAgICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94LlZhbHVlID0gdGhpcy5Xb3JrZmxvd0lkXHJcblxyXG4gICAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwiV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveFwiXHJcbiAgICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcIldmSURcIlxyXG4gICAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgICB0aGlzLkFjdGl2aXR5UGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BY3Rpdml0eVBhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyB0aGlzLkFjdGl2aXR5QXBpVXJsICsgJ0dldFdvcmtmbG93QWN0aXZpdHlMaXN0aW5nJztcclxuICAgICAgdGhpcy5BY3Rpdml0eVBhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIl1cclxuICAgICAgdGhpcy5BY3Rpdml0eVBhZ2luZy5GaWx0ZXJzID0gW3RoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyXVxyXG4gICAgICB0aGlzLkFjdGl2aXR5UGFnaW5nLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLlNob3dXb3JrZmxvd1ZlcnNpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5TaG93V29ya2Zsb3dBY3Rpdml0eSA9IHRydWU7XHJcbiAgICAgIHRoaXMuU2hvd1dvcmtmbG93VmFyaWFibGVzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZCA9IGZhbHNlXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcblxyXG4gICAgICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgICAgfSwgMTApO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNob3dBZGR3b3JrZmxvd0FjdGl2aXR5TW9kYWwoQWRkV29ya2Zsb3dBY3Rpdml0eU1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5BZGR3b3JrZmxvd0FjdGl2aXR5Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcblxyXG4gICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5TmFtZUluRW5nbGlzaCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5TmFtZUluRW5nbGlzaC5OYW1lID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlOYW1lSW5FbmdsaXNoLkxhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlOYW1lSW5FbmdsaXNoLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eU5hbWVJbkVuZ2xpc2guVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5TmFtZUluRW5nbGlzaC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlOYW1lSW5BcmFiaWMgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eU5hbWVJbkFyYWJpYy5OYW1lID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eU5hbWVJbkFyYWJpYy5MYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlOYW1lSW5BcmFiaWMuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5TmFtZUluQXJhYmljLlZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eU5hbWVJbkFyYWJpYy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eU5hbWVJbkFyYWJpYy5Gb3JjZURpcmVjdGlvbiA9IEZvcmNlRGlyZWN0aW9uLkFyYWJpYztcclxuXHJcblxyXG4gICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5RGVzY3JpcHRpb25JbkVuZ2xpc2ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5FbmdsaXNoLk5hbWUgPSBcIkRlc2NyaXB0aW9uSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlEZXNjcmlwdGlvbkluRW5nbGlzaC5MYWJlbEtleSA9IFwiRGVzY3JpcHRpb25JbkVuZ2xpc2hcIjtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5FbmdsaXNoLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5FbmdsaXNoLlZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5FbmdsaXNoLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5BcmFiaWMgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5BcmFiaWMuTmFtZSA9IFwiRGVzY3JpcHRpb25JbkFyYWJpY1wiO1xyXG4gICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5RGVzY3JpcHRpb25JbkFyYWJpYy5MYWJlbEtleSA9IFwiRGVzY3JpcHRpb25JbkFyYWJpY1wiO1xyXG4gICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5RGVzY3JpcHRpb25JbkFyYWJpYy5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlEZXNjcmlwdGlvbkluQXJhYmljLlZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5BcmFiaWMuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlEZXNjcmlwdGlvbkluQXJhYmljLkZvcmNlRGlyZWN0aW9uID0gRm9yY2VEaXJlY3Rpb24uQXJhYmljO1xyXG5cclxuXHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlTeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlTeXNOYW1lLk5hbWUgPSBcIlN5c05hbWVcIjtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eVN5c05hbWUuTGFiZWxLZXkgPSBcIlN5c05hbWVcIjtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eVN5c05hbWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5U3lzTmFtZS5WYWx1ZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5BY3Rpdml0eVR5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLkFjdGl2aXR5VHlwZS5OYW1lID0gXCJBY3Rpdml0eVR5cGVcIlxyXG4gICAgdGhpcy5BY3Rpdml0eVR5cGUuTGFiZWxLZXkgPSBcIkFjdGl2aXR5VHlwZVwiXHJcbiAgICB0aGlzLkFjdGl2aXR5VHlwZS5EYXRhU291cmNlID0gdGhpcy5BY3Rpdml0eVR5cGVMaXN0XHJcbiAgICB0aGlzLkFjdGl2aXR5VHlwZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5BY3Rpdml0eVR5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5BY3Rpdml0eVR5cGUuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRXb3JrZmxvd0FjdGl2aXR5TW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcbiAgYWRkd29ya2Zsb3dBY3Rpdml0eSgpIHtcclxuICAgIGlmICh0aGlzLkFkZHdvcmtmbG93QWN0aXZpdHlGb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcblxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZHdvcmtmbG93QWN0aXZpdHlGb3JtLnZhbHVlO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKFJlc3VsdE1vZGVsKVxyXG4gICAgICBsZXQgYWRkTW9kZWwgPSBuZXcgV0ZBY3Rpdml0eU1vZGVsKCk7XHJcbiAgICAgIGFkZE1vZGVsLk5hbWUuRW5nbGlzaCA9IFJlc3VsdE1vZGVsLk5hbWVJbkVuZ2xpc2hcclxuICAgICAgYWRkTW9kZWwuTmFtZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5OYW1lSW5BcmFiaWNcclxuICAgICAgYWRkTW9kZWwuRGVzY3JpcHRpb24uRW5nbGlzaCA9IFJlc3VsdE1vZGVsLkRlc2NyaXB0aW9uSW5FbmdsaXNoXHJcbiAgICAgIGFkZE1vZGVsLkRlc2NyaXB0aW9uLkFyYWJpYyA9IFJlc3VsdE1vZGVsLkRlc2NyaXB0aW9uSW5BcmFiaWNcclxuICAgICAgYWRkTW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLlN5c05hbWVcclxuICAgICAgYWRkTW9kZWwuVmVyc2lvbklEID0gTnVtYmVyKHRoaXMuVmVyc2lvbklkKTtcclxuICAgICAgYWRkTW9kZWwuQWN0aXZpdHlUeXBlSXRlbUlEID0gUmVzdWx0TW9kZWwuQWN0aXZpdHlUeXBlICE9IG51bGwgPyBOdW1iZXIoUmVzdWx0TW9kZWwuQWN0aXZpdHlUeXBlKSA6IG51bGxcclxuICAgICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5U2VydmljZS5BZGRXb3JrZmxvd0FjdGl2aXR5KCBhZGRNb2RlbCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLkFjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQgYXMgYW55O1xyXG4gICAgICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0VkaXR3b3JrZmxvd0FjdGl2aXR5TW9kYWwod29ya2Zsb3dBY3Rpdml0eTogYW55LCBFZGl0V29ya2Zsb3dBY3Rpdml0eU1vZGFsKSB7XHJcbiAgICB0aGlzLkVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyAod29ya2Zsb3dBY3Rpdml0eSk7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlJZCA9IHdvcmtmbG93QWN0aXZpdHkuaWRcclxuXHJcbiAgICB0aGlzLkVkaXR3b3JrZmxvd0FjdGl2aXR5TmFtZUluRW5nbGlzaCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eU5hbWVJbkVuZ2xpc2guTmFtZSA9IFwiRWRpdE5hbWVJbkVuZ2xpc2hcIjtcclxuICAgIHRoaXMuRWRpdHdvcmtmbG93QWN0aXZpdHlOYW1lSW5FbmdsaXNoLkxhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLkVkaXR3b3JrZmxvd0FjdGl2aXR5TmFtZUluRW5nbGlzaC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLkVkaXR3b3JrZmxvd0FjdGl2aXR5TmFtZUluRW5nbGlzaC5WYWx1ZSA9IHdvcmtmbG93QWN0aXZpdHkubmFtZS5lbmdsaXNoO1xyXG4gICAgdGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eU5hbWVJbkVuZ2xpc2guSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG5cclxuICAgIHRoaXMuRWRpdHdvcmtmbG93QWN0aXZpdHlOYW1lSW5BcmFiaWMgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuRWRpdHdvcmtmbG93QWN0aXZpdHlOYW1lSW5BcmFiaWMuTmFtZSA9IFwiRWRpdE5hbWVJbkFyYWJpY1wiO1xyXG4gICAgdGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eU5hbWVJbkFyYWJpYy5MYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICB0aGlzLkVkaXR3b3JrZmxvd0FjdGl2aXR5TmFtZUluQXJhYmljLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuRWRpdHdvcmtmbG93QWN0aXZpdHlOYW1lSW5BcmFiaWMuVmFsdWUgPSB3b3JrZmxvd0FjdGl2aXR5Lm5hbWUuYXJhYmljO1xyXG4gICAgdGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eU5hbWVJbkFyYWJpYy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMuRWRpdHdvcmtmbG93QWN0aXZpdHlOYW1lSW5BcmFiaWMuRm9yY2VEaXJlY3Rpb24gPSBGb3JjZURpcmVjdGlvbi5BcmFiaWM7XHJcblxyXG5cclxuICAgIHRoaXMuRWRpdHdvcmtmbG93QWN0aXZpdHlEZXNjcmlwdGlvbkluRW5nbGlzaCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5FbmdsaXNoLk5hbWUgPSBcIkVkaXREZXNjcmlwdGlvbkluRW5nbGlzaFwiO1xyXG4gICAgdGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5FbmdsaXNoLkxhYmVsS2V5ID0gXCJEZXNjcmlwdGlvbkluRW5nbGlzaFwiO1xyXG4gICAgdGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5FbmdsaXNoLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuRWRpdHdvcmtmbG93QWN0aXZpdHlEZXNjcmlwdGlvbkluRW5nbGlzaC5WYWx1ZSA9IHdvcmtmbG93QWN0aXZpdHkuZGVzY3JpcHRpb24gIT0gbnVsbCA/IHdvcmtmbG93QWN0aXZpdHkuZGVzY3JpcHRpb24uZW5nbGlzaCA6IFwiXCI7XHJcbiAgICB0aGlzLkVkaXR3b3JrZmxvd0FjdGl2aXR5RGVzY3JpcHRpb25JbkVuZ2xpc2guSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG5cclxuICAgIHRoaXMuRWRpdHdvcmtmbG93QWN0aXZpdHlEZXNjcmlwdGlvbkluQXJhYmljID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLkVkaXR3b3JrZmxvd0FjdGl2aXR5RGVzY3JpcHRpb25JbkFyYWJpYy5OYW1lID0gXCJFZGl0RGVzY3JpcHRpb25JbkFyYWJpY1wiO1xyXG4gICAgdGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5BcmFiaWMuTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uSW5BcmFiaWNcIjtcclxuICAgIHRoaXMuRWRpdHdvcmtmbG93QWN0aXZpdHlEZXNjcmlwdGlvbkluQXJhYmljLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuRWRpdHdvcmtmbG93QWN0aXZpdHlEZXNjcmlwdGlvbkluQXJhYmljLlZhbHVlID0gd29ya2Zsb3dBY3Rpdml0eS5kZXNjcmlwdGlvbiAhPSBudWxsID8gd29ya2Zsb3dBY3Rpdml0eS5kZXNjcmlwdGlvbi5hcmFiaWMgOiBcIlwiO1xyXG4gICAgdGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eURlc2NyaXB0aW9uSW5BcmFiaWMuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLkVkaXR3b3JrZmxvd0FjdGl2aXR5RGVzY3JpcHRpb25JbkFyYWJpYy5Gb3JjZURpcmVjdGlvbiA9IEZvcmNlRGlyZWN0aW9uLkFyYWJpYztcclxuXHJcbiAgICB0aGlzLkVkaXR3b3JrZmxvd0FjdGl2aXR5U3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eVN5c05hbWUuTmFtZSA9IFwiRWRpdFN5c05hbWVcIjtcclxuICAgIHRoaXMuRWRpdHdvcmtmbG93QWN0aXZpdHlTeXNOYW1lLkxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICB0aGlzLkVkaXR3b3JrZmxvd0FjdGl2aXR5U3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLkVkaXR3b3JrZmxvd0FjdGl2aXR5U3lzTmFtZS5WYWx1ZSA9IHdvcmtmbG93QWN0aXZpdHkuc3lzTmFtZTtcclxuXHJcbiAgICB0aGlzLkVkaXRBY3Rpdml0eVR5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLkVkaXRBY3Rpdml0eVR5cGUuTmFtZSA9IFwiRWRpdEFjdGl2aXR5VHlwZVwiXHJcbiAgICB0aGlzLkVkaXRBY3Rpdml0eVR5cGUuTGFiZWxLZXkgPSBcIkFjdGl2aXR5VHlwZVwiXHJcbiAgICB0aGlzLkVkaXRBY3Rpdml0eVR5cGUuRGF0YVNvdXJjZSA9IHRoaXMuQWN0aXZpdHlUeXBlTGlzdFxyXG4gICAgdGhpcy5FZGl0QWN0aXZpdHlUeXBlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLkVkaXRBY3Rpdml0eVR5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5FZGl0QWN0aXZpdHlUeXBlLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgIHRoaXMuRWRpdEFjdGl2aXR5VHlwZS5TZWxlY3RlZEl0ZW1zID0gdGhpcy5BY3Rpdml0eVR5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHdvcmtmbG93QWN0aXZpdHkuYWN0aXZpdHlUeXBlSXRlbUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcblxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihFZGl0V29ya2Zsb3dBY3Rpdml0eU1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICB9XHJcbiAgZWRpdHdvcmtmbG93QWN0aXZpdHkoKSB7XHJcbiAgICBpZiAodGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0udmFsdWU7XHJcbiAgICAgIGxldCBFZGl0TW9kZWwgPSBuZXcgV0ZBY3Rpdml0eU1vZGVsKCk7XHJcbiAgICAgIEVkaXRNb2RlbC5JRCA9IE51bWJlcih0aGlzLndvcmtmbG93QWN0aXZpdHlJZCk7XHJcbiAgICAgIEVkaXRNb2RlbC5OYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5FZGl0TmFtZUluRW5nbGlzaFxyXG4gICAgICBFZGl0TW9kZWwuTmFtZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5FZGl0TmFtZUluQXJhYmljXHJcbiAgICAgIEVkaXRNb2RlbC5EZXNjcmlwdGlvbi5FbmdsaXNoID0gUmVzdWx0TW9kZWwuRWRpdERlc2NyaXB0aW9uSW5FbmdsaXNoXHJcbiAgICAgIEVkaXRNb2RlbC5EZXNjcmlwdGlvbi5BcmFiaWMgPSBSZXN1bHRNb2RlbC5FZGl0RGVzY3JpcHRpb25JbkFyYWJpY1xyXG4gICAgICBFZGl0TW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLkVkaXRTeXNOYW1lXHJcbiAgICAgIEVkaXRNb2RlbC5WZXJzaW9uSUQgPSBOdW1iZXIodGhpcy5WZXJzaW9uSWQpO1xyXG4gICAgICBFZGl0TW9kZWwuQWN0aXZpdHlUeXBlSXRlbUlEID0gUmVzdWx0TW9kZWwuRWRpdEFjdGl2aXR5VHlwZSAhPSBudWxsID8gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRBY3Rpdml0eVR5cGUpIDogbnVsbFxyXG5cclxuICAgICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5U2VydmljZS5FZGl0QWN0aXZpdHkoRWRpdE1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMuQWN0aXZpdHlQYWdpbmdWaWV3RWxlbWVudCBhcyBhbnk7XHJcbiAgICAgICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgIFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGJsb2NrLXVpPjwvYmxvY2stdWk+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgPHVsIG5nYk5hdiAjbmF2PVwibmdiTmF2XCIgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFicyBuYXYtbGluZS10YWJzLTJ4IGJvcmRlci10cmFuc3BhcmVudCBmcy01IGZ3LWJvbGRlclwiPlxyXG4gICAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJnZXREZXRhaWxzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZXRhaWxzXCIpfX08L2E+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wICBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIldvcmtmbG93RGV0YWlscy5pc1B1Ymxpc2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImJ0blB1Ymxpc2hcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hXb3JrZmxvd1wiKX19XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS08YSBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByZXZpZXdcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT4tLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIkRldGFpbHNGb3JtXCIgKm5nSWY9XCJTaG93V29ya2Zsb3dEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJTeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJEZXRhaWxzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiUHVibGlzaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkRldGFpbHNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJHZXRWZXJzaW9ucygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVmVyc2lvbnNcIil9fTwvYT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01IHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJXb3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJzZWFyY2hUZXh0Qm94XCIgW2dyb3VwXT1cIldvcmtmbG93QWN0aXZpdHlGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIldvcmtmbG93SWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIldvcmtmbG93QWN0aXZpdHlGb3JtXCIgW2hpZGRlbl09XCJ0cnVlXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2hhbmdlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ3VycmVudFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hlZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNyZWF0aW9uRGF0ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBBY3Rpdml0eSBvZiBXb3JrZmxvd0FjdGl2aXR5UGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJsYW5ndWFnZT09J2VuJ1wiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vV29ya2Zsb3dzL3RhYnMnLEFjdGl2aXR5LmlkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrXCI+e3tBY3Rpdml0eS5jaGFuZ2UuY3VycmVudH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJsYW5ndWFnZT09J2FyJ1wiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vV29ya2Zsb3dzL3RhYnMnLEFjdGl2aXR5LmlkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrXCI+e3tBY3Rpdml0eS5jaGFuZ2UuY3VycmVudH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7QWN0aXZpdHkuaXNDdXJyZW50fX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e0FjdGl2aXR5LmlzUHVibGlzaGVkfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e0FjdGl2aXR5LmNyZWF0aW9uRGF0ZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiV29ya2Zsb3dBY3Rpdml0eVBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS1lbmQ6OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRXb3JrZmxvd0FjdGl2aXR5TGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJXb3JrZmxvd0FjdGl2aXR5UGFnaW5nXCIgW2dyb3VwXT1cIldvcmtmbG93QWN0aXZpdHlGb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNXb3JrZmxvd0FjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJMb2FkV29ya2Zsb3dWYXJpYWJsZXMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVzXCIpfX08L2E+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250YWluZXIgdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIldvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlZlcmlzb25JZFRleHRCb3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiIFtoaWRkZW5dPVwidHJ1ZVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRpdGxlPVwiQWRkXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93QWRkV29ya2Zsb3dWYXJpYWJsZU1vZGFsKEFkZFdvcmtmbG93VmFyaWFibGVNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXBsdXNcIj48L2k+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tYmVnaW46OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhUHJvZHVjdGlvbk1vZGVcIiBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU3lzTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRhdGFUeXBlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVmFyaWFibGVUeXBlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgV29ya2Zsb3dWYXJpYWJsZSBvZiBXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nUmVzdWx0XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwibGFuZ3VhZ2U9PSdlbidcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrXCI+e3tXb3JrZmxvd1ZhcmlhYmxlLm5hbWUuZW5nbGlzaH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJsYW5ndWFnZT09J2FyJ1wiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e1dvcmtmbG93VmFyaWFibGUubmFtZS5hcmFiaWN9fTwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1dvcmtmbG93VmFyaWFibGUuc3lzTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tXb3JrZmxvd1ZhcmlhYmxlLmRhdGFUeXBlSXRlbX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tXb3JrZmxvd1ZhcmlhYmxlLnZhcmlhYmxlVHlwZUl0ZW19fTwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBidG4taWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoV29ya2Zsb3dWYXJpYWJsZSwgRWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiUHJvZHVjdGlvbk1vZGUgPyAnNCcgOiAnNSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tZW5kOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0V29ya2Zsb3dWYXJpYWJsZUxpc3RSZXN1bHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZFwiIFtvcHRpb25zXT1cIldvcmtmbG93VmFyaWFibGVQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIldvcmtmbG93VmFyaWFibGVGb3JtXCIgI1dvcmtmbG93VmFyaWFibGVQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLWVuZDo6IFdpZGdldHMvQXBwbGljYXRpb25zL1VzZXIvUHJvZmlsZTMtLT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tIEFkZCBNb2RhbCAtLT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI0FkZFdvcmtmbG93VmFyaWFibGVNb2RhbCBsZXQtbW9kYWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dWYXJpYWJsZVwiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nU3VibWl0KT1cImFkZFdvcmtmbG93VmFyaWFibGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJOYW1lSW5FbmdsaXNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIk5hbWVJbkFyYWJpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFQcm9kdWN0aW9uTW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlN5c05hbWVXb3JrZmxvd1ZhcmlhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJEYXRhVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cIkNvbnN0YW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICNDbG9zZVdvcmtmbG93VmFyaWFibGVNb2RhbCBpZD1cIkNsb3NlV29ya2Zsb3dWYXJpYWJsZU1vZGFsXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgXHJcbiAgICAgICAgICAgICAgPCEtLUVkaXQgTW9kYWwtLT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI0VkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd1ZhcmlhYmxlXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdTdWJtaXQpPVwiZWRpdFdvcmtmbG93VmFyaWFibGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0TmFtZUluRW5nbGlzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdE5hbWVJbkFyYWJpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIhUHJvZHVjdGlvbk1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0U3lzTmFtZVdvcmtmbG93VmFyaWFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0RGF0YVR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiRWRpdENvbnN0YW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVG9nZ2xlc2xpZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAjQ2xvc2VFZGl0V29ya2Zsb3dWYXJpYWJsZU1vZGFsIGlkPVwiQ2xvc2VFZGl0V29ya2Zsb3dWYXJpYWJsZU1vZGFsXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgIChjbGljayk9XCJMb2Fkd29ya2Zsb3dBY3Rpdml0eSgpXCI+XHJcbiAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dBY3Rpdml0aWVzXCIpfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTUgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJ3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZmlsdGVyc0NvbnRhaW5lclwiIGRhdGEtaXNsb2FkZWQ9XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJXb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJ3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiIFtoaWRkZW5dPVwidHJ1ZVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT1cIkFkZFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0FkZHdvcmtmbG93QWN0aXZpdHlNb2RhbChBZGRXb3JrZmxvd0FjdGl2aXR5TW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXNcIj48L2k+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IFxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgbWItOFwiICpuZ0Zvcj1cImxldCB3b3JrZmxvd0FjdGl2aXR5IG9mIEFjdGl2aXR5UGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBiZy1saWdodC1kYXJrIHJvdW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBtLTAgZnMtMiB0ZXh0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7d29ya2Zsb3dBY3Rpdml0eS50eXBlTmFtZS5jdXJyZW50fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0bkFkZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtZS0yIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWdlYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd1ZhcmlhYmxlc1wiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndvcmtmbG93QWN0aXZpdHkuaXNQdWJsaXNoZWRcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJidG5BZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQtcHJpbWFyeSBidG4tc20gYnRuLWljb24gbWUtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdHdvcmtmbG93QWN0aXZpdHlNb2RhbCh3b3JrZmxvd0FjdGl2aXR5LCBFZGl0V29ya2Zsb3dBY3Rpdml0eU1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wZW5cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiIXdvcmtmbG93QWN0aXZpdHkuaXNQdWJsaXNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImJ0bkFkZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodC1wcmltYXJ5IGJ0bi1zbSBidG4taWNvbiBtZS0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dFZGl0d29ya2Zsb3dBY3Rpdml0eU1vZGFsKHdvcmtmbG93QWN0aXZpdHksRWRpdFdvcmtmbG93QWN0aXZpdHlNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IGZ3LWJvbGRlciB0ZXh0LWRhcmtcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXRk91dGNvbWVcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIGZ3LWJvbGQgZnMtNSBtdC0xIG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd1ZhcmlhYmxlc1wiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGlkPVwiaG9yaXpvbnRhbG1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtZGFya1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHdvcmtmbG93QWN0aXZpdHkudmFyaWFibGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZ2VhclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLnN5c05hbWV9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd29ya2Zsb3dBY3Rpdml0eS5vdXRjb21lc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWVFTiB9fToge3tpdGVtLm5leHRBY3R2aXR5TmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1lbmQ6OiBDYXJkIGJvZHktLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldEFjdGl2aXR5TGlzdFJlc3VsdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkXCIgW29wdGlvbnNdPVwiQWN0aXZpdHlQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIndvcmtmbG93QWN0aXZpdHlGb3JtXCIgI0FjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPCEtLSBBZGQgTW9kYWwgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNBZGRXb3JrZmxvd0FjdGl2aXR5TW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93QWN0aXZpdHlcIil9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiQWRkd29ya2Zsb3dBY3Rpdml0eUZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdTdWJtaXQpPVwiYWRkd29ya2Zsb3dBY3Rpdml0eSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIndvcmtmbG93QWN0aXZpdHlOYW1lSW5FbmdsaXNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkd29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIndvcmtmbG93QWN0aXZpdHlOYW1lSW5BcmFiaWNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJBZGR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIndvcmtmbG93QWN0aXZpdHlEZXNjcmlwdGlvbkluRW5nbGlzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkFkZHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJ3b3JrZmxvd0FjdGl2aXR5RGVzY3JpcHRpb25JbkFyYWJpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkFkZHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIhUHJvZHVjdGlvbk1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJ3b3JrZmxvd0FjdGl2aXR5U3lzTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkFkZHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFjdGl2aXR5VHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkd29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAjQ2xvc2V3b3JrZmxvd0FjdGl2aXR5TW9kYWwgaWQ9XCJDbG9zZXdvcmtmbG93QWN0aXZpdHlNb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPCEtLUVkaXQgTW9kYWwtLT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI0VkaXRXb3JrZmxvd0FjdGl2aXR5TW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd0FjdGl2aXR5XCIpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJFZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdTdWJtaXQpPVwiZWRpdHdvcmtmbG93QWN0aXZpdHkoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0d29ya2Zsb3dBY3Rpdml0eU5hbWVJbkVuZ2xpc2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJFZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXR3b3JrZmxvd0FjdGl2aXR5TmFtZUluQXJhYmljXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdHdvcmtmbG93QWN0aXZpdHlEZXNjcmlwdGlvbkluRW5nbGlzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdHdvcmtmbG93QWN0aXZpdHlEZXNjcmlwdGlvbkluQXJhYmljXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFQcm9kdWN0aW9uTW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXR3b3JrZmxvd0FjdGl2aXR5U3lzTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRBY3Rpdml0eVR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICNDbG9zZUVkaXR3b3JrZmxvd0FjdGl2aXR5TW9kYWwgaWQ9XCJDbG9zZUVkaXR3b3JrZmxvd0FjdGl2aXR5TW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSAgbWUtM1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBcclxuICA8L2Rpdj5cclxuXHJcbiJdfQ==
794
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3dvcmtmbG93cy90YWJzL3RhYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy93b3JrZmxvd3MvdGFicy90YWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQStCLGdCQUFnQixFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdwVSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFJckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBS3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBRTdGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZEQUE2RCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFPOUgsTUFBTSxPQUFPLGFBQWE7SUFnR3hCLHVCQUF1QjtJQUd2QixZQUFvQixXQUF3QixFQUFVLGVBQWdDLEVBQzVFLGNBQThCLEVB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LENBQUM7SUFFRCxZQUFZO0lBQ1osV0FBVztRQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxDQUFDOzsyR0E1NkJVLGFBQWE7K0ZBQWIsYUFBYSxta0JDeEIxQix3L21DQWluQkE7NEZEemxCYSxhQUFhO2tCQUx6QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO29CQUNwQixXQUFXLEVBQUUsdUJBQXVCO29CQUNwQyxTQUFTLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7b2FBcUJrRSwrQkFBK0I7c0JBQS9GLFNBQVM7dUJBQUMsaUNBQWlDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQVlHLHNCQUFzQjtzQkFBdkYsU0FBUzt1QkFBQyxrQ0FBa0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBZ0JHLGlDQUFpQztzQkFBbkcsU0FBUzt1QkFBQyxtQ0FBbUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBdUNOLHlCQUF5QjtzQkFBbkYsU0FBUzt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29udHJvbExheW91dCwgRW5nbGlzaEFyYWJpY0RUTywgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGFnaW5nT3B0aW9ucywgVGV4dEJveE9wdGlvbnMsIFRvZ2dsZVNsaWRlT3B0aW9ucywgRHJvcGRvd25PcHRpb25zLCBGb3JtT3B0aW9ucywgTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zLCBQYWdpbmdBY3Rpb25Nb2RlLCBGb3JjZURpcmVjdGlvbiwgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zLCBDaGVja0JveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFdvcmtmbG93U2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1dvcmtmbG93U2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBXRlZhcmlhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1dvcmtmbG93TW9kZWxzL1dGVmFyaWFibGVNb2RlbCc7XHJcbmltcG9ydCB7IFdvcmtmbG93VmFyaWFibGVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Xb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93QWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1dvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXRkFjdGl2aXR5TW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1dvcmtmbG93TW9kZWxzL1dGQWN0aXZpdHlNb2RlbCc7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlLCBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgUGFnaW5nQ29tcG9uZW50IH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMvbGliL2NvbnRyb2xzL1BhZ2luZy9QYWdpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWYXJpYWJsZUxvb2t1cE1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Xb3JrZmxvd01vZGVscy9WYXJpYWJsZUxvb2t1cE1vZGVsJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scy9saWIvY29udHJvbHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgV0ZWYXJpYWJsZURhdGFUeXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL0VudW1zL1dGVmFyaWFibGVEYXRhVHlwZSc7XHJcbmltcG9ydCB7IFdGQWN0aXZpdHlWYXJpYWJsZURUTywgV0ZBY3Rpdml0eVZhcmlhYmxlc01vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Xb3JrZmxvd01vZGVscy9XRkFjdGl2aXR5VmFyaWFibGVzTW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdGFicycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL1BhZ2UgcmVxdWlyZW1lbnRzXHJcbiAgUHJvZHVjdGlvbk1vZGU6IGJvb2xlYW47XHJcbiAgUGFnZXRpdGxlOiBzdHJpbmcgPSBcIlwiXHJcblxyXG4gIC8vV0ZcclxuICAvLyBEZXRhaWxzIENvbnRyb2xzXHJcbiAgRGV0YWlsc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBXb3JrZmxvd0RldGFpbHM6IGFueTtcclxuICBXb3JrZmxvd0lkOiBzdHJpbmc7XHJcbiAgTmFtZU11bHRpbGluZ3VhbFRleHRCb3g6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIERlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveDogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgQWN0aXZlOiBUZXh0Qm94T3B0aW9ucztcclxuICBQdWJsaXNoZWQ6IFRleHRCb3hPcHRpb25zO1xyXG4gIFN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIFNob3dXb3JrZmxvd0RldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBWZXJzaW9uSWQ6IHN0cmluZ1xyXG4gIC8vcHVibGlzaCBXRiAgTW9kZWwgQ29udHJvbHNcclxuICBwdWJsaXNoV0ZDb25maXJtYXRpb25PcHRpb25zOiBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnM7XHJcbiAgcHVibGlzaENvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdwdWJsaXNoQ29uZmlybWF0aW9uTW9kYWxDb250cm9sJywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1Ymxpc2hDb25maXJtYXRpb25Nb2RhbENvbnRyb2w6IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50O1xyXG5cclxuICAvL1N0YXJ0IFdvcmtGbG93IFZlcnNpb25cclxuICBXb3JrRmxvd1ZlcnNpb25BcGlVcmwgPSBcIi9hcGkvYWRtaW4vV0ZWZXJzaW9uL1wiXHJcbiAgV29ya2Zsb3dWZXJzaW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFdvcmtmbG93SWRUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBXb3JrZmxvd1ZlcnNpb25QYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgV29ya2Zsb3dWZXJzaW9uUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBXb3JrZmxvd0lkRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnV29ya2Zsb3dWZXJzaW9uUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgV0ZWZXJzaW9uUGFnaW5nRWxlbWVudDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcbiAgLy9FbmQgV29ya0Zsb3cgdmVyc2lvblxyXG5cclxuICAvL1N0YXJ0IFdvcmtmbG93IFZhcmlhYmxlc1xyXG4gIC8vV29ya2Zsb3cgVmFyaWFibGVzIGNvbnRyb2xzXHJcbiAgV29ya2Zsb3dWYXJpYWJsZUFwaVVybCA9IFwiL2FwaS9hZG1pbi9Xb3JrZmxvd1ZhcmlhYmxlL1wiXHJcbiAgV29ya2Zsb3dWYXJpYWJsZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBXb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgV29ya2Zsb3dWYXJpYWJsZVRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBWZXJpc29uSWRUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBWZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgRGF0YVR5cGVMaXN0ID0gW107XHJcbiAgV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIElzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gXHJcbiAgQFZpZXdDaGlsZCgnV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIFdvcmtmbG93VmFyaWFibGVQYWdpbmdWaWV3RWxlbWVudDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG4gIC8vQWRkIE1vZGVsIENvbnRyb2xzXHJcbiAgQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnM7XHJcbiAgQWRkV0ZWYXJpYWJsZU5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZFdGVmFyaWFibGVTeXNOYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRXRlZhcmlhYmxlRGF0YVR5cGU6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGRXRlZhcmlhYmxlQ29uc3RhbnQ6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICAvL1dGIHZhcmlhYmxlIGxvb2t1cHNcclxuICBhZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgc2hvd0FkZExvb2t1cHNUYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFkZExhc3RMb29rdXBJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBFZGl0V0ZWYXJpYWJsZU5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXRXRlZhcmlhYmxlU3lzTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdFdGVmFyaWFibGVEYXRhVHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIEVkaXRXRlZhcmlhYmxlQ29uc3RhbnQ6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICBXb3JrZmxvd1ZhcmlhYmxlSWQ6IGFueVxyXG4gIC8vV0YgdmFyaWFibGUgbG9va3Vwc1xyXG4gIGVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgc2hvd0VkaXRMb29rdXBzVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlZGl0TGFzdExvb2t1cEluZGV4OiBudW1iZXIgPSAwO1xyXG5cclxuICAvL0VuZCBXb3JrZmxvdyBWYXJpYWJsZVxyXG5cclxuICAvL3N0cmF0IFdvcmtmbG93IEFjdGl2aXR5XHJcbiAgLy9Xb3JrZmxvdyBBY3Rpdml0eSBDb250cm9sc1xyXG4gIEFjdGl2aXR5QXBpVXJsID0gXCIvYXBpL2FkbWluL1dvcmtmbG93QWN0aXZpdHkvXCJcclxuICBBY3Rpdml0eVR5cGVMaXN0ID0gW107XHJcbiAgd29ya2Zsb3dBY3Rpdml0eUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBXb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBXb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgQWN0aXZpdHlQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgQWN0aXZpdHlQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnQWN0aXZpdHlQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBBY3Rpdml0eVBhZ2luZ1ZpZXdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcbiAgLy9BZGQgV0YgdmFyaWFibGVzIHRvIGFjdGl2aXR5IGNvbnRyb2xzXHJcbiAgYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBhY3Rpdml0eUlEOiBudW1iZXI7XHJcbiAgYWN0aXZpdHlXRlZhcmlhYmxlT3B0aW9uczogYW55W10gPSBbXTtcclxuICBsYXN0QWN0aXZpdHlXRlZhcmlhYmxlSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgYWN0aXZpdHlWYXJpYWJsZXNMaXN0ID0gW107XHJcbiAgLy9FbmQgV29ya2Zsb3cgQWN0aXZpdHlcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIFdvcmtmbG93U2VydmljZTogV29ya2Zsb3dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlOiBXb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdvcmtmbG93QWN0aXZpdHlTZXJ2aWNlOiBXb3JrZmxvd0FjdGl2aXR5U2VydmljZSwgcHJpdmF0ZSBwYWdlSW5mb1NlcnZpY2U6IFBhZ2VJbmZvU2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6IEVudmlyb25tZW50U2VydmljZSwgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgdGhpcy5Xb3JrZmxvd0lkID0gcGFyYW1zWydpZCddO1xyXG4gICAgICB0aGlzLlZlcnNpb25JZCA9IHBhcmFtc1sndmlkJ107XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCk9PntcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMuUHJvZHVjdGlvbk1vZGUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpXHJcbiAgICB0aGlzLmdldERldGFpbHMoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvL1dGIGZ1bmN0aW9uc1xyXG4gIGdldERldGFpbHMoKSB7XHJcbiAgICB0aGlzLlNob3dXb3JrZmxvd0RldGFpbHMgPSBmYWxzZTtcclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuV29ya2Zsb3dTZXJ2aWNlLmdldERldGFpbHModGhpcy5Xb3JrZmxvd0lkKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLldvcmtmbG93RGV0YWlscyA9IHJlc3VsdCBhcyBhbnlcclxuXHJcbiAgICAgIHZhciBOYW1lID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgTmFtZS5BcmFiaWMgPSB0aGlzLldvcmtmbG93RGV0YWlscy5uYW1lLmFyYWJpYztcclxuICAgICAgTmFtZS5FbmdsaXNoID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMubmFtZS5lbmdsaXNoO1xyXG5cclxuICAgICAgdGhpcy5QYWdldGl0bGUgPSB0aGlzLldvcmtmbG93RGV0YWlscy5uYW1lU3RyXHJcblxyXG5cclxuICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMuUGFnZXRpdGxlXHJcbiAgICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgICAgeyB0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG9tZVwiKSwgcGF0aDogJy9BZG1pbi9Ib21lJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd3NcIiksIHBhdGg6ICcvQWRtaW4vV29ya2Zsb3dzL3dvcmtmbG93JywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfVxyXG5cclxuICAgICAgXTtcclxuXHJcbiAgICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcblxyXG4gICAgICB0aGlzLk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94ID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3guQXJhYmljTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiXHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3guRW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCJcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5OYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3guVmFsdWUgPSBOYW1lO1xyXG4gICAgICB0aGlzLk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94LklzRGlzYWJsZWQgPSB0cnVlXHJcblxyXG5cclxuICAgICAgdmFyIERlc2NyaXB0aW9uID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgRGVzY3JpcHRpb24uQXJhYmljID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMuZGVzY3JpcHRpb24uYXJhYmljO1xyXG4gICAgICBEZXNjcmlwdGlvbi5FbmdsaXNoID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3ggPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3guQXJhYmljTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uSW5BcmFiaWNcIlxyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5FbmdsaXNoTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uSW5FbmdsaXNoXCJcclxuICAgICAgdGhpcy5EZXNjcmlwdGlvbk11bHRpbGluZ3VhbFRleHRCb3guSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94Lk5hbWUgPSBcIkRlc2NyaXB0aW9uXCI7XHJcbiAgICAgIHRoaXMuRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94LlZhbHVlID0gRGVzY3JpcHRpb247XHJcbiAgICAgIHRoaXMuRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94LklzRGlzYWJsZWQgPSB0cnVlXHJcblxyXG4gICAgICB0aGlzLlN5c05hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5TeXNOYW1lLk5hbWUgPSBcIlN5c05hbWVcIlxyXG4gICAgICB0aGlzLlN5c05hbWUuTGFiZWxLZXkgPSBcIlN5c05hbWVcIlxyXG4gICAgICB0aGlzLlN5c05hbWUuVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICAgIHRoaXMuU3lzTmFtZS5Jc0Rpc2FibGVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLlN5c05hbWUuVmFsdWUgPSB0aGlzLldvcmtmbG93RGV0YWlscy5zeXNOYW1lXHJcblxyXG4gICAgICB0aGlzLkFjdGl2ZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFjdGl2ZS5OYW1lID0gXCJBY3RpdmVcIlxyXG4gICAgICB0aGlzLkFjdGl2ZS5MYWJlbEtleSA9IFwiQWN0aXZlXCJcclxuICAgICAgdGhpcy5BY3RpdmUuVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICAgIHRoaXMuQWN0aXZlLklzRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgIHRoaXMuQWN0aXZlLlZhbHVlID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMuaXNBY3RpdmVcclxuXHJcbiAgICAgIHRoaXMuUHVibGlzaGVkID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLk5hbWUgPSBcIlB1Ymxpc2hlZFwiXHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLkxhYmVsS2V5ID0gXCJQdWJsaXNoZWRcIlxyXG4gICAgICB0aGlzLlB1Ymxpc2hlZC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5QdWJsaXNoZWQuSXNEaXNhYmxlZCA9IHRydWVcclxuICAgICAgdGhpcy5QdWJsaXNoZWQuVmFsdWUgPSB0aGlzLldvcmtmbG93RGV0YWlscy5pc1B1Ymxpc2hlZFxyXG5cclxuICAgICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICAgIHRoaXMuSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkID0gZmFsc2VcclxuICAgICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuXHJcblxyXG4gICAgICB0aGlzLlNob3dXb3JrZmxvd0RldGFpbHMgPSB0cnVlO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvL0RlbGV0ZSBwcm92aWRlclxyXG4gIHNob3dQdWJsaXNoV0ZNb2RhbChpZDogc3RyaW5nKSB7XHJcblxyXG4gICAgLy9hcnJheSBzZW50IHRvIHNlcnZpY2UgZnVuY3Rpb25cclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKGlkKTtcclxuXHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5wdWJsaXNoV29ya0Zsb3c7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdE1vZGVsID0gcGFyYW1BcnJheTtcclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucy5Db25maXJtYXRpb25IZWFkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQdWJsaXNoV29ya0ZmbG93XCIpO1xyXG4gICAgdGhpcy5wdWJsaXNoV0ZDb25maXJtYXRpb25PcHRpb25zLkNvbmZpcm1hdGlvbkJvZHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQdWJsaXNoV29ya0ZmbG93Q29uZmlybWF0aW9uXCIpO1xyXG4gICAgdGhpcy5wdWJsaXNoV0ZDb25maXJtYXRpb25PcHRpb25zLlN1Ym1pdEJ1dHRvblRleHQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQdWJsaXNoXCIpO1xyXG4gICAgdGhpcy5wdWJsaXNoV0ZDb25maXJtYXRpb25PcHRpb25zLlN1Y2Nlc3NOb3RpZmljYXRpb25NZXNzYWdlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHVibGlzaGVkU3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgdGhpcy5wdWJsaXNoV0ZDb25maXJtYXRpb25PcHRpb25zLk9uU3VjY2Vzc0hhbmRsZXIgPSB0aGlzLnB1Ymxpc2hXb3JrRmxvd09uU3VjY2VzcztcclxuXHJcbiAgICB0aGlzLnB1Ymxpc2hDb250cm9sTG9hZGVkID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hDb25maXJtYXRpb25Nb2RhbENvbnRyb2wuc2hvd01vZGFsKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgcHVibGlzaFdvcmtGbG93ID0gKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuV29ya2Zsb3dTZXJ2aWNlLnB1Ymxpc2hXb3JrRmxvdyhpZCk7XHJcbiAgfVxyXG4gIHB1Ymxpc2hXb3JrRmxvd09uU3VjY2VzcyA9IChyZXN1bHQpID0+IHtcclxuICAgIHRoaXMuV29ya2Zsb3dEZXRhaWxzLmlzUHVibGlzaGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vV0YgdmVyc2lvbiBmdW5jdGlvbnNcclxuICBpbml0aWFsaXplVmVyc2lvbigpIHtcclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKClcclxuICAgIC8vIFRleHRCb3ggaW50aVxyXG5cclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94Lk5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lXCIpXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG5cclxuXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveFxyXG5cclxuXHJcbiAgICB0aGlzLldvcmtmbG93SWRUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93SWRUZXh0Qm94Lk5hbWUgPSBcIldvcmtmbG93SWRUZXh0Qm94XCJcclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3guVmFsdWUgPSB0aGlzLldvcmtmbG93SWRcclxuXHJcbiAgICB0aGlzLldvcmtmbG93SWRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwiV29ya2Zsb3dJZFRleHRCb3hcIlxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcIldmSURcIlxyXG4gICAgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLldvcmtmbG93SWRGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveFxyXG5cclxuICAgIHRoaXMuV29ya2Zsb3dWZXJzaW9uUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dWZXJzaW9uUGFnaW5nLkFjdGlvblBvc3RVUkwgPSAgdGhpcy5Xb3JrRmxvd1ZlcnNpb25BcGlVcmwgKyAnR2V0VmVyc2lvbnNMaXN0aW5nJztcclxuICAgIHRoaXMuV29ya2Zsb3dWZXJzaW9uUGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiLCBcIldvcmtmbG93SWRUZXh0Qm94XCJdXHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZy5GaWx0ZXJzID0gW3RoaXMuVGV4dElucHV0RmlsdGVyLCB0aGlzLldvcmtmbG93SWRGaWx0ZXJdXHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZy5WYWxpZGF0aW9uVG9rZW4gPXRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICB0aGlzLklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIHNldFdvcmtmbG93VmVyc2lvbkxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gICAgXHJcbiAgfVxyXG5cclxuXHJcbiAgLy9XRiB2YXJpYWJsZXMgRnVuY3Rpb25zXHJcbiAgc2V0V29ya2Zsb3dWYXJpYWJsZUxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmdSZXN1bHQgPSByZXN1bHRcclxuICB9XHJcblxyXG4gIC8vaW5pdGlhbGl6ZSBXRiB2YXJpYWJsZXMgcGFnZVxyXG4gIGluaXRpYWxpemVXb3JrZmxvd1ZhcmlhYmxlcygpIHtcclxuICAgIC8vIFRleHRCb3ggaW5pdFxyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveC5OYW1lID0gXCJXb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKVxyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlO1xyXG5cclxuXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcIldvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dEJveC5OYW1lID0gXCJWZXJpc29uSWRUZXh0Qm94XCJcclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRCb3guVmFsdWUgPSB0aGlzLldvcmtmbG93SWRcclxuXHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcIlZlcmlzb25JZFRleHRCb3hcIlxyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwidmVyc2lvbklEXCJcclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlQXBpVXJsICsgJ0dldFZhcmlhYmxlTGlzdGluZyc7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmcuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJXb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveFwiLCBcIlZlcmlzb25JZFRleHRCb3hcIl1cclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZy5GaWx0ZXJzID0gW3RoaXMuVGV4dElucHV0RmlsdGVyLCB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlcl1cclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZy5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcblxyXG4gICAgdGhpcy5TaG93V29ya2Zsb3dEZXRhaWxzID0gZmFsc2U7XHJcbiAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gZmFsc2VcclxuICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgLy9BZGQsRWRpdCBXRiB2YXJpYWJsZSBzaGFyZWQgZnVuY3Rpb25zXHJcbiAgV0ZWYXJpYWJsZVR5cGVPbkNoYW5nZSh0eXBlOm51bWJlciwgaXNBZGQ6IGJvb2xlYW4pIHtcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkFkZExvb2t1cE5hbWVFTlwiICsgaSk7XHJcbiAgICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKFwiQWRkTG9va3VwTmFtZUFSXCIgKyBpKTtcclxuICAgICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJMb29rdXBWYWx1ZVwiICsgaSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXggPSAwO1xyXG4gICAgICBpZiAodHlwZSA9PSBXRlZhcmlhYmxlRGF0YVR5cGUuU2luZ2xlU2VsZWN0aW9uIHx8IHR5cGUgPT0gV0ZWYXJpYWJsZURhdGFUeXBlLk11bHRpU2VsZWN0aW9uKVxyXG4gICAgICAgIHRoaXMuc2hvd0FkZExvb2t1cHNUYWJsZSA9IHRydWU7XHJcbiAgICAgIGVsc2UgXHJcbiAgICAgICAgdGhpcy5zaG93QWRkTG9va3Vwc1RhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lZGl0TGFzdExvb2t1cEluZGV4OyBpKyspIHtcclxuICAgICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKFwiRWRpdExvb2t1cElEXCIgKyBpKTtcclxuICAgICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKFwiRWRpdExvb2t1cE5hbWVFTlwiICsgaSk7XHJcbiAgICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkVkaXRMb29rdXBOYW1lQVJcIiArIGkpO1xyXG4gICAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJFZGl0TG9va3VwVmFsdWVcIiArIGkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZWRpdFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucyA9IFtdO1xyXG4gICAgICB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXggPSAwO1xyXG4gICAgICBpZiAodHlwZSA9PSAyMzAwMyB8fCB0eXBlID09IDIzMDA0KVxyXG4gICAgICAgIHRoaXMuc2hvd0VkaXRMb29rdXBzVGFibGUgPSB0cnVlO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5zaG93RWRpdExvb2t1cHNUYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVXRlZhcmlhYmxlTG9va3VwT3B0aW9ucyhpc0FkZDogYm9vbGVhbikge1xyXG4gICAgbGV0IGxvb2t1cE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgICBsZXQgb2JqZWN0TG9va3VwT3B0aW9uczogYW55W10gPSBbXTtcclxuICAgIGxldCBhY3Rpb25JbmRpY2F0ZTogc3RyaW5nO1xyXG4gICAgbGV0IGluZGV4OiBudW1iZXI7XHJcbiAgICBpZiAoaXNBZGQpIHtcclxuICAgICAgYWN0aW9uSW5kaWNhdGUgPSBcIkFkZFwiO1xyXG4gICAgICBpbmRleCA9IHRoaXMuYWRkTGFzdExvb2t1cEluZGV4O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGFjdGlvbkluZGljYXRlID0gXCJFZGl0XCI7XHJcbiAgICAgIGluZGV4ID0gdGhpcy5lZGl0TGFzdExvb2t1cEluZGV4O1xyXG4gICAgfVxyXG4gICAgLy9Gb3IgZWRpdCBvbmx5XHJcbiAgICBsZXQgbG9va3VwSUQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIGxvb2t1cElELk5hbWUgPSBhY3Rpb25JbmRpY2F0ZSArIFwiTG9va3VwSURcIiArIGluZGV4O1xyXG4gICAgbG9va3VwSUQuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIGxvb2t1cElELlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIGxvb2t1cElELlZhbHVlID0gMDtcclxuXHJcbiAgICBsZXQgbG9va3VwTmFtZUVOID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICBsb29rdXBOYW1lRU4uTmFtZSA9IGFjdGlvbkluZGljYXRlICsgXCJMb29rdXBOYW1lRU5cIiArIGluZGV4O1xyXG4gICAgbG9va3VwTmFtZUVOLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICBsb29rdXBOYW1lRU4uVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgbG9va3VwTmFtZUVOLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIGxldCBsb29rdXBOYW1lQVIgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIGxvb2t1cE5hbWVBUi5OYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkxvb2t1cE5hbWVBUlwiICsgaW5kZXg7XHJcbiAgICBsb29rdXBOYW1lQVIuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIGxvb2t1cE5hbWVBUi5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBsb29rdXBOYW1lQVIuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgbGV0IGxvb2t1cFZhbHVlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICBsb29rdXBWYWx1ZS5OYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkxvb2t1cFZhbHVlXCIgKyBpbmRleDtcclxuICAgIGxvb2t1cFZhbHVlLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICBsb29rdXBWYWx1ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBsb29rdXBWYWx1ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoaXNBZGQpXHJcbiAgICAgIG9iamVjdExvb2t1cE9wdGlvbnMucHVzaChsb29rdXBOYW1lRU4sIGxvb2t1cE5hbWVBUiwgbG9va3VwVmFsdWUpO1xyXG4gICAgZWxzZVxyXG4gICAgICBvYmplY3RMb29rdXBPcHRpb25zLnB1c2gobG9va3VwSUQsIGxvb2t1cE5hbWVFTiwgbG9va3VwTmFtZUFSLCBsb29rdXBWYWx1ZSk7XHJcblxyXG4gICAgbG9va3VwT3B0aW9ucy5wdXNoKG9iamVjdExvb2t1cE9wdGlvbnMpO1xyXG5cclxuICAgIGluZGV4ICs9IDE7XHJcbiAgICByZXR1cm4gW2xvb2t1cE9wdGlvbnMsIGluZGV4XTtcclxuXHJcbiAgfVxyXG5cclxuICBkZWxldGVXRlZhcmlhYmxlTG9va3VwKGRlbGV0ZWRMb29rdXA6YW55LGlzQWRkOmJvb2xlYW4pIHtcclxuICAgIGlmIChpc0FkZCkge1xyXG4gICAgICBsZXQgZGVsZXRlZExvb2t1cEluZGV4OiBudW1iZXIgPSB0aGlzLmFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5pbmRleE9mKGRlbGV0ZWRMb29rdXApO1xyXG4gICAgICBpZiAoZGVsZXRlZExvb2t1cEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuYWRkV0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLnNwbGljZShkZWxldGVkTG9va3VwSW5kZXgsIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZExvb2t1cC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKGRlbGV0ZWRMb29rdXBbaV0uTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGRlbGV0ZWRMb29rdXBJbmRleDogbnVtYmVyID0gdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLmluZGV4T2YoZGVsZXRlZExvb2t1cCk7XHJcbiAgICAgIGlmIChkZWxldGVkTG9va3VwSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLnNwbGljZShkZWxldGVkTG9va3VwSW5kZXgsIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZExvb2t1cC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkTG9va3VwW2ldLk5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvL0FkZCBXRiB2YXJpYWJsZVxyXG4gIHNob3dBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoQWRkV29ya2Zsb3dWYXJpYWJsZU1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2UubG9hZEFkZERyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICB0aGlzLkRhdGFUeXBlTGlzdCA9IHJlc3VsdE9iai5kYXRhVHlwZUxpc3Q7XHJcblxyXG4gICAgICB0aGlzLmFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucyA9IFtdO1xyXG4gICAgICB0aGlzLmFkZExhc3RMb29rdXBJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuc2hvd0FkZExvb2t1cHNUYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkV0ZWYXJpYWJsZU1vZGVsO1xyXG4gICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFdGVmFyaWFibGVGdW5jdGlvbjtcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnRcclxuXHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZU5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZS5OYW1lID0gXCJBZGRXRlZhcmlhYmxlTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVOYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVTeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZVN5c05hbWUuTmFtZSA9IFwiQWRkV0ZWYXJpYWJsZVN5c05hbWVcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZS5MYWJlbEtleSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVTeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZS5WYWx1ZSA9IG51bGw7XHJcblxyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVEYXRhVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUuTmFtZSA9IFwiQWRkV0ZWYXJpYWJsZURhdGFUeXBlXCJcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUuTGFiZWxLZXkgPSBcIkRhdGFUeXBlXCJcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUuRGF0YVNvdXJjZSA9IHRoaXMuRGF0YVR5cGVMaXN0XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG5cclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlQ29uc3RhbnQgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZUNvbnN0YW50Lk5hbWUgPSBcIkFkZFdGVmFyaWFibGVDb25zdGFudFwiXHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZUNvbnN0YW50LkxhYmVsS2V5ID0gXCJDb25zdGFudFwiXHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZUNvbnN0YW50LlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWRkV29ya2Zsb3dWYXJpYWJsZU1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICB9XHJcbiAgZ2V0QWRkV0ZWYXJpYWJsZU1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtLnZhbHVlO1xyXG4gICAgbGV0IGFkZE1vZGVsID0gbmV3IFdGVmFyaWFibGVNb2RlbCgpO1xyXG4gICAgYWRkTW9kZWwuTmFtZS5FbmdsaXNoID0gUmVzdWx0TW9kZWwuQWRkV0ZWYXJpYWJsZU5hbWUuRW5nbGlzaFxyXG4gICAgYWRkTW9kZWwuTmFtZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5BZGRXRlZhcmlhYmxlTmFtZS5BcmFiaWNcclxuICAgIGFkZE1vZGVsLlN5c05hbWUgPSBSZXN1bHRNb2RlbC5BZGRXRlZhcmlhYmxlU3lzTmFtZVxyXG4gICAgYWRkTW9kZWwuV29ya2Zsb3dWZXJzaW9uSUQgPSBOdW1iZXIodGhpcy5WZXJzaW9uSWQpO1xyXG4gICAgYWRkTW9kZWwuRGF0YVR5cGVJdGVtSUQgPSBSZXN1bHRNb2RlbC5BZGRXRlZhcmlhYmxlRGF0YVR5cGUgIT0gbnVsbCA/IE51bWJlcihSZXN1bHRNb2RlbC5BZGRXRlZhcmlhYmxlRGF0YVR5cGUpIDogbnVsbFxyXG4gICAgYWRkTW9kZWwuSXNDb25zdGFudCA9IFJlc3VsdE1vZGVsLkFkZFdGVmFyaWFibGVDb25zdGFudFxyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXg7IGorKykge1xyXG4gICAgICBsZXQgYWRkTG9va3VwTmFtZUVOID0gUmVzdWx0TW9kZWxbXCJBZGRMb29rdXBOYW1lRU5cIiArIGpdO1xyXG4gICAgICBpZiAoYWRkTG9va3VwTmFtZUVOID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBhZGRMb29rdXBOYW1lQVIgPSBSZXN1bHRNb2RlbFtcIkFkZExvb2t1cE5hbWVBUlwiICsgal07XHJcbiAgICAgIGxldCBhZGRMb29rdXBWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiQWRkTG9va3VwVmFsdWVcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cDogVmFyaWFibGVMb29rdXBNb2RlbCA9IG5ldyBWYXJpYWJsZUxvb2t1cE1vZGVsKCk7XHJcbiAgICAgIGxvb2t1cC5OYW1lRU4gPSBhZGRMb29rdXBOYW1lRU47XHJcbiAgICAgIGxvb2t1cC5OYW1lQVIgPSBhZGRMb29rdXBOYW1lQVI7XHJcbiAgICAgIGxvb2t1cC5WYWx1ZSA9IGFkZExvb2t1cFZhbHVlO1xyXG4gICAgICBhZGRNb2RlbC52YXJpYWJsZUxvb2t1cERUT3MucHVzaChsb29rdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChhZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFkZFdGVmFyaWFibGVGdW5jdGlvbiA9IChBZGRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2UuYWRkVmFyaWFibGUoQWRkTW9kZWwpXHJcbiAgfVxyXG5cclxuICBhZGRXRlZhcmlhYmxlTG9va3VwaW5BZGRNb2RlKCkge1xyXG4gICAgbGV0IHJlc3VsdDogYW55ID0gdGhpcy5pbml0aWFsaXplV0ZWYXJpYWJsZUxvb2t1cE9wdGlvbnModHJ1ZSk7XHJcbiAgICB0aGlzLmFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucyA9IHRoaXMuYWRkV0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLmNvbmNhdChyZXN1bHRbMF0pO1xyXG4gICAgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXggPSByZXN1bHRbMV07XHJcbiAgfVxyXG5cclxuICAvL0VkaXQgV0YgdmFyaWFibGVcclxuICBzaG93RWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbChXRlZhcmlhYmxlSUQ6IG51bWJlciwgV0ZWYXJpYWJsZUlERW5jOiBhbnksIEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlSWQgPSBXRlZhcmlhYmxlSUQ7XHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2UuZ2V0RWRpdFdvcmtGbG93VmFyaWFibGVEYXRhKFdGVmFyaWFibGVJREVuYykuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIGxldCB3b3JrZmxvd1ZhcmlhYmxlID0gcmVzdWx0T2JqLm1vZGVsO1xyXG4gICAgICBsZXQgbGlzdHMgPSByZXN1bHRPYmoubGlzdHM7XHJcbiAgICAgIHRoaXMuRGF0YVR5cGVMaXN0ID0gbGlzdHMuZGF0YVR5cGVMaXN0O1xyXG5cclxuICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuZWRpdExhc3RMb29rdXBJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuc2hvd0VkaXRMb29rdXBzVGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVxyXG4gICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFdGVmFyaWFibGVNb2RlbDtcclxuICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFdGVmFyaWFibGVGdW5jdGlvbjtcclxuICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1ZpZXdFbGVtZW50XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5QYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGU7XHJcblxyXG4gICAgICBsZXQgbmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIG5hbWUuQXJhYmljID0gd29ya2Zsb3dWYXJpYWJsZS5uYW1lLmFyYWJpYztcclxuICAgICAgbmFtZS5FbmdsaXNoID0gd29ya2Zsb3dWYXJpYWJsZS5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZS5OYW1lID0gXCJFZGl0V0ZWYXJpYWJsZU5hbWVcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZU5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZU5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLlZhbHVlID0gbmFtZTtcclxuXHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlU3lzTmFtZS5OYW1lID0gXCJFZGl0V0ZWYXJpYWJsZVN5c05hbWVcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZVN5c05hbWUuTGFiZWxLZXkgPSBcIlN5c05hbWVcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZVN5c05hbWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlU3lzTmFtZS5WYWx1ZSA9IHdvcmtmbG93VmFyaWFibGUuc3lzTmFtZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVEYXRhVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLk5hbWUgPSBcIkVkaXRXRlZhcmlhYmxlRGF0YVR5cGVcIlxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlRGF0YVR5cGUuTGFiZWxLZXkgPSBcIkRhdGFUeXBlXCJcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLkRhdGFTb3VyY2UgPSB0aGlzLkRhdGFUeXBlTGlzdFxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlRGF0YVR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLlNlbGVjdGVkSXRlbXMgPSB0aGlzLkRhdGFUeXBlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB3b3JrZmxvd1ZhcmlhYmxlLmRhdGFUeXBlSXRlbUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlQ29uc3RhbnQgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVDb25zdGFudC5OYW1lID0gXCJFZGl0V0ZWYXJpYWJsZUNvbnN0YW50XCJcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZUNvbnN0YW50LkxhYmVsS2V5ID0gXCJDb25zdGFudFwiXHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVDb25zdGFudC5WYWx1ZSA9IHdvcmtmbG93VmFyaWFibGUuaXNDb25zdGFudFxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlQ29uc3RhbnQuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWxcclxuXHJcblxyXG4gICAgICBpZiAod29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRCA9PSAyMzAwMyB8fCB3b3JrZmxvd1ZhcmlhYmxlLmRhdGFUeXBlSXRlbUlEID09IDIzMDA0KSB7XHJcbiAgICAgICAgLy9TZXQgTG9va3VwIENvbnRyb2xzXHJcbiAgICAgICAgdGhpcy5zZXRFZGl0VmFyaWFibGVMb29rdXBzKHdvcmtmbG93VmFyaWFibGUudmFyaWFibGVMb29rdXBEVE9zKTtcclxuICAgICAgICB0aGlzLnNob3dFZGl0TG9va3Vwc1RhYmxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGdldEVkaXRXRlZhcmlhYmxlTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnZhbHVlO1xyXG4gICAgbGV0IEVkaXRNb2RlbCA9IG5ldyBXRlZhcmlhYmxlTW9kZWwoKTtcclxuICAgIEVkaXRNb2RlbC5JRCA9IE51bWJlcih0aGlzLldvcmtmbG93VmFyaWFibGVJZCk7XHJcbiAgICBFZGl0TW9kZWwuTmFtZS5FbmdsaXNoID0gUmVzdWx0TW9kZWwuRWRpdFdGVmFyaWFibGVOYW1lLkVuZ2xpc2hcclxuICAgIEVkaXRNb2RlbC5OYW1lLkFyYWJpYyA9IFJlc3VsdE1vZGVsLkVkaXRXRlZhcmlhYmxlTmFtZS5BcmFiaWNcclxuICAgIEVkaXRNb2RlbC5TeXNOYW1lID0gUmVzdWx0TW9kZWwuRWRpdFdGVmFyaWFibGVTeXNOYW1lXHJcbiAgICBFZGl0TW9kZWwuV29ya2Zsb3dWZXJzaW9uSUQgPSBOdW1iZXIodGhpcy5WZXJzaW9uSWQpO1xyXG4gICAgRWRpdE1vZGVsLkRhdGFUeXBlSXRlbUlEID0gUmVzdWx0TW9kZWwuRWRpdFdGVmFyaWFibGVEYXRhVHlwZSAhPSBudWxsID8gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRXRlZhcmlhYmxlRGF0YVR5cGUpIDogbnVsbFxyXG4gICAgRWRpdE1vZGVsLklzQ29uc3RhbnQgPSBSZXN1bHRNb2RlbC5FZGl0V0ZWYXJpYWJsZUNvbnN0YW50XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXg7IGorKykge1xyXG4gICAgICBsZXQgZWRpdExvb2t1cElEID0gUmVzdWx0TW9kZWxbXCJFZGl0TG9va3VwSURcIiArIGpdO1xyXG4gICAgICBpZiAoZWRpdExvb2t1cElEID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBlZGl0TG9va3VwTmFtZUVOID0gUmVzdWx0TW9kZWxbXCJFZGl0TG9va3VwTmFtZUVOXCIgKyBqXTtcclxuICAgICAgbGV0IGVkaXRMb29rdXBOYW1lQVIgPSBSZXN1bHRNb2RlbFtcIkVkaXRMb29rdXBOYW1lQVJcIiArIGpdO1xyXG4gICAgICBsZXQgZWRpdExvb2t1cFZhbHVlID0gUmVzdWx0TW9kZWxbXCJFZGl0TG9va3VwVmFsdWVcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cDogVmFyaWFibGVMb29rdXBNb2RlbCA9IG5ldyBWYXJpYWJsZUxvb2t1cE1vZGVsKCk7XHJcbiAgICAgIGxvb2t1cC5JRCA9IGVkaXRMb29rdXBJRDtcclxuICAgICAgbG9va3VwLk5hbWVFTiA9IGVkaXRMb29rdXBOYW1lRU47XHJcbiAgICAgIGxvb2t1cC5OYW1lQVIgPSBlZGl0TG9va3VwTmFtZUFSO1xyXG4gICAgICBsb29rdXAuVmFsdWUgPSBlZGl0TG9va3VwVmFsdWU7XHJcbiAgICAgIEVkaXRNb2RlbC52YXJpYWJsZUxvb2t1cERUT3MucHVzaChsb29rdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChFZGl0TW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRFZGl0V0ZWYXJpYWJsZUZ1bmN0aW9uID0gKEVkaXRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2UuZWRpdFZhcmlhYmxlKEVkaXRNb2RlbClcclxuICB9XHJcblxyXG4gIHNldEVkaXRWYXJpYWJsZUxvb2t1cHMoZXhpc3RpbmdMb29rdXBzOmFueVtdKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nTG9va3Vwcy5sZW5ndGg7IGkrKykge1xyXG5cclxuICAgICAgbGV0IG9iamVjdEF0dHJpYnV0ZU9wdGlvbnM6IGFueVtdID0gW107XHJcblxyXG4gICAgICBsZXQgbG9va3VwSUQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgbG9va3VwSUQuTmFtZSA9IFwiRWRpdExvb2t1cElEXCIgKyBpO1xyXG4gICAgICBsb29rdXBJRC5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBsb29rdXBJRC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIGxvb2t1cElELlZhbHVlID0gZXhpc3RpbmdMb29rdXBzW2ldLmlkO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cE5hbWVFTiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBsb29rdXBOYW1lRU4uTmFtZSA9IFwiRWRpdExvb2t1cE5hbWVFTlwiICsgaTtcclxuICAgICAgbG9va3VwTmFtZUVOLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIGxvb2t1cE5hbWVFTi5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIGxvb2t1cE5hbWVFTi5WYWx1ZSA9IGV4aXN0aW5nTG9va3Vwc1tpXS5uYW1lRU47XHJcbiAgICAgIGxvb2t1cE5hbWVFTi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgICBsZXQgbG9va3VwTmFtZUFSID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIGxvb2t1cE5hbWVBUi5OYW1lID0gXCJFZGl0TG9va3VwTmFtZUFSXCIgKyBpO1xyXG4gICAgICBsb29rdXBOYW1lQVIuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgbG9va3VwTmFtZUFSLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgbG9va3VwTmFtZUFSLlZhbHVlID0gZXhpc3RpbmdMb29rdXBzW2ldLm5hbWVBUjtcclxuICAgICAgbG9va3VwTmFtZUFSLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICBsb29rdXBOYW1lQVIuRm9yY2VEaXJlY3Rpb24gPSBGb3JjZURpcmVjdGlvbi5BcmFiaWM7XHJcblxyXG4gICAgICBsZXQgbG9va3VwVmFsdWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgbG9va3VwVmFsdWUuTmFtZSA9IFwiRWRpdExvb2t1cFZhbHVlXCIgKyBpO1xyXG4gICAgICBsb29rdXBWYWx1ZS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBsb29rdXBWYWx1ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIGxvb2t1cFZhbHVlLlZhbHVlID0gZXhpc3RpbmdMb29rdXBzW2ldLnZhbHVlO1xyXG4gICAgICBsb29rdXBWYWx1ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIG9iamVjdEF0dHJpYnV0ZU9wdGlvbnMucHVzaChsb29rdXBJRCxsb29rdXBOYW1lRU4sIGxvb2t1cE5hbWVBUiwgbG9va3VwVmFsdWUpO1xyXG4gICAgICB0aGlzLmVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMucHVzaChvYmplY3RBdHRyaWJ1dGVPcHRpb25zKTtcclxuICAgICAgdGhpcy5lZGl0TGFzdExvb2t1cEluZGV4ICs9IDE7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBhZGRXRlZhcmlhYmxlTG9va3VwaW5FZGl0TW9kZSgpIHtcclxuICAgIGxldCByZXN1bHQ6IGFueSA9IHRoaXMuaW5pdGlhbGl6ZVdGVmFyaWFibGVMb29rdXBPcHRpb25zKGZhbHNlKTtcclxuICAgIHRoaXMuZWRpdFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucyA9IHRoaXMuZWRpdFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5jb25jYXQocmVzdWx0WzBdKTtcclxuICAgIHRoaXMuZWRpdExhc3RMb29rdXBJbmRleCA9IHJlc3VsdFsxXTtcclxuICB9XHJcbiAgLy9XRiBBY3Rpdml0aXRpZXMgRnVuY3Rpb25zXHJcbiAgc2V0QWN0aXZpdHlMaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy5BY3Rpdml0eVBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVdvcmtmbG93QWN0aXZpdHkoKSB7XHJcbiAgICAvLyB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3guTmFtZSA9IFwiV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveFwiXHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94LlZhbHVlID0gdGhpcy5Xb3JrZmxvd0lkXHJcblxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJXb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94XCJcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcIldmSURcIlxyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLkFjdGl2aXR5UGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuQWN0aXZpdHlQYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuQWN0aXZpdHlBcGlVcmwgKyAnR2V0V29ya2Zsb3dBY3Rpdml0eUxpc3RpbmcnO1xyXG4gICAgdGhpcy5BY3Rpdml0eVBhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIl1cclxuICAgIHRoaXMuQWN0aXZpdHlQYWdpbmcuRmlsdGVycyA9IFt0aGlzLldvcmtmbG93QWN0aXZpdHlJZEZpbHRlcl1cclxuICAgIHRoaXMuQWN0aXZpdHlQYWdpbmcuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG5cclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZCA9IGZhbHNlXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgIH0sIDEwKTtcclxuXHJcbiAgICAvL3RoaXMud29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UuTG9hZGRyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAvLyAgbGV0IEFjdGl2aXR5TGlzdCA9IHJlc3VsdCBhcyBhbnlcclxuICAgIC8vICB0aGlzLkFjdGl2aXR5VHlwZUxpc3QgPSBBY3Rpdml0eUxpc3RcclxuXHJcblxyXG4gICAgLy99KVxyXG4gIH1cclxuXHJcbiAgLy9BZGQgQWN0aXZpdHkgV0YgdmFyaWFibGVzXHJcbiAgc2hvd0FkZFdGVmFyaWFibGVzdG9BY3Rpdml0eSh2ZXJzaW9uSUQ6bnVtYmVyLGFjdGl2aXR5SUQ6bnVtYmVyLHdmVmFyaWFibGVzTW9kYWw6YW55KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5hY3Rpdml0eUlEID0gYWN0aXZpdHlJRDtcclxuICAgIHRoaXMuYWN0aXZpdHlXRlZhcmlhYmxlT3B0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5sYXN0QWN0aXZpdHlXRlZhcmlhYmxlSW5kZXggPSAwO1xyXG4gICAgdGhpcy53b3JrZmxvd0FjdGl2aXR5U2VydmljZS5nZXRBY3Rpdml0eVdGVmFyaWFibGVzKHZlcnNpb25JRCwgYWN0aXZpdHlJRCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIGxldCBtb2RlbCA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgdGhpcy5hY3Rpdml0eVZhcmlhYmxlc0xpc3QgPSByZXN1bHRPYmouYWN0aXZpdHlWYXJpYWJsZXNMaXN0O1xyXG5cclxuICAgICAgdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KVxyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRhZGRXRlZhcmlhYmxldG9BY3Rpdml0eU1vZGVsO1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRhZGRXRlZhcmlhYmxldG9BY3Rpdml0eUZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5BY3Rpdml0eVBhZ2luZ1ZpZXdFbGVtZW50O1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMuUGFnaW5nQWN0aW9uTW9kZSA9IFBhZ2luZ0FjdGlvbk1vZGUuVXBkYXRlO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2RlbC5hY3Rpdml0eVZhcmlhYmxlRFRPcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBjdXJyZW50VmFyaWFibGUgPSBtb2RlbC5hY3Rpdml0eVZhcmlhYmxlRFRPc1tpXTtcclxuICAgICAgICBsZXQgb2JqZWN0VmFyaWFibGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICBsZXQgaXNTeXN0ZW06IGJvb2xlYW4gPSBjdXJyZW50VmFyaWFibGUuaXNTeXN0ZW07XHJcblxyXG4gICAgICAgIGxldCB2YXJpYWJsZUlzU3lzdGVtID0gbmV3IFRleHRCb3hPcHRpb25zKCk7Ly9oaWRkZW5cclxuICAgICAgICB2YXJpYWJsZUlzU3lzdGVtLk5hbWUgPSBcInZhcmlhYmxlSXNTeXN0ZW1cIiArIGk7XHJcbiAgICAgICAgdmFyaWFibGVJc1N5c3RlbS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgIHZhcmlhYmxlSXNTeXN0ZW0uVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgIHZhcmlhYmxlSXNTeXN0ZW0uVmFsdWUgPSBpc1N5c3RlbTtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNFbmFibGVkID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkLk5hbWUgPSBcInZhcmlhYmxlSXNFbmFibGVkXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkLlZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlzRW5hYmxlZDtcclxuICAgICAgICB2YXJpYWJsZUlzRW5hYmxlZC5Jc0Rpc2FibGVkID0gaXNTeXN0ZW07XHJcblxyXG4gICAgICAgIC8vaGlkZGVuIGZpZWxkXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuLk5hbWUgPSBcInZhcmlhYmxlSXNFbmFibGVkSGlkZGVuXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuLlZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlzRW5hYmxlZDtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNNYW5kYXRvcnkgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeS5OYW1lID0gXCJ2YXJpYWJsZUlzTWFuZGF0b3J5XCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNNYW5kYXRvcnkuVmFsdWUgPSBjdXJyZW50VmFyaWFibGUuaXNNYW5kYXRvcnk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeS5Jc0Rpc2FibGVkID0gaXNTeXN0ZW07XHJcblxyXG4gICAgICAgIC8vaGlkZGVuIGZpZWxkXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbi5OYW1lID0gXCJ2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4uVmFsdWUgPSBjdXJyZW50VmFyaWFibGUuaXNNYW5kYXRvcnk7XHJcblxyXG4gICAgICAgIGxldCB2YXJpYWJsZUlzVmlzaWJsZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZS5OYW1lID0gXCJ2YXJpYWJsZUlzVmlzaWJsZVwiICsgaTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZS5WYWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pc1Zpc2libGU7XHJcbiAgICAgICAgdmFyaWFibGVJc1Zpc2libGUuSXNEaXNhYmxlZCA9IGlzU3lzdGVtO1xyXG5cclxuICAgICAgICAvL2hpZGRlbiBmaWVsZFxyXG4gICAgICAgIGxldCB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbiA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi5OYW1lID0gXCJ2YXJpYWJsZUlzVmlzaWJsZUhpZGRlblwiICsgaTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi5WYWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pc1Zpc2libGU7XHJcblxyXG4gICAgICAgIG9iamVjdFZhcmlhYmxlT3B0aW9ucy5wdXNoKHZhcmlhYmxlSXNTeXN0ZW0sIHZhcmlhYmxlSXNFbmFibGVkLCB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbiwgdmFyaWFibGVJc01hbmRhdG9yeSwgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbixcclxuICAgICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlLCB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbiwgaXNTeXN0ZW0pO1xyXG5cclxuICAgICAgICBpZiAoaXNTeXN0ZW0pIHtcclxuICAgICAgICAgIGxldCB2YXJpYWJsZU5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS5OYW1lID0gXCJ2YXJpYWJsZU5hbWVcIiArIGk7XHJcbiAgICAgICAgICB2YXJpYWJsZU5hbWUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS5Jc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICB2YXJpYWJsZU5hbWUuVmFsdWUgPSBjdXJyZW50VmFyaWFibGUudmFyaWFibGVOYW1lO1xyXG5cclxuICAgICAgICAgIGxldCB2YXJpYWJsZUlEID0gbmV3IFRleHRCb3hPcHRpb25zKCk7Ly9oaWRkZW5cclxuICAgICAgICAgIHZhcmlhYmxlSUQuTmFtZSA9IFwidmFyaWFibGVJRFwiICsgaTtcclxuICAgICAgICAgIHZhcmlhYmxlSUQuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlSUQuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgdmFyaWFibGVJRC5WYWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pZDtcclxuXHJcbiAgICAgICAgICBvYmplY3RWYXJpYWJsZU9wdGlvbnMucHVzaCh2YXJpYWJsZU5hbWUsIHZhcmlhYmxlSUQpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBsZXQgdmFyaWFibGVJRGRyb3Bkb3duID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgdmFyaWFibGVJRGRyb3Bkb3duLk5hbWUgPSBcInZhcmlhYmxlSURkcm9wZG93blwiO1xyXG4gICAgICAgICAgdmFyaWFibGVJRGRyb3Bkb3duLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgICAgICB2YXJpYWJsZUlEZHJvcGRvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICB2YXJpYWJsZUlEZHJvcGRvd24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICB2YXJpYWJsZUlEZHJvcGRvd24uRGF0YVNvdXJjZSA9IHRoaXMuYWN0aXZpdHlWYXJpYWJsZXNMaXN0O1xyXG4gICAgICAgICAgdmFyaWFibGVJRGRyb3Bkb3duLlNlbGVjdGVkSXRlbXMgPSB0aGlzLmFjdGl2aXR5VmFyaWFibGVzTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBjdXJyZW50VmFyaWFibGUuaWQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdOztcclxuXHJcbiAgICAgICAgICBvYmplY3RWYXJpYWJsZU9wdGlvbnMucHVzaCh2YXJpYWJsZUlEZHJvcGRvd24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMucHVzaChvYmplY3RWYXJpYWJsZU9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMubGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4ICs9IDE7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4od2ZWYXJpYWJsZXNNb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0YWRkV0ZWYXJpYWJsZXRvQWN0aXZpdHlNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm0udmFsdWU7XHJcbiAgICBsZXQgbW9kZWwgPSBuZXcgV0ZBY3Rpdml0eVZhcmlhYmxlc01vZGVsKCk7XHJcbiAgICBtb2RlbC5BY3Rpdml0eUlEID0gdGhpcy5hY3Rpdml0eUlEO1xyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmxhc3RBY3Rpdml0eVdGVmFyaWFibGVJbmRleDsgaisrKSB7XHJcbiAgICAgIGxldCB2YXJpYWJsZXNJc1N5c3RlbSA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc1N5c3RlbVwiICsgal07XHJcbiAgICAgIGlmICh2YXJpYWJsZXNJc1N5c3RlbSA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICBsZXQgdmFyaWFibGVJc0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICAgIGxldCB2YXJpYWJsZUlzTWFuZGF0b3J5OiBib29sZWFuO1xyXG4gICAgICBsZXQgdmFyaWFibGVJc1Zpc2libGU6IGJvb2xlYW47XHJcblxyXG4gICAgICBsZXQgYWN0aXZpdHlWYXJpYWJsZTogV0ZBY3Rpdml0eVZhcmlhYmxlRFRPID0gbmV3IFdGQWN0aXZpdHlWYXJpYWJsZURUTygpO1xyXG5cclxuICAgICAgaWYgKHZhcmlhYmxlc0lzU3lzdGVtKSB7XHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSUQgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSURcIiArIGpdO1xyXG4gICAgICAgIGFjdGl2aXR5VmFyaWFibGUuSUQgPSB2YXJpYWJsZUlEO1xyXG5cclxuICAgICAgICB2YXJpYWJsZUlzRW5hYmxlZCA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc0VuYWJsZWRIaWRkZW5cIiArIGpdO1xyXG4gICAgICAgIHZhcmlhYmxlSXNNYW5kYXRvcnkgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW5cIiArIGpdO1xyXG4gICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzVmlzaWJsZUhpZGRlblwiICsgal07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSUQgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSURkcm9wZG93blwiICsgal07XHJcbiAgICAgICAgYWN0aXZpdHlWYXJpYWJsZS5JRCA9IHZhcmlhYmxlSUQgIT0gbnVsbCA/IE51bWJlcih2YXJpYWJsZUlEKSA6IG51bGw7XHJcblxyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzRW5hYmxlZFwiICsgal07XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeSA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc01hbmRhdG9yeVwiICsgal07XHJcbiAgICAgICAgdmFyaWFibGVJc1Zpc2libGUgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSXNWaXNpYmxlXCIgKyBqXTtcclxuICAgICAgfVxyXG4gICAgICBhY3Rpdml0eVZhcmlhYmxlLklzU3lzdGVtID0gdmFyaWFibGVzSXNTeXN0ZW07XHJcbiAgICAgIGFjdGl2aXR5VmFyaWFibGUuSXNFbmFibGVkID0gdmFyaWFibGVJc0VuYWJsZWQ7XHJcbiAgICAgIGFjdGl2aXR5VmFyaWFibGUuSXNNYW5kYXRvcnkgPSB2YXJpYWJsZUlzTWFuZGF0b3J5O1xyXG4gICAgICBhY3Rpdml0eVZhcmlhYmxlLklzVmlzaWJsZSA9IHZhcmlhYmxlSXNWaXNpYmxlO1xyXG4gICAgICBtb2RlbC5hY3Rpdml0eVZhcmlhYmxlRFRPcy5wdXNoKGFjdGl2aXR5VmFyaWFibGUpO1xyXG4gICAgfVxyXG4gICAgcGFyYW1BcnJheS5wdXNoKG1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuICBnZXRhZGRXRlZhcmlhYmxldG9BY3Rpdml0eUZ1bmN0aW9uID0gKHZhcmlhYmxlc01vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLndvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLmFkZEFjdGl2aXR5V0ZWYXJpYWJsZXModmFyaWFibGVzTW9kZWwpXHJcbiAgfVxyXG4gIGRlbGV0ZUFjdGl2aXR5V0ZWYXJpYWJsZShkZWxldGVkVmFyaWFibGU6IGFueSkge1xyXG4gICAgbGV0IGRlbGV0ZWRWYXJpYWJsZUluZGV4OiBudW1iZXIgPSB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMuaW5kZXhPZihkZWxldGVkVmFyaWFibGUpO1xyXG4gICAgaWYgKGRlbGV0ZWRWYXJpYWJsZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMuc3BsaWNlKGRlbGV0ZWRWYXJpYWJsZUluZGV4LCAxKTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVkVmFyaWFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKGRlbGV0ZWRWYXJpYWJsZVtpXS5OYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBhZGROZXdBY3Rpdml0eVdGVmFyaWFibGUoKSB7XHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLmxhc3RBY3Rpdml0eVdGVmFyaWFibGVJbmRleDtcclxuXHJcbiAgICBsZXQgb2JqZWN0VmFyaWFibGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGxldCB2YXJpYWJsZUlEZHJvcGRvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB2YXJpYWJsZUlEZHJvcGRvd24uTmFtZSA9IFwidmFyaWFibGVJRGRyb3Bkb3duXCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSURkcm9wZG93bi5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB2YXJpYWJsZUlEZHJvcGRvd24uQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLkRhdGFTb3VyY2UgPSB0aGlzLmFjdGl2aXR5VmFyaWFibGVzTGlzdDtcclxuXHJcbiAgICBsZXQgaXNTeXN0ZW06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc1N5c3RlbSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpOy8vaGlkZGVuXHJcbiAgICB2YXJpYWJsZUlzU3lzdGVtLk5hbWUgPSBcInZhcmlhYmxlSXNTeXN0ZW1cIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc1N5c3RlbS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJc1N5c3RlbS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB2YXJpYWJsZUlzU3lzdGVtLlZhbHVlID0gaXNTeXN0ZW07XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNFbmFibGVkID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc0VuYWJsZWQuTmFtZSA9IFwidmFyaWFibGVJc0VuYWJsZWRcIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc0VuYWJsZWQuVmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbi5OYW1lID0gXCJ2YXJpYWJsZUlzRW5hYmxlZEhpZGRlblwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbi5WYWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCB2YXJpYWJsZUlzTWFuZGF0b3J5ID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc01hbmRhdG9yeS5OYW1lID0gXCJ2YXJpYWJsZUlzTWFuZGF0b3J5XCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSXNNYW5kYXRvcnkuVmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbiA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4uTmFtZSA9IFwidmFyaWFibGVJc01hbmRhdG9yeUhpZGRlblwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuLlZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNWaXNpYmxlID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc1Zpc2libGUuTmFtZSA9IFwidmFyaWFibGVJc1Zpc2libGVcIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc1Zpc2libGUuVmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc1Zpc2libGVIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi5OYW1lID0gXCJ2YXJpYWJsZUlzVmlzaWJsZUhpZGRlblwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi5WYWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIG9iamVjdFZhcmlhYmxlT3B0aW9ucy5wdXNoKHZhcmlhYmxlSXNTeXN0ZW0sIHZhcmlhYmxlSXNFbmFibGVkLCB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbiwgdmFyaWFibGVJc01hbmRhdG9yeSwgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbixcclxuICAgICAgdmFyaWFibGVJc1Zpc2libGUsIHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuLCBpc1N5c3RlbSwgdmFyaWFibGVJRGRyb3Bkb3duKTtcclxuXHJcbiAgICB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMucHVzaChvYmplY3RWYXJpYWJsZU9wdGlvbnMpO1xyXG4gICAgdGhpcy5sYXN0QWN0aXZpdHlXRlZhcmlhYmxlSW5kZXggKz0gMTtcclxuICB9XHJcblxyXG4gIC8vT24gZGVzdHJveVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgIDx1bCBuZ2JOYXYgI25hdj1cIm5nYk5hdlwiIGNsYXNzPVwibmF2IG5hdi1zdHJldGNoIG5hdi1saW5lLXRhYnMgbmF2LWxpbmUtdGFicy0yeCBib3JkZXItdHJhbnNwYXJlbnQgZnMtNSBmdy1ib2xkZXJcIj5cclxuICAgICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1hY3RpdmUtcHJpbWFyeSBtcy0wIG1lLTEwIHB5LTVcIiAoY2xpY2spPVwiZ2V0RGV0YWlscygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGV0YWlsc1wiKX19PC9hPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTUgcHgtMCAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhV29ya2Zsb3dEZXRhaWxzLmlzUHVibGlzaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnRuUHVibGlzaFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzaG93UHVibGlzaFdGTW9kYWwoV29ya2Zsb3dEZXRhaWxzLmlkRW5jcnlwdGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHVibGlzaFdvcmtmbG93XCIpfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLTxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcmV2aWV3XCIpfX1cclxuICAgICAgICAgIDwvYT4tLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIkRldGFpbHNGb3JtXCIgKm5nSWY9XCJTaG93V29ya2Zsb3dEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJTeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJEZXRhaWxzRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiUHVibGlzaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkRldGFpbHNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwhLS1QdWJsaXNoIHdvcmtmbG93IGNvbmZpcm1hdGlvbi0tPlxyXG4gICAgICAgICAgICA8QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cInB1Ymxpc2hDb250cm9sTG9hZGVkXCIgW29wdGlvbnNdPVwicHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9uc1wiIGlkPVwicHVibGlzaENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbFwiICNwdWJsaXNoQ29uZmlybWF0aW9uTW9kYWxDb250cm9sPjwvQkJTRi1Db25maXJtYXRpb25Nb2RhbD5cclxuXHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJpbml0aWFsaXplVmVyc2lvbigpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVmVyc2lvbnNcIil9fTwvYT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01IHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJXb3JrZmxvd1ZlcnNpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiBbZ3JvdXBdPVwiV29ya2Zsb3dWZXJzaW9uRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJXb3JrZmxvd0lkVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJXb3JrZmxvd1ZlcnNpb25Gb3JtXCIgW2hpZGRlbl09XCJ0cnVlXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2hhbmdlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ3VycmVudFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hlZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNyZWF0aW9uRGF0ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB2ZXJzaW9uIG9mIFdvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vV29ya2Zsb3dzL1ZlcnNpb25JbmZvJyx2ZXJzaW9uLmlkRW5jcnlwdGVkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrXCI+e3t2ZXJzaW9uLmNoYW5nZVN0cn19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7dmVyc2lvbi5pc0N1cnJlbnR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7dmVyc2lvbi5pc1B1Ymxpc2hlZH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3t2ZXJzaW9uLmNyZWF0aW9uRGF0ZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiV29ya2Zsb3dWZXJzaW9uUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFdvcmtmbG93VmVyc2lvbkxpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiV29ya2Zsb3dWZXJzaW9uUGFnaW5nXCIgW2dyb3VwXT1cIldvcmtmbG93VmVyc2lvbkZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1dvcmtmbG93VmVyc2lvblBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tZW5kOjogV2lkZ2V0cy9BcHBsaWNhdGlvbnMvVXNlci9Qcm9maWxlMy0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1hY3RpdmUtcHJpbWFyeSBtcy0wIG1lLTEwIHB5LTVcIiAoY2xpY2spPVwiaW5pdGlhbGl6ZVdvcmtmbG93VmFyaWFibGVzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd1ZhcmlhYmxlc1wiKX19PC9hPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTUgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIldvcmtmbG93VmFyaWFibGVzZWFyY2hUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJWZXJpc29uSWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiV29ya2Zsb3dWYXJpYWJsZUZvcm1cIiBbaGlkZGVuXT1cInRydWVcIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT1cIkFkZFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0FkZFdvcmtmbG93VmFyaWFibGVNb2RhbChBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIiBmYSBmYS1wbHVzXCI+PC9pPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCIgY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlN5c05hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEYXRhVHlwZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZhcmlhYmxlVHlwZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IFdvcmtmbG93VmFyaWFibGUgb2YgV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e1dvcmtmbG93VmFyaWFibGUubmFtZVN0cn19PC9hPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIhUHJvZHVjdGlvbk1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7V29ya2Zsb3dWYXJpYWJsZS5zeXNOYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e1dvcmtmbG93VmFyaWFibGUuZGF0YVR5cGVJdGVtfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e1dvcmtmbG93VmFyaWFibGUudmFyaWFibGVUeXBlSXRlbX19PC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IGJ0bi1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbChXb3JrZmxvd1ZhcmlhYmxlLmlkLFdvcmtmbG93VmFyaWFibGUuaWRFbmNyeXB0ZWQsIEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cIlByb2R1Y3Rpb25Nb2RlID8gJzQnIDogJzUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFdvcmtmbG93VmFyaWFibGVMaXN0UmVzdWx0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJJc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWRcIiBbb3B0aW9uc109XCJXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiICNXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPCEtLSBBZGQgTW9kYWwgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkFkZFdGVmFyaWFibGVOYW1lXCIgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFQcm9kdWN0aW9uTW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFkZFdGVmFyaWFibGVTeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAoT25DaGFuZ2UpPVwiV0ZWYXJpYWJsZVR5cGVPbkNoYW5nZSgkZXZlbnQsdHJ1ZSlcIiBbb3B0aW9uc109XCJBZGRXRlZhcmlhYmxlRGF0YVR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJBZGRXRlZhcmlhYmxlQ29uc3RhbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwic2hvd0FkZExvb2t1cHNUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyIHRhYmxlLXctY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZUVOXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVBUlwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWYWx1ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYWRkV0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zO2xldCBpPWluZGV4O1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzBdXCIgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblsxXVwiIFtncm91cF09XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMl1cIiBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtXCIgKGNsaWNrKT1cImRlbGV0ZVdGVmFyaWFibGVMb29rdXAob3B0aW9uLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIiBmYSBmYS10cmFzaCBoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ3LTEwMCBidG4gYnRuLXN1Y2Nlc3NcIiAoY2xpY2spPVwiYWRkV0ZWYXJpYWJsZUxvb2t1cGluQWRkTW9kZSgpXCI+QWRkTmV3UmVjb3JkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICNDbG9zZVdvcmtmbG93VmFyaWFibGVNb2RhbCBpZD1cIkNsb3NlV29ya2Zsb3dWYXJpYWJsZU1vZGFsXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtRm9ybT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICBcclxuICAgICAgICAgICAgICA8IS0tRWRpdCBNb2RhbC0tPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjRWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbCBsZXQtbW9kYWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRXRlZhcmlhYmxlTmFtZVwiIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdFdGVmFyaWFibGVTeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgKE9uQ2hhbmdlKT1cIldGVmFyaWFibGVUeXBlT25DaGFuZ2UoJGV2ZW50LGZhbHNlKVwiIFtvcHRpb25zXT1cIkVkaXRXRlZhcmlhYmxlRGF0YVR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiRWRpdFdGVmFyaWFibGVDb25zdGFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwic2hvd0VkaXRMb29rdXBzVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlciB0YWJsZS13LWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVFTlwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lQVJcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVmFsdWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJvcHRpb25bMF1cIiBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMV1cIiBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblsyXVwiIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzNdXCIgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LWRhbmdlciBidG4tc21cIiAoY2xpY2spPVwiZGVsZXRlV0ZWYXJpYWJsZUxvb2t1cChvcHRpb24sZmFsc2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIiBmYSBmYS10cmFzaCBoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ3LTEwMCBidG4gYnRuLXN1Y2Nlc3NcIiAoY2xpY2spPVwiYWRkV0ZWYXJpYWJsZUxvb2t1cGluRWRpdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkTmV3UmVjb3JkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gI0Nsb3NlRWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbCBpZD1cIkNsb3NlRWRpdFdvcmtmbG93VmFyaWFibGVNb2RhbFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtICBtZS0zXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLUZvcm0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgIChjbGljayk9XCJpbml0aWFsaXplV29ya2Zsb3dBY3Rpdml0eSgpXCI+XHJcbiAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dBY3Rpdml0aWVzXCIpfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTUgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJ3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZmlsdGVyc0NvbnRhaW5lclwiIGRhdGEtaXNsb2FkZWQ9XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJXb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJ3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiIFtoaWRkZW5dPVwidHJ1ZVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT1cIkFkZFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL1dvcmtmbG93cy9BZGRBY3Rpdml0eScsVmVyc2lvbklkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzXCI+PC9pPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgbWItOFwiICpuZ0Zvcj1cImxldCB3b3JrZmxvd0FjdGl2aXR5IG9mIEFjdGl2aXR5UGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBiZy1saWdodC1kYXJrIHJvdW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBtLTAgZnMtMiB0ZXh0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7d29ya2Zsb3dBY3Rpdml0eS50eXBlTmFtZVN0cn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIG1lLTIgXCIgKGNsaWNrKT1cInNob3dBZGRXRlZhcmlhYmxlc3RvQWN0aXZpdHkod29ya2Zsb3dBY3Rpdml0eS52ZXJzaW9uSUQsd29ya2Zsb3dBY3Rpdml0eS5pZCx3ZkFjdGl2aXR5VmFyaWFibGVzTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZ2VhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVzXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0bkFkZFwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodC1wcmltYXJ5IGJ0bi1zbSBidG4taWNvbiBtZS0yXCIgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vV29ya2Zsb3dzL0VkaXRBY3Rpdml0eScsd29ya2Zsb3dBY3Rpdml0eS5pZEVuY3J5cHRlZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJ3b3JrZmxvd0FjdGl2aXR5LmlzUHVibGlzaGVkXCIgY2xhc3M9XCJmYXMgZmEtcGVuXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiF3b3JrZmxvd0FjdGl2aXR5LmlzUHVibGlzaGVkXCIgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IGZ3LWJvbGRlciB0ZXh0LWRhcmtcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXRk91dGNvbWVcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIGZ3LWJvbGQgZnMtNSBtdC0xIG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd1ZhcmlhYmxlc1wiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGlkPVwiaG9yaXpvbnRhbG1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtZGFya1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHdvcmtmbG93QWN0aXZpdHkudmFyaWFibGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZ2VhclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLnN5c05hbWV9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd29ya2Zsb3dBY3Rpdml0eS5vdXRjb21lc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWVFTiB9fToge3tpdGVtLm5leHRBY3R2aXR5TmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1lbmQ6OiBDYXJkIGJvZHktLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldEFjdGl2aXR5TGlzdFJlc3VsdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkXCIgW29wdGlvbnNdPVwiQWN0aXZpdHlQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIndvcmtmbG93QWN0aXZpdHlGb3JtXCIgI0FjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjd2ZBY3Rpdml0eVZhcmlhYmxlc01vZGFsIGxldC1tb2RhbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRXb3JrZmxvd1ZhcmlhYmxlc1wiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlciB0YWJsZS13LWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVzXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVuYWJsZWRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTWFuZGF0b3J5XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZpc2libGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWhpZGRlbiBpcyBzeXN0ZW0tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWlmIGlzIHN5c3RtLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbls3XTtlbHNlIHZhcmlhYmxlTmFtZURETDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS12YXJpYXZsZSBuYW1lLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvbls4XVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWhpZGRlbiB2YXJpYWJsZSBpZC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJvcHRpb25bOV1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tdmFyaWF2bGUgbmFtZSBkZGwtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3ZhcmlhYmxlTmFtZURETD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJvcHRpb25bOF1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0taXMgZW5hYmxlZC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvblsxXVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzJdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pcyBtYW5kYXRvcnktLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJvcHRpb25bM11cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvbls0XVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0taXMgdmlzaWJsZS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvbls1XVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzZdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pZiAhIGlzU3lzdGVtLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhb3B0aW9uWzddXCIgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LWRhbmdlciBidG4tc21cIiAoY2xpY2spPVwiZGVsZXRlQWN0aXZpdHlXRlZhcmlhYmxlKG9wdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInctMTAwIGJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJhZGROZXdBY3Rpdml0eVdGVmFyaWFibGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkTmV3UmVjb3JkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtRm9ybT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBcclxuICA8L2Rpdj5cclxuXHJcbiJdfQ==