@bnsights/bbsf-admin-portal 1.1.4 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +6 -2
  2. package/bnsights-bbsf-admin-portal-1.1.6.tgz +0 -0
  3. package/esm2022/lib/Pages/ActiveDirectories/active-directories.component.mjs +1 -1
  4. package/esm2022/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +146 -146
  5. package/esm2022/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +152 -152
  6. package/esm2022/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +1 -1
  7. package/esm2022/lib/Pages/_layout/components/aside/aside.component.mjs +1 -1
  8. package/esm2022/lib/Pages/anonymouslayout/activation/activation.component.mjs +15 -15
  9. package/esm2022/lib/Pages/anonymouslayout/anonymouslayout-routing.module.mjs +1 -1
  10. package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.component.mjs +1 -1
  11. package/esm2022/lib/Pages/anonymouslayout/error/error.component.mjs +7 -7
  12. package/esm2022/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.mjs +12 -12
  13. package/esm2022/lib/Pages/anonymouslayout/login/login.component.mjs +19 -19
  14. package/esm2022/lib/Pages/anonymouslayout/rest-password/rest-password.component.mjs +15 -15
  15. package/esm2022/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +12 -12
  16. package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +102 -102
  17. package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +7 -7
  18. package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +271 -271
  19. package/esm2022/lib/Pages/core/auth.module.mjs +1 -1
  20. package/esm2022/lib/Pages/core/authentication/admin.guard.mjs +1 -1
  21. package/esm2022/lib/Pages/core/authentication/auth.guard.mjs +3 -3
  22. package/esm2022/lib/Pages/departments/department/department.component.mjs +48 -48
  23. package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +32 -32
  24. package/esm2022/lib/Pages/documents/add-document/add-document.component.mjs +52 -52
  25. package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +20 -20
  26. package/esm2022/lib/Pages/documents/document-template-info/document-template-info.component.mjs +100 -100
  27. package/esm2022/lib/Pages/documents/document-templates/document-templates.component.mjs +151 -151
  28. package/esm2022/lib/Pages/documents/edit-document/edit-document.component.mjs +72 -72
  29. package/esm2022/lib/Pages/documents/edit-document-template/edit-document-template.component.mjs +27 -27
  30. package/esm2022/lib/Pages/empty-data/empty-data.component.mjs +1 -1
  31. package/esm2022/lib/Pages/empty-data/empty-data.module.mjs +1 -1
  32. package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +84 -84
  33. package/esm2022/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +1 -1
  34. package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +56 -56
  35. package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +58 -58
  36. package/esm2022/lib/Pages/home/home.component.mjs +7 -7
  37. package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +129 -129
  38. package/esm2022/lib/Pages/jobs/jobs/jobs.component.mjs +14 -14
  39. package/esm2022/lib/Pages/license/license/license.component.mjs +11 -11
  40. package/esm2022/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.mjs +41 -41
  41. package/esm2022/lib/Pages/localizations/localizations.component.mjs +125 -125
  42. package/esm2022/lib/Pages/logs/log/log.component.mjs +11 -11
  43. package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +120 -120
  44. package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +34 -34
  45. package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +83 -83
  46. package/esm2022/lib/Pages/notifications/add-notification/add-notification.component.mjs +35 -35
  47. package/esm2022/lib/Pages/notifications/edit-email/edit-email.component.mjs +53 -53
  48. package/esm2022/lib/Pages/notifications/edit-notification/edit-notification.component.mjs +50 -50
  49. package/esm2022/lib/Pages/notifications/edit-sms/edit-sms.component.mjs +16 -16
  50. package/esm2022/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +20 -20
  51. package/esm2022/lib/Pages/notifications/template-info/template-info.component.mjs +135 -135
  52. package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +186 -186
  53. package/esm2022/lib/Pages/providers/provider/provider.component.mjs +122 -122
  54. package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +120 -120
  55. package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +29 -29
  56. package/esm2022/lib/Pages/roles/permissions/permissions.component.mjs +57 -57
  57. package/esm2022/lib/Pages/roles/permissionsets/permissionsets.component.mjs +79 -79
  58. package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +35 -35
  59. package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +27 -27
  60. package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +27 -27
  61. package/esm2022/lib/Pages/shared/Services/AccountService.service.mjs +1 -1
  62. package/esm2022/lib/Pages/shared/Services/ActiveDirectoryService.service.mjs +1 -1
  63. package/esm2022/lib/Pages/shared/Services/AnonymousLayoutService.service.mjs +1 -1
  64. package/esm2022/lib/Pages/shared/Services/DepartmentService.service.mjs +1 -1
  65. package/esm2022/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.mjs +1 -1
  66. package/esm2022/lib/Pages/shared/Services/DocumentTemplateService.service.mjs +1 -1
  67. package/esm2022/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.mjs +1 -1
  68. package/esm2022/lib/Pages/shared/Services/HelpCenterService.service.mjs +1 -1
  69. package/esm2022/lib/Pages/shared/Services/ImpersonationRuleService.service.mjs +1 -1
  70. package/esm2022/lib/Pages/shared/Services/JobsService.service.mjs +1 -1
  71. package/esm2022/lib/Pages/shared/Services/LicenseService.service.mjs +1 -1
  72. package/esm2022/lib/Pages/shared/Services/LogsService.mjs +1 -1
  73. package/esm2022/lib/Pages/shared/Services/LookupGroupsService.service.mjs +1 -1
  74. package/esm2022/lib/Pages/shared/Services/LookupService.service.mjs +1 -1
  75. package/esm2022/lib/Pages/shared/Services/PermissionSetService.service.mjs +1 -1
  76. package/esm2022/lib/Pages/shared/Services/PermissionsService.service.mjs +1 -1
  77. package/esm2022/lib/Pages/shared/Services/PublicHolidayService.service.mjs +1 -1
  78. package/esm2022/lib/Pages/shared/Services/SectorService.service.mjs +1 -1
  79. package/esm2022/lib/Pages/shared/Services/TemplateService.service.mjs +1 -1
  80. package/esm2022/lib/Pages/shared/Services/WorkflowActivityService.service.mjs +1 -1
  81. package/esm2022/lib/Pages/shared/Services/WorkflowService.service.mjs +1 -1
  82. package/esm2022/lib/Pages/shared/Services/WorkflowVariablesService.service.mjs +1 -1
  83. package/esm2022/lib/Pages/shared/Services/localizationsService.service .mjs +1 -1
  84. package/esm2022/lib/Pages/shared/Services/provider.service.mjs +1 -1
  85. package/esm2022/lib/Pages/shared/components/external-url/external-url.component.mjs +36 -36
  86. package/esm2022/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +74 -74
  87. package/esm2022/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.mjs +8 -8
  88. package/esm2022/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.mjs +10 -10
  89. package/esm2022/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.mjs +89 -89
  90. package/esm2022/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.mjs +7 -7
  91. package/esm2022/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.mjs +9 -9
  92. package/esm2022/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.mjs +10 -10
  93. package/esm2022/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.mjs +222 -222
  94. package/esm2022/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.mjs +7 -7
  95. package/esm2022/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.mjs +257 -257
  96. package/esm2022/lib/Pages/shared/components/survey/survey-info/preview/preview.component.mjs +25 -25
  97. package/esm2022/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.mjs +24 -24
  98. package/esm2022/lib/Pages/shared/components/survey/survey-info/result-question/result.component.mjs +6 -6
  99. package/esm2022/lib/Pages/shared/components/survey/survey-info/survey-info.component.mjs +52 -52
  100. package/esm2022/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.mjs +16 -16
  101. package/esm2022/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.mjs +20 -20
  102. package/esm2022/lib/Pages/shared/components/survey/survey.component.mjs +69 -69
  103. package/esm2022/lib/Pages/shared/components/survey-form/survey-form.component.mjs +180 -180
  104. package/esm2022/lib/Pages/shared/models/SurveyModels/survey-question-option.mjs +3 -3
  105. package/esm2022/lib/Pages/users/users.component.mjs +190 -190
  106. package/esm2022/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.mjs +176 -176
  107. package/esm2022/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.mjs +364 -364
  108. package/esm2022/lib/Pages/workflows/instance-info/instance-info.component.mjs +67 -67
  109. package/esm2022/lib/Pages/workflows/tabs/tabs.component.mjs +227 -227
  110. package/esm2022/lib/Pages/workflows/version-info/version-info.component.mjs +31 -31
  111. package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +56 -56
  112. package/fesm2022/bnsights-bbsf-admin-portal.mjs +5187 -5187
  113. package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -1
  114. package/lib/Pages/ActiveDirectories/active-directories.component.d.ts +0 -1
  115. package/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.d.ts +2 -2
  116. package/lib/Pages/workflows/tabs/tabs.component.d.ts +1 -1
  117. package/package.json +3 -3
  118. package/esm2022/bnsights-test-test-admin-portal.mjs +0 -5
  119. package/fesm2022/bnsights-test-test-admin-portal.mjs +0 -27181
  120. package/fesm2022/bnsights-test-test-admin-portal.mjs.map +0 -1
@@ -111,19 +111,19 @@ export class JobsComponent {
111
111
  this.isDeletedFilterLoaded = false;
112
112
  // TextBox inti
113
113
  this.searchTextBox = new TextBoxOptions();
114
- this.searchTextBox.Name = "searchTextBox";
115
- this.searchTextBox.HideLabel = true;
116
- this.searchTextBox.Type = InputType.Text;
117
- this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
114
+ this.searchTextBox.name = "searchTextBox";
115
+ this.searchTextBox.hideLabel = true;
116
+ this.searchTextBox.type = InputType.Text;
117
+ this.searchTextBox.placeholder = this.utilityService.getResourceValue("SearchByName");
118
118
  this.enqueuedTextInputFilter = new FilterItem();
119
119
  this.enqueuedTextInputFilter.FormControlName = "searchTextBox";
120
120
  this.enqueuedTextInputFilter.ActionParameterName = "searchText";
121
121
  this.enqueuedTextInputFilter.IsFormControl = true;
122
122
  this.enqueuedTextInputFilter.FilterType = FilterType.TextBox;
123
123
  this.enqueuedPaging = new PagingOptions();
124
- this.enqueuedPaging.ActionPostURL = this.ApiUrl + 'GetQueueListByFilter';
125
- this.enqueuedPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
126
- this.enqueuedPaging.Filters = [this.enqueuedTextInputFilter];
124
+ this.enqueuedPaging.actionPostURL = this.ApiUrl + 'GetQueueListByFilter';
125
+ this.enqueuedPaging.onKeyPressFiltersControlNames = ["searchTextBox"];
126
+ this.enqueuedPaging.filters = [this.enqueuedTextInputFilter];
127
127
  this.isEnqueuedFilterLoaded = true;
128
128
  }
129
129
  loadScheduledJobs() {
@@ -134,7 +134,7 @@ export class JobsComponent {
134
134
  this.isFailedFilterLoaded = false;
135
135
  this.isDeletedFilterLoaded = false;
136
136
  this.scheduledPaging = new PagingOptions();
137
- this.scheduledPaging.ActionPostURL = this.ApiUrl + 'GetScheduledListByFilter';
137
+ this.scheduledPaging.actionPostURL = this.ApiUrl + 'GetScheduledListByFilter';
138
138
  this.isScheduledFilterLoaded = true;
139
139
  }
140
140
  loadProcessingJobs() {
@@ -145,7 +145,7 @@ export class JobsComponent {
145
145
  this.isFailedFilterLoaded = false;
146
146
  this.isDeletedFilterLoaded = false;
147
147
  this.processingPaging = new PagingOptions();
148
- this.processingPaging.ActionPostURL = this.ApiUrl + 'GetProcessingListByFilter';
148
+ this.processingPaging.actionPostURL = this.ApiUrl + 'GetProcessingListByFilter';
149
149
  this.isProcessingFilterLoaded = true;
150
150
  }
151
151
  loadSucceededJobs() {
@@ -156,7 +156,7 @@ export class JobsComponent {
156
156
  this.isFailedFilterLoaded = false;
157
157
  this.isDeletedFilterLoaded = false;
158
158
  this.succeededPaging = new PagingOptions();
159
- this.succeededPaging.ActionPostURL = this.ApiUrl + 'GetSucceededListByFilter';
159
+ this.succeededPaging.actionPostURL = this.ApiUrl + 'GetSucceededListByFilter';
160
160
  this.isSucceededFilterLoaded = true;
161
161
  }
162
162
  loadFailedJobs() {
@@ -167,7 +167,7 @@ export class JobsComponent {
167
167
  this.isFailedFilterLoaded = false;
168
168
  this.isDeletedFilterLoaded = false;
169
169
  this.failedPaging = new PagingOptions();
170
- this.failedPaging.ActionPostURL = this.ApiUrl + 'GetFailedListByFilter';
170
+ this.failedPaging.actionPostURL = this.ApiUrl + 'GetFailedListByFilter';
171
171
  this.isFailedFilterLoaded = true;
172
172
  }
173
173
  loadDeletedJobs() {
@@ -178,7 +178,7 @@ export class JobsComponent {
178
178
  this.isFailedFilterLoaded = false;
179
179
  this.isDeletedFilterLoaded = false;
180
180
  this.deletedPaging = new PagingOptions();
181
- this.deletedPaging.ActionPostURL = this.ApiUrl + 'GetDeletedListByFilter';
181
+ this.deletedPaging.actionPostURL = this.ApiUrl + 'GetDeletedListByFilter';
182
182
  this.isDeletedFilterLoaded = true;
183
183
  }
184
184
  /**FunctionName:filterEnqueuedList*/
@@ -196,7 +196,7 @@ export class JobsComponent {
196
196
  this.requestHandlerService.destroyHandler();
197
197
  }
198
198
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: JobsComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i2.EnvironmentService }, { token: i3.JobsService }, { token: i2.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
199
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: JobsComponent, selector: "lib-jobs", viewQueries: [{ propertyName: "enqueuedInput", first: true, predicate: ["EnqueuedPagingViewElement"], descendants: true }, { propertyName: "scheduledInput", first: true, predicate: ["ScheduledPagingViewElement"], descendants: true }, { propertyName: "processingInput", first: true, predicate: ["ProcessingPagingViewElement"], descendants: true }, { propertyName: "succeededInput", first: true, predicate: ["SucceededPagingViewElement"], descendants: true }, { propertyName: "failedInput", first: true, predicate: ["FailedPagingViewElement"], descendants: true }, { propertyName: "deletedInput", first: true, predicate: ["DeletedPagingViewElement"], 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)=\"loadEnqueuedJobs()\">{{utilityService.getResourceValue(\"Enqueued\")}}({{jobCountsModel.Enqueued}})</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-title\" *ngIf=\"isEnqueuedFilterLoaded\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" (OnChange)=\"filterEnqueuedList($event)\" [group]=\"enqueuedForm\"></BBSF-TextBox>\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(\"Job\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"State\")}}</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 job of filteredEnqueuedPagingResult\">\r\n <td class=\"text-dark\">{{job.job}}</td>\r\n <td>{{job.state}}</td>\r\n </tr>\r\n <tr *ngIf=\"filteredEnqueuedPagingResult.length == 0\">\r\n <td colspan=\"2\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setEnqueuedListResult($event)\" *ngIf=\"isEnqueuedFilterLoaded\"\r\n [options]=\"enqueuedPaging\" [group]=\"enqueuedForm\" #EnqueuedPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"loadScheduledJobs()\">{{utilityService.getResourceValue(\"Scheduled\")}}({{jobCountsModel.Scheduled}})</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\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(\"Job\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Enqueued\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Scheduled\")}}</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 job of scheduledPagingResult\">\r\n <td>{{job.job}}</td>\r\n <td>{{job.enqueueAt}}</td>\r\n <td>{{job.scheduledAt}}</td>\r\n </tr>\r\n <tr *ngIf=\"scheduledPagingResult.length == 0\">\r\n <td colspan=\"3\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setScheduledListResult($event)\" *ngIf=\"isScheduledFilterLoaded\"\r\n [options]=\"scheduledPaging\" [group]=\"scheduledForm\" #ScheduledPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"loadProcessingJobs()\">{{utilityService.getResourceValue(\"Processing\")}}({{jobCountsModel.Processing}})</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\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(\"Job\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"StartedAt\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ServerId\")}}</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 job of processingPagingResult\">\r\n <td>{{job.job}}</td>\r\n <td>{{job.startedAt}}</td>\r\n <td>{{job.serverId}}</td>\r\n </tr>\r\n <tr *ngIf=\"processingPagingResult.length == 0\">\r\n <td colspan=\"3\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setProcessingListResult($event)\" *ngIf=\"isProcessingFilterLoaded\"\r\n [options]=\"processingPaging\" [group]=\"processingForm\" #ProcessingPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"loadSucceededJobs()\">{{utilityService.getResourceValue(\"Succeeded\")}}({{jobCountsModel.Succeeded}})</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-body py-3 px-0\">\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-150\">{{utilityService.getResourceValue(\"Job\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"SucceededAt\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"TotalDuration\")}}</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 job of succeededPagingResult\">\r\n <td>{{job.job}}</td>\r\n <td>{{job.succeededAt}}</td>\r\n <td>{{job.totalDuration}}</td>\r\n </tr>\r\n <tr *ngIf=\"succeededPagingResult.length == 0\">\r\n <td colspan=\"3\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setSucceededListResult($event)\" *ngIf=\"isSucceededFilterLoaded\"\r\n [options]=\"succeededPaging\" [group]=\"succeededForm\" #SucceededPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"loadFailedJobs()\">{{utilityService.getResourceValue(\"Failed\")}}({{jobCountsModel.Failed}})</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-body py-3 px-0\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"FailedAt\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Job\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"ErrorMessage\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"ErrorMessage\")}}</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 job of failedPagingResult\">\r\n <td>{{job.failedAt}}</td>\r\n <td>{{job.job}}</td>\r\n <td>{{job.reason}}</td>\r\n <td class=\"failed-job-details directionLtr\" *ngIf=\"job.inFailedState\">\r\n <div class=\"expandable\">\r\n <p> {{job.exceptionType}}</p>\r\n <p class=\"text-muted\">\r\n {{job.exceptionMessage}}\r\n </p>\r\n\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"failedPagingResult.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 </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setFailedListResult($event)\" *ngIf=\"isFailedFilterLoaded\" [options]=\"failedPaging\"\r\n [group]=\"failedForm\" #FailedPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"loadDeletedJobs()\">{{utilityService.getResourceValue(\"Deleted\")}}({{jobCountsModel.Deleted}})</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-body py-3 px-0\">\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(\"Job\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"DeletedAt\")}}</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 job of deletedPagingResult\">\r\n <td>{{job.job}}</td>\r\n <td>{{job.deletedAt}}</td>\r\n </tr>\r\n <tr *ngIf=\"deletedPagingResult.length == 0\">\r\n <td colspan=\"2\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setDeletedListResult($event)\" *ngIf=\"isDeletedFilterLoaded\"\r\n [options]=\"deletedPaging\" [group]=\"deletedForm\" #DeletedPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\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\r\n", styles: [".card-deck .card{align-items:center;justify-content:center;text-align:center;border-radius:4px;background:#f8f9fa;cursor:pointer}.card-title{margin-bottom:0;font-size:16px}.filter-container.text-dark .form-group label{color:#3f4254}.kt-portlet.custom-portlet{box-shadow:none;background:#f8f9fa;margin-top:35px}.card-deck .card .card-block{padding:20px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "component", type: i6.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange", "OnBlur"] }, { kind: "component", type: i6.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "directive", type: i7.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i7.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i7.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i7.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i7.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i7.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i7.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "component", type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
199
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: JobsComponent, selector: "lib-jobs", viewQueries: [{ propertyName: "enqueuedInput", first: true, predicate: ["EnqueuedPagingViewElement"], descendants: true }, { propertyName: "scheduledInput", first: true, predicate: ["ScheduledPagingViewElement"], descendants: true }, { propertyName: "processingInput", first: true, predicate: ["ProcessingPagingViewElement"], descendants: true }, { propertyName: "succeededInput", first: true, predicate: ["SucceededPagingViewElement"], descendants: true }, { propertyName: "failedInput", first: true, predicate: ["FailedPagingViewElement"], descendants: true }, { propertyName: "deletedInput", first: true, predicate: ["DeletedPagingViewElement"], 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)=\"loadEnqueuedJobs()\">{{utilityService.getResourceValue(\"Enqueued\")}}({{jobCountsModel.Enqueued}})</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-title\" *ngIf=\"isEnqueuedFilterLoaded\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" (OnChange)=\"filterEnqueuedList($event)\" [group]=\"enqueuedForm\"></BBSF-TextBox>\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(\"Job\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"State\")}}</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 job of filteredEnqueuedPagingResult\">\r\n <td class=\"text-dark\">{{job.job}}</td>\r\n <td>{{job.state}}</td>\r\n </tr>\r\n <tr *ngIf=\"filteredEnqueuedPagingResult.length == 0\">\r\n <td colspan=\"2\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setEnqueuedListResult($event)\" *ngIf=\"isEnqueuedFilterLoaded\"\r\n [options]=\"enqueuedPaging\" [group]=\"enqueuedForm\" #EnqueuedPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"loadScheduledJobs()\">{{utilityService.getResourceValue(\"Scheduled\")}}({{jobCountsModel.Scheduled}})</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\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(\"Job\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Enqueued\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Scheduled\")}}</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 job of scheduledPagingResult\">\r\n <td>{{job.job}}</td>\r\n <td>{{job.enqueueAt}}</td>\r\n <td>{{job.scheduledAt}}</td>\r\n </tr>\r\n <tr *ngIf=\"scheduledPagingResult.length == 0\">\r\n <td colspan=\"3\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setScheduledListResult($event)\" *ngIf=\"isScheduledFilterLoaded\"\r\n [options]=\"scheduledPaging\" [group]=\"scheduledForm\" #ScheduledPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"loadProcessingJobs()\">{{utilityService.getResourceValue(\"Processing\")}}({{jobCountsModel.Processing}})</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\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(\"Job\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"StartedAt\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ServerId\")}}</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 job of processingPagingResult\">\r\n <td>{{job.job}}</td>\r\n <td>{{job.startedAt}}</td>\r\n <td>{{job.serverId}}</td>\r\n </tr>\r\n <tr *ngIf=\"processingPagingResult.length == 0\">\r\n <td colspan=\"3\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setProcessingListResult($event)\" *ngIf=\"isProcessingFilterLoaded\"\r\n [options]=\"processingPaging\" [group]=\"processingForm\" #ProcessingPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"loadSucceededJobs()\">{{utilityService.getResourceValue(\"Succeeded\")}}({{jobCountsModel.Succeeded}})</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-body py-3 px-0\">\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-150\">{{utilityService.getResourceValue(\"Job\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"SucceededAt\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"TotalDuration\")}}</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 job of succeededPagingResult\">\r\n <td>{{job.job}}</td>\r\n <td>{{job.succeededAt}}</td>\r\n <td>{{job.totalDuration}}</td>\r\n </tr>\r\n <tr *ngIf=\"succeededPagingResult.length == 0\">\r\n <td colspan=\"3\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setSucceededListResult($event)\" *ngIf=\"isSucceededFilterLoaded\"\r\n [options]=\"succeededPaging\" [group]=\"succeededForm\" #SucceededPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"loadFailedJobs()\">{{utilityService.getResourceValue(\"Failed\")}}({{jobCountsModel.Failed}})</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-body py-3 px-0\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"FailedAt\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Job\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"ErrorMessage\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"ErrorMessage\")}}</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 job of failedPagingResult\">\r\n <td>{{job.failedAt}}</td>\r\n <td>{{job.job}}</td>\r\n <td>{{job.reason}}</td>\r\n <td class=\"failed-job-details directionLtr\" *ngIf=\"job.inFailedState\">\r\n <div class=\"expandable\">\r\n <p> {{job.exceptionType}}</p>\r\n <p class=\"text-muted\">\r\n {{job.exceptionMessage}}\r\n </p>\r\n\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"failedPagingResult.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 </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setFailedListResult($event)\" *ngIf=\"isFailedFilterLoaded\" [options]=\"failedPaging\"\r\n [group]=\"failedForm\" #FailedPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"loadDeletedJobs()\">{{utilityService.getResourceValue(\"Deleted\")}}({{jobCountsModel.Deleted}})</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-body py-3 px-0\">\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(\"Job\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"DeletedAt\")}}</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 job of deletedPagingResult\">\r\n <td>{{job.job}}</td>\r\n <td>{{job.deletedAt}}</td>\r\n </tr>\r\n <tr *ngIf=\"deletedPagingResult.length == 0\">\r\n <td colspan=\"2\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setDeletedListResult($event)\" *ngIf=\"isDeletedFilterLoaded\"\r\n [options]=\"deletedPaging\" [group]=\"deletedForm\" #DeletedPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\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\r\n", styles: [".card-deck .card{align-items:center;justify-content:center;text-align:center;border-radius:4px;background:#f8f9fa;cursor:pointer}.card-title{margin-bottom:0;font-size:16px}.filter-container.text-dark .form-group label{color:#3f4254}.kt-portlet.custom-portlet{box-shadow:none;background:#f8f9fa;margin-top:35px}.card-deck .card .card-block{padding:20px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "component", type: i6.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i6.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "directive", type: i7.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i7.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i7.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i7.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i7.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i7.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i7.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "component", type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
200
200
  }
201
201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: JobsComponent, decorators: [{
202
202
  type: Component,
@@ -220,4 +220,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
220
220
  type: ViewChild,
221
221
  args: ['DeletedPagingViewElement', { static: false }]
222
222
  }] } });
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9icy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2pvYnMvam9icy9qb2JzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvam9icy9qb2JzL2pvYnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBbUIsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7Ozs7QUFTOUUsTUFBTSxPQUFPLGFBQWE7SUEyRHhCLFlBQ1UsZUFBZ0MsRUFDakMsY0FBOEIsRUFDN0Isa0JBQXNDLEVBQ3RDLFdBQXdCLEVBQ3hCLHFCQUE0QztRQUo1QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQTlEdEQsbUJBQW1CO1FBQ25CLFdBQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQTtRQUloQyxtQkFBYyxHQUFtQixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3RELG1CQUFjLEdBQVks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QUFLLEVBQUU7Z0JBT0csWUFBWTtzQkFBckUsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJJdGVtLCBGaWx0ZXJUeXBlLCBJbnB1dFR5cGUsIFBhZ2luZ0NvbXBvbmVudCwgUGFnaW5nT3B0aW9ucywgVGV4dEJveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSm9iQ291bnRzTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL0pvYk1vZGVscy9Kb2JDb3VudHNNb2RlbCc7XHJcbmltcG9ydCB7IEpvYnNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvU2VydmljZXMvSm9ic1NlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1qb2JzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vam9icy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vam9icy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEpvYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBBcGlVcmwgPSB0aGlzLmpvYnNTZXJ2aWNlLkFwaVVybFxyXG5cclxuICAvL1BhZ2UgQ29udGVudFxyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIGpvYkNvdW50c01vZGVsOiBKb2JDb3VudHNNb2RlbCA9IG5ldyBKb2JDb3VudHNNb2RlbCgpO1xyXG4gIHByb2R1Y3Rpb25Nb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTdGF0aXN0aWNzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAvL0ZpbHRlciBhbmQgcGFnaW5nIEVucXVldWVkIEpvYnMgY29tcG9uZW50XHJcbiAgZW5xdWV1ZWRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2hvd0VucXVldWVkRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5xdWV1ZWRQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRFbnF1ZXVlZFBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBlbnF1ZXVlZFBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBlbnF1ZXVlZFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBpc0VucXVldWVkRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnRW5xdWV1ZWRQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBlbnF1ZXVlZElucHV0OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcbiAgLy9GaWx0ZXIgYW5kIHBhZ2luZyBTY2hlZHVsZWQgSm9icyBjb21wb25lbnRcclxuICBzY2hlZHVsZWRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2NoZWR1bGVkUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIHNjaGVkdWxlZFBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBpc1NjaGVkdWxlZEZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ1NjaGVkdWxlZFBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNjaGVkdWxlZElucHV0OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcbiAgLy9GaWx0ZXIgYW5kIHBhZ2luZyBQcm9jZXNzaW5nIEpvYnMgY29tcG9uZW50XHJcbiAgcHJvY2Vzc2luZ0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBwcm9jZXNzaW5nUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIHByb2Nlc3NpbmdQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgaXNQcm9jZXNzaW5nRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnUHJvY2Vzc2luZ1BhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHByb2Nlc3NpbmdJbnB1dDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgU3VjY2VlZGVkIEpvYnMgY29tcG9uZW50XHJcbiAgc3VjY2VlZGVkRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHN1Y2NlZWRlZFBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBzdWNjZWVkZWRQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgaXNTdWNjZWVkZWRGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdTdWNjZWVkZWRQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzdWNjZWVkZWRJbnB1dDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgIEZhaWxlZCBKb2JzIGNvbXBvbmVudFxyXG4gIGZhaWxlZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBmYWlsZWRQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgZmFpbGVkUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIGlzRmFpbGVkRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnRmFpbGVkUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgZmFpbGVkSW5wdXQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuICAvL0ZpbHRlciBhbmQgcGFnaW5nIERlbGV0ZWQgSm9icyBjb21wb25lbnRcclxuICBkZWxldGVkRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGRlbGV0ZWRQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgZGVsZXRlZFBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBpc0RlbGV0ZWRGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdEZWxldGVkUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgZGVsZXRlZElucHV0OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6IEVudmlyb25tZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgam9ic1NlcnZpY2U6IEpvYnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vUGFnZSBoZWFkZXIgKGJyZWFkY3J1bWIgYW5kIHRpdGxlKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkpvYnNcIilcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIHRoaXMucHJvZHVjdGlvbk1vZGUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpXHJcbiAgICAvL2luaXRpYWxpemUgcGFnZVxyXG4gICAgdGhpcy5sb2FkU3RhdGlzdGljcygpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLyBFbnF1ZXVlZCBQYWdpbmcgZnVuY3Rpb25zXHJcblxyXG4gIHNldEVucXVldWVkTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuZW5xdWV1ZWRQYWdpbmdSZXN1bHQgPSByZXN1bHRcclxuICAgIHRoaXMuZmlsdGVyZWRFbnF1ZXVlZFBhZ2luZ1Jlc3VsdCA9IHRoaXMuZW5xdWV1ZWRQYWdpbmdSZXN1bHRcclxuICB9XHJcblxyXG5cclxuICAvL1NjaGVkdWxlZCBQYWdpbmcgZnVuY3Rpb25zXHJcblxyXG4gIHNldFNjaGVkdWxlZExpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnNjaGVkdWxlZFBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gIH1cclxuXHJcbiAgLy9Qcm9jZXNzaW5nIFBhZ2luZyBmdW5jdGlvbnNcclxuXHJcbiAgc2V0UHJvY2Vzc2luZ0xpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnByb2Nlc3NpbmdQYWdpbmdSZXN1bHQgPSByZXN1bHRcclxuXHJcbiAgfVxyXG5cclxuICAvL1N1Y2NlZWRlZCBQYWdpbmcgZnVuY3Rpb25zXHJcblxyXG4gIHNldFN1Y2NlZWRlZExpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnN1Y2NlZWRlZFBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gIH1cclxuICAvL0ZhaWxlZCBQYWdpbmcgZnVuY3Rpb25zXHJcblxyXG4gIHNldEZhaWxlZExpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLmZhaWxlZFBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gIH1cclxuXHJcbiAgLy9EZWxldGVkIFBhZ2luZyBmdW5jdGlvbnNcclxuXHJcbiAgc2V0RGVsZXRlZExpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLmRlbGV0ZWRQYWdpbmdSZXN1bHQgPSByZXN1bHRcclxuXHJcbiAgfVxyXG5cclxuICAvL2luaXRpYWxpemUgcGFnZVxyXG5cclxuICBsb2FkU3RhdGlzdGljcygpIHtcclxuICAgIHRoaXMuam9ic1NlcnZpY2UuTG9hZFN0YXRpc3RpY3MoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgTGlzdHMgPSByZXN1bHQgYXMgYW55XHJcbiAgICAgIHRoaXMuam9iQ291bnRzTW9kZWwuRW5xdWV1ZWQgPSBMaXN0cy5lbnF1ZXVlZFxyXG4gICAgICB0aGlzLmpvYkNvdW50c01vZGVsLlN1Y2NlZWRlZCA9IExpc3RzLnN1Y2NlZWRlZFxyXG4gICAgICB0aGlzLmpvYkNvdW50c01vZGVsLlNjaGVkdWxlZCA9IExpc3RzLnNjaGVkdWxlZFxyXG4gICAgICB0aGlzLmpvYkNvdW50c01vZGVsLlByb2Nlc3NpbmcgPSBMaXN0cy5wcm9jZXNzaW5nXHJcbiAgICAgIHRoaXMuam9iQ291bnRzTW9kZWwuRmFpbGVkID0gTGlzdHMuZmFpbGVkXHJcbiAgICAgIHRoaXMuam9iQ291bnRzTW9kZWwuRGVsZXRlZCA9IExpc3RzLmRlbGV0ZWRcclxuICAgICAgdGhpcy5pc1N0YXRpc3RpY3NMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcbiAgbG9hZEVucXVldWVkSm9icygpIHtcclxuICAgIHRoaXMuaXNFbnF1ZXVlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NjaGVkdWxlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmdGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTdWNjZWVkZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNGYWlsZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEZWxldGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgLy8gVGV4dEJveCBpbnRpXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5OYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guUGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIilcclxuXHJcbiAgICB0aGlzLmVucXVldWVkVGV4dElucHV0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuZW5xdWV1ZWRUZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuZW5xdWV1ZWRUZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiXHJcbiAgICB0aGlzLmVucXVldWVkVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLmVucXVldWVkVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLmVucXVldWVkUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuZW5xdWV1ZWRQYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuQXBpVXJsICsgJ0dldFF1ZXVlTGlzdEJ5RmlsdGVyJztcclxuICAgIHRoaXMuZW5xdWV1ZWRQYWdpbmcuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJzZWFyY2hUZXh0Qm94XCJdXHJcbiAgICB0aGlzLmVucXVldWVkUGFnaW5nLkZpbHRlcnMgPSBbdGhpcy5lbnF1ZXVlZFRleHRJbnB1dEZpbHRlcl1cclxuXHJcbiAgICB0aGlzLmlzRW5xdWV1ZWRGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG5cclxuICB9XHJcblxyXG5cclxuICBsb2FkU2NoZWR1bGVkSm9icygpIHtcclxuICAgIHRoaXMuaXNFbnF1ZXVlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NjaGVkdWxlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmdGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTdWNjZWVkZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNGYWlsZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEZWxldGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zY2hlZHVsZWRQYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5zY2hlZHVsZWRQYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuQXBpVXJsICsgJ0dldFNjaGVkdWxlZExpc3RCeUZpbHRlcic7XHJcbiAgICB0aGlzLmlzU2NoZWR1bGVkRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbG9hZFByb2Nlc3NpbmdKb2JzKCkge1xyXG4gICAgdGhpcy5pc0VucXVldWVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2NoZWR1bGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzUHJvY2Vzc2luZ0ZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1N1Y2NlZWRlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0ZhaWxlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0RlbGV0ZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnByb2Nlc3NpbmdQYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5wcm9jZXNzaW5nUGFnaW5nLkFjdGlvblBvc3RVUkwgPSB0aGlzLkFwaVVybCArICdHZXRQcm9jZXNzaW5nTGlzdEJ5RmlsdGVyJztcclxuICAgIHRoaXMuaXNQcm9jZXNzaW5nRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuICBsb2FkU3VjY2VlZGVkSm9icygpIHtcclxuICAgIHRoaXMuaXNFbnF1ZXVlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NjaGVkdWxlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmdGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTdWNjZWVkZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNGYWlsZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEZWxldGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zdWNjZWVkZWRQYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5zdWNjZWVkZWRQYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuQXBpVXJsICsgJ0dldFN1Y2NlZWRlZExpc3RCeUZpbHRlcic7XHJcbiAgICB0aGlzLmlzU3VjY2VlZGVkRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbG9hZEZhaWxlZEpvYnMoKSB7XHJcbiAgICB0aGlzLmlzRW5xdWV1ZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY2hlZHVsZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNQcm9jZXNzaW5nRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU3VjY2VlZGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzRmFpbGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzRGVsZXRlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmFpbGVkUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuZmFpbGVkUGFnaW5nLkFjdGlvblBvc3RVUkwgPSB0aGlzLkFwaVVybCArICdHZXRGYWlsZWRMaXN0QnlGaWx0ZXInO1xyXG4gICAgdGhpcy5pc0ZhaWxlZEZpbHRlckxvYWRlZCA9IHRydWU7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGxvYWREZWxldGVkSm9icygpIHtcclxuICAgIHRoaXMuaXNFbnF1ZXVlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NjaGVkdWxlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmdGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTdWNjZWVkZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNGYWlsZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEZWxldGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5kZWxldGVkUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuZGVsZXRlZFBhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy5BcGlVcmwgKyAnR2V0RGVsZXRlZExpc3RCeUZpbHRlcic7XHJcbiAgICB0aGlzLmlzRGVsZXRlZEZpbHRlckxvYWRlZCA9IHRydWU7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqRnVuY3Rpb25OYW1lOmZpbHRlckVucXVldWVkTGlzdCovXHJcbiAgLyoqRGVjbGFyYXRpb246ZnVuY3Rpb24gdG8gZmlsdGVyIEVucXVldWVkTGlzdCBpbiBjbGllbnQtc2lkZSAqL1xyXG4gIC8qKlBhcmFtZXRlcnM6Ki9cclxuICAvKipzZWFyY2hWYWx1ZTogY3VycmVudCB2YWx1ZSBvZiBzZWFyY2ggYm94Ki9cclxuICBmaWx0ZXJFbnF1ZXVlZExpc3Qoc2VhcmNoVmFsdWUpIHtcclxuICAgIGlmIChzZWFyY2hWYWx1ZSlcclxuICAgICAgdGhpcy5maWx0ZXJlZEVucXVldWVkUGFnaW5nUmVzdWx0ID0gdGhpcy5lbnF1ZXVlZFBhZ2luZ1Jlc3VsdC5maWx0ZXIoaXRlbSA9PiBpdGVtLmpvYi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5maWx0ZXJlZEVucXVldWVkUGFnaW5nUmVzdWx0ID0gdGhpcy5lbnF1ZXVlZFBhZ2luZ1Jlc3VsdFxyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vLy9EZXN0cm95IE9ic2VydmFibGUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+IDwvYmxvY2stdWk+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICA8dWwgbmdiTmF2ICNuYXY9XCJuZ2JOYXZcIiBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzIG5hdi1saW5lLXRhYnMtMnggYm9yZGVyLXRyYW5zcGFyZW50IGZzLTUgZnctYm9sZGVyXCI+XHJcbiAgICAgICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJsb2FkRW5xdWV1ZWRKb2JzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbnF1ZXVlZFwiKX19KHt7am9iQ291bnRzTW9kZWwuRW5xdWV1ZWR9fSk8L2E+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wICBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIiAqbmdJZj1cImlzRW5xdWV1ZWRGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJzZWFyY2hUZXh0Qm94XCIgIChPbkNoYW5nZSk9XCJmaWx0ZXJFbnF1ZXVlZExpc3QoJGV2ZW50KVwiIFtncm91cF09XCJlbnF1ZXVlZEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSm9iXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdGF0ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGpvYiBvZiBmaWx0ZXJlZEVucXVldWVkUGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e2pvYi5qb2J9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tqb2Iuc3RhdGV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgICpuZ0lmPVwiZmlsdGVyZWRFbnF1ZXVlZFBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldEVucXVldWVkTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJpc0VucXVldWVkRmlsdGVyTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZW5xdWV1ZWRQYWdpbmdcIiBbZ3JvdXBdPVwiZW5xdWV1ZWRGb3JtXCIgI0VucXVldWVkUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1hY3RpdmUtcHJpbWFyeSBtcy0wIG1lLTEwIHB5LTVcIiAoY2xpY2spPVwibG9hZFNjaGVkdWxlZEpvYnMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNjaGVkdWxlZFwiKX19KHt7am9iQ291bnRzTW9kZWwuU2NoZWR1bGVkfX0pPC9hPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tYmVnaW46OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJKb2JcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVucXVldWVkXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTY2hlZHVsZWRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBqb2Igb2Ygc2NoZWR1bGVkUGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tqb2Iuam9ifX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7am9iLmVucXVldWVBdH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5zY2hlZHVsZWRBdH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAgKm5nSWY9XCJzY2hlZHVsZWRQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFNjaGVkdWxlZExpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiaXNTY2hlZHVsZWRGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzY2hlZHVsZWRQYWdpbmdcIiBbZ3JvdXBdPVwic2NoZWR1bGVkRm9ybVwiICNTY2hlZHVsZWRQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJsb2FkUHJvY2Vzc2luZ0pvYnMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb2Nlc3NpbmdcIil9fSh7e2pvYkNvdW50c01vZGVsLlByb2Nlc3Npbmd9fSk8L2E+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkpvYlwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU3RhcnRlZEF0XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZXJ2ZXJJZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGpvYiBvZiBwcm9jZXNzaW5nUGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tqb2Iuam9ifX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7am9iLnN0YXJ0ZWRBdH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5zZXJ2ZXJJZH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cInByb2Nlc3NpbmdQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFByb2Nlc3NpbmdMaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cImlzUHJvY2Vzc2luZ0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInByb2Nlc3NpbmdQYWdpbmdcIiBbZ3JvdXBdPVwicHJvY2Vzc2luZ0Zvcm1cIiAjUHJvY2Vzc2luZ1BhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImxvYWRTdWNjZWVkZWRKb2JzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdWNjZWVkZWRcIil9fSh7e2pvYkNvdW50c01vZGVsLlN1Y2NlZWRlZH19KTwvYT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSm9iXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU3VjY2VlZGVkQXRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUb3RhbER1cmF0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgam9iIG9mIHN1Y2NlZWRlZFBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7am9iLmpvYn19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5zdWNjZWVkZWRBdH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi50b3RhbER1cmF0aW9ufX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwic3VjY2VlZGVkUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0U3VjY2VlZGVkTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJpc1N1Y2NlZWRlZEZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInN1Y2NlZWRlZFBhZ2luZ1wiIFtncm91cF09XCJzdWNjZWVkZWRGb3JtXCIgI1N1Y2NlZWRlZFBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImxvYWRGYWlsZWRKb2JzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJGYWlsZWRcIil9fSh7e2pvYkNvdW50c01vZGVsLkZhaWxlZH19KTwvYT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJGYWlsZWRBdFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkpvYlwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVycm9yTWVzc2FnZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVycm9yTWVzc2FnZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGpvYiBvZiBmYWlsZWRQYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5mYWlsZWRBdH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5qb2J9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tqb2IucmVhc29ufX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZmFpbGVkLWpvYi1kZXRhaWxzIGRpcmVjdGlvbkx0clwiICpuZ0lmPVwiam9iLmluRmFpbGVkU3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4cGFuZGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4ge3tqb2IuZXhjZXB0aW9uVHlwZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tqb2IuZXhjZXB0aW9uTWVzc2FnZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiZmFpbGVkUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRGYWlsZWRMaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cImlzRmFpbGVkRmlsdGVyTG9hZGVkXCIgW29wdGlvbnNdPVwiZmFpbGVkUGFnaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImZhaWxlZEZvcm1cIiAjRmFpbGVkUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1hY3RpdmUtcHJpbWFyeSBtcy0wIG1lLTEwIHB5LTVcIiAoY2xpY2spPVwibG9hZERlbGV0ZWRKb2JzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVkXCIpfX0oe3tqb2JDb3VudHNNb2RlbC5EZWxldGVkfX0pPC9hPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSm9iXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVkQXRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBqb2Igb2YgZGVsZXRlZFBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7am9iLmpvYn19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5kZWxldGVkQXR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgICpuZ0lmPVwiZGVsZXRlZFBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0RGVsZXRlZExpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiaXNEZWxldGVkRmlsdGVyTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZGVsZXRlZFBhZ2luZ1wiIFtncm91cF09XCJkZWxldGVkRm9ybVwiICNEZWxldGVkUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbiBcclxuXHJcbiJdfQ==
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9icy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2pvYnMvam9icy9qb2JzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvam9icy9qb2JzL2pvYnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBbUIsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7Ozs7QUFTOUUsTUFBTSxPQUFPLGFBQWE7SUEyRHhCLFlBQ1UsZUFBZ0MsRUFDakMsY0FBOEIsRUFDN0Isa0JBQXNDLEVBQ3RDLFdBQXdCLEVBQ3hCLHFCQUE0QztRQUo1QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQTlEdEQsbUJBQW1CO1FBQ25CLFdBQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQTtRQUloQyxtQkFBYyxHQUFtQixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3RELG1CQUFjLEdBQVks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QUFLLEVBQUU7Z0JBT0csWUFBWTtzQkFBckUsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJJdGVtLCBGaWx0ZXJUeXBlLCBJbnB1dFR5cGUsIFBhZ2luZ0NvbXBvbmVudCwgUGFnaW5nT3B0aW9ucywgVGV4dEJveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSm9iQ291bnRzTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL0pvYk1vZGVscy9Kb2JDb3VudHNNb2RlbCc7XHJcbmltcG9ydCB7IEpvYnNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvU2VydmljZXMvSm9ic1NlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1qb2JzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vam9icy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vam9icy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEpvYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBBcGlVcmwgPSB0aGlzLmpvYnNTZXJ2aWNlLkFwaVVybFxyXG5cclxuICAvL1BhZ2UgQ29udGVudFxyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIGpvYkNvdW50c01vZGVsOiBKb2JDb3VudHNNb2RlbCA9IG5ldyBKb2JDb3VudHNNb2RlbCgpO1xyXG4gIHByb2R1Y3Rpb25Nb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTdGF0aXN0aWNzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAvL0ZpbHRlciBhbmQgcGFnaW5nIEVucXVldWVkIEpvYnMgY29tcG9uZW50XHJcbiAgZW5xdWV1ZWRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2hvd0VucXVldWVkRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5xdWV1ZWRQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRFbnF1ZXVlZFBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBlbnF1ZXVlZFBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBlbnF1ZXVlZFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBpc0VucXVldWVkRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnRW5xdWV1ZWRQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBlbnF1ZXVlZElucHV0OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcbiAgLy9GaWx0ZXIgYW5kIHBhZ2luZyBTY2hlZHVsZWQgSm9icyBjb21wb25lbnRcclxuICBzY2hlZHVsZWRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2NoZWR1bGVkUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIHNjaGVkdWxlZFBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBpc1NjaGVkdWxlZEZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ1NjaGVkdWxlZFBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNjaGVkdWxlZElucHV0OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcbiAgLy9GaWx0ZXIgYW5kIHBhZ2luZyBQcm9jZXNzaW5nIEpvYnMgY29tcG9uZW50XHJcbiAgcHJvY2Vzc2luZ0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBwcm9jZXNzaW5nUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIHByb2Nlc3NpbmdQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgaXNQcm9jZXNzaW5nRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnUHJvY2Vzc2luZ1BhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHByb2Nlc3NpbmdJbnB1dDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgU3VjY2VlZGVkIEpvYnMgY29tcG9uZW50XHJcbiAgc3VjY2VlZGVkRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHN1Y2NlZWRlZFBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBzdWNjZWVkZWRQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgaXNTdWNjZWVkZWRGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdTdWNjZWVkZWRQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzdWNjZWVkZWRJbnB1dDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgIEZhaWxlZCBKb2JzIGNvbXBvbmVudFxyXG4gIGZhaWxlZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBmYWlsZWRQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgZmFpbGVkUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIGlzRmFpbGVkRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnRmFpbGVkUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgZmFpbGVkSW5wdXQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuICAvL0ZpbHRlciBhbmQgcGFnaW5nIERlbGV0ZWQgSm9icyBjb21wb25lbnRcclxuICBkZWxldGVkRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGRlbGV0ZWRQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgZGVsZXRlZFBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBpc0RlbGV0ZWRGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdEZWxldGVkUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgZGVsZXRlZElucHV0OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6IEVudmlyb25tZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgam9ic1NlcnZpY2U6IEpvYnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vUGFnZSBoZWFkZXIgKGJyZWFkY3J1bWIgYW5kIHRpdGxlKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkpvYnNcIilcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIHRoaXMucHJvZHVjdGlvbk1vZGUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpXHJcbiAgICAvL2luaXRpYWxpemUgcGFnZVxyXG4gICAgdGhpcy5sb2FkU3RhdGlzdGljcygpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLyBFbnF1ZXVlZCBQYWdpbmcgZnVuY3Rpb25zXHJcblxyXG4gIHNldEVucXVldWVkTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuZW5xdWV1ZWRQYWdpbmdSZXN1bHQgPSByZXN1bHRcclxuICAgIHRoaXMuZmlsdGVyZWRFbnF1ZXVlZFBhZ2luZ1Jlc3VsdCA9IHRoaXMuZW5xdWV1ZWRQYWdpbmdSZXN1bHRcclxuICB9XHJcblxyXG5cclxuICAvL1NjaGVkdWxlZCBQYWdpbmcgZnVuY3Rpb25zXHJcblxyXG4gIHNldFNjaGVkdWxlZExpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnNjaGVkdWxlZFBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gIH1cclxuXHJcbiAgLy9Qcm9jZXNzaW5nIFBhZ2luZyBmdW5jdGlvbnNcclxuXHJcbiAgc2V0UHJvY2Vzc2luZ0xpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnByb2Nlc3NpbmdQYWdpbmdSZXN1bHQgPSByZXN1bHRcclxuXHJcbiAgfVxyXG5cclxuICAvL1N1Y2NlZWRlZCBQYWdpbmcgZnVuY3Rpb25zXHJcblxyXG4gIHNldFN1Y2NlZWRlZExpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnN1Y2NlZWRlZFBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gIH1cclxuICAvL0ZhaWxlZCBQYWdpbmcgZnVuY3Rpb25zXHJcblxyXG4gIHNldEZhaWxlZExpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLmZhaWxlZFBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gIH1cclxuXHJcbiAgLy9EZWxldGVkIFBhZ2luZyBmdW5jdGlvbnNcclxuXHJcbiAgc2V0RGVsZXRlZExpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLmRlbGV0ZWRQYWdpbmdSZXN1bHQgPSByZXN1bHRcclxuXHJcbiAgfVxyXG5cclxuICAvL2luaXRpYWxpemUgcGFnZVxyXG5cclxuICBsb2FkU3RhdGlzdGljcygpIHtcclxuICAgIHRoaXMuam9ic1NlcnZpY2UuTG9hZFN0YXRpc3RpY3MoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgTGlzdHMgPSByZXN1bHQgYXMgYW55XHJcbiAgICAgIHRoaXMuam9iQ291bnRzTW9kZWwuRW5xdWV1ZWQgPSBMaXN0cy5lbnF1ZXVlZFxyXG4gICAgICB0aGlzLmpvYkNvdW50c01vZGVsLlN1Y2NlZWRlZCA9IExpc3RzLnN1Y2NlZWRlZFxyXG4gICAgICB0aGlzLmpvYkNvdW50c01vZGVsLlNjaGVkdWxlZCA9IExpc3RzLnNjaGVkdWxlZFxyXG4gICAgICB0aGlzLmpvYkNvdW50c01vZGVsLlByb2Nlc3NpbmcgPSBMaXN0cy5wcm9jZXNzaW5nXHJcbiAgICAgIHRoaXMuam9iQ291bnRzTW9kZWwuRmFpbGVkID0gTGlzdHMuZmFpbGVkXHJcbiAgICAgIHRoaXMuam9iQ291bnRzTW9kZWwuRGVsZXRlZCA9IExpc3RzLmRlbGV0ZWRcclxuICAgICAgdGhpcy5pc1N0YXRpc3RpY3NMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcbiAgbG9hZEVucXVldWVkSm9icygpIHtcclxuICAgIHRoaXMuaXNFbnF1ZXVlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NjaGVkdWxlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmdGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTdWNjZWVkZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNGYWlsZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEZWxldGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgLy8gVGV4dEJveCBpbnRpXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5uYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5oaWRlTGFiZWwgPSB0cnVlXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gucGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIilcclxuXHJcbiAgICB0aGlzLmVucXVldWVkVGV4dElucHV0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuZW5xdWV1ZWRUZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuZW5xdWV1ZWRUZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiXHJcbiAgICB0aGlzLmVucXVldWVkVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLmVucXVldWVkVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLmVucXVldWVkUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuZW5xdWV1ZWRQYWdpbmcuYWN0aW9uUG9zdFVSTCA9IHRoaXMuQXBpVXJsICsgJ0dldFF1ZXVlTGlzdEJ5RmlsdGVyJztcclxuICAgIHRoaXMuZW5xdWV1ZWRQYWdpbmcub25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJzZWFyY2hUZXh0Qm94XCJdXHJcbiAgICB0aGlzLmVucXVldWVkUGFnaW5nLmZpbHRlcnMgPSBbdGhpcy5lbnF1ZXVlZFRleHRJbnB1dEZpbHRlcl1cclxuXHJcbiAgICB0aGlzLmlzRW5xdWV1ZWRGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG5cclxuICB9XHJcblxyXG5cclxuICBsb2FkU2NoZWR1bGVkSm9icygpIHtcclxuICAgIHRoaXMuaXNFbnF1ZXVlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NjaGVkdWxlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmdGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTdWNjZWVkZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNGYWlsZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEZWxldGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zY2hlZHVsZWRQYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5zY2hlZHVsZWRQYWdpbmcuYWN0aW9uUG9zdFVSTCA9IHRoaXMuQXBpVXJsICsgJ0dldFNjaGVkdWxlZExpc3RCeUZpbHRlcic7XHJcbiAgICB0aGlzLmlzU2NoZWR1bGVkRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbG9hZFByb2Nlc3NpbmdKb2JzKCkge1xyXG4gICAgdGhpcy5pc0VucXVldWVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2NoZWR1bGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzUHJvY2Vzc2luZ0ZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1N1Y2NlZWRlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0ZhaWxlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0RlbGV0ZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnByb2Nlc3NpbmdQYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5wcm9jZXNzaW5nUGFnaW5nLmFjdGlvblBvc3RVUkwgPSB0aGlzLkFwaVVybCArICdHZXRQcm9jZXNzaW5nTGlzdEJ5RmlsdGVyJztcclxuICAgIHRoaXMuaXNQcm9jZXNzaW5nRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuICBsb2FkU3VjY2VlZGVkSm9icygpIHtcclxuICAgIHRoaXMuaXNFbnF1ZXVlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NjaGVkdWxlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmdGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTdWNjZWVkZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNGYWlsZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEZWxldGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zdWNjZWVkZWRQYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5zdWNjZWVkZWRQYWdpbmcuYWN0aW9uUG9zdFVSTCA9IHRoaXMuQXBpVXJsICsgJ0dldFN1Y2NlZWRlZExpc3RCeUZpbHRlcic7XHJcbiAgICB0aGlzLmlzU3VjY2VlZGVkRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbG9hZEZhaWxlZEpvYnMoKSB7XHJcbiAgICB0aGlzLmlzRW5xdWV1ZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTY2hlZHVsZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNQcm9jZXNzaW5nRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU3VjY2VlZGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzRmFpbGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzRGVsZXRlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmFpbGVkUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuZmFpbGVkUGFnaW5nLmFjdGlvblBvc3RVUkwgPSB0aGlzLkFwaVVybCArICdHZXRGYWlsZWRMaXN0QnlGaWx0ZXInO1xyXG4gICAgdGhpcy5pc0ZhaWxlZEZpbHRlckxvYWRlZCA9IHRydWU7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGxvYWREZWxldGVkSm9icygpIHtcclxuICAgIHRoaXMuaXNFbnF1ZXVlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NjaGVkdWxlZEZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmdGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTdWNjZWVkZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNGYWlsZWRGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEZWxldGVkRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5kZWxldGVkUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuZGVsZXRlZFBhZ2luZy5hY3Rpb25Qb3N0VVJMID0gdGhpcy5BcGlVcmwgKyAnR2V0RGVsZXRlZExpc3RCeUZpbHRlcic7XHJcbiAgICB0aGlzLmlzRGVsZXRlZEZpbHRlckxvYWRlZCA9IHRydWU7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqRnVuY3Rpb25OYW1lOmZpbHRlckVucXVldWVkTGlzdCovXHJcbiAgLyoqRGVjbGFyYXRpb246ZnVuY3Rpb24gdG8gZmlsdGVyIEVucXVldWVkTGlzdCBpbiBjbGllbnQtc2lkZSAqL1xyXG4gIC8qKlBhcmFtZXRlcnM6Ki9cclxuICAvKipzZWFyY2hWYWx1ZTogY3VycmVudCB2YWx1ZSBvZiBzZWFyY2ggYm94Ki9cclxuICBmaWx0ZXJFbnF1ZXVlZExpc3Qoc2VhcmNoVmFsdWUpIHtcclxuICAgIGlmIChzZWFyY2hWYWx1ZSlcclxuICAgICAgdGhpcy5maWx0ZXJlZEVucXVldWVkUGFnaW5nUmVzdWx0ID0gdGhpcy5lbnF1ZXVlZFBhZ2luZ1Jlc3VsdC5maWx0ZXIoaXRlbSA9PiBpdGVtLmpvYi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5maWx0ZXJlZEVucXVldWVkUGFnaW5nUmVzdWx0ID0gdGhpcy5lbnF1ZXVlZFBhZ2luZ1Jlc3VsdFxyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vLy9EZXN0cm95IE9ic2VydmFibGUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+IDwvYmxvY2stdWk+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICA8dWwgbmdiTmF2ICNuYXY9XCJuZ2JOYXZcIiBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzIG5hdi1saW5lLXRhYnMtMnggYm9yZGVyLXRyYW5zcGFyZW50IGZzLTUgZnctYm9sZGVyXCI+XHJcbiAgICAgICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJsb2FkRW5xdWV1ZWRKb2JzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbnF1ZXVlZFwiKX19KHt7am9iQ291bnRzTW9kZWwuRW5xdWV1ZWR9fSk8L2E+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wICBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIiAqbmdJZj1cImlzRW5xdWV1ZWRGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJzZWFyY2hUZXh0Qm94XCIgIChPbkNoYW5nZSk9XCJmaWx0ZXJFbnF1ZXVlZExpc3QoJGV2ZW50KVwiIFtncm91cF09XCJlbnF1ZXVlZEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSm9iXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdGF0ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGpvYiBvZiBmaWx0ZXJlZEVucXVldWVkUGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e2pvYi5qb2J9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tqb2Iuc3RhdGV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgICpuZ0lmPVwiZmlsdGVyZWRFbnF1ZXVlZFBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldEVucXVldWVkTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJpc0VucXVldWVkRmlsdGVyTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZW5xdWV1ZWRQYWdpbmdcIiBbZ3JvdXBdPVwiZW5xdWV1ZWRGb3JtXCIgI0VucXVldWVkUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1hY3RpdmUtcHJpbWFyeSBtcy0wIG1lLTEwIHB5LTVcIiAoY2xpY2spPVwibG9hZFNjaGVkdWxlZEpvYnMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNjaGVkdWxlZFwiKX19KHt7am9iQ291bnRzTW9kZWwuU2NoZWR1bGVkfX0pPC9hPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tYmVnaW46OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJKb2JcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVucXVldWVkXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTY2hlZHVsZWRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBqb2Igb2Ygc2NoZWR1bGVkUGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tqb2Iuam9ifX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7am9iLmVucXVldWVBdH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5zY2hlZHVsZWRBdH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAgKm5nSWY9XCJzY2hlZHVsZWRQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFNjaGVkdWxlZExpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiaXNTY2hlZHVsZWRGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzY2hlZHVsZWRQYWdpbmdcIiBbZ3JvdXBdPVwic2NoZWR1bGVkRm9ybVwiICNTY2hlZHVsZWRQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJsb2FkUHJvY2Vzc2luZ0pvYnMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb2Nlc3NpbmdcIil9fSh7e2pvYkNvdW50c01vZGVsLlByb2Nlc3Npbmd9fSk8L2E+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkpvYlwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU3RhcnRlZEF0XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZXJ2ZXJJZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGpvYiBvZiBwcm9jZXNzaW5nUGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tqb2Iuam9ifX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7am9iLnN0YXJ0ZWRBdH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5zZXJ2ZXJJZH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cInByb2Nlc3NpbmdQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFByb2Nlc3NpbmdMaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cImlzUHJvY2Vzc2luZ0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInByb2Nlc3NpbmdQYWdpbmdcIiBbZ3JvdXBdPVwicHJvY2Vzc2luZ0Zvcm1cIiAjUHJvY2Vzc2luZ1BhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImxvYWRTdWNjZWVkZWRKb2JzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdWNjZWVkZWRcIil9fSh7e2pvYkNvdW50c01vZGVsLlN1Y2NlZWRlZH19KTwvYT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSm9iXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU3VjY2VlZGVkQXRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUb3RhbER1cmF0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgam9iIG9mIHN1Y2NlZWRlZFBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7am9iLmpvYn19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5zdWNjZWVkZWRBdH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi50b3RhbER1cmF0aW9ufX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwic3VjY2VlZGVkUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0U3VjY2VlZGVkTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJpc1N1Y2NlZWRlZEZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInN1Y2NlZWRlZFBhZ2luZ1wiIFtncm91cF09XCJzdWNjZWVkZWRGb3JtXCIgI1N1Y2NlZWRlZFBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIG5nYk5hdkl0ZW0gY2xhc3M9XCJuYXYtaXRlbSBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImxvYWRGYWlsZWRKb2JzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJGYWlsZWRcIil9fSh7e2pvYkNvdW50c01vZGVsLkZhaWxlZH19KTwvYT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMyBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJGYWlsZWRBdFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkpvYlwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVycm9yTWVzc2FnZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVycm9yTWVzc2FnZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGpvYiBvZiBmYWlsZWRQYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5mYWlsZWRBdH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5qb2J9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tqb2IucmVhc29ufX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZmFpbGVkLWpvYi1kZXRhaWxzIGRpcmVjdGlvbkx0clwiICpuZ0lmPVwiam9iLmluRmFpbGVkU3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4cGFuZGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4ge3tqb2IuZXhjZXB0aW9uVHlwZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tqb2IuZXhjZXB0aW9uTWVzc2FnZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiZmFpbGVkUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRGYWlsZWRMaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cImlzRmFpbGVkRmlsdGVyTG9hZGVkXCIgW29wdGlvbnNdPVwiZmFpbGVkUGFnaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImZhaWxlZEZvcm1cIiAjRmFpbGVkUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmsgdGV4dC1hY3RpdmUtcHJpbWFyeSBtcy0wIG1lLTEwIHB5LTVcIiAoY2xpY2spPVwibG9hZERlbGV0ZWRKb2JzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVkXCIpfX0oe3tqb2JDb3VudHNNb2RlbC5EZWxldGVkfX0pPC9hPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSm9iXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVkQXRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBqb2Igb2YgZGVsZXRlZFBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7am9iLmpvYn19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2pvYi5kZWxldGVkQXR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgICpuZ0lmPVwiZGVsZXRlZFBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0RGVsZXRlZExpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiaXNEZWxldGVkRmlsdGVyTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZGVsZXRlZFBhZ2luZ1wiIFtncm91cF09XCJkZWxldGVkRm9ybVwiICNEZWxldGVkUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbiBcclxuXHJcbiJdfQ==