@bnsights/bbsf-admin-portal 1.0.0 → 1.0.5

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 (155) hide show
  1. package/bnsights-bbsf-admin-portal-1.0.5.tgz +0 -0
  2. package/bundles/bnsights-bbsf-admin-portal.umd.js +19694 -20386
  3. package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
  4. package/esm2015/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.js +2 -2
  5. package/esm2015/lib/Pages/account/account-routing.module.js +3 -1
  6. package/esm2015/lib/Pages/account/account.component.js +15 -6
  7. package/esm2015/lib/Pages/account/account.module.js +16 -8
  8. package/esm2015/lib/Pages/account/forgot-password/forgot-password.component.js +48 -0
  9. package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +392 -387
  10. package/esm2015/lib/Pages/core/authentication/auth.service.js +1 -2
  11. package/esm2015/lib/Pages/departments/department/department.component.js +59 -98
  12. package/esm2015/lib/Pages/departments/department-info/department-info.component.js +85 -94
  13. package/esm2015/lib/Pages/departments/departments.module.js +4 -1
  14. package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +224 -223
  15. package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +137 -146
  16. package/esm2015/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.js +136 -153
  17. package/esm2015/lib/Pages/home/home.component.js +32 -26
  18. package/esm2015/lib/Pages/home/home.module.js +5 -10
  19. package/esm2015/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.js +336 -317
  20. package/esm2015/lib/Pages/jobs/jobs/jobs.component.js +168 -227
  21. package/esm2015/lib/Pages/license/license/license.component.js +68 -99
  22. package/esm2015/lib/Pages/localizations/localizations.component.js +378 -341
  23. package/esm2015/lib/Pages/logs/log/log.component.js +18 -27
  24. package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +297 -288
  25. package/esm2015/lib/Pages/lookups/lookup-group/lookup-group.component.js +143 -165
  26. package/esm2015/lib/Pages/lookups/lookup-item/lookup-item.component.js +234 -233
  27. package/esm2015/lib/Pages/lookups/lookups-routing.module.js +2 -2
  28. package/esm2015/lib/Pages/notifications/add/add.component.js +83 -76
  29. package/esm2015/lib/Pages/notifications/edit/edit.component.js +60 -63
  30. package/esm2015/lib/Pages/notifications/edit-email/edit-email.component.js +128 -126
  31. package/esm2015/lib/Pages/notifications/edit-sms/edit-sms.component.js +87 -85
  32. package/esm2015/lib/Pages/notifications/master-layouts/master-layouts.component.js +57 -58
  33. package/esm2015/lib/Pages/notifications/notifications-routing.module.js +1 -3
  34. package/esm2015/lib/Pages/notifications/notifications.module.js +3 -4
  35. package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +232 -228
  36. package/esm2015/lib/Pages/notifications/templates/templates.component.js +347 -310
  37. package/esm2015/lib/Pages/providers/provider/provider.component.js +54 -52
  38. package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +268 -270
  39. package/esm2015/lib/Pages/roles/permission-set-info/permission-set-info.component.js +136 -152
  40. package/esm2015/lib/Pages/roles/permissions/permissions.component.js +182 -218
  41. package/esm2015/lib/Pages/roles/permissionsets/permissionsets.component.js +219 -254
  42. package/esm2015/lib/Pages/sectors/department-info/department-info.component.js +134 -142
  43. package/esm2015/lib/Pages/sectors/sector/sector.component.js +127 -144
  44. package/esm2015/lib/Pages/sectors/sector-info/sector-info.component.js +123 -139
  45. package/esm2015/lib/Pages/shared/Enums/ConfigurationScope.js +8 -0
  46. package/esm2015/lib/Pages/shared/Enums/ConfigurationType.js +8 -0
  47. package/esm2015/lib/Pages/shared/Enums/ConfigurationValueSource.js +6 -0
  48. package/esm2015/lib/Pages/shared/Enums/ParticipantType.js +8 -0
  49. package/esm2015/lib/Pages/shared/Services/AccountService.service.js +21 -0
  50. package/esm2015/lib/Pages/shared/Services/ConfigurationsService.service.js +15 -12
  51. package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +5 -8
  52. package/esm2015/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.js +10 -9
  53. package/esm2015/lib/Pages/shared/Services/HelpCenterService.service.js +10 -7
  54. package/esm2015/lib/Pages/shared/Services/ImpersonationRuleService.service.js +14 -8
  55. package/esm2015/lib/Pages/shared/Services/LicenseService.service.js +3 -3
  56. package/esm2015/lib/Pages/shared/Services/LogsService.js +1 -1
  57. package/esm2015/lib/Pages/shared/Services/LookupGroupsService.service.js +11 -5
  58. package/esm2015/lib/Pages/shared/Services/LookupService.service.js +31 -15
  59. package/esm2015/lib/Pages/shared/Services/PermissionSetService.service.js +18 -8
  60. package/esm2015/lib/Pages/shared/Services/PermissionsService.service.js +12 -9
  61. package/esm2015/lib/Pages/shared/Services/PublicHolidayService.service.js +9 -3
  62. package/esm2015/lib/Pages/shared/Services/SectorService.service.js +18 -13
  63. package/esm2015/lib/Pages/shared/Services/TemplateService.service.js +36 -29
  64. package/esm2015/lib/Pages/shared/Services/localizationsService.service .js +23 -13
  65. package/esm2015/lib/Pages/shared/Services/provider.service.js +5 -7
  66. package/esm2015/lib/Pages/shared/Services/userService.service.js +10 -2
  67. package/esm2015/lib/Pages/shared/models/AccountModels/forgotPasswordModel.js +6 -0
  68. package/esm2015/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.js +1 -1
  69. package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.js +1 -1
  70. package/esm2015/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.js +1 -1
  71. package/esm2015/lib/Pages/shared/models/Lookups/LookupItem.js +1 -1
  72. package/esm2015/lib/Pages/shared/models/Lookups/LookupModel.js +1 -2
  73. package/esm2015/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.js +1 -1
  74. package/esm2015/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.js +1 -1
  75. package/esm2015/lib/Pages/users/users.component.js +398 -409
  76. package/esm2015/lib/masterlayout-routing.module.js +5 -4
  77. package/esm2015/lib/masterlayout.component.js +22 -32
  78. package/esm2015/lib/masterlayout.module.js +25 -19
  79. package/fesm2015/bnsights-bbsf-admin-portal.js +17295 -17401
  80. package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
  81. package/lib/Pages/account/account.component.d.ts +5 -1
  82. package/lib/Pages/account/account.module.d.ts +8 -6
  83. package/lib/Pages/account/forgot-password/forgot-password.component.d.ts +20 -0
  84. package/lib/Pages/configurations/configuration/configuration.component.d.ts +39 -31
  85. package/lib/Pages/departments/department/department.component.d.ts +19 -15
  86. package/lib/Pages/departments/department-info/department-info.component.d.ts +31 -28
  87. package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +34 -32
  88. package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +31 -34
  89. package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +30 -35
  90. package/lib/Pages/home/home.component.d.ts +4 -4
  91. package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +43 -42
  92. package/lib/Pages/jobs/jobs/jobs.component.d.ts +56 -62
  93. package/lib/Pages/license/license/license.component.d.ts +25 -23
  94. package/lib/Pages/localizations/localizations.component.d.ts +77 -65
  95. package/lib/Pages/logs/log/log.component.d.ts +7 -11
  96. package/lib/Pages/lookups/lookup/lookup.component.d.ts +64 -59
  97. package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +44 -45
  98. package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +62 -56
  99. package/lib/Pages/notifications/add/add.component.d.ts +13 -11
  100. package/lib/Pages/notifications/edit/edit.component.d.ts +14 -14
  101. package/lib/Pages/notifications/edit-email/edit-email.component.d.ts +18 -20
  102. package/lib/Pages/notifications/edit-sms/edit-sms.component.d.ts +15 -16
  103. package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +24 -25
  104. package/lib/Pages/notifications/notifications.module.d.ts +15 -16
  105. package/lib/Pages/notifications/template-info/template-info.component.d.ts +32 -32
  106. package/lib/Pages/notifications/templates/templates.component.d.ts +54 -46
  107. package/lib/Pages/providers/provider/provider.component.d.ts +13 -12
  108. package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +29 -27
  109. package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +39 -40
  110. package/lib/Pages/roles/permissions/permissions.component.d.ts +49 -54
  111. package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +53 -55
  112. package/lib/Pages/sectors/department-info/department-info.component.d.ts +41 -44
  113. package/lib/Pages/sectors/sector/sector.component.d.ts +35 -33
  114. package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +40 -44
  115. package/lib/Pages/shared/Enums/ConfigurationScope.d.ts +5 -0
  116. package/lib/Pages/shared/Enums/ConfigurationType.d.ts +6 -0
  117. package/lib/Pages/shared/Enums/ConfigurationValueSource.d.ts +4 -0
  118. package/lib/Pages/shared/Enums/ParticipantType.d.ts +6 -0
  119. package/lib/Pages/shared/Services/AccountService.service.d.ts +10 -0
  120. package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +7 -8
  121. package/lib/Pages/shared/Services/DepartmentService.service.d.ts +2 -2
  122. package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +5 -5
  123. package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +2 -1
  124. package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +5 -5
  125. package/lib/Pages/shared/Services/LicenseService.service.d.ts +2 -2
  126. package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +4 -4
  127. package/lib/Pages/shared/Services/LookupService.service.d.ts +14 -11
  128. package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +8 -7
  129. package/lib/Pages/shared/Services/PermissionsService.service.d.ts +5 -6
  130. package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +2 -2
  131. package/lib/Pages/shared/Services/SectorService.service.d.ts +7 -7
  132. package/lib/Pages/shared/Services/TemplateService.service.d.ts +20 -19
  133. package/lib/Pages/shared/Services/localizationsService.service .d.ts +12 -11
  134. package/lib/Pages/shared/Services/provider.service.d.ts +1 -1
  135. package/lib/Pages/shared/Services/userService.service.d.ts +2 -0
  136. package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -0
  137. package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +0 -1
  138. package/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.d.ts +1 -1
  139. package/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.d.ts +0 -2
  140. package/lib/Pages/shared/models/Lookups/LookupModel.d.ts +1 -1
  141. package/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.d.ts +1 -1
  142. package/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.d.ts +1 -1
  143. package/lib/Pages/users/users.component.d.ts +54 -68
  144. package/lib/masterlayout.component.d.ts +4 -5
  145. package/lib/masterlayout.module.d.ts +8 -9
  146. package/package.json +5 -3
  147. package/src/lib/assets/sass/core/components/_variables.scss +1 -1
  148. package/src/lib/assets/sass/custom-styles-rtl.scss +5 -0
  149. package/src/lib/assets/sass/custom-styles.scss +153 -0
  150. package/src/lib/assets/sass/style-rtl.scss +2 -0
  151. package/src/lib/assets/sass/style.scss +2 -2
  152. package/bnsights-bbsf-admin-portal-0.0.1.tgz +0 -0
  153. package/bnsights-bbsf-admin-portal-1.0.0.tgz +0 -0
  154. package/esm2015/lib/Pages/notifications/edit-template/edit-template.component.js +0 -35
  155. package/lib/Pages/notifications/edit-template/edit-template.component.d.ts +0 -35
@@ -1,6 +1,6 @@
1
1
  import { __awaiter } from "tslib";
2
- import { Component, ViewChild } from '@angular/core';
3
- import { CheckBoxOptions, ControlLayout, Country, DropdownOptions, EnglishArabicDTO, InputType, MultiLingualTextBoxOptions, PhoneOptions, TextAreaOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
2
+ import { Component } from '@angular/core';
3
+ import { CheckBoxOptions, ControlLayout, Country, DropdownOptions, EnglishArabicDTO, FormOptions, InputType, MultiLingualTextAreaOptions, MultiLingualTextBoxOptions, PhoneOptions, TextAreaOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
4
4
  import { FormGroup } from '@angular/forms';
5
5
  import { SendEmailTemplateModel } from './../../shared/models/NotificationsModels/SendEmailTemplateModel';
6
6
  import { EmailTemplateTesterModel } from '../../shared/models/NotificationsModels/EmailTemplateTesterModel';
@@ -20,90 +20,143 @@ import * as i9 from "@angular/common";
20
20
  import * as i10 from "ng-inline-svg";
21
21
  import * as i11 from "@angular/forms";
22
22
  export class TemplateInfoComponent {
23
- constructor(authService, utilityService, bbsfTranslateService, environmentService, _clipboardService, templateService, activatedRoute, router, pageInfoService, modalService) {
24
- this.authService = authService;
23
+ constructor(utilityService, bbsfTranslateService, environmentService, _clipboardService, templateService, activatedRoute, pageInfoService, modalService, requestHandlerService) {
25
24
  this.utilityService = utilityService;
26
25
  this.bbsfTranslateService = bbsfTranslateService;
27
26
  this.environmentService = environmentService;
28
27
  this._clipboardService = _clipboardService;
29
28
  this.templateService = templateService;
30
29
  this.activatedRoute = activatedRoute;
31
- this.router = router;
32
30
  this.pageInfoService = pageInfoService;
33
31
  this.modalService = modalService;
34
- this.TemplateId = "";
32
+ this.requestHandlerService = requestHandlerService;
33
+ this.TemplateIdEnc = "";
34
+ //Required lists
35
+ this.LanguageList = [];
36
+ this.EmailServiceProviderList = [];
37
+ this.SMSServiceProviderList = [];
35
38
  this.CategoryList = [];
36
- this.TypeList = [];
37
39
  this.OrganizationList = [];
38
40
  this.LanguageModeList = [];
39
41
  this.MasterLayoutList = [];
40
42
  //GenerateCode Model Controls
41
43
  this.GenerateCodeForm = new FormGroup({});
42
44
  this.ValueToCopy = "";
43
- //Send Model Controls
45
+ //Send Email Model Controls
44
46
  this.SendEmailForm = new FormGroup({});
45
- //Test Send Model Controls
47
+ this.SendEmailFormOptions = new FormOptions;
48
+ //Test Send Email Model Controls
46
49
  this.TestSendEmailForm = new FormGroup({});
50
+ this.TestSendEmailFormOptions = new FormOptions;
47
51
  //Test Send SMS Model Controls
48
52
  this.TestSendSMSForm = new FormGroup({});
53
+ this.TestSendSMSFormOptions = new FormOptions;
49
54
  //Edit Model Controls
50
55
  this.EditTemplateForm = new FormGroup({});
51
- this.language = "";
56
+ this.EditTemplateFormOptions = new FormOptions;
57
+ this.getEditTemplateModel = () => {
58
+ let paramArray = [];
59
+ let ResultModel = this.EditTemplateForm.value;
60
+ let EditModel = new TemplateDTO();
61
+ EditModel.ID = Number(this.TemplateId);
62
+ EditModel.Name.Arabic = ResultModel.EditName.ArabicValue;
63
+ EditModel.Name.English = ResultModel.EditName.EnglishValue;
64
+ EditModel.SysName = ResultModel.EditSysName ? ResultModel.EditSysName : this.EditSysNameValue;
65
+ EditModel.Description.English = ResultModel.EditDescription.EnglishTextAreaValue;
66
+ EditModel.Description.Arabic = ResultModel.EditDescription.ArabicTextAreaValue;
67
+ EditModel.OrganizationID = Number(ResultModel.EditOrganization);
68
+ EditModel.CategoryItemID = Number(ResultModel.EditCategory);
69
+ EditModel.LanguageModeItemID = Number(ResultModel.EditLanguageMode);
70
+ EditModel.EmailHeaderAndFooterTemplateID = Number(ResultModel.EditMasterLayout);
71
+ EditModel.IsEmail = ResultModel.EditIsEmail;
72
+ EditModel.IsSms = ResultModel.EditIsSms;
73
+ EditModel.EnableIntensiveLogging = ResultModel.EditEnableIntensiveLogging;
74
+ paramArray.push(EditModel);
75
+ return paramArray;
76
+ };
77
+ this.getEditTemplateFunction = (EditModel) => {
78
+ return this.templateService.editEmailTemplate(EditModel);
79
+ };
80
+ this.getSendEmailModel = () => {
81
+ let paramArray = [];
82
+ let ResultModel = this.SendEmailForm.value;
83
+ let sendEmailTemplateModel = new SendEmailTemplateModel();
84
+ sendEmailTemplateModel.TemplateID = Number(this.TemplateId);
85
+ sendEmailTemplateModel.ToEmails = ResultModel.To;
86
+ sendEmailTemplateModel.LangKey = ResultModel.Language;
87
+ sendEmailTemplateModel.EmailProviderName = ResultModel.EmailServiceProvider;
88
+ paramArray.push(sendEmailTemplateModel);
89
+ return paramArray;
90
+ };
91
+ this.getSendEmailFunction = (sendEmailTemplateModel) => {
92
+ return this.templateService.sendEmailTemplate(sendEmailTemplateModel);
93
+ };
94
+ this.getTestSendEmailModel = () => {
95
+ let paramArray = [];
96
+ let ResultModel = this.TestSendEmailForm.value;
97
+ let sendEmailTemplateModel = new EmailTemplateTesterModel();
98
+ sendEmailTemplateModel.TemplateID = Number(this.TemplateId);
99
+ sendEmailTemplateModel.ToEmail = ResultModel.TestSendEmailTo;
100
+ sendEmailTemplateModel.EmailProviderName = ResultModel.TestEmailServiceProvider;
101
+ paramArray.push(sendEmailTemplateModel);
102
+ return paramArray;
103
+ };
104
+ this.getTestSendEmailFunction = (sendEmailTemplateModel) => {
105
+ return this.templateService.testSendEmailTemplate(sendEmailTemplateModel);
106
+ };
107
+ this.getTestSendSMSModel = () => {
108
+ let paramArray = [];
109
+ let ResultModel = this.TestSendSMSForm.value;
110
+ let sendSMSTemplateModel = new SMSTemplateTesterModel();
111
+ sendSMSTemplateModel.TemplateID = Number(this.TemplateId);
112
+ let internationalNumber = null;
113
+ if (ResultModel.TestSendSMSTo != null) {
114
+ internationalNumber = ResultModel.TestSendSMSTo.internationalNumber;
115
+ internationalNumber = internationalNumber.replace(/\s/g, "");
116
+ }
117
+ sendSMSTemplateModel.ToMobileNumber = internationalNumber;
118
+ sendSMSTemplateModel.SMSProviderName = ResultModel.TestSMSServiceProvider;
119
+ paramArray.push(sendSMSTemplateModel);
120
+ return paramArray;
121
+ };
122
+ this.getTestSendSMSFunction = (sendSMSTemplateModel) => {
123
+ return this.templateService.testSMSTemplate(sendSMSTemplateModel);
124
+ };
52
125
  this.activatedRoute.params.subscribe(params => {
53
- this.TemplateId = params['id'];
126
+ this.TemplateIdEnc = params['id'];
54
127
  });
55
128
  }
56
129
  ngOnInit() {
57
130
  return __awaiter(this, void 0, void 0, function* () {
58
131
  this.utilityService.startBlockUI();
59
132
  this.bbsfTranslateService.onLangChange.subscribe((event) => {
60
- this.language = event.lang;
61
133
  this.utilityService.stopBlockUI();
62
134
  this.ngOnInit();
63
135
  });
64
- this.language = yield this.utilityService.getCurrentLanguage();
65
136
  this.ProductionMode = this.environmentService.getProductionMode();
66
- this.templateService.GetTemplateInfo(Number(this.TemplateId)).subscribe((result) => {
67
- let Result = result;
68
- this.TemplateInfo = Result.val;
69
- //this.SubheaderTitle = this.language == "en" ? this.TemplateInfo.emailtemplateinfo.emailSubject.english : this.TemplateInfo.emailtemplateinfo.emailSubject.arabic;
70
- PageInfoService.PageTitle = this.TemplateInfo.templateName;
71
- PageInfoService.PageBreadcrumbs = [
72
- { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
73
- { title: '', path: '', isSeparator: true, isActive: false },
74
- { title: this.utilityService.getResourceValue("Templates"), path: '/Admin/Notifications/Templates', isSeparator: false, isActive: false },
75
- { title: '', path: '', isSeparator: true, isActive: false }
76
- ];
77
- this.pageInfoService.calculateTitle();
78
- this.pageInfoService.calculateBreadcrumbs();
79
- });
80
- this.templateService.GetSendEmailTemplate().subscribe((result) => {
81
- let Result = result;
82
- this.EmailServiceProviderList = Result.val.emailProviders;
83
- this.LanguageList = Result.val.languageKeys;
84
- });
85
- this.templateService.GetTestSMSTemplate().subscribe((result) => {
86
- let Result = result;
87
- this.SMSServiceProviderList = Result.val;
88
- });
89
- this.LoadDropdownLists();
137
+ this.initializePage();
90
138
  });
91
139
  }
92
- LoadDropdownLists() {
93
- this.templateService.Loaddropdowns().subscribe((result) => {
94
- let DropdownLists = result;
95
- this.OrganizationList = DropdownLists.organization;
96
- this.CategoryList = DropdownLists.lookUpItemsCategory;
97
- this.TypeList = DropdownLists.types;
98
- this.MasterLayoutList = DropdownLists.emailHeaderAndFooterTemplate;
99
- this.LanguageModeList = DropdownLists.lookUpItemsEmailTemplate;
140
+ //Initialize page info
141
+ initializePage() {
142
+ this.templateService.getTemplateInfo(this.TemplateIdEnc).subscribe((result) => {
143
+ let Result = result;
144
+ this.TemplateInfo = Result.val;
145
+ this.TemplateId = this.TemplateInfo.id;
146
+ PageInfoService.PageTitle = this.TemplateInfo.templateName;
147
+ PageInfoService.PageBreadcrumbs = [
148
+ { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
149
+ { title: '', path: '', isSeparator: true, isActive: false },
150
+ { title: this.utilityService.getResourceValue("Templates"), path: '/Admin/Notifications/Templates', isSeparator: false, isActive: false },
151
+ { title: '', path: '', isSeparator: true, isActive: false }
152
+ ];
153
+ this.pageInfoService.calculateTitle();
154
+ this.pageInfoService.calculateBreadcrumbs();
100
155
  });
101
156
  }
102
- copyInputMessage() {
103
- this._clipboardService.copy(this.ValueToCopy.toString());
104
- }
105
- showGenerateCodeByIdModal(template, GenerateCodeModal) {
106
- this.templateService.GenerateCodeById(template.id).subscribe((result) => {
157
+ //Generate Code
158
+ showGenerateCodeByIdModal(GenerateCodeModal) {
159
+ this.templateService.generateCodeById(this.TemplateIdEnc).subscribe((result) => {
107
160
  var Value = result;
108
161
  this.GenerateCodeTextArea = new TextAreaOptions();
109
162
  this.GenerateCodeTextArea.Name = "GenerateCodeTextArea";
@@ -115,12 +168,11 @@ export class TemplateInfoComponent {
115
168
  this.GenerateCodeTextArea.Cols = 20;
116
169
  this.GenerateCodeTextArea.MaxLength = 1000000;
117
170
  this.modalService.open(GenerateCodeModal);
118
- }, (error) => {
119
171
  });
120
172
  }
121
- showGenerateUpdateCodeByIdModal(template, GenerateCodeModal) {
173
+ showGenerateUpdateCodeByIdModal(GenerateCodeModal) {
122
174
  this.GenerateCodeForm = new FormGroup({});
123
- this.templateService.GenerateUpdateCodeById(template.id).subscribe((result) => {
175
+ this.templateService.generateUpdateCodeById(this.TemplateIdEnc).subscribe((result) => {
124
176
  var Value = result;
125
177
  this.GenerateCodeTextArea = new TextAreaOptions();
126
178
  this.GenerateCodeTextArea.Name = "GenerateCodeTextArea";
@@ -132,37 +184,49 @@ export class TemplateInfoComponent {
132
184
  this.GenerateCodeTextArea.Cols = 20;
133
185
  this.GenerateCodeTextArea.MaxLength = 1000000;
134
186
  this.modalService.open(GenerateCodeModal);
135
- }, (error) => {
136
187
  });
137
188
  }
189
+ copyInputMessage() {
190
+ this._clipboardService.copy(this.ValueToCopy.toString());
191
+ }
192
+ //Edit Template
138
193
  showEditTemplateModal(EditTemplateModal) {
139
- this.EditTemplateForm = new FormGroup({});
140
- this.templateService.GetTemplateById(Number(this.TemplateId)).subscribe((result) => {
141
- let Result = result;
142
- this.Template = Result.val;
143
- this.TemplateId = this.Template.id;
194
+ this.templateService.getEditTemplateData(this.TemplateIdEnc).subscribe((result) => {
195
+ let resultObj = result;
196
+ let lists = resultObj.lists;
197
+ this.OrganizationList = lists.organization;
198
+ this.LanguageModeList = lists.lookUpItemsEmailTemplate;
199
+ this.MasterLayoutList = lists.emailHeaderAndFooterTemplate;
200
+ this.CategoryList = lists.lookUpItemsCategory;
201
+ this.Template = resultObj.model;
202
+ this.EditTemplateForm = new FormGroup({});
203
+ this.EditTemplateFormOptions = new FormOptions();
204
+ this.EditTemplateFormOptions.FormGroup = this.EditTemplateForm;
205
+ this.EditTemplateFormOptions.GetModelFunction = this.getEditTemplateModel;
206
+ this.EditTemplateFormOptions.ServiceSubmitFunction = this.getEditTemplateFunction;
144
207
  let Name = new EnglishArabicDTO();
145
208
  Name.Arabic = this.Template.name.arabic;
146
209
  Name.English = this.Template.name.english;
147
- this.EditMultiLingualName = new MultiLingualTextBoxOptions();
148
- this.EditMultiLingualName.Name = "Name";
149
- this.EditMultiLingualName.ArabicLabelKey = "NameInArabic";
150
- this.EditMultiLingualName.EnglishLabelKey = "NameInEnglish";
151
- this.EditMultiLingualName.IsRequired = true;
152
- this.EditMultiLingualName.Value = Name;
210
+ this.EditName = new MultiLingualTextBoxOptions();
211
+ this.EditName.Name = "EditName";
212
+ this.EditName.ArabicLabelKey = "NameInArabic";
213
+ this.EditName.EnglishLabelKey = "NameInEnglish";
214
+ this.EditName.IsRequired = true;
215
+ this.EditName.Value = Name;
153
216
  this.EditSysName = new TextBoxOptions();
154
217
  this.EditSysName.Name = "EditSysName";
155
218
  this.EditSysName.LabelKey = "SysName";
156
219
  this.EditSysName.Type = InputType.Text;
157
220
  this.EditSysName.Value = this.Template.sysName;
158
- this.EditDescriptionInEnglish = new TextAreaOptions();
159
- this.EditDescriptionInEnglish.Name = "EditDescriptionInEnglish";
160
- this.EditDescriptionInEnglish.LabelKey = "DescriptionInEnglish";
161
- this.EditDescriptionInEnglish.Value = this.Template.description.english;
162
- this.EditDescriptionInArabic = new TextAreaOptions();
163
- this.EditDescriptionInArabic.Name = "EditDescriptionInArabic";
164
- this.EditDescriptionInArabic.LabelKey = "DescriptionInArabic";
165
- this.EditDescriptionInArabic.Value = this.Template.description.arabic;
221
+ this.EditSysNameValue = this.Template.sysName;
222
+ let description = new EnglishArabicDTO();
223
+ description.Arabic = this.Template.description.arabic;
224
+ description.English = this.Template.description.english;
225
+ this.EditDescription = new MultiLingualTextAreaOptions();
226
+ this.EditDescription.Name = "EditDescription";
227
+ this.EditDescription.ArabicLabelKey = "DescriptionInArabic";
228
+ this.EditDescription.EnglishLabelKey = "DescriptionInEnglish";
229
+ this.EditDescription.Value = description;
166
230
  this.EditOrganization = new DropdownOptions();
167
231
  this.EditOrganization.Name = "EditOrganization";
168
232
  this.EditOrganization.LabelKey = "Organization";
@@ -219,175 +283,115 @@ export class TemplateInfoComponent {
219
283
  this.modalService.open(EditTemplateModal);
220
284
  });
221
285
  }
222
- editTemplate() {
223
- if (this.EditTemplateForm.invalid) {
224
- return;
225
- }
226
- else {
227
- let ResultModel = this.EditTemplateForm.value;
228
- let TemplateModel = new TemplateDTO();
229
- TemplateModel.ID = Number(this.TemplateId);
230
- TemplateModel.Name.Arabic = ResultModel.Name.ArabicValue;
231
- TemplateModel.Name.English = ResultModel.Name.EnglishValue;
232
- TemplateModel.SysName = ResultModel.EditSysName;
233
- TemplateModel.Description.English = ResultModel.EditDescriptionInEnglish;
234
- TemplateModel.Description.Arabic = ResultModel.EditDescriptionInArabic;
235
- TemplateModel.OrganizationID = Number(ResultModel.EditOrganization);
236
- TemplateModel.CategoryItemID = Number(ResultModel.EditCategory);
237
- TemplateModel.LanguageModeItemID = Number(ResultModel.EditLanguageMode);
238
- TemplateModel.EmailHeaderAndFooterTemplateID = Number(ResultModel.EditMasterLayout);
239
- TemplateModel.IsEmail = ResultModel.EditIsEmail;
240
- TemplateModel.IsSms = ResultModel.EditIsSms;
241
- TemplateModel.EnableIntensiveLogging = ResultModel.EditEnableIntensiveLogging;
242
- this.templateService.EditEmailTemplate(TemplateModel).subscribe((result) => {
243
- this.modalService.dismissAll();
244
- }, (error) => {
245
- });
246
- }
247
- }
286
+ //Send Email
248
287
  showSendEmailModal(SendEmailModal) {
249
288
  this.utilityService.startBlockUI();
250
- this.SendEmailForm = new FormGroup({});
251
- this.To = new TextAreaOptions();
252
- this.To.Name = "To";
253
- this.To.LabelKey = "To";
254
- this.To.Value = null;
255
- this.To.IsRequired = true;
256
- this.EmailServiceProvider = new DropdownOptions();
257
- this.EmailServiceProvider.Name = "EmailServiceProvider";
258
- this.EmailServiceProvider.LabelKey = "EmailServiceProvider";
259
- this.EmailServiceProvider.DataSource = this.EmailServiceProviderList;
260
- this.EmailServiceProvider.SingleSelection = true;
261
- this.EmailServiceProvider.AllowSearchFilter = true;
262
- this.EmailServiceProvider.Placeholder = "";
263
- this.EmailServiceProvider.IsRequired = true;
264
- this.Language = new DropdownOptions();
265
- this.Language.Name = "Language";
266
- this.Language.LabelKey = "Language";
267
- this.Language.DataSource = this.LanguageList;
268
- this.Language.SingleSelection = true;
269
- this.Language.AllowSearchFilter = true;
270
- this.Language.Placeholder = "";
271
- this.Language.IsRequired = true;
272
- this.modalService.open(SendEmailModal);
273
- this.utilityService.stopBlockUI();
274
- }
275
- sendEmail() {
276
- if (this.SendEmailForm.invalid) {
277
- return;
278
- }
279
- else {
280
- let ResultModel = this.SendEmailForm.value;
281
- let sendEmailTemplateModel = new SendEmailTemplateModel();
282
- sendEmailTemplateModel.TemplateID = Number(this.TemplateId);
283
- sendEmailTemplateModel.ToEmails = ResultModel.To;
284
- sendEmailTemplateModel.LangKey = ResultModel.Language;
285
- sendEmailTemplateModel.EmailProviderName = ResultModel.EmailServiceProvider;
286
- this.templateService.SendEmailTemplate(sendEmailTemplateModel).subscribe((result) => {
287
- this.modalService.dismissAll();
288
- }, (error) => {
289
- });
290
- }
289
+ this.templateService.getSendEmailTemplate().subscribe((result) => {
290
+ let Result = result;
291
+ this.EmailServiceProviderList = Result.val.emailProviders;
292
+ this.LanguageList = Result.val.languageKeys;
293
+ this.SendEmailForm = new FormGroup({});
294
+ this.SendEmailFormOptions = new FormOptions();
295
+ this.SendEmailFormOptions.FormGroup = this.SendEmailForm;
296
+ this.SendEmailFormOptions.GetModelFunction = this.getSendEmailModel;
297
+ this.SendEmailFormOptions.ServiceSubmitFunction = this.getSendEmailFunction;
298
+ this.To = new TextAreaOptions();
299
+ this.To.Name = "To";
300
+ this.To.LabelKey = "To";
301
+ this.To.Value = null;
302
+ this.To.IsRequired = true;
303
+ this.EmailServiceProvider = new DropdownOptions();
304
+ this.EmailServiceProvider.Name = "EmailServiceProvider";
305
+ this.EmailServiceProvider.LabelKey = "EmailServiceProvider";
306
+ this.EmailServiceProvider.DataSource = this.EmailServiceProviderList;
307
+ this.EmailServiceProvider.SingleSelection = true;
308
+ this.EmailServiceProvider.AllowSearchFilter = true;
309
+ this.EmailServiceProvider.Placeholder = "";
310
+ this.EmailServiceProvider.IsRequired = true;
311
+ this.Language = new DropdownOptions();
312
+ this.Language.Name = "Language";
313
+ this.Language.LabelKey = "Language";
314
+ this.Language.DataSource = this.LanguageList;
315
+ this.Language.SingleSelection = true;
316
+ this.Language.AllowSearchFilter = true;
317
+ this.Language.Placeholder = "";
318
+ this.Language.IsRequired = true;
319
+ this.modalService.open(SendEmailModal);
320
+ this.utilityService.stopBlockUI();
321
+ });
291
322
  }
323
+ //Test Send Email
292
324
  showTestSendEmailModal(TestSendEmailModal) {
293
325
  this.utilityService.startBlockUI();
294
- this.SendEmailForm = new FormGroup({});
295
- this.TestSendEmailTo = new TextAreaOptions();
296
- this.TestSendEmailTo.Name = "TestSendEmailTo";
297
- this.TestSendEmailTo.LabelKey = "SendTo";
298
- this.TestSendEmailTo.Value = null;
299
- this.TestSendEmailTo.IsRequired = true;
300
- this.TestEmailServiceProvider = new DropdownOptions();
301
- this.TestEmailServiceProvider.Name = "TestEmailServiceProvider";
302
- this.TestEmailServiceProvider.LabelKey = "EmailServiceProvider";
303
- this.TestEmailServiceProvider.DataSource = this.EmailServiceProviderList;
304
- this.TestEmailServiceProvider.SingleSelection = true;
305
- this.TestEmailServiceProvider.AllowSearchFilter = true;
306
- this.TestEmailServiceProvider.Placeholder = "";
307
- this.TestEmailServiceProvider.IsRequired = true;
308
- this.modalService.open(TestSendEmailModal);
309
- this.utilityService.stopBlockUI();
310
- }
311
- testSendEmail() {
312
- if (this.TestSendEmailForm.invalid) {
313
- return;
314
- }
315
- else {
316
- let ResultModel = this.TestSendEmailForm.value;
317
- let sendEmailTemplateModel = new EmailTemplateTesterModel();
318
- sendEmailTemplateModel.TemplateID = Number(this.TemplateId);
319
- sendEmailTemplateModel.ToEmail = ResultModel.TestSendEmailTo;
320
- sendEmailTemplateModel.EmailProviderName = ResultModel.TestEmailServiceProvider;
321
- this.templateService.TestSendEmailTemplate(sendEmailTemplateModel).subscribe((result) => {
322
- this.modalService.dismissAll();
323
- }, (error) => {
324
- });
325
- }
326
+ this.templateService.getSendEmailTemplate().subscribe((result) => {
327
+ let Result = result;
328
+ this.EmailServiceProviderList = Result.val.emailProviders;
329
+ this.TestSendEmailForm = new FormGroup({});
330
+ this.TestSendEmailFormOptions = new FormOptions();
331
+ this.TestSendEmailFormOptions.FormGroup = this.TestSendEmailForm;
332
+ this.TestSendEmailFormOptions.GetModelFunction = this.getTestSendEmailModel;
333
+ this.TestSendEmailFormOptions.ServiceSubmitFunction = this.getTestSendEmailFunction;
334
+ this.TestSendEmailTo = new TextAreaOptions();
335
+ this.TestSendEmailTo.Name = "TestSendEmailTo";
336
+ this.TestSendEmailTo.LabelKey = "SendTo";
337
+ this.TestSendEmailTo.Value = null;
338
+ this.TestSendEmailTo.IsRequired = true;
339
+ this.TestEmailServiceProvider = new DropdownOptions();
340
+ this.TestEmailServiceProvider.Name = "TestEmailServiceProvider";
341
+ this.TestEmailServiceProvider.LabelKey = "EmailServiceProvider";
342
+ this.TestEmailServiceProvider.DataSource = this.EmailServiceProviderList;
343
+ this.TestEmailServiceProvider.SingleSelection = true;
344
+ this.TestEmailServiceProvider.AllowSearchFilter = true;
345
+ this.TestEmailServiceProvider.Placeholder = "";
346
+ this.TestEmailServiceProvider.IsRequired = true;
347
+ this.modalService.open(TestSendEmailModal);
348
+ this.utilityService.stopBlockUI();
349
+ });
326
350
  }
351
+ //Test Send SMS
327
352
  showTestSendSMSModal(TestSendSMSModal) {
328
353
  this.utilityService.startBlockUI();
329
- this.SendEmailForm = new FormGroup({});
330
- this.TestSendSMSTo = new PhoneOptions();
331
- this.TestSendSMSTo.Name = "TestSendSMSTo";
332
- this.TestSendSMSTo.LabelKey = "SendTo";
333
- this.TestSendSMSTo.Value = null;
334
- this.TestSendSMSTo.IsRequired = true;
335
- this.TestSendSMSTo.ShowAsterisk = true;
336
- this.TestSendSMSTo.SelectedCountryISO = Country.UnitedArabEmirates;
337
- this.TestSendSMSTo.PhoneValidation = true;
338
- this.TestSendSMSTo.AllowSearch = true;
339
- this.TestSMSServiceProvider = new DropdownOptions();
340
- this.TestSMSServiceProvider.Name = "TestSMSServiceProvider";
341
- this.TestSMSServiceProvider.LabelKey = "SMSServiceProvider";
342
- this.TestSMSServiceProvider.DataSource = this.SMSServiceProviderList;
343
- this.TestSMSServiceProvider.SingleSelection = true;
344
- this.TestSMSServiceProvider.AllowSearchFilter = true;
345
- this.TestSMSServiceProvider.Placeholder = "";
346
- this.TestSMSServiceProvider.IsRequired = true;
347
- this.modalService.open(TestSendSMSModal);
348
- this.utilityService.stopBlockUI();
354
+ this.templateService.getTestSMSTemplate().subscribe((result) => {
355
+ let Result = result;
356
+ this.SMSServiceProviderList = Result.val;
357
+ this.TestSendSMSForm = new FormGroup({});
358
+ this.TestSendSMSFormOptions = new FormOptions();
359
+ this.TestSendSMSFormOptions.FormGroup = this.TestSendSMSForm;
360
+ this.TestSendSMSFormOptions.GetModelFunction = this.getTestSendSMSModel;
361
+ this.TestSendSMSFormOptions.ServiceSubmitFunction = this.getTestSendSMSFunction;
362
+ this.TestSendSMSTo = new PhoneOptions();
363
+ this.TestSendSMSTo.Name = "TestSendSMSTo";
364
+ this.TestSendSMSTo.LabelKey = "SendTo";
365
+ this.TestSendSMSTo.Value = null;
366
+ this.TestSendSMSTo.IsRequired = true;
367
+ this.TestSendSMSTo.ShowAsterisk = true;
368
+ this.TestSendSMSTo.SelectedCountryISO = Country.UnitedArabEmirates;
369
+ this.TestSendSMSTo.PhoneValidation = true;
370
+ this.TestSendSMSTo.AllowSearch = true;
371
+ this.TestSMSServiceProvider = new DropdownOptions();
372
+ this.TestSMSServiceProvider.Name = "TestSMSServiceProvider";
373
+ this.TestSMSServiceProvider.LabelKey = "SMSServiceProvider";
374
+ this.TestSMSServiceProvider.DataSource = this.SMSServiceProviderList;
375
+ this.TestSMSServiceProvider.SingleSelection = true;
376
+ this.TestSMSServiceProvider.AllowSearchFilter = true;
377
+ this.TestSMSServiceProvider.Placeholder = "";
378
+ this.TestSMSServiceProvider.IsRequired = true;
379
+ this.modalService.open(TestSendSMSModal);
380
+ this.utilityService.stopBlockUI();
381
+ });
349
382
  }
350
- testSendSMS() {
351
- if (this.TestSendSMSForm.invalid) {
352
- return;
353
- }
354
- else {
355
- let ResultModel = this.TestSendSMSForm.value;
356
- let sendSMSTemplateModel = new SMSTemplateTesterModel();
357
- sendSMSTemplateModel.TemplateID = Number(this.TemplateId);
358
- let internationalNumber = null;
359
- if (ResultModel.TestSendSMSTo != null) {
360
- internationalNumber = ResultModel.TestSendSMSTo.internationalNumber;
361
- internationalNumber = internationalNumber.replace(/\s/g, "");
362
- }
363
- sendSMSTemplateModel.ToMobileNumber = internationalNumber;
364
- sendSMSTemplateModel.SMSProviderName = ResultModel.TestSMSServiceProvider;
365
- this.templateService.TestSMSTemplate(sendSMSTemplateModel).subscribe((result) => {
366
- this.modalService.dismissAll();
367
- }, (error) => {
368
- });
369
- }
383
+ //On destroy
384
+ ngOnDestroy() {
385
+ this.requestHandlerService.destroyHandler();
370
386
  }
371
387
  }
372
- TemplateInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TemplateInfoComponent, deps: [{ token: i1.AuthService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i2.ClipboardService }, { token: i3.TemplateService }, { token: i4.ActivatedRoute }, { token: i4.Router }, { token: i5.PageInfoService }, { token: i6.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
373
- TemplateInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: TemplateInfoComponent, selector: "lib-template-info", viewQueries: [{ propertyName: "CloseSendEmailForm", first: true, predicate: ["CloseSendEmailForm"], descendants: true }, { propertyName: "CloseTestSendEmailForm", first: true, predicate: ["CloseTestSendEmailForm"], descendants: true }, { propertyName: "CloseTestSendSMSForm", first: true, predicate: ["CloseTestSendSMSForm"], descendants: true }, { propertyName: "CloseEditTemplateModal", first: true, predicate: ["CloseEditTemplateModal"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-light-primary\"\r\n (click)=\"showEditTemplateModal(EditTemplateModal)\">\r\n <i class=\"fa fa fa-edit\" aria-hidden=\"true\"></i>\r\n <span>{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-light-primary\"\r\n (click)=\"showSendEmailModal(SendEmailModal)\">\r\n <i class=\"fa fa-paper-plane\"></i>{{utilityService.getResourceValue(\"SendEmail\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-light-primary\"\r\n (click)=\"showTestSendEmailModal(TestSendEmailModal)\">\r\n <i class=\"fa fa-bars\"></i>{{utilityService.getResourceValue(\"TestSendEmail\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-light-primary\"\r\n (click)=\"showTestSendSMSModal(TestSendSMSModal)\">\r\n <i class=\"fa fa-envelope-open-text sms\"></i>{{utilityService.getResourceValue(\"TestSendSMS\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-primary\" *ngIf=\"!ProductionMode\"\r\n (click)=\"showGenerateCodeByIdModal(TemplateInfo, GenerateCodeModal)\">\r\n <i class=\"fa fa-bars\"></i>{{utilityService.getResourceValue(\"GenerateCode\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-primary\" *ngIf=\"!ProductionMode\"\r\n (click)=\"showGenerateUpdateCodeByIdModal(TemplateInfo,GenerateCodeModal)\">\r\n <i class=\"fa fa-key\"></i>{{utilityService.getResourceValue(\"GenerateUpdateCode\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 mb-10\">\r\n <div class=\"d-flex h-100 align-items-center \">\r\n <!--begin::Option-->\r\n <div class=\"w-100 d-flex flex-column flex-center rounded-3 bg-light py-10 px-10 h-100\">\r\n <!--begin::Heading-->\r\n <div class=\"mb-7 d-flex justify-content-between w-100\">\r\n <!--begin::Title-->\r\n <a [routerLink]=\"['/Admin/Notifications/EditEmail',TemplateInfo.id,'en']\"\r\n routerLinkActive=\"router-link-active\" class=\"text-primary mb-5 fw-boldest fs-2\">\r\n English:\r\n {{TemplateInfo.emailtemplateinfo.emailSubject.english}}\r\n </a>\r\n\r\n <a [routerLink]=\"['/Admin/Notifications/EditEmail',TemplateInfo.id,'en']\"\r\n routerLinkActive=\"router-link-active\" class=\"btn btn-sm btn-light-primary btn-icon\">\r\n <i class=\"fa fa-pen\"></i>\r\n </a>\r\n\r\n </div>\r\n <div class=\"w-100 mb-10\">\r\n <!--begin::Item-->\r\n <div class=\"d-flex align-items-center mb-5\">\r\n <div class=\"fw-bold fs-6 text-gray-800 flex-grow-1 pe-3\">\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.templateEmailBaseHeader.english}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.emailHtmlHeadSection.english}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.emailBody.english}}\">\r\n </div>\r\n <div class=\"table-dark-skin pt-7\" innerHTML=\"{{TemplateInfo.emailtemplateinfo.templateEmailBaseFooter.english}}\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--end::Select-->\r\n </div>\r\n <!--end::Option-->\r\n </div>\r\n </div>\r\n <div class=\"col-xl-6 mb-10\">\r\n <div class=\"d-flex h-100 align-items-center\">\r\n <!--begin::Option-->\r\n <div class=\"w-100 d-flex flex-column flex-center rounded-3 bg-light py-10 px-10 h-100\">\r\n <!--begin::Heading-->\r\n <div class=\"mb-7 d-flex justify-content-between w-100\">\r\n <!--begin::Title-->\r\n <a [routerLink]=\"['/Admin/Notifications/EditEmail',TemplateInfo.id,'ar']\"\r\n routerLinkActive=\"router-link-active\" class=\"text-primary mb-5 fw-boldest fs-2\">\r\n Arabic:\r\n {{TemplateInfo.emailtemplateinfo.emailSubject.arabic}}\r\n </a>\r\n <a [routerLink]=\"['/Admin/Notifications/EditEmail',TemplateInfo.id,'ar']\"\r\n routerLinkActive=\"router-link-active\" class=\"btn btn-sm btn-light-primary btn-icon\">\r\n <i class=\"fa fa-pen\"></i>\r\n </a>\r\n </div>\r\n <div class=\"w-100 mb-10\">\r\n <!--begin::Item-->\r\n <div class=\"d-flex align-items-center mb-5\">\r\n <div class=\"fw-bold fs-6 text-gray-800 flex-grow-1 pe-3 ar\">\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.templateEmailBaseHeader.arabic}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.emailHtmlHeadSection.arabic}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.emailBody.arabic}}\">\r\n </div>\r\n <div class=\"table-dark-skin pt-7\" innerHTML=\"{{TemplateInfo.emailtemplateinfo.templateEmailBaseFooter.arabic}}\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!--end::Select-->\r\n </div>\r\n <!--end::Option-->\r\n </div>\r\n </div>\r\n <div class=\"col-xl-6\">\r\n <div class=\"card bg-light\">\r\n <div class=\"card-header border-0 py-10\">\r\n <div class=\"card-title text-primary mb-5 fw-boldest fs-2\">\r\n English:SMS\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\" [routerLink]=\"['/Admin/Notifications/EditSMS',TemplateInfo.id,'en']\"\r\n routerLinkActive=\"router-link-active\">\r\n <span class=\"\">\r\n <i class=\"fa fa-pen font-size-18\"></i>\r\n </span>\r\n </a>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body d-flex align-items-center justify-content-center\">\r\n <div class=\"iphone\">\r\n <span class=\"position-absolute mobile-txt\">{{TemplateInfo.smstemplateinfo.sms.english}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-xl-6\">\r\n <div class=\"card bg-light\">\r\n <div class=\"card-header border-0 py-10\">\r\n <div class=\"card-title text-primary mb-5 fw-boldest fs-2\">\r\n English:SMS\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\" [routerLink]=\"['/Admin/Notifications/EditSMS',TemplateInfo.id,'ar']\"\r\n routerLinkActive=\"router-link-active\">\r\n <span class=\"\">\r\n <i class=\"fa fa-pen font-size-18\"></i>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"card-body d-flex align-items-center justify-content-center\">\r\n <div class=\"iphone\">\r\n <span class=\"position-absolute mobile-txt ar\"> {{TemplateInfo.smstemplateinfo.sms.arabic}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n<!-- send Email Modal -->\r\n<ng-template #SendEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"SendEmailTemplate\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"SendEmailForm\"\r\n (ngSubmit)=\"sendEmail()\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"To\" [group]=\"SendEmailForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"Language\" [group]=\"SendEmailForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EmailServiceProvider\" [group]=\"SendEmailForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseSendEmailForm id=\"CloseSendEmailForm\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Send\")}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Test sms Email Modal -->\r\n<ng-template #TestSendSMSModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"TestSendSMS\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"TestSendSMSForm\"\r\n (ngSubmit)=\"testSendSMS()\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Phone [options]=\"TestSendSMSTo\" [group]=\"TestSendSMSForm\">\r\n </BBSF-Phone>\r\n </div>\r\n\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"TestSMSServiceProvider\" [group]=\"TestSendSMSForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n\r\n </div>\r\n\r\n <div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n Kindly note that these attributes are reserved\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ul class=\"list-unstyled\">\r\n <li class=\"mb-2\">NameEN</li>\r\n <li class=\"mb-2\">NameAR</li>\r\n <li class=\"mb-2\">Subject</li>\r\n <li class=\"mb-2\">LangKey</li>\r\n <li class=\"mb-2\">Mobile</li>\r\n <li class=\"mb-2\">Email</li>\r\n <li class=\"mb-2\">Date</li>\r\n <li class=\"mb-2\">Time</li>\r\n <li class=\"mb-2\">DateTime</li>\r\n </ul>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseTestSendSMSForm id=\"CloseTestSendSMSForm\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Send\")}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Test Send Email Modal -->\r\n<ng-template #TestSendEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"TestSendEmail\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"TestSendEmailForm\"\r\n (ngSubmit)=\"testSendEmail()\">\r\n <div class=\"row\">\r\n\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"TestSendEmailTo\" [group]=\"TestSendEmailForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"TestEmailServiceProvider\" [group]=\"TestSendEmailForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"KeyMapNote\")}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ul class=\"list-unstyled\">\r\n <li class=\"mb-2\">NameEN</li>\r\n <li class=\"mb-2\">NameAR</li>\r\n <li class=\"mb-2\">Subject</li>\r\n <li class=\"mb-2\">LangKey</li>\r\n <li class=\"mb-2\">Mobile</li>\r\n <li class=\"mb-2\">Email</li>\r\n <li class=\"mb-2\">Date</li>\r\n <li class=\"mb-2\">Time</li>\r\n <li class=\"mb-2\">DateTime</li>\r\n </ul>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseTestSendEmailForm id=\"CloseTestSendEmailForm\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Send\")}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- edit Modal -->\r\n<ng-template #EditTemplateModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"EditTemplate\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"EditTemplateForm\" (ngSubmit)=\"editTemplate()\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditMultiLingualName\" [group]=\"EditTemplateForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"EditDescriptionInEnglish\" [group]=\"EditTemplateForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"EditDescriptionInArabic\" [group]=\"EditTemplateForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"!ProductionMode\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditSysName\" [group]=\"EditTemplateForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditOrganization\" [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditLanguageMode\" [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditCategory\" [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditMasterLayout\" [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditIsEmail\" [group]=\"EditTemplateForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditIsSms\" [group]=\"EditTemplateForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditEnableIntensiveLogging\" [group]=\"EditTemplateForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditTemplateModal id=\"CloseEditTemplateModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- GenerateCode Modal -->\r\n<ng-template #GenerateCodeModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"GenerateCode\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"GenerateCodeForm\">\r\n\r\n <div class=\"Row\">\r\n <BBSF-TextArea [options]=\"GenerateCodeTextArea\" [group]=\"GenerateCodeForm\" #GenerateCodeInput>\r\n </BBSF-TextArea>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseGenerateCodeModal id=\"CloseGenerateCodeModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"copyInputMessage()\">\r\n {{utilityService.getResourceValue(\"CopyToClipboard\")}}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n", components: [{ type: i7.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i8.ɵe, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i8.ɵi, selector: "BBSF-Phone", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.ɵg, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
388
+ TemplateInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TemplateInfoComponent, deps: [{ token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i2.ClipboardService }, { token: i3.TemplateService }, { token: i4.ActivatedRoute }, { token: i5.PageInfoService }, { token: i6.NgbModal }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
389
+ TemplateInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: TemplateInfoComponent, selector: "lib-template-info", ngImport: i0, template: "<block-ui></block-ui>\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-light-primary\"\r\n (click)=\"showEditTemplateModal(EditTemplateModal)\">\r\n <i class=\"fa fa fa-edit\" aria-hidden=\"true\"></i>\r\n <span>{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-light-primary\"\r\n (click)=\"showSendEmailModal(SendEmailModal)\">\r\n <i class=\"fa fa-paper-plane\"></i>{{utilityService.getResourceValue(\"SendEmail\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-light-primary\"\r\n (click)=\"showTestSendEmailModal(TestSendEmailModal)\">\r\n <i class=\"fa fa-bars\"></i>{{utilityService.getResourceValue(\"TestSendEmail\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-light-primary\"\r\n (click)=\"showTestSendSMSModal(TestSendSMSModal)\">\r\n <i class=\"fa fa-envelope-open-text sms\"></i>{{utilityService.getResourceValue(\"TestSendSMS\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-primary\" *ngIf=\"!ProductionMode\"\r\n (click)=\"showGenerateCodeByIdModal(GenerateCodeModal)\">\r\n <i class=\"fa fa-bars\"></i>{{utilityService.getResourceValue(\"GenerateCode\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3 btn-primary\" *ngIf=\"!ProductionMode\"\r\n (click)=\"showGenerateUpdateCodeByIdModal(GenerateCodeModal)\">\r\n <i class=\"fa fa-key\"></i>{{utilityService.getResourceValue(\"GenerateUpdateCode\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 mb-10\">\r\n <div class=\"d-flex h-100 align-items-center \">\r\n <!--begin::Option-->\r\n <div class=\"w-100 d-flex flex-column flex-center rounded-3 bg-light py-10 px-10 h-100\">\r\n <!--begin::Heading-->\r\n <div class=\"mb-7 d-flex justify-content-between w-100\">\r\n <!--begin::Title-->\r\n <a [routerLink]=\"['/Admin/Notifications/EditEmail',TemplateInfo.idEncrypted,'en']\"\r\n routerLinkActive=\"router-link-active\" class=\"text-primary mb-5 fw-boldest fs-2\">\r\n English:\r\n {{TemplateInfo.emailtemplateinfo.emailSubject.english}}\r\n </a>\r\n\r\n <a [routerLink]=\"['/Admin/Notifications/EditEmail',TemplateInfo.idEncrypted,'en']\"\r\n routerLinkActive=\"router-link-active\" class=\"btn btn-sm btn-light-primary btn-icon\">\r\n <i class=\"fa fa-pen\"></i>\r\n </a>\r\n\r\n </div>\r\n <div class=\"w-100 mb-10\">\r\n <!--begin::Item-->\r\n <div class=\"d-flex align-items-center mb-5\">\r\n <div class=\"fw-bold fs-6 text-gray-800 flex-grow-1 pe-3\">\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.templateEmailBaseHeader.english}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.emailHtmlHeadSection.english}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.emailBody.english}}\">\r\n </div>\r\n <div class=\"table-dark-skin pt-7\" innerHTML=\"{{TemplateInfo.emailtemplateinfo.templateEmailBaseFooter.english}}\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--end::Select-->\r\n </div>\r\n <!--end::Option-->\r\n </div>\r\n </div>\r\n <div class=\"col-xl-6 mb-10\">\r\n <div class=\"d-flex h-100 align-items-center\">\r\n <!--begin::Option-->\r\n <div class=\"w-100 d-flex flex-column flex-center rounded-3 bg-light py-10 px-10 h-100\">\r\n <!--begin::Heading-->\r\n <div class=\"mb-7 d-flex justify-content-between w-100\">\r\n <!--begin::Title-->\r\n <a [routerLink]=\"['/Admin/Notifications/EditEmail',TemplateInfo.idEncrypted,'ar']\"\r\n routerLinkActive=\"router-link-active\" class=\"text-primary mb-5 fw-boldest fs-2\">\r\n Arabic:\r\n {{TemplateInfo.emailtemplateinfo.emailSubject.arabic}}\r\n </a>\r\n <a [routerLink]=\"['/Admin/Notifications/EditEmail',TemplateInfo.idEncrypted,'ar']\"\r\n routerLinkActive=\"router-link-active\" class=\"btn btn-sm btn-light-primary btn-icon\">\r\n <i class=\"fa fa-pen\"></i>\r\n </a>\r\n </div>\r\n <div class=\"w-100 mb-10\">\r\n <!--begin::Item-->\r\n <div class=\"d-flex align-items-center mb-5\">\r\n <div class=\"fw-bold fs-6 text-gray-800 flex-grow-1 pe-3 ar\">\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.templateEmailBaseHeader.arabic}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.emailHtmlHeadSection.arabic}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.emailtemplateinfo.emailBody.arabic}}\">\r\n </div>\r\n <div class=\"table-dark-skin pt-7\" innerHTML=\"{{TemplateInfo.emailtemplateinfo.templateEmailBaseFooter.arabic}}\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!--end::Select-->\r\n </div>\r\n <!--end::Option-->\r\n </div>\r\n </div>\r\n <div class=\"col-xl-6\">\r\n <div class=\"card bg-light\">\r\n <div class=\"card-header border-0 py-10\">\r\n <div class=\"card-title text-primary mb-5 fw-boldest fs-2\">\r\n English:SMS\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\" [routerLink]=\"['/Admin/Notifications/EditSMS',TemplateInfo.idEncrypted,'en']\"\r\n routerLinkActive=\"router-link-active\">\r\n <span class=\"\">\r\n <i class=\"fa fa-pen font-size-18\"></i>\r\n </span>\r\n </a>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body d-flex align-items-center justify-content-center\">\r\n <div class=\"iphone\">\r\n <span class=\"position-absolute mobile-txt\">{{TemplateInfo.smstemplateinfo.sms.english}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-xl-6\">\r\n <div class=\"card bg-light\">\r\n <div class=\"card-header border-0 py-10\">\r\n <div class=\"card-title text-primary mb-5 fw-boldest fs-2\">\r\n Arabic:SMS\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\" [routerLink]=\"['/Admin/Notifications/EditSMS',TemplateInfo.idEncrypted,'ar']\"\r\n routerLinkActive=\"router-link-active\">\r\n <span class=\"\">\r\n <i class=\"fa fa-pen font-size-18\"></i>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"card-body d-flex align-items-center justify-content-center\">\r\n <div class=\"iphone\">\r\n <span class=\"position-absolute mobile-txt ar\"> {{TemplateInfo.smstemplateinfo.sms.arabic}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n<!-- send Email Modal -->\r\n<ng-template #SendEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"SendEmailTemplate\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"SendEmailFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"To\" [group]=\"SendEmailForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"Language\" [group]=\"SendEmailForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EmailServiceProvider\" [group]=\"SendEmailForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseSendEmailForm id=\"CloseSendEmailForm\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Send\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Test sms Email Modal -->\r\n<ng-template #TestSendSMSModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"TestSendSMS\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"TestSendSMSFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Phone [options]=\"TestSendSMSTo\" [group]=\"TestSendSMSForm\">\r\n </BBSF-Phone>\r\n </div>\r\n\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"TestSMSServiceProvider\" [group]=\"TestSendSMSForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n\r\n </div>\r\n\r\n <div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n Kindly note that these attributes are reserved\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ul class=\"list-unstyled\">\r\n <li class=\"mb-2\">NameEN</li>\r\n <li class=\"mb-2\">NameAR</li>\r\n <li class=\"mb-2\">Subject</li>\r\n <li class=\"mb-2\">LangKey</li>\r\n <li class=\"mb-2\">Mobile</li>\r\n <li class=\"mb-2\">Email</li>\r\n <li class=\"mb-2\">Date</li>\r\n <li class=\"mb-2\">Time</li>\r\n <li class=\"mb-2\">DateTime</li>\r\n </ul>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseTestSendSMSForm id=\"CloseTestSendSMSForm\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Send\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Test Send Email Modal -->\r\n<ng-template #TestSendEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"TestSendEmail\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"TestSendEmailFormOptions\">\r\n\r\n <div class=\"row\">\r\n\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"TestSendEmailTo\" [group]=\"TestSendEmailForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"TestEmailServiceProvider\" [group]=\"TestSendEmailForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"KeyMapNote\")}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ul class=\"list-unstyled\">\r\n <li class=\"mb-2\">NameEN</li>\r\n <li class=\"mb-2\">NameAR</li>\r\n <li class=\"mb-2\">Subject</li>\r\n <li class=\"mb-2\">LangKey</li>\r\n <li class=\"mb-2\">Mobile</li>\r\n <li class=\"mb-2\">Email</li>\r\n <li class=\"mb-2\">Date</li>\r\n <li class=\"mb-2\">Time</li>\r\n <li class=\"mb-2\">DateTime</li>\r\n </ul>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseTestSendEmailForm id=\"CloseTestSendEmailForm\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Send\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- edit Modal -->\r\n<ng-template #EditTemplateModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"EditTemplate\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditTemplateFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\" [group]=\"EditTemplateForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextArea [options]=\"EditDescription\" [group]=\"EditTemplateForm\">\r\n </BBSF-MultiLingualTextArea>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"!ProductionMode\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditSysName\" [group]=\"EditTemplateForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditOrganization\" [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditLanguageMode\" [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditCategory\" [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditMasterLayout\" [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditIsEmail\" [group]=\"EditTemplateForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditIsSms\" [group]=\"EditTemplateForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditEnableIntensiveLogging\" [group]=\"EditTemplateForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditTemplateModal id=\"CloseEditTemplateModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- GenerateCode Modal -->\r\n<ng-template #GenerateCodeModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"GenerateCode\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"GenerateCodeForm\">\r\n\r\n <div class=\"Row\">\r\n <BBSF-TextArea [options]=\"GenerateCodeTextArea\" [group]=\"GenerateCodeForm\" #GenerateCodeInput>\r\n </BBSF-TextArea>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseGenerateCodeModal id=\"CloseGenerateCodeModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"copyInputMessage()\">\r\n {{utilityService.getResourceValue(\"CopyToClipboard\")}}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n", components: [{ type: i7.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i8.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i8.ɵe, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i8.ɵi, selector: "BBSF-Phone", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.ɵf, selector: "BBSF-MultiLingualTextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.ɵg, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
374
390
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TemplateInfoComponent, decorators: [{
375
391
  type: Component,
376
392
  args: [{
377
393
  selector: 'lib-template-info',
378
394
  templateUrl: './template-info.component.html'
379
395
  }]
380
- }], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i1.EnvironmentService }, { type: i2.ClipboardService }, { type: i3.TemplateService }, { type: i4.ActivatedRoute }, { type: i4.Router }, { type: i5.PageInfoService }, { type: i6.NgbModal }]; }, propDecorators: { CloseSendEmailForm: [{
381
- type: ViewChild,
382
- args: ['CloseSendEmailForm', { static: false }]
383
- }], CloseTestSendEmailForm: [{
384
- type: ViewChild,
385
- args: ['CloseTestSendEmailForm', { static: false }]
386
- }], CloseTestSendSMSForm: [{
387
- type: ViewChild,
388
- args: ['CloseTestSendSMSForm', { static: false }]
389
- }], CloseEditTemplateModal: [{
390
- type: ViewChild,
391
- args: ['CloseEditTemplateModal', { static: false }]
392
- }] } });
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL25vdGlmaWNhdGlvbnMvdGVtcGxhdGUtaW5mby90ZW1wbGF0ZS1pbmZvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvbm90aWZpY2F0aW9ucy90ZW1wbGF0ZS1pbmZvL3RlbXBsYXRlLWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTNNLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUMxRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUM1RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUN4RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7Ozs7O0FBUXJGLE1BQU0sT0FBTyxxQkFBcUI7SUEwRGhDLFlBQW9CLFdBQXVCLEVBQVMsY0FBNkIsRUFBUyxvQkFBeUMsRUFBUyxrQkFBcUMsRUFBUyxpQkFBbUMsRUFBVSxlQUFnQyxFQUFVLGNBQThCLEVBQVUsTUFBYyxFQUFVLGVBQWdDLEVBQVUsWUFBc0I7UUFBN1gsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFBUyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUFTLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFBUyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQVMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQXpEalosZUFBVSxHQUFXLEVBQUUsQ0FBQTtRQU92QixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDcEIsK0JBQStCO1FBQy9CLHFCQUFnQixHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBR3JDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBRXpCLHFCQUFxQjtRQUN2QixrQkFBYSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBT2hDLDBCQUEwQjtRQUMxQixzQkFBaUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQU9wQyw4QkFBOEI7UUFDOUIsb0JBQWUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQU1wQyxxQkFBcUI7UUFDekIscUJBQWdCLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFjckMsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUssUUFBUTs7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFBO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFDLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1lBRWpFLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRTtnQkFDaEYsSUFBSSxNQUFNLEdBQUssTUFBTSxDQUFBO2dCQUNyQixJQUFJLENBQUMsWUFBWSxHQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7Z0JBQzdCLG1LQUFtSztnQkFDakssZUFBZSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQTtnQkFDeEQsZUFBZSxDQUFDLGVBQWUsR0FBQztvQkFDL0IsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRyxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQztvQkFDaEgsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDO29CQUN6RCxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUM7b0JBQ3ZJLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQztpQkFFM0QsQ0FBQztnQkFDSixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7WUFHSCxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUU7Z0JBQzlELElBQUksTUFBTSxHQUFLLE1BQU0sQ0FBQTtnQkFDckIsSUFBSSxDQUFDLHdCQUF3QixHQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFO2dCQUM1RCxJQUFJLE1BQU0sR0FBSyxNQUFNLENBQUE7Z0JBQ3JCLElBQUksQ0FBQyxzQkFBc0IsR0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztLQUFBO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN4RCxJQUFJLGFBQWEsR0FBRyxNQUFhLENBQUE7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUE7WUFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsbUJBQW1CLENBQUE7WUFDckQsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFBO1lBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsNEJBQTRCLENBQUE7WUFDbEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQTtRQUNoRSxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFJRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQseUJBQXlCLENBQUMsUUFBYSxFQUFFLGlCQUFpQjtRQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2RSxJQUFJLEtBQUssR0FBRyxNQUFhLENBQUE7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztZQUN4RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzNDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1lBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFNUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFFYixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCwrQkFBK0IsQ0FBQyxRQUFhLEVBQUUsaUJBQWlCO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUV6QyxJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM1RSxJQUFJLEtBQUssR0FBRyxNQUFhLENBQUE7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztZQUN4RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzNDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1lBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFFYixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxpQkFBaUI7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRTtZQUNoRixJQUFJLE1BQU0sR0FBSyxNQUFNLENBQUE7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBRXpCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUE7WUFFbEMsSUFBSSxJQUFJLEdBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRXhDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFDeEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7WUFDMUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7WUFDNUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFFdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztZQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7WUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUcvQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLDBCQUEwQixDQUFDO1lBQ2hFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEdBQUcsc0JBQXNCLENBQUM7WUFDaEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFFeEUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksR0FBRyx5QkFBeUIsQ0FBQztZQUM5RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxHQUFHLHFCQUFxQixDQUFDO1lBQzlELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBRXRFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUE7WUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUE7WUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFBO1lBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFBO1lBQ3hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFBLENBQUM7WUFHekssSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQTtZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQTtZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtZQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFBLENBQUM7WUFHN0ssSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQTtZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQTtZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtZQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFBLENBQUM7WUFHekwsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQTtZQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUE7WUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTtZQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQSxDQUFDO1lBR2pLLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUE7WUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFBO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFBO1lBRzlDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUE7WUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO1lBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFBO1lBRzFDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEdBQUcsNEJBQTRCLENBQUE7WUFDbkUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQTtZQUNuRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUE7WUFHNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUU1QyxDQUFDLENBQUMsQ0FBQztJQUlMLENBQUM7SUFDRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO1lBQ2pDLE9BQU87U0FDUjthQUNJO1lBQ0gsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUM5QyxJQUFJLGFBQWEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN6RCxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUMzRCxhQUFhLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUE7WUFDL0MsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLHdCQUF3QixDQUFBO1lBQ3hFLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQTtZQUN0RSxhQUFhLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtZQUNuRSxhQUFhLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDL0QsYUFBYSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtZQUN2RSxhQUFhLENBQUMsOEJBQThCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1lBQ25GLGFBQWEsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQTtZQUMvQyxhQUFhLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUE7WUFDM0MsYUFBYSxDQUFDLHNCQUFzQixHQUFHLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQTtZQUU3RSxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN6RSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9CLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBRWIsQ0FBQyxDQUFDLENBQUE7U0FDTDtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxjQUFjO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUV0QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRzFCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUE7UUFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQTtRQUMzRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQTtRQUNwRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUNqRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ25ELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRTVDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUE7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7UUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUVwQyxDQUFDO0lBQ0QsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUU7WUFDOUIsT0FBTztTQUNSO2FBQ0k7WUFDSCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztZQUMzQyxJQUFJLHNCQUFzQixHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUMxRCxzQkFBc0IsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1RCxzQkFBc0IsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQTtZQUNoRCxzQkFBc0IsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQTtZQUNyRCxzQkFBc0IsQ0FBQyxpQkFBaUIsR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQUE7WUFDMUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNsRixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2QsQ0FBQyxDQUFDLENBQUE7U0FDSjtJQUNILENBQUM7SUFHRCxzQkFBc0IsQ0FBQyxrQkFBa0I7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRXRDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztRQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUV2QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLDBCQUEwQixDQUFBO1FBQy9ELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEdBQUcsc0JBQXNCLENBQUE7UUFDL0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUE7UUFDeEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDckQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUN2RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFcEMsQ0FBQztJQUNELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUU7WUFDbEMsT0FBTztTQUNSO2FBQ0k7WUFDRixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1lBQ2hELElBQUksc0JBQXNCLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1lBQzVELHNCQUFzQixDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVELHNCQUFzQixDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFBO1lBQzVELHNCQUFzQixDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQTtZQUM5RSxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3RGLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixDQUFDLENBQUMsQ0FBQTtTQUNMO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLGdCQUFnQjtRQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUE7UUFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTtRQUVyQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFBO1FBQzNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEdBQUcsb0JBQW9CLENBQUE7UUFDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUE7UUFDcEUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDbkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNyRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFcEMsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFO1lBQ2hDLE9BQU87U0FDUjthQUNJO1lBQ0gsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFDN0MsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7WUFDeEQsb0JBQW9CLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUQsSUFBSSxtQkFBbUIsR0FBVyxJQUFJLENBQUM7WUFDdkMsSUFBSSxXQUFXLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRTtnQkFDckMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxtQkFBNkIsQ0FBQztnQkFDOUUsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzthQUM5RDtZQUNELG9CQUFvQixDQUFDLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQTtZQUN6RCxvQkFBb0IsQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixDQUFBO1lBQ3hFLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzlFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixDQUFDLENBQUMsQ0FBQTtTQUNMO0lBQ0gsQ0FBQzs7bUhBN2FVLHFCQUFxQjt1R0FBckIscUJBQXFCLHdnQkNsQmxDLHNzcUJBc2RBOzRGRHBjYSxxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsV0FBVyxFQUFFLGdDQUFnQztpQkFDOUM7dVdBMEJxRCxrQkFBa0I7c0JBQXJFLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU9RLHNCQUFzQjtzQkFBN0UsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBUUUsb0JBQW9CO3NCQUF6RSxTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFnQkEsc0JBQXNCO3NCQUE3RSxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENoZWNrQm94T3B0aW9ucywgQ29udHJvbExheW91dCwgQ291bnRyeSwgRHJvcGRvd25PcHRpb25zLCBFbmdsaXNoQXJhYmljRFRPLCBJbnB1dFR5cGUsIE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zLCBQaG9uZU9wdGlvbnMsIFRleHRBcmVhT3B0aW9ucywgVGV4dEJveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFRlbXBsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9UZW1wbGF0ZVNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ2xpcGJvYXJkU2VydmljZSB9IGZyb20gJ25neC1jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBTZW5kRW1haWxUZW1wbGF0ZU1vZGVsIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvbW9kZWxzL05vdGlmaWNhdGlvbnNNb2RlbHMvU2VuZEVtYWlsVGVtcGxhdGVNb2RlbCc7XHJcbmltcG9ydCB7IEVtYWlsVGVtcGxhdGVUZXN0ZXJNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvTm90aWZpY2F0aW9uc01vZGVscy9FbWFpbFRlbXBsYXRlVGVzdGVyTW9kZWwnO1xyXG5pbXBvcnQgeyBTTVNUZW1wbGF0ZVRlc3Rlck1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Ob3RpZmljYXRpb25zTW9kZWxzL1NNU1RlbXBsYXRlVGVzdGVyTW9kZWwnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZURUTyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvTm90aWZpY2F0aW9uc01vZGVscy9UZW1wbGF0ZURUTyc7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10ZW1wbGF0ZS1pbmZvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGVtcGxhdGUtaW5mby5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlSW5mb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgVGVtcGxhdGVJZDogc3RyaW5nID0gXCJcIlxyXG4gIFRlbXBsYXRlSW5mbzphbnlcclxuICBUZW1wbGF0ZTphbnlcclxuICBQcm9kdWN0aW9uTW9kZTogYm9vbGVhbjtcclxuICBMYW5ndWFnZUxpc3Q6YW55XHJcbiAgRW1haWxTZXJ2aWNlUHJvdmlkZXJMaXN0OmFueVxyXG4gIFNNU1NlcnZpY2VQcm92aWRlckxpc3Q6YW55XHJcbiAgQ2F0ZWdvcnlMaXN0ID0gW107XHJcbiAgVHlwZUxpc3QgPSBbXTtcclxuICBPcmdhbml6YXRpb25MaXN0ID0gW107XHJcbiAgTGFuZ3VhZ2VNb2RlTGlzdCA9IFtdO1xyXG4gIE1hc3RlckxheW91dExpc3QgPSBbXTtcclxuICAgIC8vR2VuZXJhdGVDb2RlICBNb2RlbCBDb250cm9scyBcclxuICAgIEdlbmVyYXRlQ29kZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIElzT3BlbkdlbmVyYXRlQ29kZU1vZGFsOiBib29sZWFuO1xyXG4gICAgR2VuZXJhdGVDb2RlVGV4dEFyZWE6IFRleHRBcmVhT3B0aW9ucztcclxuICAgIFZhbHVlVG9Db3B5OiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8vU2VuZCBNb2RlbCBDb250cm9sc1xyXG4gIFNlbmRFbWFpbEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBUbzogVGV4dEFyZWFPcHRpb25zO1xyXG4gIEVtYWlsU2VydmljZVByb3ZpZGVyIDogRHJvcGRvd25PcHRpb25zO1xyXG4gIExhbmd1YWdlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgSXNTZW5kRW1haWxGb3JtTG9hZGVkOiBib29sZWFuO1xyXG4gIEBWaWV3Q2hpbGQoJ0Nsb3NlU2VuZEVtYWlsRm9ybScsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZVNlbmRFbWFpbEZvcm06IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLy9UZXN0IFNlbmQgTW9kZWwgQ29udHJvbHNcclxuICAgIFRlc3RTZW5kRW1haWxGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICBUZXN0U2VuZEVtYWlsVG86IFRleHRBcmVhT3B0aW9ucztcclxuICAgIFRlc3RFbWFpbFNlcnZpY2VQcm92aWRlciA6IERyb3Bkb3duT3B0aW9ucztcclxuICAgIElzVGVzdFNlbmRFbWFpbEZvcm1Mb2FkZWQ6IGJvb2xlYW47XHJcbiAgICBAVmlld0NoaWxkKCdDbG9zZVRlc3RTZW5kRW1haWxGb3JtJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlVGVzdFNlbmRFbWFpbEZvcm06IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuICAgICAgLy9UZXN0IFNlbmQgU01TIE1vZGVsIENvbnRyb2xzXHJcbiAgICAgIFRlc3RTZW5kU01TRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICBUZXN0U2VuZFNNU1RvOiBQaG9uZU9wdGlvbnM7XHJcbiAgICAgIFRlc3RTTVNTZXJ2aWNlUHJvdmlkZXIgOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgICAgIElzVGVzdFNlbmRTTVNGb3JtTG9hZGVkOiBib29sZWFuO1xyXG4gICAgICBAVmlld0NoaWxkKCdDbG9zZVRlc3RTZW5kU01TRm9ybScsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZVRlc3RTZW5kU01TRm9ybTogRWxlbWVudFJlZjtcclxuICBcclxuICAgICAgLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdFRlbXBsYXRlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEVkaXRNdWx0aUxpbmd1YWxOYW1lOk11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zXHJcbiAgRWRpdFN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXREZXNjcmlwdGlvbkluRW5nbGlzaDogVGV4dEFyZWFPcHRpb25zO1xyXG4gIEVkaXREZXNjcmlwdGlvbkluQXJhYmljOiBUZXh0QXJlYU9wdGlvbnM7XHJcbiAgRWRpdE9yZ2FuaXphdGlvbjogRHJvcGRvd25PcHRpb25zO1xyXG4gIEVkaXRMYW5ndWFnZU1vZGU6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0Q2F0ZWdvcnk6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0TWFzdGVyTGF5b3V0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgSXNFZGl0VGVtcGxhdGVGb3JtTG9hZGVkOiBib29sZWFuO1xyXG4gIEVkaXRJc0VtYWlsOiBDaGVja0JveE9wdGlvbnM7XHJcbiAgRWRpdElzU21zOiBDaGVja0JveE9wdGlvbnM7XHJcbiAgRWRpdEVuYWJsZUludGVuc2l2ZUxvZ2dpbmc6IENoZWNrQm94T3B0aW9ucztcclxuICBAVmlld0NoaWxkKCdDbG9zZUVkaXRUZW1wbGF0ZU1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlRWRpdFRlbXBsYXRlTW9kYWw6IEVsZW1lbnRSZWY7XHJcbiAgbGFuZ3VhZ2U6c3RyaW5nPVwiXCI7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTpBdXRoU2VydmljZSwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOlV0aWxpdHlTZXJ2aWNlLHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6QkJTRlRyYW5zbGF0ZVNlcnZpY2UscHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6RW52aXJvbm1lbnRTZXJ2aWNlLHByaXZhdGUgX2NsaXBib2FyZFNlcnZpY2U6IENsaXBib2FyZFNlcnZpY2UsIHByaXZhdGUgdGVtcGxhdGVTZXJ2aWNlOiBUZW1wbGF0ZVNlcnZpY2UsIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLCBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLlRlbXBsYXRlSWQgPSBwYXJhbXNbJ2lkJ107XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCk9PntcclxuICAgICAgdGhpcy5sYW5ndWFnZSA9IGV2ZW50Lmxhbmc7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMubGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xyXG4gICAgdGhpcy5Qcm9kdWN0aW9uTW9kZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldFByb2R1Y3Rpb25Nb2RlKClcclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlU2VydmljZS5HZXRUZW1wbGF0ZUluZm8oTnVtYmVyKHRoaXMuVGVtcGxhdGVJZCkpLnN1YnNjcmliZSgocmVzdWx0KT0+e1xyXG4gICAgICBsZXQgUmVzdWx0OmFueT1yZXN1bHRcclxuICAgICAgdGhpcy5UZW1wbGF0ZUluZm89UmVzdWx0LnZhbDtcclxuICAgICAgLy90aGlzLlN1YmhlYWRlclRpdGxlID0gdGhpcy5sYW5ndWFnZSA9PSBcImVuXCIgPyB0aGlzLlRlbXBsYXRlSW5mby5lbWFpbHRlbXBsYXRlaW5mby5lbWFpbFN1YmplY3QuZW5nbGlzaCA6IHRoaXMuVGVtcGxhdGVJbmZvLmVtYWlsdGVtcGxhdGVpbmZvLmVtYWlsU3ViamVjdC5hcmFiaWM7XHJcbiAgICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZT10aGlzLlRlbXBsYXRlSW5mby50ZW1wbGF0ZU5hbWVcclxuICAgICAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZUJyZWFkY3J1bWJzPVtcclxuICAgICAgICAge3RpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpICwgcGF0aDogJy9BZG1pbi9Ib21lJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2V9LFxyXG4gICAgICAgICB7dGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZX0sXHJcbiAgICAgICAgIHt0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVtcGxhdGVzXCIpLCBwYXRoOiAnL0FkbWluL05vdGlmaWNhdGlvbnMvVGVtcGxhdGVzJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2V9LFxyXG4gICAgICAgICB7dGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZX1cclxuICBcclxuICAgICAgXTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgfSk7XHJcblxyXG4gICBcclxuICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlLkdldFNlbmRFbWFpbFRlbXBsYXRlKCkuc3Vic2NyaWJlKChyZXN1bHQpPT57XHJcbiAgICAgIGxldCBSZXN1bHQ6YW55PXJlc3VsdFxyXG4gICAgICB0aGlzLkVtYWlsU2VydmljZVByb3ZpZGVyTGlzdD1SZXN1bHQudmFsLmVtYWlsUHJvdmlkZXJzO1xyXG4gICAgICB0aGlzLkxhbmd1YWdlTGlzdD1SZXN1bHQudmFsLmxhbmd1YWdlS2V5cztcclxuICAgIH0pO1xyXG4gICAgdGhpcy50ZW1wbGF0ZVNlcnZpY2UuR2V0VGVzdFNNU1RlbXBsYXRlKCkuc3Vic2NyaWJlKChyZXN1bHQpPT57XHJcbiAgICAgIGxldCBSZXN1bHQ6YW55PXJlc3VsdFxyXG4gICAgICB0aGlzLlNNU1NlcnZpY2VQcm92aWRlckxpc3Q9UmVzdWx0LnZhbDtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5Mb2FkRHJvcGRvd25MaXN0cygpO1xyXG4gIH1cclxuXHJcbiAgTG9hZERyb3Bkb3duTGlzdHMoKSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlU2VydmljZS5Mb2FkZHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IERyb3Bkb3duTGlzdHMgPSByZXN1bHQgYXMgYW55XHJcbiAgICAgIHRoaXMuT3JnYW5pemF0aW9uTGlzdCA9IERyb3Bkb3duTGlzdHMub3JnYW5pemF0aW9uXHJcbiAgICAgIHRoaXMuQ2F0ZWdvcnlMaXN0ID0gRHJvcGRvd25MaXN0cy5sb29rVXBJdGVtc0NhdGVnb3J5XHJcbiAgICAgIHRoaXMuVHlwZUxpc3QgPSBEcm9wZG93bkxpc3RzLnR5cGVzXHJcbiAgICAgIHRoaXMuTWFzdGVyTGF5b3V0TGlzdCA9IERyb3Bkb3duTGlzdHMuZW1haWxIZWFkZXJBbmRGb290ZXJUZW1wbGF0ZVxyXG4gICAgICB0aGlzLkxhbmd1YWdlTW9kZUxpc3QgPSBEcm9wZG93bkxpc3RzLmxvb2tVcEl0ZW1zRW1haWxUZW1wbGF0ZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gXHJcbiBcclxuICBjb3B5SW5wdXRNZXNzYWdlKCkge1xyXG4gICAgdGhpcy5fY2xpcGJvYXJkU2VydmljZS5jb3B5KHRoaXMuVmFsdWVUb0NvcHkudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBzaG93R2VuZXJhdGVDb2RlQnlJZE1vZGFsKHRlbXBsYXRlOiBhbnksIEdlbmVyYXRlQ29kZU1vZGFsKSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlU2VydmljZS5HZW5lcmF0ZUNvZGVCeUlkKCB0ZW1wbGF0ZS5pZCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIFZhbHVlID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLk5hbWUgPSBcIkdlbmVyYXRlQ29kZVRleHRBcmVhXCI7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuVmFsdWUgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy5WYWx1ZVRvQ29weSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLklzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuUm93cyA9IDIwO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLkNvbHMgPSAyMDtcclxuICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5NYXhMZW5ndGggPSAxMDAwMDAwO1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEdlbmVyYXRlQ29kZU1vZGFsKTtcclxuXHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICBcclxuICAgIH0pXHJcbiAgfVxyXG4gIHNob3dHZW5lcmF0ZVVwZGF0ZUNvZGVCeUlkTW9kYWwodGVtcGxhdGU6IGFueSwgR2VuZXJhdGVDb2RlTW9kYWwpIHtcclxuICAgIHRoaXMuR2VuZXJhdGVDb2RlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcblxyXG4gICAgdGhpcy50ZW1wbGF0ZVNlcnZpY2UuR2VuZXJhdGVVcGRhdGVDb2RlQnlJZCh0ZW1wbGF0ZS5pZCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIFZhbHVlID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLk5hbWUgPSBcIkdlbmVyYXRlQ29kZVRleHRBcmVhXCI7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuVmFsdWUgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy5WYWx1ZVRvQ29weSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLklzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuUm93cyA9IDIwO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLkNvbHMgPSAyMDtcclxuICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5NYXhMZW5ndGggPSAxMDAwMDAwO1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEdlbmVyYXRlQ29kZU1vZGFsKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICBcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzaG93RWRpdFRlbXBsYXRlTW9kYWwoRWRpdFRlbXBsYXRlTW9kYWwpIHtcclxuICAgIHRoaXMuRWRpdFRlbXBsYXRlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICB0aGlzLnRlbXBsYXRlU2VydmljZS5HZXRUZW1wbGF0ZUJ5SWQoTnVtYmVyKHRoaXMuVGVtcGxhdGVJZCkpLnN1YnNjcmliZSgocmVzdWx0KT0+e1xyXG4gICAgICBsZXQgUmVzdWx0OmFueT1yZXN1bHRcclxuICAgICAgdGhpcy5UZW1wbGF0ZT1SZXN1bHQudmFsO1xyXG5cclxuICAgICAgdGhpcy5UZW1wbGF0ZUlkID0gdGhpcy5UZW1wbGF0ZS5pZFxyXG4gIFxyXG4gICAgICBsZXQgTmFtZT1uZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBOYW1lLkFyYWJpYz10aGlzLlRlbXBsYXRlLm5hbWUuYXJhYmljO1xyXG4gICAgICBOYW1lLkVuZ2xpc2g9dGhpcy5UZW1wbGF0ZS5uYW1lLmVuZ2xpc2g7XHJcbiAgXHJcbiAgICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbE5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0TXVsdGlMaW5ndWFsTmFtZS5OYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbE5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxOYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxOYW1lLlZhbHVlID0gTmFtZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFN5c05hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0U3lzTmFtZS5OYW1lID0gXCJFZGl0U3lzTmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXRTeXNOYW1lLkxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFN5c05hbWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRTeXNOYW1lLlZhbHVlID0gdGhpcy5UZW1wbGF0ZS5zeXNOYW1lO1xyXG4gIFxyXG4gIFxyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbkluRW5nbGlzaCA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb25JbkVuZ2xpc2guTmFtZSA9IFwiRWRpdERlc2NyaXB0aW9uSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uSW5FbmdsaXNoLkxhYmVsS2V5ID0gXCJEZXNjcmlwdGlvbkluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbkluRW5nbGlzaC5WYWx1ZSA9IHRoaXMuVGVtcGxhdGUuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuXHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uSW5BcmFiaWMgPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uSW5BcmFiaWMuTmFtZSA9IFwiRWRpdERlc2NyaXB0aW9uSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb25JbkFyYWJpYy5MYWJlbEtleSA9IFwiRGVzY3JpcHRpb25JbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbkluQXJhYmljLlZhbHVlID0gdGhpcy5UZW1wbGF0ZS5kZXNjcmlwdGlvbi5hcmFiaWM7XHJcbiAgXHJcbiAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uLk5hbWUgPSBcIkVkaXRPcmdhbml6YXRpb25cIlxyXG4gICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uTGFiZWxLZXkgPSBcIk9yZ2FuaXphdGlvblwiXHJcbiAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWxcclxuICAgICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uLkRhdGFTb3VyY2UgPSB0aGlzLk9yZ2FuaXphdGlvbkxpc3RcclxuICAgICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uLlNlbGVjdGVkSXRlbXMgPSB0aGlzLk9yZ2FuaXphdGlvbkxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0gdGhpcy5UZW1wbGF0ZS5vcmdhbml6YXRpb25JRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG4gIFxyXG4gIFxyXG4gICAgICB0aGlzLkVkaXRMYW5ndWFnZU1vZGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdExhbmd1YWdlTW9kZS5OYW1lID0gXCJFZGl0TGFuZ3VhZ2VNb2RlXCJcclxuICAgICAgdGhpcy5FZGl0TGFuZ3VhZ2VNb2RlLkxhYmVsS2V5ID0gXCJMYW5ndWFnZU1vZGVcIlxyXG4gICAgICB0aGlzLkVkaXRMYW5ndWFnZU1vZGUuRGF0YVNvdXJjZSA9IHRoaXMuTGFuZ3VhZ2VNb2RlTGlzdFxyXG4gICAgICB0aGlzLkVkaXRMYW5ndWFnZU1vZGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TGFuZ3VhZ2VNb2RlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TGFuZ3VhZ2VNb2RlLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FZGl0TGFuZ3VhZ2VNb2RlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRMYW5ndWFnZU1vZGUuU2VsZWN0ZWRJdGVtcyA9IHRoaXMuTGFuZ3VhZ2VNb2RlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLlRlbXBsYXRlLmxhbmd1YWdlTW9kZUl0ZW1JRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG4gIFxyXG4gIFxyXG4gICAgICB0aGlzLkVkaXRNYXN0ZXJMYXlvdXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5OYW1lID0gXCJFZGl0TWFzdGVyTGF5b3V0XCJcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LkxhYmVsS2V5ID0gXCJNYXN0ZXJMYXlvdXRcIlxyXG4gICAgICB0aGlzLkVkaXRNYXN0ZXJMYXlvdXQuRGF0YVNvdXJjZSA9IHRoaXMuTWFzdGVyTGF5b3V0TGlzdFxyXG4gICAgICB0aGlzLkVkaXRNYXN0ZXJMYXlvdXQuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRNYXN0ZXJMYXlvdXQuU2VsZWN0ZWRJdGVtcyA9IHRoaXMuTWFzdGVyTGF5b3V0TGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLlRlbXBsYXRlLmVtYWlsSGVhZGVyQW5kRm9vdGVyVGVtcGxhdGVJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG4gIFxyXG4gIFxyXG4gICAgICB0aGlzLkVkaXRDYXRlZ29yeSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0Q2F0ZWdvcnkuTmFtZSA9IFwiRWRpdENhdGVnb3J5XCJcclxuICAgICAgdGhpcy5FZGl0Q2F0ZWdvcnkuTGFiZWxLZXkgPSBcIkNhdGVnb3J5XCJcclxuICAgICAgdGhpcy5FZGl0Q2F0ZWdvcnkuRGF0YVNvdXJjZSA9IHRoaXMuQ2F0ZWdvcnlMaXN0XHJcbiAgICAgIHRoaXMuRWRpdENhdGVnb3J5LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdENhdGVnb3J5LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0Q2F0ZWdvcnkuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLkVkaXRDYXRlZ29yeS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0Q2F0ZWdvcnkuU2VsZWN0ZWRJdGVtcyA9IHRoaXMuQ2F0ZWdvcnlMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuVGVtcGxhdGUuY2F0ZWdvcnlJdGVtSUQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdOztcclxuICBcclxuICBcclxuICAgICAgdGhpcy5FZGl0SXNFbWFpbCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0SXNFbWFpbC5OYW1lID0gXCJFZGl0SXNFbWFpbFwiXHJcbiAgICAgIHRoaXMuRWRpdElzRW1haWwuTGFiZWxLZXkgPSBcIklzRW1haWxcIlxyXG4gICAgICB0aGlzLkVkaXRJc0VtYWlsLlZhbHVlID0gdGhpcy5UZW1wbGF0ZS5pc0VtYWlsXHJcbiAgXHJcbiAgXHJcbiAgICAgIHRoaXMuRWRpdElzU21zID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRJc1Ntcy5OYW1lID0gXCJFZGl0SXNTbXNcIlxyXG4gICAgICB0aGlzLkVkaXRJc1Ntcy5MYWJlbEtleSA9IFwiSXNTbXNcIlxyXG4gICAgICB0aGlzLkVkaXRJc1Ntcy5WYWx1ZSA9IHRoaXMuVGVtcGxhdGUuaXNTbXNcclxuICBcclxuICBcclxuICAgICAgdGhpcy5FZGl0RW5hYmxlSW50ZW5zaXZlTG9nZ2luZyA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RW5hYmxlSW50ZW5zaXZlTG9nZ2luZy5OYW1lID0gXCJFZGl0RW5hYmxlSW50ZW5zaXZlTG9nZ2luZ1wiXHJcbiAgICAgIHRoaXMuRWRpdEVuYWJsZUludGVuc2l2ZUxvZ2dpbmcuTGFiZWxLZXkgPSBcIkVuYWJsZUludGVuc2l2ZUxvZ2dpbmdcIlxyXG4gICAgICB0aGlzLkVkaXRFbmFibGVJbnRlbnNpdmVMb2dnaW5nLlZhbHVlID0gdGhpcy5UZW1wbGF0ZS5lbmFibGVJbnRlbnNpdmVMb2dnaW5nXHJcbiAgXHJcbiAgXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdFRlbXBsYXRlTW9kYWwpO1xyXG4gIFxyXG4gICAgfSk7XHJcbiAgICBcclxuIFxyXG4gICBcclxuICB9XHJcbiAgZWRpdFRlbXBsYXRlKCkge1xyXG4gICAgaWYgKHRoaXMuRWRpdFRlbXBsYXRlRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkVkaXRUZW1wbGF0ZUZvcm0udmFsdWU7XHJcbiAgICAgIGxldCBUZW1wbGF0ZU1vZGVsID0gbmV3IFRlbXBsYXRlRFRPKCk7XHJcbiAgICAgIFRlbXBsYXRlTW9kZWwuSUQgPSBOdW1iZXIodGhpcy5UZW1wbGF0ZUlkKTtcclxuICAgICAgVGVtcGxhdGVNb2RlbC5OYW1lLkFyYWJpYyA9IFJlc3VsdE1vZGVsLk5hbWUuQXJhYmljVmFsdWU7XHJcbiAgICAgIFRlbXBsYXRlTW9kZWwuTmFtZS5FbmdsaXNoID0gUmVzdWx0TW9kZWwuTmFtZS5FbmdsaXNoVmFsdWU7XHJcbiAgICAgIFRlbXBsYXRlTW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLkVkaXRTeXNOYW1lXHJcbiAgICAgIFRlbXBsYXRlTW9kZWwuRGVzY3JpcHRpb24uRW5nbGlzaCA9IFJlc3VsdE1vZGVsLkVkaXREZXNjcmlwdGlvbkluRW5nbGlzaFxyXG4gICAgICBUZW1wbGF0ZU1vZGVsLkRlc2NyaXB0aW9uLkFyYWJpYyA9IFJlc3VsdE1vZGVsLkVkaXREZXNjcmlwdGlvbkluQXJhYmljXHJcbiAgICAgIFRlbXBsYXRlTW9kZWwuT3JnYW5pemF0aW9uSUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuRWRpdE9yZ2FuaXphdGlvbilcclxuICAgICAgVGVtcGxhdGVNb2RlbC5DYXRlZ29yeUl0ZW1JRCA9IE51bWJlcihSZXN1bHRNb2RlbC5FZGl0Q2F0ZWdvcnkpXHJcbiAgICAgIFRlbXBsYXRlTW9kZWwuTGFuZ3VhZ2VNb2RlSXRlbUlEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRMYW5ndWFnZU1vZGUpXHJcbiAgICAgIFRlbXBsYXRlTW9kZWwuRW1haWxIZWFkZXJBbmRGb290ZXJUZW1wbGF0ZUlEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRNYXN0ZXJMYXlvdXQpXHJcbiAgICAgIFRlbXBsYXRlTW9kZWwuSXNFbWFpbCA9IFJlc3VsdE1vZGVsLkVkaXRJc0VtYWlsXHJcbiAgICAgIFRlbXBsYXRlTW9kZWwuSXNTbXMgPSBSZXN1bHRNb2RlbC5FZGl0SXNTbXNcclxuICAgICAgVGVtcGxhdGVNb2RlbC5FbmFibGVJbnRlbnNpdmVMb2dnaW5nID0gUmVzdWx0TW9kZWwuRWRpdEVuYWJsZUludGVuc2l2ZUxvZ2dpbmdcclxuXHJcbiAgICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlLkVkaXRFbWFpbFRlbXBsYXRlKFRlbXBsYXRlTW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICBcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1NlbmRFbWFpbE1vZGFsKFNlbmRFbWFpbE1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5TZW5kRW1haWxGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuXHJcbiAgICB0aGlzLlRvID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgdGhpcy5Uby5OYW1lID0gXCJUb1wiO1xyXG4gICAgdGhpcy5Uby5MYWJlbEtleSA9IFwiVG9cIjtcclxuICAgIHRoaXMuVG8uVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5Uby5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5FbWFpbFNlcnZpY2VQcm92aWRlciA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuRW1haWxTZXJ2aWNlUHJvdmlkZXIuTmFtZSA9IFwiRW1haWxTZXJ2aWNlUHJvdmlkZXJcIlxyXG4gICAgdGhpcy5FbWFpbFNlcnZpY2VQcm92aWRlci5MYWJlbEtleSA9IFwiRW1haWxTZXJ2aWNlUHJvdmlkZXJcIlxyXG4gICAgdGhpcy5FbWFpbFNlcnZpY2VQcm92aWRlci5EYXRhU291cmNlID0gdGhpcy5FbWFpbFNlcnZpY2VQcm92aWRlckxpc3RcclxuICAgIHRoaXMuRW1haWxTZXJ2aWNlUHJvdmlkZXIuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuRW1haWxTZXJ2aWNlUHJvdmlkZXIuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5FbWFpbFNlcnZpY2VQcm92aWRlci5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICB0aGlzLkVtYWlsU2VydmljZVByb3ZpZGVyLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuTGFuZ3VhZ2UgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLkxhbmd1YWdlLk5hbWUgPSBcIkxhbmd1YWdlXCJcclxuICAgIHRoaXMuTGFuZ3VhZ2UuTGFiZWxLZXkgPSBcIkxhbmd1YWdlXCJcclxuICAgIHRoaXMuTGFuZ3VhZ2UuRGF0YVNvdXJjZSA9IHRoaXMuTGFuZ3VhZ2VMaXN0XHJcbiAgICB0aGlzLkxhbmd1YWdlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLkxhbmd1YWdlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuTGFuZ3VhZ2UuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgdGhpcy5MYW5ndWFnZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oU2VuZEVtYWlsTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcbiAgc2VuZEVtYWlsKCkge1xyXG4gICAgaWYgKHRoaXMuU2VuZEVtYWlsRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLlNlbmRFbWFpbEZvcm0udmFsdWU7XHJcbiAgICAgIGxldCBzZW5kRW1haWxUZW1wbGF0ZU1vZGVsID0gbmV3IFNlbmRFbWFpbFRlbXBsYXRlTW9kZWwoKTtcclxuICAgICAgc2VuZEVtYWlsVGVtcGxhdGVNb2RlbC5UZW1wbGF0ZUlEID0gTnVtYmVyKHRoaXMuVGVtcGxhdGVJZCk7XHJcbiAgICAgIHNlbmRFbWFpbFRlbXBsYXRlTW9kZWwuVG9FbWFpbHMgPSBSZXN1bHRNb2RlbC5Ub1xyXG4gICAgICBzZW5kRW1haWxUZW1wbGF0ZU1vZGVsLkxhbmdLZXkgPSBSZXN1bHRNb2RlbC5MYW5ndWFnZVxyXG4gICAgICBzZW5kRW1haWxUZW1wbGF0ZU1vZGVsLkVtYWlsUHJvdmlkZXJOYW1lID0gUmVzdWx0TW9kZWwuRW1haWxTZXJ2aWNlUHJvdmlkZXJcclxuICAgICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlLlNlbmRFbWFpbFRlbXBsYXRlKHNlbmRFbWFpbFRlbXBsYXRlTW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2hvd1Rlc3RTZW5kRW1haWxNb2RhbChUZXN0U2VuZEVtYWlsTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLlNlbmRFbWFpbEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KVxyXG5cclxuICAgIHRoaXMuVGVzdFNlbmRFbWFpbFRvID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgdGhpcy5UZXN0U2VuZEVtYWlsVG8uTmFtZSA9IFwiVGVzdFNlbmRFbWFpbFRvXCI7XHJcbiAgICB0aGlzLlRlc3RTZW5kRW1haWxUby5MYWJlbEtleSA9IFwiU2VuZFRvXCI7XHJcbiAgICB0aGlzLlRlc3RTZW5kRW1haWxUby5WYWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLlRlc3RTZW5kRW1haWxUby5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLlRlc3RFbWFpbFNlcnZpY2VQcm92aWRlciA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuVGVzdEVtYWlsU2VydmljZVByb3ZpZGVyLk5hbWUgPSBcIlRlc3RFbWFpbFNlcnZpY2VQcm92aWRlclwiXHJcbiAgICB0aGlzLlRlc3RFbWFpbFNlcnZpY2VQcm92aWRlci5MYWJlbEtleSA9IFwiRW1haWxTZXJ2aWNlUHJvdmlkZXJcIlxyXG4gICAgdGhpcy5UZXN0RW1haWxTZXJ2aWNlUHJvdmlkZXIuRGF0YVNvdXJjZSA9IHRoaXMuRW1haWxTZXJ2aWNlUHJvdmlkZXJMaXN0XHJcbiAgICB0aGlzLlRlc3RFbWFpbFNlcnZpY2VQcm92aWRlci5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5UZXN0RW1haWxTZXJ2aWNlUHJvdmlkZXIuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5UZXN0RW1haWxTZXJ2aWNlUHJvdmlkZXIuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgdGhpcy5UZXN0RW1haWxTZXJ2aWNlUHJvdmlkZXIuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFRlc3RTZW5kRW1haWxNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuICB0ZXN0U2VuZEVtYWlsKCkge1xyXG4gICAgaWYgKHRoaXMuVGVzdFNlbmRFbWFpbEZvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuVGVzdFNlbmRFbWFpbEZvcm0udmFsdWU7XHJcbiAgICAgIGxldCBzZW5kRW1haWxUZW1wbGF0ZU1vZGVsID0gbmV3IEVtYWlsVGVtcGxhdGVUZXN0ZXJNb2RlbCgpO1xyXG4gICAgICBzZW5kRW1haWxUZW1wbGF0ZU1vZGVsLlRlbXBsYXRlSUQgPSBOdW1iZXIodGhpcy5UZW1wbGF0ZUlkKTtcclxuICAgICAgc2VuZEVtYWlsVGVtcGxhdGVNb2RlbC5Ub0VtYWlsID0gUmVzdWx0TW9kZWwuVGVzdFNlbmRFbWFpbFRvXHJcbiAgICAgIHNlbmRFbWFpbFRlbXBsYXRlTW9kZWwuRW1haWxQcm92aWRlck5hbWUgPSBSZXN1bHRNb2RlbC5UZXN0RW1haWxTZXJ2aWNlUHJvdmlkZXJcclxuICAgICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlLlRlc3RTZW5kRW1haWxUZW1wbGF0ZShzZW5kRW1haWxUZW1wbGF0ZU1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1Rlc3RTZW5kU01TTW9kYWwoVGVzdFNlbmRTTVNNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuU2VuZEVtYWlsRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcblxyXG4gICAgdGhpcy5UZXN0U2VuZFNNU1RvID0gbmV3IFBob25lT3B0aW9ucygpO1xyXG4gICAgdGhpcy5UZXN0U2VuZFNNU1RvLk5hbWUgPSBcIlRlc3RTZW5kU01TVG9cIjtcclxuICAgIHRoaXMuVGVzdFNlbmRTTVNUby5MYWJlbEtleSA9IFwiU2VuZFRvXCI7XHJcbiAgICB0aGlzLlRlc3RTZW5kU01TVG8uVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5UZXN0U2VuZFNNU1RvLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5UZXN0U2VuZFNNU1RvLlNob3dBc3RlcmlzayA9IHRydWU7XHJcbiAgICB0aGlzLlRlc3RTZW5kU01TVG8uU2VsZWN0ZWRDb3VudHJ5SVNPID0gQ291bnRyeS5Vbml0ZWRBcmFiRW1pcmF0ZXNcclxuICAgIHRoaXMuVGVzdFNlbmRTTVNUby5QaG9uZVZhbGlkYXRpb24gPSB0cnVlXHJcbiAgICB0aGlzLlRlc3RTZW5kU01TVG8uQWxsb3dTZWFyY2ggPSB0cnVlXHJcblxyXG4gICAgdGhpcy5UZXN0U01TU2VydmljZVByb3ZpZGVyID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5UZXN0U01TU2VydmljZVByb3ZpZGVyLk5hbWUgPSBcIlRlc3RTTVNTZXJ2aWNlUHJvdmlkZXJcIlxyXG4gICAgdGhpcy5UZXN0U01TU2VydmljZVByb3ZpZGVyLkxhYmVsS2V5ID0gXCJTTVNTZXJ2aWNlUHJvdmlkZXJcIlxyXG4gICAgdGhpcy5UZXN0U01TU2VydmljZVByb3ZpZGVyLkRhdGFTb3VyY2UgPSB0aGlzLlNNU1NlcnZpY2VQcm92aWRlckxpc3RcclxuICAgIHRoaXMuVGVzdFNNU1NlcnZpY2VQcm92aWRlci5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5UZXN0U01TU2VydmljZVByb3ZpZGVyLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuVGVzdFNNU1NlcnZpY2VQcm92aWRlci5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICB0aGlzLlRlc3RTTVNTZXJ2aWNlUHJvdmlkZXIuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFRlc3RTZW5kU01TTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcbiAgdGVzdFNlbmRTTVMoKSB7XHJcbiAgICBpZiAodGhpcy5UZXN0U2VuZFNNU0Zvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5UZXN0U2VuZFNNU0Zvcm0udmFsdWU7XHJcbiAgICAgIGxldCBzZW5kU01TVGVtcGxhdGVNb2RlbCA9IG5ldyBTTVNUZW1wbGF0ZVRlc3Rlck1vZGVsKCk7XHJcbiAgICAgIHNlbmRTTVNUZW1wbGF0ZU1vZGVsLlRlbXBsYXRlSUQgPSBOdW1iZXIodGhpcy5UZW1wbGF0ZUlkKTtcclxuICAgICAgbGV0IGludGVybmF0aW9uYWxOdW1iZXI6IHN0cmluZyA9IG51bGw7XHJcbiAgICAgIGlmIChSZXN1bHRNb2RlbC5UZXN0U2VuZFNNU1RvICE9IG51bGwpIHtcclxuICAgICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuVGVzdFNlbmRTTVNUby5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gaW50ZXJuYXRpb25hbE51bWJlci5yZXBsYWNlKC9cXHMvZywgXCJcIik7XHJcbiAgICAgIH1cclxuICAgICAgc2VuZFNNU1RlbXBsYXRlTW9kZWwuVG9Nb2JpbGVOdW1iZXIgPSBpbnRlcm5hdGlvbmFsTnVtYmVyXHJcbiAgICAgIHNlbmRTTVNUZW1wbGF0ZU1vZGVsLlNNU1Byb3ZpZGVyTmFtZSA9IFJlc3VsdE1vZGVsLlRlc3RTTVNTZXJ2aWNlUHJvdmlkZXJcclxuICAgICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlLlRlc3RTTVNUZW1wbGF0ZShzZW5kU01TVGVtcGxhdGVNb2RlbCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGJsb2NrLXVpPjwvYmxvY2stdWk+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0blNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gbWUtMyBidG4tbGlnaHQtcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdFRlbXBsYXRlTW9kYWwoRWRpdFRlbXBsYXRlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEgZmEtZWRpdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0blNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gbWUtMyBidG4tbGlnaHQtcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93U2VuZEVtYWlsTW9kYWwoU2VuZEVtYWlsTW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGFwZXItcGxhbmVcIj48L2k+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VuZEVtYWlsXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5TZXRQYXNzXCIgY2xhc3M9XCJidG4gYnRuLXNtIG1lLTMgYnRuLWxpZ2h0LXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1Rlc3RTZW5kRW1haWxNb2RhbChUZXN0U2VuZEVtYWlsTW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFyc1wiPjwvaT57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUZXN0U2VuZEVtYWlsXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5TZXRQYXNzXCIgY2xhc3M9XCJidG4gYnRuLXNtIG1lLTMgYnRuLWxpZ2h0LXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1Rlc3RTZW5kU01TTW9kYWwoVGVzdFNlbmRTTVNNb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbnZlbG9wZS1vcGVuLXRleHQgc21zXCI+PC9pPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlRlc3RTZW5kU01TXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5TZXRQYXNzXCIgY2xhc3M9XCJidG4gYnRuLXNtIG1lLTMgYnRuLXByaW1hcnlcIiAqbmdJZj1cIiFQcm9kdWN0aW9uTW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93R2VuZXJhdGVDb2RlQnlJZE1vZGFsKFRlbXBsYXRlSW5mbywgR2VuZXJhdGVDb2RlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFyc1wiPjwvaT57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZUNvZGVcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0blNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gbWUtMyBidG4tcHJpbWFyeVwiICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dHZW5lcmF0ZVVwZGF0ZUNvZGVCeUlkTW9kYWwoVGVtcGxhdGVJbmZvLEdlbmVyYXRlQ29kZU1vZGFsKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWtleVwiPjwvaT57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZVVwZGF0ZUNvZGVcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14bC02IG1iLTEwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggaC0xMDAgYWxpZ24taXRlbXMtY2VudGVyIFwiPlxyXG4gICAgICAgICAgICAgIDwhLS1iZWdpbjo6T3B0aW9uLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWNlbnRlciByb3VuZGVkLTMgYmctbGlnaHQgcHktMTAgcHgtMTAgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6SGVhZGluZy0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTcgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6VGl0bGUtLT5cclxuICAgICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vTm90aWZpY2F0aW9ucy9FZGl0RW1haWwnLFRlbXBsYXRlSW5mby5pZCwnZW4nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIiBjbGFzcz1cInRleHQtcHJpbWFyeSBtYi01IGZ3LWJvbGRlc3QgZnMtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVuZ2xpc2g6XHJcbiAgICAgICAgICAgICAgICAgICAge3tUZW1wbGF0ZUluZm8uZW1haWx0ZW1wbGF0ZWluZm8uZW1haWxTdWJqZWN0LmVuZ2xpc2h9fVxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9BZG1pbi9Ob3RpZmljYXRpb25zL0VkaXRFbWFpbCcsVGVtcGxhdGVJbmZvLmlkLCdlbiddXCJcclxuICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBidG4taWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgbWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpJdGVtLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCBmcy02IHRleHQtZ3JheS04MDAgZmxleC1ncm93LTEgcGUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5lbWFpbHRlbXBsYXRlaW5mby50ZW1wbGF0ZUVtYWlsQmFzZUhlYWRlci5lbmdsaXNofX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5lbWFpbHRlbXBsYXRlaW5mby5lbWFpbEh0bWxIZWFkU2VjdGlvbi5lbmdsaXNofX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5lbWFpbHRlbXBsYXRlaW5mby5lbWFpbEJvZHkuZW5nbGlzaH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1kYXJrLXNraW4gcHQtN1wiIGlubmVySFRNTD1cInt7VGVtcGxhdGVJbmZvLmVtYWlsdGVtcGxhdGVpbmZvLnRlbXBsYXRlRW1haWxCYXNlRm9vdGVyLmVuZ2xpc2h9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLWVuZDo6U2VsZWN0LS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPCEtLWVuZDo6T3B0aW9uLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhsLTYgbWItMTBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8IS0tYmVnaW46Ok9wdGlvbi0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1jb2x1bW4gZmxleC1jZW50ZXIgcm91bmRlZC0zIGJnLWxpZ2h0IHB5LTEwIHB4LTEwIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tYmVnaW46OkhlYWRpbmctLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi03IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tYmVnaW46OlRpdGxlLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL05vdGlmaWNhdGlvbnMvRWRpdEVtYWlsJyxUZW1wbGF0ZUluZm8uaWQsJ2FyJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCIgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgbWItNSBmdy1ib2xkZXN0IGZzLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICBBcmFiaWM6XHJcbiAgICAgICAgICAgICAgICAgICAge3tUZW1wbGF0ZUluZm8uZW1haWx0ZW1wbGF0ZWluZm8uZW1haWxTdWJqZWN0LmFyYWJpY319XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vTm90aWZpY2F0aW9ucy9FZGl0RW1haWwnLFRlbXBsYXRlSW5mby5pZCwnYXInXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgYnRuLWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlblwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgbWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpJdGVtLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCBmcy02IHRleHQtZ3JheS04MDAgZmxleC1ncm93LTEgcGUtMyBhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5lbWFpbHRlbXBsYXRlaW5mby50ZW1wbGF0ZUVtYWlsQmFzZUhlYWRlci5hcmFiaWN9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlubmVySFRNTD1cInt7VGVtcGxhdGVJbmZvLmVtYWlsdGVtcGxhdGVpbmZvLmVtYWlsSHRtbEhlYWRTZWN0aW9uLmFyYWJpY319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaW5uZXJIVE1MPVwie3tUZW1wbGF0ZUluZm8uZW1haWx0ZW1wbGF0ZWluZm8uZW1haWxCb2R5LmFyYWJpY319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1kYXJrLXNraW4gcHQtN1wiIGlubmVySFRNTD1cInt7VGVtcGxhdGVJbmZvLmVtYWlsdGVtcGxhdGVpbmZvLnRlbXBsYXRlRW1haWxCYXNlRm9vdGVyLmFyYWJpY319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLWVuZDo6U2VsZWN0LS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPCEtLWVuZDo6T3B0aW9uLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhsLTZcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgYmctbGlnaHRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHktMTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIHRleHQtcHJpbWFyeSBtYi01IGZ3LWJvbGRlc3QgZnMtMlwiPlxyXG4gICAgICAgICAgICAgICAgICBFbmdsaXNoOlNNU1xyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBidG4taWNvblwiIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL05vdGlmaWNhdGlvbnMvRWRpdFNNUycsVGVtcGxhdGVJbmZvLmlkLCdlbiddXCJcclxuICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbiBmb250LXNpemUtMThcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBtb2JpbGUtdHh0XCI+e3tUZW1wbGF0ZUluZm8uc21zdGVtcGxhdGVpbmZvLnNtcy5lbmdsaXNofX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhsLTZcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgYmctbGlnaHRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHktMTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIHRleHQtcHJpbWFyeSBtYi01IGZ3LWJvbGRlc3QgZnMtMlwiPlxyXG4gICAgICAgICAgICAgICAgICBFbmdsaXNoOlNNU1xyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBidG4taWNvblwiIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL05vdGlmaWNhdGlvbnMvRWRpdFNNUycsVGVtcGxhdGVJbmZvLmlkLCdhciddXCJcclxuICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbiBmb250LXNpemUtMThcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlwaG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIG1vYmlsZS10eHQgYXJcIj4gIHt7VGVtcGxhdGVJbmZvLnNtc3RlbXBsYXRlaW5mby5zbXMuYXJhYmljfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0gc2VuZCBFbWFpbCBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNTZW5kRW1haWxNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VuZEVtYWlsVGVtcGxhdGVcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiU2VuZEVtYWlsRm9ybVwiXHJcbiAgICAgICAgICAobmdTdWJtaXQpPVwic2VuZEVtYWlsKClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cIlRvXCIgW2dyb3VwXT1cIlNlbmRFbWFpbEZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0QXJlYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiTGFuZ3VhZ2VcIiBbZ3JvdXBdPVwiU2VuZEVtYWlsRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRW1haWxTZXJ2aWNlUHJvdmlkZXJcIiBbZ3JvdXBdPVwiU2VuZEVtYWlsRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VTZW5kRW1haWxGb3JtIGlkPVwiQ2xvc2VTZW5kRW1haWxGb3JtXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VuZFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBUZXN0IHNtcyBFbWFpbCBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNUZXN0U2VuZFNNU01vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUZXN0U2VuZFNNU1wiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJUZXN0U2VuZFNNU0Zvcm1cIlxyXG4gICAgICAgICAgKG5nU3VibWl0KT1cInRlc3RTZW5kU01TKClcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1QaG9uZSBbb3B0aW9uc109XCJUZXN0U2VuZFNNU1RvXCIgW2dyb3VwXT1cIlRlc3RTZW5kU01TRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVBob25lPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiVGVzdFNNU1NlcnZpY2VQcm92aWRlclwiIFtncm91cF09XCJUZXN0U2VuZFNNU0Zvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtd2FybmluZyByb3VuZGVkIGJvcmRlci13YXJuaW5nIGJvcmRlciBib3JkZXItZGFzaGVkIG1iLTEwIHAtNlwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvZ2VuMDQ0LnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgICAgICBLaW5kbHkgbm90ZSB0aGF0IHRoZXNlIGF0dHJpYnV0ZXMgYXJlIHJlc2VydmVkXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZFwiPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibWItMlwiPk5hbWVFTjwvbGk+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJtYi0yXCI+TmFtZUFSPC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5TdWJqZWN0PC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5MYW5nS2V5PC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5Nb2JpbGU8L2xpPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibWItMlwiPkVtYWlsPC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5EYXRlPC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5UaW1lPC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5EYXRlVGltZTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VUZXN0U2VuZFNNU0Zvcm0gaWQ9XCJDbG9zZVRlc3RTZW5kU01TRm9ybVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbmRcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVGVzdCBTZW5kIEVtYWlsIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI1Rlc3RTZW5kRW1haWxNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVzdFNlbmRFbWFpbFwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJUZXN0U2VuZEVtYWlsRm9ybVwiXHJcbiAgICAgICAgICAobmdTdWJtaXQpPVwidGVzdFNlbmRFbWFpbCgpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtVGV4dEFyZWEgW29wdGlvbnNdPVwiVGVzdFNlbmRFbWFpbFRvXCIgW2dyb3VwXT1cIlRlc3RTZW5kRW1haWxGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJUZXN0RW1haWxTZXJ2aWNlUHJvdmlkZXJcIiBbZ3JvdXBdPVwiVGVzdFNlbmRFbWFpbEZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMnR4IHN2Zy1pY29uLXdhcm5pbmcgbWUtNFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiS2V5TWFwTm90ZVwiKX19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZFwiPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibWItMlwiPk5hbWVFTjwvbGk+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJtYi0yXCI+TmFtZUFSPC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5TdWJqZWN0PC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5MYW5nS2V5PC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5Nb2JpbGU8L2xpPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibWItMlwiPkVtYWlsPC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5EYXRlPC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5UaW1lPC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5EYXRlVGltZTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VUZXN0U2VuZEVtYWlsRm9ybSBpZD1cIkNsb3NlVGVzdFNlbmRFbWFpbEZvcm1cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZW5kXCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIGVkaXQgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRWRpdFRlbXBsYXRlTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRUZW1wbGF0ZVwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCIgKG5nU3VibWl0KT1cImVkaXRUZW1wbGF0ZSgpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRNdWx0aUxpbmd1YWxOYW1lXCIgW2dyb3VwXT1cIkVkaXRUZW1wbGF0ZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJFZGl0RGVzY3JpcHRpb25JbkVuZ2xpc2hcIiBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRBcmVhPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cIkVkaXREZXNjcmlwdGlvbkluQXJhYmljXCIgW2dyb3VwXT1cIkVkaXRUZW1wbGF0ZUZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0QXJlYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFQcm9kdWN0aW9uTW9kZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdFN5c05hbWVcIiBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRPcmdhbml6YXRpb25cIiBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdExhbmd1YWdlTW9kZVwiIFtncm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0Q2F0ZWdvcnlcIiBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdE1hc3RlckxheW91dFwiIFtncm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIkVkaXRJc0VtYWlsXCIgW2dyb3VwXT1cIkVkaXRUZW1wbGF0ZUZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJFZGl0SXNTbXNcIiBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIkVkaXRFbmFibGVJbnRlbnNpdmVMb2dnaW5nXCIgW2dyb3VwXT1cIkVkaXRUZW1wbGF0ZUZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlRWRpdFRlbXBsYXRlTW9kYWwgaWQ9XCJDbG9zZUVkaXRUZW1wbGF0ZU1vZGFsXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIEdlbmVyYXRlQ29kZSBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNHZW5lcmF0ZUNvZGVNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiR2VuZXJhdGVDb2RlXCIpfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIkdlbmVyYXRlQ29kZUZvcm1cIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJSb3dcIj5cclxuICAgICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJHZW5lcmF0ZUNvZGVUZXh0QXJlYVwiIFtncm91cF09XCJHZW5lcmF0ZUNvZGVGb3JtXCIgI0dlbmVyYXRlQ29kZUlucHV0PlxyXG4gICAgICAgIDwvQkJTRi1UZXh0QXJlYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VHZW5lcmF0ZUNvZGVNb2RhbCBpZD1cIkNsb3NlR2VuZXJhdGVDb2RlTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiAoY2xpY2spPVwiY29weUlucHV0TWVzc2FnZSgpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDb3B5VG9DbGlwYm9hcmRcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiJdfQ==
396
+ }], ctorParameters: function () { return [{ type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i1.EnvironmentService }, { type: i2.ClipboardService }, { type: i3.TemplateService }, { type: i4.ActivatedRoute }, { type: i5.PageInfoService }, { type: i6.NgbModal }, { type: i1.RequestHandlerService }]; } });
397
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL25vdGlmaWNhdGlvbnMvdGVtcGxhdGUtaW5mby90ZW1wbGF0ZS1pbmZvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvbm90aWZpY2F0aW9ucy90ZW1wbGF0ZS1pbmZvL3RlbXBsYXRlLWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFclAsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzFHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTckYsTUFBTSxPQUFPLHFCQUFxQjtJQTBEaEMsWUFDUyxjQUE4QixFQUFVLG9CQUEwQyxFQUNqRixrQkFBc0MsRUFBVSxpQkFBbUMsRUFDbkYs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LElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsd0JBQXdCLENBQUE7WUFDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQTtZQUMzRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQTtZQUNwRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUNuRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQ3JELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUdMLENBQUM7SUF1QkQsWUFBWTtJQUNaLFdBQVc7UUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUMsQ0FBQzs7bUhBbmNVLHFCQUFxQjt1R0FBckIscUJBQXFCLHlEQ25CbEMseTZwQkE4Y0E7NEZEM2JhLHFCQUFxQjtrQkFKakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixXQUFXLEVBQUUsZ0NBQWdDO2lCQUM5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ2hlY2tCb3hPcHRpb25zLCBDb250cm9sTGF5b3V0LCBDb3VudHJ5LCBEcm9wZG93bk9wdGlvbnMsIEVuZ2xpc2hBcmFiaWNEVE8sIEZvcm1PcHRpb25zLCBJbnB1dFR5cGUsIE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucywgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMsIFBob25lT3B0aW9ucywgVGV4dEFyZWFPcHRpb25zLCBUZXh0Qm94T3B0aW9ucyB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgVGVtcGxhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1RlbXBsYXRlU2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDbGlwYm9hcmRTZXJ2aWNlIH0gZnJvbSAnbmd4LWNsaXBib2FyZCc7XHJcbmltcG9ydCB7IFNlbmRFbWFpbFRlbXBsYXRlTW9kZWwgfSBmcm9tICcuLy4uLy4uL3NoYXJlZC9tb2RlbHMvTm90aWZpY2F0aW9uc01vZGVscy9TZW5kRW1haWxUZW1wbGF0ZU1vZGVsJztcclxuaW1wb3J0IHsgRW1haWxUZW1wbGF0ZVRlc3Rlck1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Ob3RpZmljYXRpb25zTW9kZWxzL0VtYWlsVGVtcGxhdGVUZXN0ZXJNb2RlbCc7XHJcbmltcG9ydCB7IFNNU1RlbXBsYXRlVGVzdGVyTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL05vdGlmaWNhdGlvbnNNb2RlbHMvU01TVGVtcGxhdGVUZXN0ZXJNb2RlbCc7XHJcbmltcG9ydCB7IFRlbXBsYXRlRFRPIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Ob3RpZmljYXRpb25zTW9kZWxzL1RlbXBsYXRlRFRPJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UsIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRlbXBsYXRlLWluZm8nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS1pbmZvLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVJbmZvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL1BhZ2UgcmVxdWlyZW1lbnRzXHJcbiAgUHJvZHVjdGlvbk1vZGU6IGJvb2xlYW47XHJcbiAgVGVtcGxhdGVJZDogbnVtYmVyO1xyXG4gIFRlbXBsYXRlSWRFbmM6IHN0cmluZyA9IFwiXCJcclxuICBUZW1wbGF0ZUluZm86YW55XHJcbiAgVGVtcGxhdGU6IGFueVxyXG5cclxuICAvL1JlcXVpcmVkIGxpc3RzXHJcbiAgTGFuZ3VhZ2VMaXN0ID0gW107XHJcbiAgRW1haWxTZXJ2aWNlUHJvdmlkZXJMaXN0ID0gW107XHJcbiAgU01TU2VydmljZVByb3ZpZGVyTGlzdCA9IFtdO1xyXG4gIENhdGVnb3J5TGlzdCA9IFtdO1xyXG4gIE9yZ2FuaXphdGlvbkxpc3QgPSBbXTtcclxuICBMYW5ndWFnZU1vZGVMaXN0ID0gW107XHJcbiAgTWFzdGVyTGF5b3V0TGlzdCA9IFtdO1xyXG5cclxuICAvL0dlbmVyYXRlQ29kZSAgTW9kZWwgQ29udHJvbHMgXHJcbiAgR2VuZXJhdGVDb2RlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIElzT3BlbkdlbmVyYXRlQ29kZU1vZGFsOiBib29sZWFuO1xyXG4gIEdlbmVyYXRlQ29kZVRleHRBcmVhOiBUZXh0QXJlYU9wdGlvbnM7XHJcbiAgVmFsdWVUb0NvcHk6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vU2VuZCBFbWFpbCBNb2RlbCBDb250cm9sc1xyXG4gIFNlbmRFbWFpbEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBTZW5kRW1haWxGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBUbzogVGV4dEFyZWFPcHRpb25zO1xyXG4gIEVtYWlsU2VydmljZVByb3ZpZGVyOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgTGFuZ3VhZ2U6IERyb3Bkb3duT3B0aW9ucztcclxuXHJcbiAgLy9UZXN0IFNlbmQgRW1haWwgTW9kZWwgQ29udHJvbHNcclxuICBUZXN0U2VuZEVtYWlsRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFRlc3RTZW5kRW1haWxGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBUZXN0U2VuZEVtYWlsVG86IFRleHRBcmVhT3B0aW9ucztcclxuICBUZXN0RW1haWxTZXJ2aWNlUHJvdmlkZXI6IERyb3Bkb3duT3B0aW9ucztcclxuXHJcblxyXG4gIC8vVGVzdCBTZW5kIFNNUyBNb2RlbCBDb250cm9sc1xyXG4gIFRlc3RTZW5kU01TRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFRlc3RTZW5kU01TRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnM7XHJcbiAgVGVzdFNlbmRTTVNUbzogUGhvbmVPcHRpb25zO1xyXG4gIFRlc3RTTVNTZXJ2aWNlUHJvdmlkZXI6IERyb3Bkb3duT3B0aW9ucztcclxuICBcclxuICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0VGVtcGxhdGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdFRlbXBsYXRlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnM7XHJcbiAgRWRpdE5hbWU6TXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnNcclxuICBFZGl0U3lzTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdFN5c05hbWVWYWx1ZTogc3RyaW5nO1xyXG4gIEVkaXREZXNjcmlwdGlvbjogTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zO1xyXG4gIEVkaXRPcmdhbml6YXRpb246IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0TGFuZ3VhZ2VNb2RlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdENhdGVnb3J5OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdE1hc3RlckxheW91dDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEVkaXRJc0VtYWlsOiBDaGVja0JveE9wdGlvbnM7XHJcbiAgRWRpdElzU21zOiBDaGVja0JveE9wdGlvbnM7XHJcbiAgRWRpdEVuYWJsZUludGVuc2l2ZUxvZ2dpbmc6IENoZWNrQm94T3B0aW9ucztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIGJic2ZUcmFuc2xhdGVTZXJ2aWNlOiBCQlNGVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsIHByaXZhdGUgX2NsaXBib2FyZFNlcnZpY2U6IENsaXBib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRlbXBsYXRlU2VydmljZTogVGVtcGxhdGVTZXJ2aWNlLCBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2UpIHtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLlRlbXBsYXRlSWRFbmMgPSBwYXJhbXNbJ2lkJ107XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCk9PntcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5Qcm9kdWN0aW9uTW9kZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldFByb2R1Y3Rpb25Nb2RlKClcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuICB9XHJcblxyXG4gIC8vSW5pdGlhbGl6ZSBwYWdlIGluZm9cclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlLmdldFRlbXBsYXRlSW5mbyh0aGlzLlRlbXBsYXRlSWRFbmMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBSZXN1bHQ6IGFueSA9IHJlc3VsdFxyXG4gICAgICB0aGlzLlRlbXBsYXRlSW5mbyA9IFJlc3VsdC52YWw7XHJcbiAgICAgIHRoaXMuVGVtcGxhdGVJZCA9IHRoaXMuVGVtcGxhdGVJbmZvLmlkO1xyXG5cclxuICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMuVGVtcGxhdGVJbmZvLnRlbXBsYXRlTmFtZVxyXG4gICAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZUJyZWFkY3J1bWJzID0gW1xyXG4gICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVtcGxhdGVzXCIpLCBwYXRoOiAnL0FkbWluL05vdGlmaWNhdGlvbnMvVGVtcGxhdGVzJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfVxyXG5cclxuICAgICAgXTtcclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuIFxyXG5cclxuICAvL0dlbmVyYXRlIENvZGVcclxuICBzaG93R2VuZXJhdGVDb2RlQnlJZE1vZGFsKEdlbmVyYXRlQ29kZU1vZGFsKSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlU2VydmljZS5nZW5lcmF0ZUNvZGVCeUlkKHRoaXMuVGVtcGxhdGVJZEVuYykuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIFZhbHVlID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLk5hbWUgPSBcIkdlbmVyYXRlQ29kZVRleHRBcmVhXCI7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuVmFsdWUgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy5WYWx1ZVRvQ29weSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLklzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuUm93cyA9IDIwO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLkNvbHMgPSAyMDtcclxuICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5NYXhMZW5ndGggPSAxMDAwMDAwO1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEdlbmVyYXRlQ29kZU1vZGFsKTtcclxuXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2hvd0dlbmVyYXRlVXBkYXRlQ29kZUJ5SWRNb2RhbChHZW5lcmF0ZUNvZGVNb2RhbCkge1xyXG4gICAgdGhpcy5HZW5lcmF0ZUNvZGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlLmdlbmVyYXRlVXBkYXRlQ29kZUJ5SWQodGhpcy5UZW1wbGF0ZUlkRW5jKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB2YXIgVmFsdWUgPSByZXN1bHQgYXMgYW55XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEgPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuTmFtZSA9IFwiR2VuZXJhdGVDb2RlVGV4dEFyZWFcIjtcclxuICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5WYWx1ZSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLlZhbHVlVG9Db3B5ID0gVmFsdWUudmFsLnRvU3RyaW5nKCk7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuSXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5Sb3dzID0gMjA7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuQ29scyA9IDIwO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLk1heExlbmd0aCA9IDEwMDAwMDA7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oR2VuZXJhdGVDb2RlTW9kYWwpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNvcHlJbnB1dE1lc3NhZ2UoKSB7XHJcbiAgICB0aGlzLl9jbGlwYm9hcmRTZXJ2aWNlLmNvcHkodGhpcy5WYWx1ZVRvQ29weS50b1N0cmluZygpKTtcclxuICB9XHJcbiAgLy9FZGl0IFRlbXBsYXRlXHJcbiAgc2hvd0VkaXRUZW1wbGF0ZU1vZGFsKEVkaXRUZW1wbGF0ZU1vZGFsKSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlU2VydmljZS5nZXRFZGl0VGVtcGxhdGVEYXRhKHRoaXMuVGVtcGxhdGVJZEVuYykuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcblxyXG4gICAgICBsZXQgbGlzdHMgPSByZXN1bHRPYmoubGlzdHM7XHJcbiAgICAgIHRoaXMuT3JnYW5pemF0aW9uTGlzdCA9IGxpc3RzLm9yZ2FuaXphdGlvbjtcclxuICAgICAgdGhpcy5MYW5ndWFnZU1vZGVMaXN0ID0gbGlzdHMubG9va1VwSXRlbXNFbWFpbFRlbXBsYXRlO1xyXG4gICAgICB0aGlzLk1hc3RlckxheW91dExpc3QgPSBsaXN0cy5lbWFpbEhlYWRlckFuZEZvb3RlclRlbXBsYXRlO1xyXG4gICAgICB0aGlzLkNhdGVnb3J5TGlzdCA9IGxpc3RzLmxvb2tVcEl0ZW1zQ2F0ZWdvcnk7XHJcblxyXG4gICAgICB0aGlzLlRlbXBsYXRlID0gcmVzdWx0T2JqLm1vZGVsO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VGVtcGxhdGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5FZGl0VGVtcGxhdGVGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRUZW1wbGF0ZUZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuRWRpdFRlbXBsYXRlRm9ybVxyXG4gICAgICB0aGlzLkVkaXRUZW1wbGF0ZUZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRUZW1wbGF0ZU1vZGVsO1xyXG4gICAgICB0aGlzLkVkaXRUZW1wbGF0ZUZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFRlbXBsYXRlRnVuY3Rpb247XHJcblxyXG4gICAgICBsZXQgTmFtZT1uZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBOYW1lLkFyYWJpYz10aGlzLlRlbXBsYXRlLm5hbWUuYXJhYmljO1xyXG4gICAgICBOYW1lLkVuZ2xpc2g9dGhpcy5UZW1wbGF0ZS5uYW1lLmVuZ2xpc2g7XHJcbiAgXHJcbiAgICAgIHRoaXMuRWRpdE5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5OYW1lID0gXCJFZGl0TmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5WYWx1ZSA9IE5hbWU7XHJcblxyXG4gICAgICB0aGlzLkVkaXRTeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFN5c05hbWUuTmFtZSA9IFwiRWRpdFN5c05hbWVcIjtcclxuICAgICAgdGhpcy5FZGl0U3lzTmFtZS5MYWJlbEtleSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXRTeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5FZGl0U3lzTmFtZS5WYWx1ZSA9IHRoaXMuVGVtcGxhdGUuc3lzTmFtZTtcclxuICAgICAgdGhpcy5FZGl0U3lzTmFtZVZhbHVlID0gdGhpcy5UZW1wbGF0ZS5zeXNOYW1lO1xyXG4gIFxyXG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBkZXNjcmlwdGlvbi5BcmFiaWMgPSB0aGlzLlRlbXBsYXRlLmRlc2NyaXB0aW9uLmFyYWJpYztcclxuICAgICAgZGVzY3JpcHRpb24uRW5nbGlzaCA9IHRoaXMuVGVtcGxhdGUuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuXHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uID0gbmV3IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbi5OYW1lID0gXCJFZGl0RGVzY3JpcHRpb25cIjtcclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24uQXJhYmljTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24uRW5nbGlzaExhYmVsS2V5ID0gXCJEZXNjcmlwdGlvbkluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbi5WYWx1ZSA9IGRlc2NyaXB0aW9uO1xyXG4gIFxyXG4gICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5OYW1lID0gXCJFZGl0T3JnYW5pemF0aW9uXCJcclxuICAgICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uLkxhYmVsS2V5ID0gXCJPcmdhbml6YXRpb25cIlxyXG4gICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsXHJcbiAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5EYXRhU291cmNlID0gdGhpcy5Pcmdhbml6YXRpb25MaXN0XHJcbiAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5TZWxlY3RlZEl0ZW1zID0gdGhpcy5Pcmdhbml6YXRpb25MaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuVGVtcGxhdGUub3JnYW5pemF0aW9uSUQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdOztcclxuICBcclxuICBcclxuICAgICAgdGhpcy5FZGl0TGFuZ3VhZ2VNb2RlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRMYW5ndWFnZU1vZGUuTmFtZSA9IFwiRWRpdExhbmd1YWdlTW9kZVwiXHJcbiAgICAgIHRoaXMuRWRpdExhbmd1YWdlTW9kZS5MYWJlbEtleSA9IFwiTGFuZ3VhZ2VNb2RlXCJcclxuICAgICAgdGhpcy5FZGl0TGFuZ3VhZ2VNb2RlLkRhdGFTb3VyY2UgPSB0aGlzLkxhbmd1YWdlTW9kZUxpc3RcclxuICAgICAgdGhpcy5FZGl0TGFuZ3VhZ2VNb2RlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdExhbmd1YWdlTW9kZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdExhbmd1YWdlTW9kZS5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuRWRpdExhbmd1YWdlTW9kZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TGFuZ3VhZ2VNb2RlLlNlbGVjdGVkSXRlbXMgPSB0aGlzLkxhbmd1YWdlTW9kZUxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0gdGhpcy5UZW1wbGF0ZS5sYW5ndWFnZU1vZGVJdGVtSUQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdOztcclxuICBcclxuICBcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRNYXN0ZXJMYXlvdXQuTmFtZSA9IFwiRWRpdE1hc3RlckxheW91dFwiXHJcbiAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5MYWJlbEtleSA9IFwiTWFzdGVyTGF5b3V0XCJcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LkRhdGFTb3VyY2UgPSB0aGlzLk1hc3RlckxheW91dExpc3RcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LlNlbGVjdGVkSXRlbXMgPSB0aGlzLk1hc3RlckxheW91dExpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0gdGhpcy5UZW1wbGF0ZS5lbWFpbEhlYWRlckFuZEZvb3RlclRlbXBsYXRlSUQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdOztcclxuICBcclxuICBcclxuICAgICAgdGhpcy5FZGl0Q2F0ZWdvcnkgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdENhdGVnb3J5Lk5hbWUgPSBcIkVkaXRDYXRlZ29yeVwiXHJcbiAgICAgIHRoaXMuRWRpdENhdGVnb3J5LkxhYmVsS2V5ID0gXCJDYXRlZ29yeVwiXHJcbiAgICAgIHRoaXMuRWRpdENhdGVnb3J5LkRhdGFTb3VyY2UgPSB0aGlzLkNhdGVnb3J5TGlzdFxyXG4gICAgICB0aGlzLkVkaXRDYXRlZ29yeS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRDYXRlZ29yeS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdENhdGVnb3J5LlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FZGl0Q2F0ZWdvcnkuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdENhdGVnb3J5LlNlbGVjdGVkSXRlbXMgPSB0aGlzLkNhdGVnb3J5TGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLlRlbXBsYXRlLmNhdGVnb3J5SXRlbUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcbiAgXHJcbiAgXHJcbiAgICAgIHRoaXMuRWRpdElzRW1haWwgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdElzRW1haWwuTmFtZSA9IFwiRWRpdElzRW1haWxcIlxyXG4gICAgICB0aGlzLkVkaXRJc0VtYWlsLkxhYmVsS2V5ID0gXCJJc0VtYWlsXCJcclxuICAgICAgdGhpcy5FZGl0SXNFbWFpbC5WYWx1ZSA9IHRoaXMuVGVtcGxhdGUuaXNFbWFpbFxyXG4gIFxyXG4gIFxyXG4gICAgICB0aGlzLkVkaXRJc1NtcyA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0SXNTbXMuTmFtZSA9IFwiRWRpdElzU21zXCJcclxuICAgICAgdGhpcy5FZGl0SXNTbXMuTGFiZWxLZXkgPSBcIklzU21zXCJcclxuICAgICAgdGhpcy5FZGl0SXNTbXMuVmFsdWUgPSB0aGlzLlRlbXBsYXRlLmlzU21zXHJcbiAgXHJcbiAgXHJcbiAgICAgIHRoaXMuRWRpdEVuYWJsZUludGVuc2l2ZUxvZ2dpbmcgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdEVuYWJsZUludGVuc2l2ZUxvZ2dpbmcuTmFtZSA9IFwiRWRpdEVuYWJsZUludGVuc2l2ZUxvZ2dpbmdcIlxyXG4gICAgICB0aGlzLkVkaXRFbmFibGVJbnRlbnNpdmVMb2dnaW5nLkxhYmVsS2V5ID0gXCJFbmFibGVJbnRlbnNpdmVMb2dnaW5nXCJcclxuICAgICAgdGhpcy5FZGl0RW5hYmxlSW50ZW5zaXZlTG9nZ2luZy5WYWx1ZSA9IHRoaXMuVGVtcGxhdGUuZW5hYmxlSW50ZW5zaXZlTG9nZ2luZ1xyXG4gIFxyXG4gIFxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEVkaXRUZW1wbGF0ZU1vZGFsKTtcclxuICBcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRFZGl0VGVtcGxhdGVNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0VGVtcGxhdGVGb3JtLnZhbHVlO1xyXG4gICAgbGV0IEVkaXRNb2RlbCA9IG5ldyBUZW1wbGF0ZURUTygpO1xyXG4gICAgRWRpdE1vZGVsLklEID0gTnVtYmVyKHRoaXMuVGVtcGxhdGVJZCk7XHJcbiAgICBFZGl0TW9kZWwuTmFtZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5FZGl0TmFtZS5BcmFiaWNWYWx1ZTtcclxuICAgIEVkaXRNb2RlbC5OYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5FZGl0TmFtZS5FbmdsaXNoVmFsdWU7XHJcbiAgICBFZGl0TW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLkVkaXRTeXNOYW1lID8gUmVzdWx0TW9kZWwuRWRpdFN5c05hbWUgOiB0aGlzLkVkaXRTeXNOYW1lVmFsdWU7XHJcbiAgICBFZGl0TW9kZWwuRGVzY3JpcHRpb24uRW5nbGlzaCA9IFJlc3VsdE1vZGVsLkVkaXREZXNjcmlwdGlvbi5FbmdsaXNoVGV4dEFyZWFWYWx1ZVxyXG4gICAgRWRpdE1vZGVsLkRlc2NyaXB0aW9uLkFyYWJpYyA9IFJlc3VsdE1vZGVsLkVkaXREZXNjcmlwdGlvbi5BcmFiaWNUZXh0QXJlYVZhbHVlXHJcbiAgICBFZGl0TW9kZWwuT3JnYW5pemF0aW9uSUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuRWRpdE9yZ2FuaXphdGlvbilcclxuICAgIEVkaXRNb2RlbC5DYXRlZ29yeUl0ZW1JRCA9IE51bWJlcihSZXN1bHRNb2RlbC5FZGl0Q2F0ZWdvcnkpXHJcbiAgICBFZGl0TW9kZWwuTGFuZ3VhZ2VNb2RlSXRlbUlEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRMYW5ndWFnZU1vZGUpXHJcbiAgICBFZGl0TW9kZWwuRW1haWxIZWFkZXJBbmRGb290ZXJUZW1wbGF0ZUlEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRNYXN0ZXJMYXlvdXQpXHJcbiAgICBFZGl0TW9kZWwuSXNFbWFpbCA9IFJlc3VsdE1vZGVsLkVkaXRJc0VtYWlsXHJcbiAgICBFZGl0TW9kZWwuSXNTbXMgPSBSZXN1bHRNb2RlbC5FZGl0SXNTbXNcclxuICAgIEVkaXRNb2RlbC5FbmFibGVJbnRlbnNpdmVMb2dnaW5nID0gUmVzdWx0TW9kZWwuRWRpdEVuYWJsZUludGVuc2l2ZUxvZ2dpbmdcclxuXHJcbiAgICBwYXJhbUFycmF5LnB1c2goRWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdFRlbXBsYXRlRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlU2VydmljZS5lZGl0RW1haWxUZW1wbGF0ZShFZGl0TW9kZWwpXHJcbiAgfVxyXG5cclxuICAvL1NlbmQgRW1haWxcclxuICBzaG93U2VuZEVtYWlsTW9kYWwoU2VuZEVtYWlsTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLnRlbXBsYXRlU2VydmljZS5nZXRTZW5kRW1haWxUZW1wbGF0ZSgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBSZXN1bHQ6IGFueSA9IHJlc3VsdDtcclxuICAgICAgdGhpcy5FbWFpbFNlcnZpY2VQcm92aWRlckxpc3Q9UmVzdWx0LnZhbC5lbWFpbFByb3ZpZGVycztcclxuICAgICAgdGhpcy5MYW5ndWFnZUxpc3QgPSBSZXN1bHQudmFsLmxhbmd1YWdlS2V5cztcclxuXHJcbiAgICAgIHRoaXMuU2VuZEVtYWlsRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICAgIHRoaXMuU2VuZEVtYWlsRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5TZW5kRW1haWxGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLlNlbmRFbWFpbEZvcm1cclxuICAgICAgdGhpcy5TZW5kRW1haWxGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRTZW5kRW1haWxNb2RlbDtcclxuICAgICAgdGhpcy5TZW5kRW1haWxGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldFNlbmRFbWFpbEZ1bmN0aW9uO1xyXG5cclxuICAgICAgdGhpcy5UbyA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5Uby5OYW1lID0gXCJUb1wiO1xyXG4gICAgICB0aGlzLlRvLkxhYmVsS2V5ID0gXCJUb1wiO1xyXG4gICAgICB0aGlzLlRvLlZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5Uby5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgICB0aGlzLkVtYWlsU2VydmljZVByb3ZpZGVyID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVtYWlsU2VydmljZVByb3ZpZGVyLk5hbWUgPSBcIkVtYWlsU2VydmljZVByb3ZpZGVyXCJcclxuICAgICAgdGhpcy5FbWFpbFNlcnZpY2VQcm92aWRlci5MYWJlbEtleSA9IFwiRW1haWxTZXJ2aWNlUHJvdmlkZXJcIlxyXG4gICAgICB0aGlzLkVtYWlsU2VydmljZVByb3ZpZGVyLkRhdGFTb3VyY2UgPSB0aGlzLkVtYWlsU2VydmljZVByb3ZpZGVyTGlzdFxyXG4gICAgICB0aGlzLkVtYWlsU2VydmljZVByb3ZpZGVyLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRW1haWxTZXJ2aWNlUHJvdmlkZXIuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVtYWlsU2VydmljZVByb3ZpZGVyLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FbWFpbFNlcnZpY2VQcm92aWRlci5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuTGFuZ3VhZ2UgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuTGFuZ3VhZ2UuTmFtZSA9IFwiTGFuZ3VhZ2VcIlxyXG4gICAgICB0aGlzLkxhbmd1YWdlLkxhYmVsS2V5ID0gXCJMYW5ndWFnZVwiXHJcbiAgICAgIHRoaXMuTGFuZ3VhZ2UuRGF0YVNvdXJjZSA9IHRoaXMuTGFuZ3VhZ2VMaXN0XHJcbiAgICAgIHRoaXMuTGFuZ3VhZ2UuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5MYW5ndWFnZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuTGFuZ3VhZ2UuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLkxhbmd1YWdlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFNlbmRFbWFpbE1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICB9XHJcbiAgZ2V0U2VuZEVtYWlsTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuU2VuZEVtYWlsRm9ybS52YWx1ZTtcclxuICAgIGxldCBzZW5kRW1haWxUZW1wbGF0ZU1vZGVsID0gbmV3IFNlbmRFbWFpbFRlbXBsYXRlTW9kZWwoKTtcclxuICAgIHNlbmRFbWFpbFRlbXBsYXRlTW9kZWwuVGVtcGxhdGVJRCA9IE51bWJlcih0aGlzLlRlbXBsYXRlSWQpO1xyXG4gICAgc2VuZEVtYWlsVGVtcGxhdGVNb2RlbC5Ub0VtYWlscyA9IFJlc3VsdE1vZGVsLlRvXHJcbiAgICBzZW5kRW1haWxUZW1wbGF0ZU1vZGVsLkxhbmdLZXkgPSBSZXN1bHRNb2RlbC5MYW5ndWFnZVxyXG4gICAgc2VuZEVtYWlsVGVtcGxhdGVNb2RlbC5FbWFpbFByb3ZpZGVyTmFtZSA9IFJlc3VsdE1vZGVsLkVtYWlsU2VydmljZVByb3ZpZGVyXHJcblxyXG4gICAgcGFyYW1BcnJheS5wdXNoKHNlbmRFbWFpbFRlbXBsYXRlTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRTZW5kRW1haWxGdW5jdGlvbiA9IChzZW5kRW1haWxUZW1wbGF0ZU1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlU2VydmljZS5zZW5kRW1haWxUZW1wbGF0ZShzZW5kRW1haWxUZW1wbGF0ZU1vZGVsKVxyXG4gIH1cclxuXHJcbiAgLy9UZXN0IFNlbmQgRW1haWxcclxuICBzaG93VGVzdFNlbmRFbWFpbE1vZGFsKFRlc3RTZW5kRW1haWxNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlLmdldFNlbmRFbWFpbFRlbXBsYXRlKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IFJlc3VsdDogYW55ID0gcmVzdWx0O1xyXG4gICAgICB0aGlzLkVtYWlsU2VydmljZVByb3ZpZGVyTGlzdCA9IFJlc3VsdC52YWwuZW1haWxQcm92aWRlcnM7XHJcblxyXG4gICAgICB0aGlzLlRlc3RTZW5kRW1haWxGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5UZXN0U2VuZEVtYWlsRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5UZXN0U2VuZEVtYWlsRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5UZXN0U2VuZEVtYWlsRm9ybVxyXG4gICAgICB0aGlzLlRlc3RTZW5kRW1haWxGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRUZXN0U2VuZEVtYWlsTW9kZWw7XHJcbiAgICAgIHRoaXMuVGVzdFNlbmRFbWFpbEZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0VGVzdFNlbmRFbWFpbEZ1bmN0aW9uO1xyXG5cclxuICAgICAgdGhpcy5UZXN0U2VuZEVtYWlsVG8gPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuVGVzdFNlbmRFbWFpbFRvLk5hbWUgPSBcIlRlc3RTZW5kRW1haWxUb1wiO1xyXG4gICAgICB0aGlzLlRlc3RTZW5kRW1haWxUby5MYWJlbEtleSA9IFwiU2VuZFRvXCI7XHJcbiAgICAgIHRoaXMuVGVzdFNlbmRFbWFpbFRvLlZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5UZXN0U2VuZEVtYWlsVG8uSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLlRlc3RFbWFpbFNlcnZpY2VQcm92aWRlciA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5UZXN0RW1haWxTZXJ2aWNlUHJvdmlkZXIuTmFtZSA9IFwiVGVzdEVtYWlsU2VydmljZVByb3ZpZGVyXCJcclxuICAgICAgdGhpcy5UZXN0RW1haWxTZXJ2aWNlUHJvdmlkZXIuTGFiZWxLZXkgPSBcIkVtYWlsU2VydmljZVByb3ZpZGVyXCJcclxuICAgICAgdGhpcy5UZXN0RW1haWxTZXJ2aWNlUHJvdmlkZXIuRGF0YVNvdXJjZSA9IHRoaXMuRW1haWxTZXJ2aWNlUHJvdmlkZXJMaXN0XHJcbiAgICAgIHRoaXMuVGVzdEVtYWlsU2VydmljZVByb3ZpZGVyLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuVGVzdEVtYWlsU2VydmljZVByb3ZpZGVyLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5UZXN0RW1haWxTZXJ2aWNlUHJvdmlkZXIuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLlRlc3RFbWFpbFNlcnZpY2VQcm92aWRlci5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihUZXN0U2VuZEVtYWlsTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH1cclxuICBnZXRUZXN0U2VuZEVtYWlsTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuVGVzdFNlbmRFbWFpbEZvcm0udmFsdWU7XHJcbiAgICBsZXQgc2VuZEVtYWlsVGVtcGxhdGVNb2RlbCA9IG5ldyBFbWFpbFRlbXBsYXRlVGVzdGVyTW9kZWwoKTtcclxuICAgIHNlbmRFbWFpbFRlbXBsYXRlTW9kZWwuVGVtcGxhdGVJRCA9IE51bWJlcih0aGlzLlRlbXBsYXRlSWQpO1xyXG4gICAgc2VuZEVtYWlsVGVtcGxhdGVNb2RlbC5Ub0VtYWlsID0gUmVzdWx0TW9kZWwuVGVzdFNlbmRFbWFpbFRvXHJcbiAgICBzZW5kRW1haWxUZW1wbGF0ZU1vZGVsLkVtYWlsUHJvdmlkZXJOYW1lID0gUmVzdWx0TW9kZWwuVGVzdEVtYWlsU2VydmljZVByb3ZpZGVyXHJcblxyXG4gICAgcGFyYW1BcnJheS5wdXNoKHNlbmRFbWFpbFRlbXBsYXRlTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXN0U2VuZEVtYWlsRnVuY3Rpb24gPSAoc2VuZEVtYWlsVGVtcGxhdGVNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVNlcnZpY2UudGVzdFNlbmRFbWFpbFRlbXBsYXRlKHNlbmRFbWFpbFRlbXBsYXRlTW9kZWwpXHJcbiAgfVxyXG5cclxuICAvL1Rlc3QgU2VuZCBTTVNcclxuICBzaG93VGVzdFNlbmRTTVNNb2RhbChUZXN0U2VuZFNNU01vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG5cclxuICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlLmdldFRlc3RTTVNUZW1wbGF0ZSgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBSZXN1bHQ6YW55PXJlc3VsdFxyXG4gICAgICB0aGlzLlNNU1NlcnZpY2VQcm92aWRlckxpc3QgPSBSZXN1bHQudmFsO1xyXG5cclxuICAgICAgdGhpcy5UZXN0U2VuZFNNU0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KVxyXG4gICAgICB0aGlzLlRlc3RTZW5kU01TRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5UZXN0U2VuZFNNU0Zvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuVGVzdFNlbmRTTVNGb3JtXHJcbiAgICAgIHRoaXMuVGVzdFNlbmRTTVNGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRUZXN0U2VuZFNNU01vZGVsO1xyXG4gICAgICB0aGlzLlRlc3RTZW5kU01TRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRUZXN0U2VuZFNNU0Z1bmN0aW9uO1xyXG5cclxuICAgICAgdGhpcy5UZXN0U2VuZFNNU1RvID0gbmV3IFBob25lT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLlRlc3RTZW5kU01TVG8uTmFtZSA9IFwiVGVzdFNlbmRTTVNUb1wiO1xyXG4gICAgICB0aGlzLlRlc3RTZW5kU01TVG8uTGFiZWxLZXkgPSBcIlNlbmRUb1wiO1xyXG4gICAgICB0aGlzLlRlc3RTZW5kU01TVG8uVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLlRlc3RTZW5kU01TVG8uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuVGVzdFNlbmRTTVNUby5TaG93QXN0ZXJpc2sgPSB0cnVlO1xyXG4gICAgICB0aGlzLlRlc3RTZW5kU01TVG8uU2VsZWN0ZWRDb3VudHJ5SVNPID0gQ291bnRyeS5Vbml0ZWRBcmFiRW1pcmF0ZXNcclxuICAgICAgdGhpcy5UZXN0U2VuZFNNU1RvLlBob25lVmFsaWRhdGlvbiA9IHRydWVcclxuICAgICAgdGhpcy5UZXN0U2VuZFNNU1RvLkFsbG93U2VhcmNoID0gdHJ1ZVxyXG5cclxuICAgICAgdGhpcy5UZXN0U01TU2VydmljZVByb3ZpZGVyID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLlRlc3RTTVNTZXJ2aWNlUHJvdmlkZXIuTmFtZSA9IFwiVGVzdFNNU1NlcnZpY2VQcm92aWRlclwiXHJcbiAgICAgIHRoaXMuVGVzdFNNU1NlcnZpY2VQcm92aWRlci5MYWJlbEtleSA9IFwiU01TU2VydmljZVByb3ZpZGVyXCJcclxuICAgICAgdGhpcy5UZXN0U01TU2VydmljZVByb3ZpZGVyLkRhdGFTb3VyY2UgPSB0aGlzLlNNU1NlcnZpY2VQcm92aWRlckxpc3RcclxuICAgICAgdGhpcy5UZXN0U01TU2VydmljZVByb3ZpZGVyLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuVGVzdFNNU1NlcnZpY2VQcm92aWRlci5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuVGVzdFNNU1NlcnZpY2VQcm92aWRlci5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuVGVzdFNNU1NlcnZpY2VQcm92aWRlci5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihUZXN0U2VuZFNNU01vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGdldFRlc3RTZW5kU01TTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuVGVzdFNlbmRTTVNGb3JtLnZhbHVlO1xyXG4gICAgbGV0IHNlbmRTTVNUZW1wbGF0ZU1vZGVsID0gbmV3IFNNU1RlbXBsYXRlVGVzdGVyTW9kZWwoKTtcclxuICAgIHNlbmRTTVNUZW1wbGF0ZU1vZGVsLlRlbXBsYXRlSUQgPSBOdW1iZXIodGhpcy5UZW1wbGF0ZUlkKTtcclxuICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLlRlc3RTZW5kU01TVG8gIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuVGVzdFNlbmRTTVNUby5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IGludGVybmF0aW9uYWxOdW1iZXIucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgc2VuZFNNU1RlbXBsYXRlTW9kZWwuVG9Nb2JpbGVOdW1iZXIgPSBpbnRlcm5hdGlvbmFsTnVtYmVyXHJcbiAgICBzZW5kU01TVGVtcGxhdGVNb2RlbC5TTVNQcm92aWRlck5hbWUgPSBSZXN1bHRNb2RlbC5UZXN0U01TU2VydmljZVByb3ZpZGVyXHJcblxyXG4gICAgcGFyYW1BcnJheS5wdXNoKHNlbmRTTVNUZW1wbGF0ZU1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVzdFNlbmRTTVNGdW5jdGlvbiA9IChzZW5kU01TVGVtcGxhdGVNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVNlcnZpY2UudGVzdFNNU1RlbXBsYXRlKHNlbmRTTVNUZW1wbGF0ZU1vZGVsKVxyXG4gIH1cclxuXHJcbiAgLy9PbiBkZXN0cm95XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYnRuU2V0UGFzc1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBtZS0zIGJ0bi1saWdodC1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dFZGl0VGVtcGxhdGVNb2RhbChFZGl0VGVtcGxhdGVNb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYSBmYS1lZGl0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3Bhbj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYnRuU2V0UGFzc1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBtZS0zIGJ0bi1saWdodC1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dTZW5kRW1haWxNb2RhbChTZW5kRW1haWxNb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wYXBlci1wbGFuZVwiPjwvaT57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZW5kRW1haWxcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0blNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gbWUtMyBidG4tbGlnaHQtcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93VGVzdFNlbmRFbWFpbE1vZGFsKFRlc3RTZW5kRW1haWxNb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXJzXCI+PC9pPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlRlc3RTZW5kRW1haWxcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0blNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gbWUtMyBidG4tbGlnaHQtcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93VGVzdFNlbmRTTVNNb2RhbChUZXN0U2VuZFNNU01vZGFsKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVudmVsb3BlLW9wZW4tdGV4dCBzbXNcIj48L2k+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVzdFNlbmRTTVNcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0blNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gbWUtMyBidG4tcHJpbWFyeVwiICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dHZW5lcmF0ZUNvZGVCeUlkTW9kYWwoR2VuZXJhdGVDb2RlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFyc1wiPjwvaT57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZUNvZGVcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0blNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gbWUtMyBidG4tcHJpbWFyeVwiICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dHZW5lcmF0ZVVwZGF0ZUNvZGVCeUlkTW9kYWwoR2VuZXJhdGVDb2RlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEta2V5XCI+PC9pPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkdlbmVyYXRlVXBkYXRlQ29kZVwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhsLTYgbWItMTBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXIgXCI+XHJcbiAgICAgICAgICAgICAgPCEtLWJlZ2luOjpPcHRpb24tLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtY2VudGVyIHJvdW5kZWQtMyBiZy1saWdodCBweS0xMCBweC0xMCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpIZWFkaW5nLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpUaXRsZS0tPlxyXG4gICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9BZG1pbi9Ob3RpZmljYXRpb25zL0VkaXRFbWFpbCcsVGVtcGxhdGVJbmZvLmlkRW5jcnlwdGVkLCdlbiddXCJcclxuICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiIGNsYXNzPVwidGV4dC1wcmltYXJ5IG1iLTUgZnctYm9sZGVzdCBmcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRW5nbGlzaDpcclxuICAgICAgICAgICAgICAgICAgICB7e1RlbXBsYXRlSW5mby5lbWFpbHRlbXBsYXRlaW5mby5lbWFpbFN1YmplY3QuZW5nbGlzaH19XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL05vdGlmaWNhdGlvbnMvRWRpdEVtYWlsJyxUZW1wbGF0ZUluZm8uaWRFbmNyeXB0ZWQsJ2VuJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IGJ0bi1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wZW5cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tYmVnaW46Okl0ZW0tLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIGZzLTYgdGV4dC1ncmF5LTgwMCBmbGV4LWdyb3ctMSBwZS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlubmVySFRNTD1cInt7VGVtcGxhdGVJbmZvLmVtYWlsdGVtcGxhdGVpbmZvLnRlbXBsYXRlRW1haWxCYXNlSGVhZGVyLmVuZ2xpc2h9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlubmVySFRNTD1cInt7VGVtcGxhdGVJbmZvLmVtYWlsdGVtcGxhdGVpbmZvLmVtYWlsSHRtbEhlYWRTZWN0aW9uLmVuZ2xpc2h9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlubmVySFRNTD1cInt7VGVtcGxhdGVJbmZvLmVtYWlsdGVtcGxhdGVpbmZvLmVtYWlsQm9keS5lbmdsaXNofX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWRhcmstc2tpbiBwdC03XCIgaW5uZXJIVE1MPVwie3tUZW1wbGF0ZUluZm8uZW1haWx0ZW1wbGF0ZWluZm8udGVtcGxhdGVFbWFpbEJhc2VGb290ZXIuZW5nbGlzaH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tZW5kOjpTZWxlY3QtLT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tZW5kOjpPcHRpb24tLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtNiBtYi0xMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGgtMTAwIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDwhLS1iZWdpbjo6T3B0aW9uLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWNlbnRlciByb3VuZGVkLTMgYmctbGlnaHQgcHktMTAgcHgtMTAgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6SGVhZGluZy0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTcgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6VGl0bGUtLT5cclxuICAgICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vTm90aWZpY2F0aW9ucy9FZGl0RW1haWwnLFRlbXBsYXRlSW5mby5pZEVuY3J5cHRlZCwnYXInXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIiBjbGFzcz1cInRleHQtcHJpbWFyeSBtYi01IGZ3LWJvbGRlc3QgZnMtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEFyYWJpYzpcclxuICAgICAgICAgICAgICAgICAgICB7e1RlbXBsYXRlSW5mby5lbWFpbHRlbXBsYXRlaW5mby5lbWFpbFN1YmplY3QuYXJhYmljfX1cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9BZG1pbi9Ob3RpZmljYXRpb25zL0VkaXRFbWFpbCcsVGVtcGxhdGVJbmZvLmlkRW5jcnlwdGVkLCdhciddXCJcclxuICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBidG4taWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tYmVnaW46Okl0ZW0tLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIGZzLTYgdGV4dC1ncmF5LTgwMCBmbGV4LWdyb3ctMSBwZS0zIGFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlubmVySFRNTD1cInt7VGVtcGxhdGVJbmZvLmVtYWlsdGVtcGxhdGVpbmZvLnRlbXBsYXRlRW1haWxCYXNlSGVhZGVyLmFyYWJpY319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaW5uZXJIVE1MPVwie3tUZW1wbGF0ZUluZm8uZW1haWx0ZW1wbGF0ZWluZm8uZW1haWxIdG1sSGVhZFNlY3Rpb24uYXJhYmljfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5lbWFpbHRlbXBsYXRlaW5mby5lbWFpbEJvZHkuYXJhYmljfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWRhcmstc2tpbiBwdC03XCIgaW5uZXJIVE1MPVwie3tUZW1wbGF0ZUluZm8uZW1haWx0ZW1wbGF0ZWluZm8udGVtcGxhdGVFbWFpbEJhc2VGb290ZXIuYXJhYmljfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tZW5kOjpTZWxlY3QtLT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tZW5kOjpPcHRpb24tLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtNlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBiZy1saWdodFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBweS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgdGV4dC1wcmltYXJ5IG1iLTUgZnctYm9sZGVzdCBmcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIEVuZ2xpc2g6U01TXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IGJ0bi1pY29uXCIgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vTm90aWZpY2F0aW9ucy9FZGl0U01TJyxUZW1wbGF0ZUluZm8uaWRFbmNyeXB0ZWQsJ2VuJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuIGZvbnQtc2l6ZS0xOFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlwaG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIG1vYmlsZS10eHRcIj57e1RlbXBsYXRlSW5mby5zbXN0ZW1wbGF0ZWluZm8uc21zLmVuZ2xpc2h9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtNlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBiZy1saWdodFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBweS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgdGV4dC1wcmltYXJ5IG1iLTUgZnctYm9sZGVzdCBmcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIEFyYWJpYzpTTVNcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgYnRuLWljb25cIiBbcm91dGVyTGlua109XCJbJy9BZG1pbi9Ob3RpZmljYXRpb25zL0VkaXRTTVMnLFRlbXBsYXRlSW5mby5pZEVuY3J5cHRlZCwnYXInXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wZW4gZm9udC1zaXplLTE4XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBtb2JpbGUtdHh0IGFyXCI+ICB7e1RlbXBsYXRlSW5mby5zbXN0ZW1wbGF0ZWluZm8uc21zLmFyYWJpY319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG48IS0tIHNlbmQgRW1haWwgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjU2VuZEVtYWlsTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbmRFbWFpbFRlbXBsYXRlXCIpfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIlNlbmRFbWFpbEZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJUb1wiIFtncm91cF09XCJTZW5kRW1haWxGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkxhbmd1YWdlXCIgW2dyb3VwXT1cIlNlbmRFbWFpbEZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVtYWlsU2VydmljZVByb3ZpZGVyXCIgW2dyb3VwXT1cIlNlbmRFbWFpbEZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlU2VuZEVtYWlsRm9ybSBpZD1cIkNsb3NlU2VuZEVtYWlsRm9ybVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbmRcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBUZXN0IHNtcyBFbWFpbCBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNUZXN0U2VuZFNNU01vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUZXN0U2VuZFNNU1wiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJUZXN0U2VuZFNNU0Zvcm1PcHRpb25zXCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtUGhvbmUgW29wdGlvbnNdPVwiVGVzdFNlbmRTTVNUb1wiIFtncm91cF09XCJUZXN0U2VuZFNNU0Zvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1QaG9uZT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIlRlc3RTTVNTZXJ2aWNlUHJvdmlkZXJcIiBbZ3JvdXBdPVwiVGVzdFNlbmRTTVNGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMnR4IHN2Zy1pY29uLXdhcm5pbmcgbWUtNFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICAgICAgS2luZGx5IG5vdGUgdGhhdCB0aGVzZSBhdHRyaWJ1dGVzIGFyZSByZXNlcnZlZFxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWRcIj5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5OYW1lRU48L2xpPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibWItMlwiPk5hbWVBUjwvbGk+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJtYi0yXCI+U3ViamVjdDwvbGk+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJtYi0yXCI+TGFuZ0tleTwvbGk+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJtYi0yXCI+TW9iaWxlPC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5FbWFpbDwvbGk+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJtYi0yXCI+RGF0ZTwvbGk+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJtYi0yXCI+VGltZTwvbGk+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJtYi0yXCI+RGF0ZVRpbWU8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlVGVzdFNlbmRTTVNGb3JtIGlkPVwiQ2xvc2VUZXN0U2VuZFNNU0Zvcm1cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZW5kXCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBUZXN0IFNlbmQgRW1haWwgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjVGVzdFNlbmRFbWFpbE1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUZXN0U2VuZEVtYWlsXCIpfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIlRlc3RTZW5kRW1haWxGb3JtT3B0aW9uc1wiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJUZXN0U2VuZEVtYWlsVG9cIiBbZ3JvdXBdPVwiVGVzdFNlbmRFbWFpbEZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0QXJlYT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIlRlc3RFbWFpbFNlcnZpY2VQcm92aWRlclwiIFtncm91cF09XCJUZXN0U2VuZEVtYWlsRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtd2FybmluZyByb3VuZGVkIGJvcmRlci13YXJuaW5nIGJvcmRlciBib3JkZXItZGFzaGVkIG1iLTEwIHAtNlwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvZ2VuMDQ0LnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJLZXlNYXBOb3RlXCIpfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkXCI+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJtYi0yXCI+TmFtZUVOPC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIj5OYW1lQVI8L2xpPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibWItMlwiPlN1YmplY3Q8L2xpPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibWItMlwiPkxhbmdLZXk8L2xpPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibWItMlwiPk1vYmlsZTwvbGk+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJtYi0yXCI+RW1haWw8L2xpPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibWItMlwiPkRhdGU8L2xpPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibWItMlwiPlRpbWU8L2xpPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibWItMlwiPkRhdGVUaW1lPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZVRlc3RTZW5kRW1haWxGb3JtIGlkPVwiQ2xvc2VUZXN0U2VuZEVtYWlsRm9ybVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbmRcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBlZGl0IE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI0VkaXRUZW1wbGF0ZU1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0VGVtcGxhdGVcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiRWRpdFRlbXBsYXRlRm9ybU9wdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiRWRpdE5hbWVcIiBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRBcmVhIFtvcHRpb25zXT1cIkVkaXREZXNjcmlwdGlvblwiIFtncm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIhUHJvZHVjdGlvbk1vZGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRTeXNOYW1lXCIgW2dyb3VwXT1cIkVkaXRUZW1wbGF0ZUZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0T3JnYW5pemF0aW9uXCIgW2dyb3VwXT1cIkVkaXRUZW1wbGF0ZUZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRMYW5ndWFnZU1vZGVcIiBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdENhdGVnb3J5XCIgW2dyb3VwXT1cIkVkaXRUZW1wbGF0ZUZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRNYXN0ZXJMYXlvdXRcIiBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJFZGl0SXNFbWFpbFwiIFtncm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwiRWRpdElzU21zXCIgW2dyb3VwXT1cIkVkaXRUZW1wbGF0ZUZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJFZGl0RW5hYmxlSW50ZW5zaXZlTG9nZ2luZ1wiIFtncm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZUVkaXRUZW1wbGF0ZU1vZGFsIGlkPVwiQ2xvc2VFZGl0VGVtcGxhdGVNb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gR2VuZXJhdGVDb2RlIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI0dlbmVyYXRlQ29kZU1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZUNvZGVcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiR2VuZXJhdGVDb2RlRm9ybVwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIlJvd1wiPlxyXG4gICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cIkdlbmVyYXRlQ29kZVRleHRBcmVhXCIgW2dyb3VwXT1cIkdlbmVyYXRlQ29kZUZvcm1cIiAjR2VuZXJhdGVDb2RlSW5wdXQ+XHJcbiAgICAgICAgPC9CQlNGLVRleHRBcmVhPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZUdlbmVyYXRlQ29kZU1vZGFsIGlkPVwiQ2xvc2VHZW5lcmF0ZUNvZGVNb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIChjbGljayk9XCJjb3B5SW5wdXRNZXNzYWdlKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNvcHlUb0NsaXBib2FyZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuIl19