@hmcts/ccpay-web-component 6.5.15-beta1 → 6.5.15-beta13

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 (179) hide show
  1. package/fesm2022/hmcts-ccpay-web-component.mjs +272 -193
  2. package/fesm2022/hmcts-ccpay-web-component.mjs.map +1 -1
  3. package/index.d.ts +2348 -5
  4. package/package.json +8 -7
  5. package/esm2022/hmcts-ccpay-web-component.mjs +0 -5
  6. package/esm2022/lib/components/add-remission/add-remission.component.mjs +0 -1276
  7. package/esm2022/lib/components/allocate-payments/allocate-payments.component.mjs +0 -423
  8. package/esm2022/lib/components/card-details/card-details.component.mjs +0 -32
  9. package/esm2022/lib/components/case-transactions/case-transactions.component.mjs +0 -885
  10. package/esm2022/lib/components/contact-details/contact-details.component.mjs +0 -338
  11. package/esm2022/lib/components/error-banner/error-banner.component.mjs +0 -18
  12. package/esm2022/lib/components/fee-summary/fee-summary.component.mjs +0 -280
  13. package/esm2022/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.mjs +0 -195
  14. package/esm2022/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.mjs +0 -275
  15. package/esm2022/lib/components/notification-preview/notification-preview.component.mjs +0 -79
  16. package/esm2022/lib/components/page-not-found.component.mjs +0 -17
  17. package/esm2022/lib/components/payment-list/payment-list.component.mjs +0 -36
  18. package/esm2022/lib/components/payment-view/payment-view.component.mjs +0 -467
  19. package/esm2022/lib/components/pba-details/pba-details.component.mjs +0 -18
  20. package/esm2022/lib/components/pba-payment/pba-payment.component.mjs +0 -163
  21. package/esm2022/lib/components/process-refund/process-refund.component.mjs +0 -417
  22. package/esm2022/lib/components/processed-payments/processed-payments.component.mjs +0 -37
  23. package/esm2022/lib/components/refund-list/refund-list.component.mjs +0 -73
  24. package/esm2022/lib/components/refund-status/refund-status.component.mjs +0 -481
  25. package/esm2022/lib/components/reports/reports.component.mjs +0 -337
  26. package/esm2022/lib/components/service-request/service-request.component.mjs +0 -516
  27. package/esm2022/lib/components/status-history/status-history.component.mjs +0 -33
  28. package/esm2022/lib/components/table/table.component.mjs +0 -127
  29. package/esm2022/lib/components/unprocessed-payments/unprocessed-payments.component.mjs +0 -236
  30. package/esm2022/lib/interfaces/AddRemissionRequest.mjs +0 -17
  31. package/esm2022/lib/interfaces/AddRetroRemissionRequest.mjs +0 -9
  32. package/esm2022/lib/interfaces/AllocatePaymentRequest.mjs +0 -41
  33. package/esm2022/lib/interfaces/IAllocationPaymentsRequest.mjs +0 -20
  34. package/esm2022/lib/interfaces/IBSPayments.mjs +0 -2
  35. package/esm2022/lib/interfaces/ICardDetails.mjs +0 -2
  36. package/esm2022/lib/interfaces/IFee.mjs +0 -2
  37. package/esm2022/lib/interfaces/INotificationPreview.mjs +0 -2
  38. package/esm2022/lib/interfaces/IOrderReferenceFee.mjs +0 -2
  39. package/esm2022/lib/interfaces/IPatchRefundAction.mjs +0 -2
  40. package/esm2022/lib/interfaces/IPayment.mjs +0 -2
  41. package/esm2022/lib/interfaces/IPaymentFailure.mjs +0 -2
  42. package/esm2022/lib/interfaces/IPaymentGroup.mjs +0 -2
  43. package/esm2022/lib/interfaces/IPaymentStatus.mjs +0 -12
  44. package/esm2022/lib/interfaces/IPaymentView.mjs +0 -2
  45. package/esm2022/lib/interfaces/IPayments.mjs +0 -2
  46. package/esm2022/lib/interfaces/IPutNotificationRequest.mjs +0 -13
  47. package/esm2022/lib/interfaces/IRefundAction.mjs +0 -2
  48. package/esm2022/lib/interfaces/IRefundContactDetails.mjs +0 -2
  49. package/esm2022/lib/interfaces/IRefundFee.mjs +0 -2
  50. package/esm2022/lib/interfaces/IRefundList.mjs +0 -2
  51. package/esm2022/lib/interfaces/IRefundReasons.mjs +0 -2
  52. package/esm2022/lib/interfaces/IRefundRejectReason.mjs +0 -2
  53. package/esm2022/lib/interfaces/IRefundStatus.mjs +0 -2
  54. package/esm2022/lib/interfaces/IRefundStatusHistory.mjs +0 -2
  55. package/esm2022/lib/interfaces/IRefundsNotifications.mjs +0 -2
  56. package/esm2022/lib/interfaces/IRemission.mjs +0 -2
  57. package/esm2022/lib/interfaces/IResubmitRefundRequest.mjs +0 -13
  58. package/esm2022/lib/interfaces/IStatusHistories.mjs +0 -2
  59. package/esm2022/lib/interfaces/IStatusHistory.mjs +0 -2
  60. package/esm2022/lib/interfaces/IserviceRequestCardPayment.mjs +0 -11
  61. package/esm2022/lib/interfaces/IserviceRequestPbaPayment.mjs +0 -15
  62. package/esm2022/lib/interfaces/IssueRefundRequest.mjs +0 -11
  63. package/esm2022/lib/interfaces/NotificationPreviewRequest.mjs +0 -46
  64. package/esm2022/lib/interfaces/PayhubAntennaRequest.mjs +0 -14
  65. package/esm2022/lib/interfaces/PaymentToPayhubRequest.mjs +0 -17
  66. package/esm2022/lib/interfaces/PostIssueRefundRetroRemission.mjs +0 -9
  67. package/esm2022/lib/interfaces/PostRefundRetroRemission.mjs +0 -18
  68. package/esm2022/lib/interfaces/RefundsRequest.mjs +0 -9
  69. package/esm2022/lib/interfaces/UnidentifiedPaymentsRequest.mjs +0 -16
  70. package/esm2022/lib/interfaces/UnsolicitedPaymentsRequest.mjs +0 -22
  71. package/esm2022/lib/payment-lib.component.mjs +0 -430
  72. package/esm2022/lib/payment-lib.module.mjs +0 -181
  73. package/esm2022/lib/payment-lib.service.mjs +0 -49
  74. package/esm2022/lib/pipes/capitalize.pipe.mjs +0 -18
  75. package/esm2022/lib/pipes/ccd-hyphens.pipe.mjs +0 -22
  76. package/esm2022/lib/pipes/key-value.pipe.mjs +0 -23
  77. package/esm2022/lib/pipes/sanitize-html.pipe.mjs +0 -20
  78. package/esm2022/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.mjs +0 -87
  79. package/esm2022/lib/services/card-details/card-details.service.mjs +0 -39
  80. package/esm2022/lib/services/case-transactions/case-transactions.service.mjs +0 -39
  81. package/esm2022/lib/services/notification/notification.service.mjs +0 -70
  82. package/esm2022/lib/services/orderslist.service.mjs +0 -154
  83. package/esm2022/lib/services/payment-list/payment-list.service.mjs +0 -40
  84. package/esm2022/lib/services/payment-view/payment-view.service.mjs +0 -156
  85. package/esm2022/lib/services/refunds/refunds.service.mjs +0 -120
  86. package/esm2022/lib/services/shared/error-handler.service.mjs +0 -76
  87. package/esm2022/lib/services/shared/httpclient/webcomponent.http.client.mjs +0 -64
  88. package/esm2022/lib/services/shared/logger/console-logger.service.mjs +0 -43
  89. package/esm2022/lib/services/shared/logger/logger.service.mjs +0 -23
  90. package/esm2022/lib/services/status-history/status-history.service.mjs +0 -41
  91. package/esm2022/lib/services/xl-file/xl-file.service.mjs +0 -197
  92. package/esm2022/public_api.mjs +0 -7
  93. package/lib/components/add-remission/add-remission.component.d.ts +0 -208
  94. package/lib/components/allocate-payments/allocate-payments.component.d.ts +0 -115
  95. package/lib/components/card-details/card-details.component.d.ts +0 -18
  96. package/lib/components/case-transactions/case-transactions.component.d.ts +0 -143
  97. package/lib/components/contact-details/contact-details.component.d.ts +0 -54
  98. package/lib/components/error-banner/error-banner.component.d.ts +0 -9
  99. package/lib/components/fee-summary/fee-summary.component.d.ts +0 -72
  100. package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +0 -52
  101. package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +0 -63
  102. package/lib/components/notification-preview/notification-preview.component.d.ts +0 -30
  103. package/lib/components/page-not-found.component.d.ts +0 -5
  104. package/lib/components/payment-list/payment-list.component.d.ts +0 -19
  105. package/lib/components/payment-view/payment-view.component.d.ts +0 -110
  106. package/lib/components/pba-details/pba-details.component.d.ts +0 -10
  107. package/lib/components/pba-payment/pba-payment.component.d.ts +0 -41
  108. package/lib/components/process-refund/process-refund.component.d.ts +0 -82
  109. package/lib/components/processed-payments/processed-payments.component.d.ts +0 -17
  110. package/lib/components/refund-list/refund-list.component.d.ts +0 -26
  111. package/lib/components/refund-status/refund-status.component.d.ts +0 -119
  112. package/lib/components/reports/reports.component.d.ts +0 -49
  113. package/lib/components/service-request/service-request.component.d.ts +0 -141
  114. package/lib/components/status-history/status-history.component.d.ts +0 -19
  115. package/lib/components/table/table.component.d.ts +0 -45
  116. package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +0 -61
  117. package/lib/interfaces/AddRemissionRequest.d.ts +0 -11
  118. package/lib/interfaces/AddRetroRemissionRequest.d.ts +0 -5
  119. package/lib/interfaces/AllocatePaymentRequest.d.ts +0 -31
  120. package/lib/interfaces/IAllocationPaymentsRequest.d.ts +0 -9
  121. package/lib/interfaces/IBSPayments.d.ts +0 -19
  122. package/lib/interfaces/ICardDetails.d.ts +0 -7
  123. package/lib/interfaces/IFee.d.ts +0 -29
  124. package/lib/interfaces/INotificationPreview.d.ts +0 -27
  125. package/lib/interfaces/IOrderReferenceFee.d.ts +0 -9
  126. package/lib/interfaces/IPatchRefundAction.d.ts +0 -4
  127. package/lib/interfaces/IPayment.d.ts +0 -35
  128. package/lib/interfaces/IPaymentFailure.d.ts +0 -13
  129. package/lib/interfaces/IPaymentGroup.d.ts +0 -11
  130. package/lib/interfaces/IPaymentStatus.d.ts +0 -11
  131. package/lib/interfaces/IPaymentView.d.ts +0 -5
  132. package/lib/interfaces/IPayments.d.ts +0 -4
  133. package/lib/interfaces/IPutNotificationRequest.d.ts +0 -6
  134. package/lib/interfaces/IRefundAction.d.ts +0 -4
  135. package/lib/interfaces/IRefundContactDetails.d.ts +0 -9
  136. package/lib/interfaces/IRefundFee.d.ts +0 -7
  137. package/lib/interfaces/IRefundList.d.ts +0 -20
  138. package/lib/interfaces/IRefundReasons.d.ts +0 -6
  139. package/lib/interfaces/IRefundRejectReason.d.ts +0 -4
  140. package/lib/interfaces/IRefundStatus.d.ts +0 -8
  141. package/lib/interfaces/IRefundStatusHistory.d.ts +0 -5
  142. package/lib/interfaces/IRefundsNotifications.d.ts +0 -16
  143. package/lib/interfaces/IRemission.d.ts +0 -14
  144. package/lib/interfaces/IResubmitRefundRequest.d.ts +0 -9
  145. package/lib/interfaces/IStatusHistories.d.ts +0 -7
  146. package/lib/interfaces/IStatusHistory.d.ts +0 -7
  147. package/lib/interfaces/IserviceRequestCardPayment.d.ts +0 -6
  148. package/lib/interfaces/IserviceRequestPbaPayment.d.ts +0 -8
  149. package/lib/interfaces/IssueRefundRequest.d.ts +0 -6
  150. package/lib/interfaces/NotificationPreviewRequest.d.ts +0 -25
  151. package/lib/interfaces/PayhubAntennaRequest.d.ts +0 -8
  152. package/lib/interfaces/PaymentToPayhubRequest.d.ts +0 -11
  153. package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +0 -6
  154. package/lib/interfaces/PostRefundRetroRemission.d.ts +0 -11
  155. package/lib/interfaces/RefundsRequest.d.ts +0 -5
  156. package/lib/interfaces/UnidentifiedPaymentsRequest.d.ts +0 -7
  157. package/lib/interfaces/UnsolicitedPaymentsRequest.d.ts +0 -10
  158. package/lib/payment-lib.component.d.ts +0 -156
  159. package/lib/payment-lib.module.d.ts +0 -42
  160. package/lib/payment-lib.service.d.ts +0 -21
  161. package/lib/pipes/capitalize.pipe.d.ts +0 -8
  162. package/lib/pipes/ccd-hyphens.pipe.d.ts +0 -8
  163. package/lib/pipes/key-value.pipe.d.ts +0 -8
  164. package/lib/pipes/sanitize-html.pipe.d.ts +0 -10
  165. package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +0 -27
  166. package/lib/services/card-details/card-details.service.d.ts +0 -17
  167. package/lib/services/case-transactions/case-transactions.service.d.ts +0 -17
  168. package/lib/services/notification/notification.service.d.ts +0 -21
  169. package/lib/services/orderslist.service.d.ts +0 -77
  170. package/lib/services/payment-list/payment-list.service.d.ts +0 -18
  171. package/lib/services/payment-view/payment-view.service.d.ts +0 -61
  172. package/lib/services/refunds/refunds.service.d.ts +0 -36
  173. package/lib/services/shared/error-handler.service.d.ts +0 -14
  174. package/lib/services/shared/httpclient/webcomponent.http.client.d.ts +0 -17
  175. package/lib/services/shared/logger/console-logger.service.d.ts +0 -11
  176. package/lib/services/shared/logger/logger.service.d.ts +0 -14
  177. package/lib/services/status-history/status-history.service.d.ts +0 -17
  178. package/lib/services/xl-file/xl-file.service.d.ts +0 -16
  179. package/public_api.d.ts +0 -3
@@ -1,481 +0,0 @@
1
- import { Component, forwardRef, Inject, Input } from '@angular/core';
2
- import { RefundsService } from '../../services/refunds/refunds.service';
3
- import { NotificationService } from '../../services/notification/notification.service';
4
- import { FormBuilder, FormControl, Validators } from '@angular/forms';
5
- import { OrderslistService } from '../../services/orderslist.service';
6
- import { IPutNotificationRequest } from '../../interfaces/IPutNotificationRequest';
7
- import { IResubmitRefundRequest } from '../../interfaces/IResubmitRefundRequest';
8
- import { PaymentViewService } from '../../services/payment-view/payment-view.service';
9
- import { CommonModule } from '@angular/common';
10
- import { NotificationPreviewComponent } from '../notification-preview/notification-preview.component';
11
- import { ContactDetailsComponent } from '../contact-details/contact-details.component';
12
- import { AddRemissionComponent } from '../add-remission/add-remission.component';
13
- import { CcdHyphensPipe } from '../../pipes/ccd-hyphens.pipe';
14
- import { CapitalizePipe } from '../../pipes/capitalize.pipe';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "@angular/forms";
17
- import * as i2 from "../../services/refunds/refunds.service";
18
- import * as i3 from "../../services/notification/notification.service";
19
- import * as i4 from "../../services/orderslist.service";
20
- import * as i5 from "../../services/payment-view/payment-view.service";
21
- import * as i6 from "@angular/common";
22
- export class RefundStatusComponent {
23
- formBuilder;
24
- refundService;
25
- notificationService;
26
- paymentLibComponent;
27
- OrderslistService;
28
- paymentViewService;
29
- LOGGEDINUSERROLES = [];
30
- API_ROOT;
31
- ccdCaseNumber;
32
- isTurnOff;
33
- orderParty;
34
- refundStatusForm;
35
- selectedRefundReason;
36
- rejectedRefundList = [];
37
- notificationList;
38
- notification;
39
- approvalStatus = 'Sent for approval';
40
- rejectStatus = 'Update required';
41
- errorMessage = null;
42
- viewName;
43
- refundReason;
44
- refundlist;
45
- bsPaymentDcnNumber;
46
- isCallFromRefundList;
47
- refundButtonState = '';
48
- isAmountEmpty = false;
49
- isReasonEmpty = false;
50
- amountHasError = false;
51
- isRemissionLessThanFeeError = false;
52
- refundHasError = false;
53
- refundReasons = [];
54
- refundStatusHistories;
55
- refundNotifications;
56
- isResendOperationSuccess = false;
57
- isEditDetailsClicked = false;
58
- isEditAddressDeatilsClicked = false;
59
- addressDetails;
60
- refundReference;
61
- refundAmount;
62
- refundCode;
63
- isRefundBtnDisabled = true;
64
- isFromPayBubble = false;
65
- oldRefundReason;
66
- refundreason;
67
- navigationpage;
68
- isLastUpdatedByCurrentUser = true;
69
- isProcessRefund = false;
70
- changedAmount;
71
- isRemissionsMatch;
72
- payment;
73
- changeRefundReason;
74
- fees;
75
- refundFees;
76
- paymentObj;
77
- templateInstructionType;
78
- notificationSentViewIndex = -1;
79
- notificationPreview = false;
80
- notificationSentView = false;
81
- allowedRolesToAccessRefund = ['payments-refund-approver', 'payments-refund', 'payments'];
82
- isRefundStatusResetBtnDisabled = false;
83
- constructor(formBuilder, refundService, notificationService, paymentLibComponent, OrderslistService, paymentViewService) {
84
- this.formBuilder = formBuilder;
85
- this.refundService = refundService;
86
- this.notificationService = notificationService;
87
- this.paymentLibComponent = paymentLibComponent;
88
- this.OrderslistService = OrderslistService;
89
- this.paymentViewService = paymentViewService;
90
- }
91
- ngOnInit() {
92
- this.resetRemissionForm([false, false, false, false], 'All');
93
- this.bsPaymentDcnNumber = this.paymentLibComponent.bspaymentdcn;
94
- this.isCallFromRefundList = this.paymentLibComponent.isCallFromRefundList;
95
- if (this.API_ROOT == 'api/payment-history') {
96
- this.isFromPayBubble = true;
97
- }
98
- if (this.paymentLibComponent.isRefundStatusView) {
99
- this.viewName = 'refundview';
100
- this.OrderslistService.getRefundView().subscribe((data) => this.refundlist = data);
101
- this.OrderslistService.getCCDCaseNumberforRefund.subscribe((data) => this.ccdCaseNumber = data);
102
- }
103
- else {
104
- this.viewName = 'refundstatuslist';
105
- this.refundService.getRefundStatusList(this.ccdCaseNumber).subscribe(refundList => {
106
- this.rejectedRefundList = refundList['refund_list'];
107
- }),
108
- (error) => {
109
- this.errorMessage = error.replace(/"/g, "");
110
- };
111
- }
112
- this.refundStatusForm = this.formBuilder.group({
113
- amount: new FormControl('', Validators.compose([
114
- Validators.required,
115
- Validators.pattern('^[0-9]+(\.[0-9]{1,2})?$')
116
- ])),
117
- refundReason: new FormControl('', Validators.compose([Validators.required])),
118
- reason: new FormControl()
119
- });
120
- if (this.refundlist !== undefined) {
121
- this.getRefundsNotification();
122
- this.getRefundsStatusHistoryList();
123
- if (this.LOGGEDINUSERROLES.some(i => i.includes('payments-refund-approver'))) {
124
- this.isProcessRefund = true;
125
- this.refundButtonState = this.refundlist.refund_status.name;
126
- return;
127
- }
128
- if (this.LOGGEDINUSERROLES.some(i => i.includes('payments-refund'))) {
129
- this.isProcessRefund = false;
130
- this.refundButtonState = this.refundlist.refund_status.name;
131
- }
132
- }
133
- }
134
- getRefundsStatusHistoryList() {
135
- if (this.refundlist !== undefined) {
136
- this.refundService.getRefundStatusHistory(this.refundlist.refund_reference).subscribe(statusHistoryList => {
137
- this.refundStatusHistories = statusHistoryList.status_history_dto_list;
138
- this.isLastUpdatedByCurrentUser = statusHistoryList.last_updated_by_current_user;
139
- }),
140
- (error) => {
141
- this.errorMessage = error.replace(/"/g, "");
142
- };
143
- }
144
- }
145
- getRefundsNotification() {
146
- this.notificationService.getRefundNotification(this.refundlist.refund_reference).subscribe(refundsNotification => {
147
- this.notificationList = refundsNotification['notifications'];
148
- }),
149
- (error) => {
150
- this.errorMessage = error.replace(/"/g, "");
151
- };
152
- }
153
- goToRefundView(refundlist, navigationpage) {
154
- this.OrderslistService.setRefundView(refundlist);
155
- this.OrderslistService.setCCDCaseNumber(this.ccdCaseNumber);
156
- this.paymentLibComponent.viewName = 'refundstatuslist';
157
- this.paymentLibComponent.isRefundStatusView = true;
158
- this.refundlist = refundlist;
159
- this.OrderslistService.setnavigationPage(navigationpage);
160
- }
161
- loadCaseTransactionPage() {
162
- this.OrderslistService.setnavigationPage('casetransactions');
163
- this.OrderslistService.setisFromServiceRequestPage(false);
164
- this.paymentLibComponent.viewName = 'case-transactions';
165
- this.paymentLibComponent.ISBSENABLE = true;
166
- this.paymentLibComponent.isRefundStatusView = false;
167
- }
168
- loadRefundListPage() {
169
- this.OrderslistService.getnavigationPageValue().subscribe((data) => this.navigationpage = data);
170
- if (this.navigationpage === 'casetransactions') {
171
- this.loadCaseTransactionPage();
172
- }
173
- else {
174
- this.paymentLibComponent.viewName = 'refund-list';
175
- }
176
- }
177
- gotoReviewDetailsPage(event) {
178
- // event.preventDefault();
179
- this.errorMessage = false;
180
- this.paymentLibComponent.isRefundStatusView = true;
181
- this.ngOnInit();
182
- }
183
- gotoReviewAndReSubmitPage() {
184
- this.viewName = 'reviewandsubmitview';
185
- this.getTemplateInstructionType(this.paymentObj, this.refundlist.payment_reference);
186
- this.oldRefundReason = this.refundlist.reason;
187
- this.changedAmount = this.refundlist.amount;
188
- this.refundreason = this.refundStatusHistories.filter(data => data.status.toLowerCase() === 'update required')[0].notes;
189
- this.refundService.getRefundReasons().subscribe(refundReasons => {
190
- this.refundReasons = refundReasons;
191
- });
192
- }
193
- gotoRefundReasonPage(refundReason) {
194
- this.isRefundBtnDisabled = false;
195
- this.paymentLibComponent.REFUNDLIST = "true";
196
- this.paymentLibComponent.isFromRefundStatusPage = true;
197
- this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
198
- this.errorMessage = false;
199
- this.changeRefundReason = refundReason;
200
- this.viewName = 'issuerefundpage1';
201
- }
202
- gotoAmountPage() {
203
- this.errorMessage = false;
204
- this.paymentLibComponent.REFUNDLIST = "true";
205
- this.isRefundBtnDisabled = false;
206
- this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
207
- this.paymentLibComponent.isFromRefundStatusPage = true;
208
- if (this.refundlist.reason == 'Retrospective remission') {
209
- this.viewName = 'processretroremissonpage';
210
- }
211
- else {
212
- this.viewName = 'issuerefund';
213
- }
214
- }
215
- goToReviewAndSubmitView() {
216
- const remissionctrls = this.refundStatusForm.controls;
217
- if (this.refundStatusForm.dirty) {
218
- if (remissionctrls['amount'].value == '') {
219
- this.resetRemissionForm([true, false, false, false], 'amount');
220
- }
221
- else if (remissionctrls['amount'].value != '' && remissionctrls['amount'].invalid) {
222
- this.resetRemissionForm([false, true, false, false], 'amount');
223
- }
224
- else if (remissionctrls['reason'].value == '') {
225
- this.resetRemissionForm([false, false, false, true], 'reason');
226
- }
227
- else {
228
- this.refundlist.reason = remissionctrls['reason'].value;
229
- this.viewName = 'reviewandsubmitview';
230
- }
231
- }
232
- }
233
- resetRemissionForm(val, field) {
234
- if (field === 'All') {
235
- this.isAmountEmpty = val[0];
236
- this.amountHasError = val[1];
237
- this.isRemissionLessThanFeeError = val[2];
238
- this.isReasonEmpty = val[3];
239
- }
240
- else if (field === 'amount' || field === 'All') {
241
- this.isAmountEmpty = val[0];
242
- this.amountHasError = val[1];
243
- this.isRemissionLessThanFeeError = val[2];
244
- }
245
- else if (field === 'reason' || field === 'All') {
246
- this.isReasonEmpty = val[3];
247
- }
248
- }
249
- selectRadioButton(key, value) {
250
- this.refundHasError = false;
251
- this.selectedRefundReason = key;
252
- if (key === 'Other') {
253
- this.refundHasError = false;
254
- this.refundReason = key;
255
- }
256
- }
257
- getRefundListReason(refundListReason) {
258
- if (this.paymentLibComponent.isFromRefundStatusPage && !this.paymentLibComponent.iscancelClicked) {
259
- if (refundListReason.reason != undefined && refundListReason.reason != null && refundListReason.reason != this.refundlist.reason) {
260
- this.refundlist.reason = refundListReason.reason;
261
- this.refundlist.reason_code = refundListReason.code.split('-')[0].trim();
262
- this.refundlist.code = refundListReason.code;
263
- this.refundCode = refundListReason.code;
264
- }
265
- }
266
- else {
267
- this.isRefundBtnDisabled = true;
268
- }
269
- this.notificationPreview = false;
270
- this.viewName = 'reviewandsubmitview';
271
- this.paymentLibComponent.CCD_CASE_NUMBER = this.ccdCaseNumber;
272
- }
273
- getRefundAmount(amount) {
274
- if (this.paymentLibComponent.isFromRefundStatusPage && !this.paymentLibComponent.iscancelClicked) {
275
- if (amount > 0) {
276
- this.changedAmount = amount;
277
- // this.refundlist.amount = amount;
278
- }
279
- }
280
- else {
281
- this.isRefundBtnDisabled = true;
282
- }
283
- this.notificationPreview = false;
284
- this.viewName = 'reviewandsubmitview';
285
- this.paymentLibComponent.CCD_CASE_NUMBER = this.ccdCaseNumber;
286
- }
287
- getRefundFees(fees) {
288
- this.fees = fees;
289
- this.refundFees = this.fees.map(obj => ({
290
- fee_id: obj.id,
291
- code: obj.code,
292
- version: obj.version,
293
- volume: obj.updated_volume ? obj.updated_volume : obj.volume,
294
- refund_amount: obj.refund_amount
295
- }));
296
- }
297
- gotoReviewRefundConfirmationPage() {
298
- // if (this.oldRefundReason === this.refundlist.reason) {
299
- // this.refundCode = '';
300
- // }
301
- if (this.refundFees === undefined) {
302
- this.refundFees = this.refundlist['refund_fees'];
303
- }
304
- if (this.refundlist.reason == 'Retrospective remission') {
305
- this.refundFees[0].refund_amount = this.changedAmount;
306
- }
307
- this.refundCode = this.refundlist.code;
308
- const resubmitRequest = new IResubmitRefundRequest(this.refundCode, this.changedAmount, this.refundlist.contact_details, this.refundFees);
309
- this.refundService.patchResubmitRefund(resubmitRequest, this.refundlist.refund_reference).subscribe(response => {
310
- if (JSON.parse(response)) {
311
- this.refundReference = JSON.parse(response).refund_reference;
312
- this.refundAmount = JSON.parse(response).refund_amount;
313
- this.viewName = 'reviewrefundconfirmationpage';
314
- }
315
- }, (error) => {
316
- this.errorMessage = error.replace(/"/g, "");
317
- });
318
- }
319
- gotoEditAddressDetails(note) {
320
- this.notification = note;
321
- this.isEditDetailsClicked = true;
322
- this.viewName = 'refundEditView';
323
- }
324
- getContactDetails(obj) {
325
- this.addressDetails = obj;
326
- this.getTemplateInstructionType(this.paymentObj, this.refundlist.payment_reference);
327
- this.notificationPreview = false;
328
- this.viewName = 'revieweditdetailsconfirmationpage';
329
- }
330
- getContactDetailsForRefundList(obj) {
331
- this.refundlist.contact_details = obj;
332
- this.getTemplateInstructionType(this.paymentObj, this.refundlist.payment_reference);
333
- this.notificationPreview = false;
334
- this.isEditDetailsClicked = false;
335
- this.isRefundBtnDisabled = false;
336
- this.viewName = 'reviewandsubmitview';
337
- }
338
- gotoEditDetailsPage(note, view) {
339
- if (note) {
340
- this.notification = { contact_details: note, notification_type: note.notification_type };
341
- }
342
- this.isEditDetailsClicked = true;
343
- this.viewName = view;
344
- }
345
- submitEditDetail() {
346
- this.isResendOperationSuccess = false;
347
- const contactDetails = this.addressDetails.notification_type === 'EMAIL' ? this.addressDetails.email :
348
- {
349
- address_line: this.addressDetails.address_line,
350
- city: this.addressDetails.city,
351
- county: this.addressDetails.county,
352
- country: this.addressDetails.country,
353
- postal_code: this.addressDetails.postal_code,
354
- };
355
- const resendRequest = new IPutNotificationRequest(contactDetails, this.addressDetails.notification_type);
356
- this.refundService.putResendOrEdit(resendRequest, this.refundlist.refund_reference, this.addressDetails.notification_type).subscribe((response) => {
357
- this.isResendOperationSuccess = response;
358
- }, (error) => {
359
- this.isResendOperationSuccess = false;
360
- this.errorMessage = error.replace(/"/g, "");
361
- });
362
- }
363
- putResend(notification) {
364
- this.isResendOperationSuccess = false;
365
- const contactDetails = notification.notification_type === 'EMAIL' ? notification.contact_details.email :
366
- {
367
- address_line: notification.contact_details.address_line,
368
- city: notification.contact_details.city,
369
- county: notification.contact_details.county,
370
- country: notification.contact_details.country,
371
- postal_code: notification.contact_details.postal_code,
372
- };
373
- const resendRequest = new IPutNotificationRequest(contactDetails, notification.notification_type);
374
- this.refundService.putResendOrEdit(resendRequest, this.refundlist.refund_reference, notification.notification_type).subscribe((response) => {
375
- this.isResendOperationSuccess = response;
376
- }, (error) => {
377
- this.isResendOperationSuccess = false;
378
- this.errorMessage = error.replace(/"/g, "");
379
- });
380
- }
381
- gotoRefundViewPageCancelBtnClicked(event) {
382
- event.preventDefault();
383
- this.isEditDetailsClicked = false;
384
- this.viewName = 'refundview';
385
- }
386
- gotoRefundReviewAndSubmitViewPageCancelBtnClicked(event) {
387
- event.preventDefault();
388
- this.isEditDetailsClicked = false;
389
- this.viewName = 'reviewandsubmitview';
390
- }
391
- goToRefundProcessComponent(refundReference, refundList) {
392
- this.paymentLibComponent.refundlistsource = refundList;
393
- this.paymentLibComponent.refundReference = refundReference;
394
- this.paymentLibComponent.isFromPayBubble = true;
395
- this.paymentLibComponent.viewName = 'process-refund';
396
- }
397
- getTemplateInstructionType(payment, paymentReference) {
398
- if (payment == undefined || payment == null || payment.reference != paymentReference) {
399
- this.paymentViewService.getPaymentDetails(paymentReference).subscribe(payment => {
400
- this.paymentObj = payment;
401
- this.paymentObj.reference = paymentReference;
402
- this.templateInstructionType = this.notificationService.getNotificationInstructionType(this.paymentObj.channel, this.paymentObj.method);
403
- }, (error) => {
404
- this.templateInstructionType = 'Template';
405
- });
406
- }
407
- else {
408
- this.templateInstructionType = this.notificationService.getNotificationInstructionType(payment.channel, payment.method);
409
- }
410
- }
411
- showNotificationPreview() {
412
- this.notificationPreview = true;
413
- }
414
- hideNotificationPreview() {
415
- this.notificationPreview = false;
416
- }
417
- showNotificationSentView(index) {
418
- this.notificationSentViewIndex = index;
419
- this.notificationSentView = true;
420
- }
421
- hideNotificationSentView() {
422
- this.notificationSentViewIndex = -1;
423
- this.notificationSentView = false;
424
- }
425
- check4AllowedRoles2DisplayEditRefundBtn = () => {
426
- return this.allowedRolesToAccessRefund.some(role => this.LOGGEDINUSERROLES.indexOf(role) !== -1);
427
- };
428
- displayResetRefundConfirmation() {
429
- this.isRefundStatusResetBtnDisabled = true;
430
- this.viewName = 'confirmSubmitResetRefund';
431
- }
432
- redirectToRefundListPage() {
433
- this.viewName = 'refundview';
434
- this.isRefundStatusResetBtnDisabled = false;
435
- this.paymentLibComponent.viewName = 'refundstatuslist';
436
- }
437
- postResetRefund() {
438
- this.refundService.postResetRefund(this.refundlist.refund_reference).subscribe((response) => {
439
- this.isResendOperationSuccess = response;
440
- this.loadRefundListPage();
441
- }, (error) => {
442
- this.isResendOperationSuccess = false;
443
- this.errorMessage = error.replace(/"/g, "");
444
- });
445
- }
446
- getResetRefundVisibility() {
447
- this.check4AllowedRoles2DisplayEditRefundBtn && this.isCurrentRefundVisibleForReset();
448
- }
449
- isCurrentRefundVisibleForReset() {
450
- return this.refundlist.refund_status.name === 'Expired';
451
- }
452
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefundStatusComponent, deps: [{ token: i1.FormBuilder }, { token: i2.RefundsService }, { token: i3.NotificationService }, { token: 'PAYMENT_LIB' }, { token: i4.OrderslistService }, { token: i5.PaymentViewService }], target: i0.ɵɵFactoryTarget.Component });
453
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RefundStatusComponent, isStandalone: true, selector: "ccpay-refund-status", inputs: { LOGGEDINUSERROLES: "LOGGEDINUSERROLES", API_ROOT: "API_ROOT", ccdCaseNumber: "ccdCaseNumber", isTurnOff: "isTurnOff", orderParty: "orderParty" }, ngImport: i0, template: "\n<div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Error in processing the request\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"viewName==='refundstatuslist' && rejectedRefundList && !isResendOperationSuccess && !isEditDetailsClicked\">\n <!-- payments -->\n\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-16\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-11\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Date</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Refund reference</td>\n <td class=\"govuk-table__header col-24 \" scope=\"col\">Reason</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let refundList of rejectedRefundList\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_status['name'] }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">\u00A3{{ refundList?.amount | number:'.2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.date_updated | date:'dd MMM yyyy'}}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{refundList?.reason}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToRefundView(refundList,'casetransactions')\">Review</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No refunds recorded</td>\n </tbody>\n </table>\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='refundview' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div>\n <h2 class=\"govuk-heading-l\">Refund details</h2>\n <table>\n\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Refund reference</td>\n <td>{{ refundlist?.refund_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment to be refunded</td>\n <td>{{refundlist?.payment_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Reason for refund</td>\n <td>{{ refundlist?.reason }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Amount refunded</td>\n <td>\u00A3{{refundlist?.amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n\n\n <!-- Notification sent details -->\n <div>\n <br />\n <h2 class=\"govuk-heading-m\">Notifications sent</h2>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Date and time</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Sent to</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Sent via</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Actions</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"notificationList\">\n <ng-container *ngFor=\"let notification of notificationList; let i = index;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{notification.date_created | date:'dd MMMM yyyy HH:mm:ss'}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderParty}}</td>\n <td class=\"govuk-table__cell whitespace-inherit col-40\">\n <div *ngIf=\"notification?.notification_type === 'EMAIL'\">\n <strong>Email</strong><br>\n {{notification?.contact_details?.email?.trim()}}\n </div>\n <div *ngIf=\"notification?.notification_type === 'LETTER'\">\n <strong>Post</strong><br>\n {{notification?.contact_details?.address_line?.trim()}} {{notification?.contact_details?.city?.trim()}} {{notification?.contact_details?.county?.trim()}} {{notification?.contact_details?.country?.trim()}} {{notification?.contact_details?.postal_code?.trim()}}\n </div>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\" *ngIf=\"i === 0\"><a href=\"Javascript:void(0);\" (click)=\"putResend(notification)\">Resend</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=\"Javascript:void(0);\" (click)=\"gotoEditAddressDetails(notification)\">Edit details</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a *ngIf=\"!notificationSentView || i != notificationSentViewIndex\" href=\"Javascript:void(0);\" (click)=\"showNotificationSentView(i)\">View</a><a *ngIf=\"i === notificationSentViewIndex && notificationSentView\" href=\"Javascript:void(0);\" (click)=\"hideNotificationSentView()\">Hide</a></td>\n <td class=\"govuk-table__cell whitespace-inherit\" *ngIf=\"i > 0\"><a *ngIf=\"!notificationSentView || i != notificationSentViewIndex\" href=\"Javascript:void(0);\" (click)=\"showNotificationSentView(i)\">View</a><a *ngIf=\"i === notificationSentViewIndex && notificationSentView\" href=\"Javascript:void(0);\" (click)=\"hideNotificationSentView()\">Hide</a></td>\n </tr>\n <tr *ngIf=\"i === notificationSentViewIndex && notificationSentView\">\n <td class=\"govuk-table__cell\" colspan=\"4\">\n <app-notification-preview\n [previewJourney]=\"'Notifications sent'\" [notificationSent]=\"notification?.sent_notification\">\n </app-notification-preview>\n </td>\n </tr>\n </ng-container>\n\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"!notificationList\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\" colspan=\"4\">No record found ... </td>\n </tr>\n </tbody>\n </table>\n </div>\n <!-- Status history -->\n <div>\n <br />\n <div class=\"refund-status-history-header govuk-flex\">\n <h2 class=\"govuk-heading-m\">Refund status history</h2>\n <div *ngIf=\"check4AllowedRoles2DisplayEditRefundBtn && isCurrentRefundVisibleForReset()\">\n <button\n type=\"button\"\n [disabled]=\"isRefundStatusResetBtnDisabled\"\n class=\"govuk-button govuk-button--secondary\"\n (click)=\"displayResetRefundConfirmation()\">\n Reset Refund\n </button>\n </div>\n </div>\n <div *ngIf=\"refundStatusHistories\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Date and time</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Users</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Notes</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let refundStatusHistory of refundStatusHistories;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.status}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n {{refundStatusHistory.date_created | date:'dd MMMM yyyy HH:mm:ss'}}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.created_by}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.notes}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </div>\n\n <ng-container *ngIf=\"viewName==='refundview' && !isFromPayBubble && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div *ngIf=\"refundButtonState==='Update required'\" >\n <!-- <div *ngIf=\"refundButtonState==='sent back'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary btnmargin\"\n (click)=\"gotoReviewAndReSubmitPage()\">Change refund details</button>\n </div>\n <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='Sent for approval'\" >\n <!-- <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='sent for approval'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary\"\n (click)=\"goToRefundProcessComponent(refundlist.refund_reference,refundlist)\">Process refund</button>\n </div>\n </ng-container>\n\n\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='reviewandsubmitview' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <!-- <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div> -->\n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\">Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.payment_reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for return</td>\n <td class=\"govuk-table__cell\">{{refundreason}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund reference</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.refund_reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.reason?.trim()}}\n <a (click)=\"gotoRefundReasonPage(refundlist?.reason)\" *ngIf=\"refundlist?.reason !== 'Retrospective remission' && refundlist?.reason !== 'Overpayment'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\n <!-- <td class=\"govuk-table__cell\">{{ refundlist?.reason }}</td>\n <a (click)=\"gotoRefundReasonPage()\" class=\"govuk-link right\">Change</a> -->\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">\u00A3{{ changedAmount ? changedAmount : refundlist?.amount | number:'.2' }}\n <a (click)=\"gotoAmountPage()\" *ngIf=\"refundlist?.reason !== 'Overpayment'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <div *ngIf=\"refundlist?.contact_details?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{refundlist?.contact_details?.email?.trim()}}\n </div>\n <div *ngIf=\"refundlist?.contact_details?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{refundlist?.contact_details?.address_line?.trim()}} {{refundlist?.contact_details?.city?.trim()}} {{refundlist?.contact_details?.county?.trim()}} {{refundlist?.contact_details?.country?.trim()}} {{refundlist?.contact_details?.postal_code?.trim()}}\n </div>\n <a class=\"govuk-link\" href=\"Javascript:void(0)\" *ngIf=\"refundlist?.contact_details !=null\" class=\"govuk-link right\" (click)=\"gotoEditDetailsPage(refundlist?.contact_details, 'reviewandsubmitEditview')\">\n Change\n </a>\n </td>\n </tr>\n\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Notification</td>\n <td class=\"govuk-table__cell\">{{templateInstructionType}}\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </td>\n </tr>\n </table>\n <app-notification-preview *ngIf=\"notificationPreview\"\n [paymentReference]=\"refundlist?.payment_reference\"\n [payment]=\"paymentObj\"\n [contactDetails]=\"refundlist?.contact_details\"\n [refundReason]=\"refundlist?.reason_code\"\n [refundAmount]=\"changedAmount ? changedAmount : refundlist?.amount\"\n [refundReference]=\"refundlist?.refund_reference\"></app-notification-preview>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n</div>\n<p><a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a></p>\n <!-- <div class=\"govuk-button-group\">\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n </div> -->\n <!-- <p>\n <a (click)=\"loadRefundListPage()\" href=\"\" class=\"cancelbtn\">Cancel</a>\n </p> -->\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewandsubmitEditview' && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSPAGE'>\n <h1 class=\"govuk-heading-l\">Edit contact details</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span class=\"govuk-hint font-size-19px\">\n Refund reference: {{ refundlist?.refund_reference}}\n </span>\n <ccpay-contact-details\n [isEditOperationInRefundList] = isEditDetailsClicked\n [addressObj] = notification\n (assignContactDetailsInFefundsList)=\"getContactDetailsForRefundList($event)\"\n (redirectToIssueRefund)=\"gotoRefundReviewAndSubmitViewPageCancelBtnClicked($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefundpage1' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\" [isFromRefundStatusPage] = \"true\"\n [changeRefundReason]= \"changeRefundReason\" [ccdCaseNumber]=\"ccdCaseNumber\" (refundListReason)=\"getRefundListReason($event)\" [refundPaymentReference]= \"refundlist?.payment_reference\" ></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'processretroremissonpage' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" [refundPaymentReference]= \"refundlist?.payment_reference\" (refundListAmount)=\"getRefundAmount($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefund' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\" [isFromServiceRequestPage] = \"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" [refundPaymentReference]= \"refundlist?.payment_reference\" [isFromRefundStatusPage]=\"true\" (refundListAmount)=\"getRefundAmount($event)\" (refundFees)=\"getRefundFees($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewrefundconfirmationpage' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div class=\"govuk-grid-row pagesize\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_refund_title\">\n Refund submitted\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference:{{refundReference}} </strong></p>\n </div>\n\n </div>\n\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount| currency:'GBP':'symbol-narrow':'1.2-2'}} has been created and will be passed to a team leader to approve.\n </p>\n\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isResendOperationSuccess\">\n <div class=\"govuk-grid-row pagesize\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_refund_title\">\n Notification sent\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference: {{ refundlist?.refund_reference}} </strong></p>\n </div>\n\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n</ng-container>\n<ng-container *ngIf=\"viewName === 'refundEditView' && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSPAGE'>\n <h1 class=\"govuk-heading-l\">Edit contact details</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span class=\"govuk-hint font-size-19px\">\n Refund reference: {{ refundlist?.refund_reference}}\n </span>\n <ccpay-contact-details\n [isEditOperationInRefundList] = isEditDetailsClicked\n [addressObj] = notification\n (assignContactDetailsInFefundsList)=\"getContactDetails($event)\"\n (redirectToIssueRefund)=\"gotoRefundViewPageCancelBtnClicked($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n<ng-container *ngIf=\"viewName === 'revieweditdetailsconfirmationpage' && !isResendOperationSuccess && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSCHECKANDANSWERPAGE'>\n <h1 class=\"govuk-heading-l\">Check your answers</h1>\n <dl class=\"govuk-summary-list\">\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Refund reference\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{ refundlist?.refund_reference}}\n </dd>\n <span class=\"govuk-summary-list__actions\"></span>\n </div>\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Send via\n <br/>\n </dt>\n <dd class=\"govuk-summary-list__value\">\n <div *ngIf=\"addressDetails?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{addressDetails?.email?.trim()}}\n </div>\n <div *ngIf=\"addressDetails?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{addressDetails?.address_line?.trim()}} {{addressDetails?.city?.trim()}} {{addressDetails?.county?.trim()}} {{addressDetails?.country?.trim()}} {{addressDetails?.postal_code?.trim()}}\n </div>\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a class=\"govuk-link\" href=\"Javascript:void(0)\" (click)=\"gotoEditDetailsPage(addressDetails, 'refundEditView')\">\n Change\n </a>\n </dd>\n </div>\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Notification\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{templateInstructionType}}\n </dd>\n <span class=\"govuk-summary-list__actions\">\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </span>\n </div>\n </dl>\n\n <app-notification-preview *ngIf=\"notificationPreview\" [paymentReference]=\"refundlist?.payment_reference\"\n [payment]=\"paymentObj\"\n [contactDetails]=\"addressDetails\"\n [refundReason]=\"refundlist?.reason_code\"\n [refundAmount]=\"refundlist?.amount\"\n [refundReference]=\"refundlist?.refund_reference\">\n </app-notification-preview>\n\n\n\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoEditDetailsPage(addressDetails, 'refundEditView')\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"submitEditDetail()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Send notification\n </button>\n </div>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n\n<ng-container *ngIf=\"viewName === 'confirmSubmitResetRefund'\">\n\n <h1 class=\"govuk-heading-l\">Reset Refund</h1>\n\n\n <!DOCTYPE html>\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>Refund Actions</title>\n </head>\n <body>\n <div class=\"refund-list\">\n <ul>\n <li>Close the current Refund {{ refundlist?.refund_reference }}</li>\n <li>Reissue the refund with a new refund reference</li>\n <li>Send a new Offer and Contact notification for the issued refund</li>\n </ul>\n </div>\n </body>\n </html>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"postResetRefund()\" class=\"govuk-button\"> Continue</button>\n <button (click)=\"redirectToRefundListPage()\" class=\"govuk-button govuk-button--secondary\"> Cancel</button>\n </div>\n\n</ng-container>\n", styles: [".right{float:right!important}.button{margin-bottom:3em;font-size:19px}.cancelbtn{font-size:19px;font-weight:400}.btnmargin{margin-bottom:2em}.govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px #858688;color:#0b0c0c;margin-right:.5em}.govuk-warning-text__text,.govuk-label--s,.refund__symbol{font-size:19px;font-weight:400}.inline-error-class{outline:3px solid #a71414;outline-offset:0}.inline-error-message{color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.govuk-button,.govuk-link{margin-right:1em;font-size:19px;font-weight:200}.govuk-button-group{padding-top:2em}.heading-medium{margin-top:.875em}.heading-large{margin-top:.25em}.govuk-panel--confirmation{color:#fff;background:#00703c}.govuk-heading-l{font-size:36px}.govuk-heading-m{font-size:24px}.govuk-panel__title{font-size:5rem}.govuk-panel_refund_title{margin-top:0;margin-bottom:30px;color:#fff;font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;font-weight:700;font-size:48px}.govuk-body-m,.govuk-body{font-size:2.1875rem}.govuk-input--width-10{max-width:36ex}.col-14{width:14%!important}.col-10{width:10%!important}.col-11{width:11%!important}.col-18{width:18%!important}.col-21{width:21%!important}.col-9{width:9%!important}.col-40{width:40%!important}.col-15{width:15%!important}.col-16{width:16%!important}.col-25{width:25%!important}.col-24{width:24%!important}.govuk-error-summary__title{font-size:24px!important}.govuk-error-summary__body{font-size:19px!important}.font-size-19px{font-size:19px}.white{color:#fff}.pagesize{margin:2em;width:97%}.govuk-link{cursor:pointer}.contactDetails-width{width:70%}.whitespace-inherit{white-space:inherit!important}.hmcts-currency-input__symbol{font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;line-height:initial;position:absolute;font-weight:200;padding:8px 10px;height:40px;box-sizing:border-box;background-color:#dee0e2;border:2px solid #0b0c0c}.refund-status-history-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1em}.govuk-button--secondary{margin-bottom:0}.refund-list{text-align:left;margin-left:20px}.refund-list ul{list-style-type:disc;padding-left:20px}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i6.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i6.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i0.forwardRef(() => i6.DecimalPipe), name: "number" }, { kind: "pipe", type: i0.forwardRef(() => i6.CurrencyPipe), name: "currency" }, { kind: "pipe", type: i0.forwardRef(() => i6.DatePipe), name: "date" }, { kind: "component", type: i0.forwardRef(() => NotificationPreviewComponent), selector: "app-notification-preview", inputs: ["payment", "contactDetails", "refundReason", "refundAmount", "paymentReference", "refundReference", "previewJourney", "notificationSent"], outputs: ["notificationPreviewEvent"] }, { kind: "component", type: i0.forwardRef(() => ContactDetailsComponent), selector: "ccpay-contact-details", inputs: ["isEditOperation", "isEditOperationInRefundList", "addressObj"], outputs: ["assignContactDetails", "assignContactDetailsInFefundsList", "redirectToIssueRefund"] }, { kind: "component", type: i0.forwardRef(() => AddRemissionComponent), selector: "ccpay-add-remission", inputs: ["fee", "fees", "payment", "remission", "ccdCaseNumber", "caseType", "viewCompStatus", "paymentGroupRef", "isTurnOff", "isRefundRemission", "isStrategicFixEnable", "paidAmount", "isFromRefundListPage", "isFromPaymentDetailPage", "isFromServiceRequestPage", "isFullyRefund", "feeamount", "refundPaymentReference", "isFromRefundStatusPage", "changeRefundReason", "isServiceRequest", "LOGGEDINUSERROLES", "orderDetail", "orderRef", "orderStatus", "orderParty", "orderCreated", "orderCCDEvent", "takepayment", "orderFeesTotal", "orderTotalPayments", "orderRemissionTotal"], outputs: ["cancelRemission", "refundListReason", "refundListAmount", "refundFees"] }, { kind: "pipe", type: i0.forwardRef(() => CcdHyphensPipe), name: "ccdHyphens" }] });
454
- }
455
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefundStatusComponent, decorators: [{
456
- type: Component,
457
- args: [{ selector: 'ccpay-refund-status', imports: [
458
- CommonModule,
459
- forwardRef(() => NotificationPreviewComponent),
460
- forwardRef(() => ContactDetailsComponent),
461
- forwardRef(() => AddRemissionComponent),
462
- CcdHyphensPipe,
463
- CapitalizePipe,
464
- ], standalone: true, template: "\n<div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Error in processing the request\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"viewName==='refundstatuslist' && rejectedRefundList && !isResendOperationSuccess && !isEditDetailsClicked\">\n <!-- payments -->\n\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-16\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-11\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Date</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Refund reference</td>\n <td class=\"govuk-table__header col-24 \" scope=\"col\">Reason</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let refundList of rejectedRefundList\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_status['name'] }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">\u00A3{{ refundList?.amount | number:'.2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.date_updated | date:'dd MMM yyyy'}}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{refundList?.reason}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToRefundView(refundList,'casetransactions')\">Review</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No refunds recorded</td>\n </tbody>\n </table>\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='refundview' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div>\n <h2 class=\"govuk-heading-l\">Refund details</h2>\n <table>\n\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Refund reference</td>\n <td>{{ refundlist?.refund_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment to be refunded</td>\n <td>{{refundlist?.payment_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Reason for refund</td>\n <td>{{ refundlist?.reason }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Amount refunded</td>\n <td>\u00A3{{refundlist?.amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n\n\n <!-- Notification sent details -->\n <div>\n <br />\n <h2 class=\"govuk-heading-m\">Notifications sent</h2>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Date and time</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Sent to</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Sent via</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Actions</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"notificationList\">\n <ng-container *ngFor=\"let notification of notificationList; let i = index;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{notification.date_created | date:'dd MMMM yyyy HH:mm:ss'}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderParty}}</td>\n <td class=\"govuk-table__cell whitespace-inherit col-40\">\n <div *ngIf=\"notification?.notification_type === 'EMAIL'\">\n <strong>Email</strong><br>\n {{notification?.contact_details?.email?.trim()}}\n </div>\n <div *ngIf=\"notification?.notification_type === 'LETTER'\">\n <strong>Post</strong><br>\n {{notification?.contact_details?.address_line?.trim()}} {{notification?.contact_details?.city?.trim()}} {{notification?.contact_details?.county?.trim()}} {{notification?.contact_details?.country?.trim()}} {{notification?.contact_details?.postal_code?.trim()}}\n </div>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\" *ngIf=\"i === 0\"><a href=\"Javascript:void(0);\" (click)=\"putResend(notification)\">Resend</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=\"Javascript:void(0);\" (click)=\"gotoEditAddressDetails(notification)\">Edit details</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a *ngIf=\"!notificationSentView || i != notificationSentViewIndex\" href=\"Javascript:void(0);\" (click)=\"showNotificationSentView(i)\">View</a><a *ngIf=\"i === notificationSentViewIndex && notificationSentView\" href=\"Javascript:void(0);\" (click)=\"hideNotificationSentView()\">Hide</a></td>\n <td class=\"govuk-table__cell whitespace-inherit\" *ngIf=\"i > 0\"><a *ngIf=\"!notificationSentView || i != notificationSentViewIndex\" href=\"Javascript:void(0);\" (click)=\"showNotificationSentView(i)\">View</a><a *ngIf=\"i === notificationSentViewIndex && notificationSentView\" href=\"Javascript:void(0);\" (click)=\"hideNotificationSentView()\">Hide</a></td>\n </tr>\n <tr *ngIf=\"i === notificationSentViewIndex && notificationSentView\">\n <td class=\"govuk-table__cell\" colspan=\"4\">\n <app-notification-preview\n [previewJourney]=\"'Notifications sent'\" [notificationSent]=\"notification?.sent_notification\">\n </app-notification-preview>\n </td>\n </tr>\n </ng-container>\n\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"!notificationList\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\" colspan=\"4\">No record found ... </td>\n </tr>\n </tbody>\n </table>\n </div>\n <!-- Status history -->\n <div>\n <br />\n <div class=\"refund-status-history-header govuk-flex\">\n <h2 class=\"govuk-heading-m\">Refund status history</h2>\n <div *ngIf=\"check4AllowedRoles2DisplayEditRefundBtn && isCurrentRefundVisibleForReset()\">\n <button\n type=\"button\"\n [disabled]=\"isRefundStatusResetBtnDisabled\"\n class=\"govuk-button govuk-button--secondary\"\n (click)=\"displayResetRefundConfirmation()\">\n Reset Refund\n </button>\n </div>\n </div>\n <div *ngIf=\"refundStatusHistories\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Date and time</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Users</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Notes</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let refundStatusHistory of refundStatusHistories;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.status}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n {{refundStatusHistory.date_created | date:'dd MMMM yyyy HH:mm:ss'}}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.created_by}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.notes}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </div>\n\n <ng-container *ngIf=\"viewName==='refundview' && !isFromPayBubble && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div *ngIf=\"refundButtonState==='Update required'\" >\n <!-- <div *ngIf=\"refundButtonState==='sent back'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary btnmargin\"\n (click)=\"gotoReviewAndReSubmitPage()\">Change refund details</button>\n </div>\n <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='Sent for approval'\" >\n <!-- <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='sent for approval'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary\"\n (click)=\"goToRefundProcessComponent(refundlist.refund_reference,refundlist)\">Process refund</button>\n </div>\n </ng-container>\n\n\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='reviewandsubmitview' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <!-- <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div> -->\n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\">Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.payment_reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for return</td>\n <td class=\"govuk-table__cell\">{{refundreason}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund reference</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.refund_reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.reason?.trim()}}\n <a (click)=\"gotoRefundReasonPage(refundlist?.reason)\" *ngIf=\"refundlist?.reason !== 'Retrospective remission' && refundlist?.reason !== 'Overpayment'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\n <!-- <td class=\"govuk-table__cell\">{{ refundlist?.reason }}</td>\n <a (click)=\"gotoRefundReasonPage()\" class=\"govuk-link right\">Change</a> -->\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">\u00A3{{ changedAmount ? changedAmount : refundlist?.amount | number:'.2' }}\n <a (click)=\"gotoAmountPage()\" *ngIf=\"refundlist?.reason !== 'Overpayment'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <div *ngIf=\"refundlist?.contact_details?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{refundlist?.contact_details?.email?.trim()}}\n </div>\n <div *ngIf=\"refundlist?.contact_details?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{refundlist?.contact_details?.address_line?.trim()}} {{refundlist?.contact_details?.city?.trim()}} {{refundlist?.contact_details?.county?.trim()}} {{refundlist?.contact_details?.country?.trim()}} {{refundlist?.contact_details?.postal_code?.trim()}}\n </div>\n <a class=\"govuk-link\" href=\"Javascript:void(0)\" *ngIf=\"refundlist?.contact_details !=null\" class=\"govuk-link right\" (click)=\"gotoEditDetailsPage(refundlist?.contact_details, 'reviewandsubmitEditview')\">\n Change\n </a>\n </td>\n </tr>\n\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Notification</td>\n <td class=\"govuk-table__cell\">{{templateInstructionType}}\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </td>\n </tr>\n </table>\n <app-notification-preview *ngIf=\"notificationPreview\"\n [paymentReference]=\"refundlist?.payment_reference\"\n [payment]=\"paymentObj\"\n [contactDetails]=\"refundlist?.contact_details\"\n [refundReason]=\"refundlist?.reason_code\"\n [refundAmount]=\"changedAmount ? changedAmount : refundlist?.amount\"\n [refundReference]=\"refundlist?.refund_reference\"></app-notification-preview>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n</div>\n<p><a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a></p>\n <!-- <div class=\"govuk-button-group\">\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n </div> -->\n <!-- <p>\n <a (click)=\"loadRefundListPage()\" href=\"\" class=\"cancelbtn\">Cancel</a>\n </p> -->\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewandsubmitEditview' && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSPAGE'>\n <h1 class=\"govuk-heading-l\">Edit contact details</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span class=\"govuk-hint font-size-19px\">\n Refund reference: {{ refundlist?.refund_reference}}\n </span>\n <ccpay-contact-details\n [isEditOperationInRefundList] = isEditDetailsClicked\n [addressObj] = notification\n (assignContactDetailsInFefundsList)=\"getContactDetailsForRefundList($event)\"\n (redirectToIssueRefund)=\"gotoRefundReviewAndSubmitViewPageCancelBtnClicked($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefundpage1' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\" [isFromRefundStatusPage] = \"true\"\n [changeRefundReason]= \"changeRefundReason\" [ccdCaseNumber]=\"ccdCaseNumber\" (refundListReason)=\"getRefundListReason($event)\" [refundPaymentReference]= \"refundlist?.payment_reference\" ></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'processretroremissonpage' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" [refundPaymentReference]= \"refundlist?.payment_reference\" (refundListAmount)=\"getRefundAmount($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefund' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\" [isFromServiceRequestPage] = \"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" [refundPaymentReference]= \"refundlist?.payment_reference\" [isFromRefundStatusPage]=\"true\" (refundListAmount)=\"getRefundAmount($event)\" (refundFees)=\"getRefundFees($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewrefundconfirmationpage' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div class=\"govuk-grid-row pagesize\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_refund_title\">\n Refund submitted\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference:{{refundReference}} </strong></p>\n </div>\n\n </div>\n\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount| currency:'GBP':'symbol-narrow':'1.2-2'}} has been created and will be passed to a team leader to approve.\n </p>\n\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isResendOperationSuccess\">\n <div class=\"govuk-grid-row pagesize\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_refund_title\">\n Notification sent\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference: {{ refundlist?.refund_reference}} </strong></p>\n </div>\n\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n</ng-container>\n<ng-container *ngIf=\"viewName === 'refundEditView' && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSPAGE'>\n <h1 class=\"govuk-heading-l\">Edit contact details</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span class=\"govuk-hint font-size-19px\">\n Refund reference: {{ refundlist?.refund_reference}}\n </span>\n <ccpay-contact-details\n [isEditOperationInRefundList] = isEditDetailsClicked\n [addressObj] = notification\n (assignContactDetailsInFefundsList)=\"getContactDetails($event)\"\n (redirectToIssueRefund)=\"gotoRefundViewPageCancelBtnClicked($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n<ng-container *ngIf=\"viewName === 'revieweditdetailsconfirmationpage' && !isResendOperationSuccess && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSCHECKANDANSWERPAGE'>\n <h1 class=\"govuk-heading-l\">Check your answers</h1>\n <dl class=\"govuk-summary-list\">\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Refund reference\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{ refundlist?.refund_reference}}\n </dd>\n <span class=\"govuk-summary-list__actions\"></span>\n </div>\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Send via\n <br/>\n </dt>\n <dd class=\"govuk-summary-list__value\">\n <div *ngIf=\"addressDetails?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{addressDetails?.email?.trim()}}\n </div>\n <div *ngIf=\"addressDetails?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{addressDetails?.address_line?.trim()}} {{addressDetails?.city?.trim()}} {{addressDetails?.county?.trim()}} {{addressDetails?.country?.trim()}} {{addressDetails?.postal_code?.trim()}}\n </div>\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a class=\"govuk-link\" href=\"Javascript:void(0)\" (click)=\"gotoEditDetailsPage(addressDetails, 'refundEditView')\">\n Change\n </a>\n </dd>\n </div>\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Notification\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{templateInstructionType}}\n </dd>\n <span class=\"govuk-summary-list__actions\">\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </span>\n </div>\n </dl>\n\n <app-notification-preview *ngIf=\"notificationPreview\" [paymentReference]=\"refundlist?.payment_reference\"\n [payment]=\"paymentObj\"\n [contactDetails]=\"addressDetails\"\n [refundReason]=\"refundlist?.reason_code\"\n [refundAmount]=\"refundlist?.amount\"\n [refundReference]=\"refundlist?.refund_reference\">\n </app-notification-preview>\n\n\n\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoEditDetailsPage(addressDetails, 'refundEditView')\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"submitEditDetail()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Send notification\n </button>\n </div>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n\n<ng-container *ngIf=\"viewName === 'confirmSubmitResetRefund'\">\n\n <h1 class=\"govuk-heading-l\">Reset Refund</h1>\n\n\n <!DOCTYPE html>\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>Refund Actions</title>\n </head>\n <body>\n <div class=\"refund-list\">\n <ul>\n <li>Close the current Refund {{ refundlist?.refund_reference }}</li>\n <li>Reissue the refund with a new refund reference</li>\n <li>Send a new Offer and Contact notification for the issued refund</li>\n </ul>\n </div>\n </body>\n </html>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"postResetRefund()\" class=\"govuk-button\"> Continue</button>\n <button (click)=\"redirectToRefundListPage()\" class=\"govuk-button govuk-button--secondary\"> Cancel</button>\n </div>\n\n</ng-container>\n", styles: [".right{float:right!important}.button{margin-bottom:3em;font-size:19px}.cancelbtn{font-size:19px;font-weight:400}.btnmargin{margin-bottom:2em}.govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px #858688;color:#0b0c0c;margin-right:.5em}.govuk-warning-text__text,.govuk-label--s,.refund__symbol{font-size:19px;font-weight:400}.inline-error-class{outline:3px solid #a71414;outline-offset:0}.inline-error-message{color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.govuk-button,.govuk-link{margin-right:1em;font-size:19px;font-weight:200}.govuk-button-group{padding-top:2em}.heading-medium{margin-top:.875em}.heading-large{margin-top:.25em}.govuk-panel--confirmation{color:#fff;background:#00703c}.govuk-heading-l{font-size:36px}.govuk-heading-m{font-size:24px}.govuk-panel__title{font-size:5rem}.govuk-panel_refund_title{margin-top:0;margin-bottom:30px;color:#fff;font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;font-weight:700;font-size:48px}.govuk-body-m,.govuk-body{font-size:2.1875rem}.govuk-input--width-10{max-width:36ex}.col-14{width:14%!important}.col-10{width:10%!important}.col-11{width:11%!important}.col-18{width:18%!important}.col-21{width:21%!important}.col-9{width:9%!important}.col-40{width:40%!important}.col-15{width:15%!important}.col-16{width:16%!important}.col-25{width:25%!important}.col-24{width:24%!important}.govuk-error-summary__title{font-size:24px!important}.govuk-error-summary__body{font-size:19px!important}.font-size-19px{font-size:19px}.white{color:#fff}.pagesize{margin:2em;width:97%}.govuk-link{cursor:pointer}.contactDetails-width{width:70%}.whitespace-inherit{white-space:inherit!important}.hmcts-currency-input__symbol{font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;line-height:initial;position:absolute;font-weight:200;padding:8px 10px;height:40px;box-sizing:border-box;background-color:#dee0e2;border:2px solid #0b0c0c}.refund-status-history-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1em}.govuk-button--secondary{margin-bottom:0}.refund-list{text-align:left;margin-left:20px}.refund-list ul{list-style-type:disc;padding-left:20px}\n"] }]
465
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.RefundsService }, { type: i3.NotificationService }, { type: undefined, decorators: [{
466
- type: Inject,
467
- args: ['PAYMENT_LIB']
468
- }] }, { type: i4.OrderslistService }, { type: i5.PaymentViewService }], propDecorators: { LOGGEDINUSERROLES: [{
469
- type: Input,
470
- args: ['LOGGEDINUSERROLES']
471
- }], API_ROOT: [{
472
- type: Input,
473
- args: ['API_ROOT']
474
- }], ccdCaseNumber: [{
475
- type: Input
476
- }], isTurnOff: [{
477
- type: Input
478
- }], orderParty: [{
479
- type: Input
480
- }] } });
481
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmdW5kLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXltZW50LWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcmVmdW5kLXN0YXR1cy9yZWZ1bmQtc3RhdHVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BheW1lbnQtbGliL3NyYy9saWIvY29tcG9uZW50cy9yZWZ1bmQtc3RhdHVzL3JlZnVuZC1zdGF0dXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDdEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDckYsT0FBTyxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQWEsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHL0UsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFHakYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDL0UsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFJcEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQ3BHLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxj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MkJBQUMsYUFBYTswR0ExREssaUJBQWlCO3NCQUE1QyxLQUFLO3VCQUFDLG1CQUFtQjtnQkFDUCxRQUFRO3NCQUExQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1IsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0LCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UmVmdW5kc1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlZnVuZHMvcmVmdW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7Tm90aWZpY2F0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7SVJlZnVuZExpc3R9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZExpc3QnO1xuaW1wb3J0IHtJUmVmdW5kc05vdGlmaWNhdGlvbnN9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZHNOb3RpZmljYXRpb25zJztcbmltcG9ydCB7T3JkZXJzbGlzdFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyc2xpc3Quc2VydmljZSc7XG5pbXBvcnQge0lQdXROb3RpZmljYXRpb25SZXF1ZXN0fSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQdXROb3RpZmljYXRpb25SZXF1ZXN0JztcbmltcG9ydCB7SVJlZnVuZENvbnRhY3REZXRhaWxzfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRDb250YWN0RGV0YWlscyc7XG5pbXBvcnQge0lSZWZ1bmRTdGF0dXN9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZFN0YXR1cyc7XG5pbXBvcnQge0lSZXN1Ym1pdFJlZnVuZFJlcXVlc3R9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlc3VibWl0UmVmdW5kUmVxdWVzdCc7XG5pbXBvcnQge1BheW1lbnRWaWV3U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7SVBheW1lbnR9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHtJRmVlfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHtJUmVmdW5kRmVlfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRGZWUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge05vdGlmaWNhdGlvblByZXZpZXdDb21wb25lbnR9IGZyb20gJy4uL25vdGlmaWNhdGlvbi1wcmV2aWV3L25vdGlmaWNhdGlvbi1wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQge0NvbnRhY3REZXRhaWxzQ29tcG9uZW50fSBmcm9tICcuLi9jb250YWN0LWRldGFpbHMvY29udGFjdC1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQge0FkZFJlbWlzc2lvbkNvbXBvbmVudH0gZnJvbSAnLi4vYWRkLXJlbWlzc2lvbi9hZGQtcmVtaXNzaW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0NjZEh5cGhlbnNQaXBlfSBmcm9tICcuLi8uLi9waXBlcy9jY2QtaHlwaGVucy5waXBlJztcbmltcG9ydCB7Q2FwaXRhbGl6ZVBpcGV9IGZyb20gJy4uLy4uL3BpcGVzL2NhcGl0YWxpemUucGlwZSc7XG5pbXBvcnQgdHlwZSB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuXG50eXBlIFBheW1lbnRMaWJBbGlhcyA9IFBheW1lbnRMaWJDb21wb25lbnQ7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXJlZnVuZC1zdGF0dXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVmdW5kLXN0YXR1cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlZnVuZC1zdGF0dXMuY29tcG9uZW50LmNzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIGZvcndhcmRSZWYoKCkgPT4gTm90aWZpY2F0aW9uUHJldmlld0NvbXBvbmVudCksXG4gICAgZm9yd2FyZFJlZigoKSA9PiBDb250YWN0RGV0YWlsc0NvbXBvbmVudCksXG4gICAgZm9yd2FyZFJlZigoKSA9PiBBZGRSZW1pc3Npb25Db21wb25lbnQpLFxuICAgIENjZEh5cGhlbnNQaXBlLFxuICAgIENhcGl0YWxpemVQaXBlLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFJlZnVuZFN0YXR1c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgnTE9HR0VESU5VU0VSUk9MRVMnKSBMT0dHRURJTlVTRVJST0xFUzogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCdBUElfUk9PVCcpIEFQSV9ST09UOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBvcmRlclBhcnR5OiBzdHJpbmc7XG4gIHJlZnVuZFN0YXR1c0Zvcm06IEZvcm1Hcm91cDtcbiAgc2VsZWN0ZWRSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgcmVqZWN0ZWRSZWZ1bmRMaXN0OiBJUmVmdW5kTGlzdFtdID0gW107XG4gIG5vdGlmaWNhdGlvbkxpc3Q6IGFueTtcbiAgbm90aWZpY2F0aW9uOiBhbnk7XG4gIGFwcHJvdmFsU3RhdHVzID0gJ1NlbnQgZm9yIGFwcHJvdmFsJztcbiAgcmVqZWN0U3RhdHVzID0gJ1VwZGF0ZSByZXF1aXJlZCc7XG4gIGVycm9yTWVzc2FnZSA9IG51bGw7XG4gIHZpZXdOYW1lOiBzdHJpbmc7XG4gIHJlZnVuZFJlYXNvbjogc3RyaW5nO1xuICByZWZ1bmRsaXN0OiBJUmVmdW5kTGlzdDtcbiAgYnNQYXltZW50RGNuTnVtYmVyOiBzdHJpbmc7XG4gIGlzQ2FsbEZyb21SZWZ1bmRMaXN0OiBib29sZWFuO1xuICByZWZ1bmRCdXR0b25TdGF0ZTogc3RyaW5nID0gJyc7XG4gIGlzQW1vdW50RW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZWFzb25FbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbW91bnRIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVmdW5kSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVmdW5kUmVhc29uczogYW55W10gPSBbXTtcbiAgcmVmdW5kU3RhdHVzSGlzdG9yaWVzOiBJUmVmdW5kU3RhdHVzW107XG4gIHJlZnVuZE5vdGlmaWNhdGlvbnM6IElSZWZ1bmRTdGF0dXNbXTtcbiAgaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRWRpdERldGFpbHNDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRWRpdEFkZHJlc3NEZWF0aWxzQ2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBhZGRyZXNzRGV0YWlsczogSVJlZnVuZENvbnRhY3REZXRhaWxzO1xuICByZWZ1bmRSZWZlcmVuY2U6IHN0cmluZztcbiAgcmVmdW5kQW1vdW50OiBzdHJpbmc7XG4gIHJlZnVuZENvZGU6IHN0cmluZztcbiAgaXNSZWZ1bmRCdG5EaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIGlzRnJvbVBheUJ1YmJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBvbGRSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgcmVmdW5kcmVhc29uOiBzdHJpbmc7XG4gIG5hdmlnYXRpb25wYWdlOiBzdHJpbmc7XG4gIGlzTGFzdFVwZGF0ZWRCeUN1cnJlbnRVc2VyOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNQcm9jZXNzUmVmdW5kOiBib29sZWFuID0gZmFsc2U7XG4gIGNoYW5nZWRBbW91bnQ6IG51bWJlcjtcbiAgaXNSZW1pc3Npb25zTWF0Y2g6IGJvb2xlYW47XG4gIHBheW1lbnQ6IElQYXltZW50O1xuICBjaGFuZ2VSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgZmVlczogSUZlZVtdO1xuICByZWZ1bmRGZWVzOiBJUmVmdW5kRmVlW107XG4gIHBheW1lbnRPYmo6IElQYXltZW50O1xuICB0ZW1wbGF0ZUluc3RydWN0aW9uVHlwZTogc3RyaW5nO1xuICBub3RpZmljYXRpb25TZW50Vmlld0luZGV4OiBudW1iZXIgPSAtMTtcbiAgbm90aWZpY2F0aW9uUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBub3RpZmljYXRpb25TZW50VmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZCA9IFsncGF5bWVudHMtcmVmdW5kLWFwcHJvdmVyJywgJ3BheW1lbnRzLXJlZnVuZCcsICdwYXltZW50cyddO1xuICBpc1JlZnVuZFN0YXR1c1Jlc2V0QnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlZnVuZFNlcnZpY2U6IFJlZnVuZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBASW5qZWN0KCdQQVlNRU5UX0xJQicpIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkFsaWFzLFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ0FsbCcpO1xuICAgIHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbjtcbiAgICB0aGlzLmlzQ2FsbEZyb21SZWZ1bmRMaXN0ID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzQ2FsbEZyb21SZWZ1bmRMaXN0O1xuICAgIGlmICh0aGlzLkFQSV9ST09UID09ICdhcGkvcGF5bWVudC1oaXN0b3J5Jykge1xuICAgICAgdGhpcy5pc0Zyb21QYXlCdWJibGUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldykge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdyZWZ1bmR2aWV3JztcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0UmVmdW5kVmlldygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5yZWZ1bmRsaXN0ID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldENDRENhc2VOdW1iZXJmb3JSZWZ1bmQuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLmNjZENhc2VOdW1iZXIgPSBkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdyZWZ1bmRzdGF0dXNsaXN0JztcbiAgICAgIHRoaXMucmVmdW5kU2VydmljZS5nZXRSZWZ1bmRTdGF0dXNMaXN0KHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICByZWZ1bmRMaXN0ID0+IHtcbiAgICAgICAgICB0aGlzLnJlamVjdGVkUmVmdW5kTGlzdCA9IHJlZnVuZExpc3RbJ3JlZnVuZF9saXN0J107XG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIHRoaXMucmVmdW5kU3RhdHVzRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgYW1vdW50OiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXlswLTldKyhcXC5bMC05XXsxLDJ9KT8kJylcbiAgICAgIF0pKSxcbiAgICAgIHJlZnVuZFJlYXNvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICByZWFzb246IG5ldyBGb3JtQ29udHJvbCgpXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5yZWZ1bmRsaXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZ2V0UmVmdW5kc05vdGlmaWNhdGlvbigpO1xuICAgICAgdGhpcy5nZXRSZWZ1bmRzU3RhdHVzSGlzdG9yeUxpc3QoKTtcblxuICAgICAgaWYgKHRoaXMuTE9HR0VESU5VU0VSUk9MRVMuc29tZShpID0+IGkuaW5jbHVkZXMoJ3BheW1lbnRzLXJlZnVuZC1hcHByb3ZlcicpKSkge1xuICAgICAgICB0aGlzLmlzUHJvY2Vzc1JlZnVuZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVmdW5kQnV0dG9uU3RhdGUgPSB0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3N0YXR1cy5uYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkxPR0dFRElOVVNFUlJPTEVTLnNvbWUoaSA9PiBpLmluY2x1ZGVzKCdwYXltZW50cy1yZWZ1bmQnKSkpIHtcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NSZWZ1bmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWZ1bmRCdXR0b25TdGF0ZSA9IHRoaXMucmVmdW5kbGlzdC5yZWZ1bmRfc3RhdHVzLm5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBnZXRSZWZ1bmRzU3RhdHVzSGlzdG9yeUxpc3QoKSB7XG4gICAgaWYgKHRoaXMucmVmdW5kbGlzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJlZnVuZFNlcnZpY2UuZ2V0UmVmdW5kU3RhdHVzSGlzdG9yeSh0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgICBzdGF0dXNIaXN0b3J5TGlzdCA9PiB7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRTdGF0dXNIaXN0b3JpZXMgPSBzdGF0dXNIaXN0b3J5TGlzdC5zdGF0dXNfaGlzdG9yeV9kdG9fbGlzdDtcbiAgICAgICAgICB0aGlzLmlzTGFzdFVwZGF0ZWRCeUN1cnJlbnRVc2VyID0gc3RhdHVzSGlzdG9yeUxpc3QubGFzdF91cGRhdGVkX2J5X2N1cnJlbnRfdXNlcjtcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLnJlcGxhY2UoL1wiL2csIFwiXCIpO1xuICAgICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGdldFJlZnVuZHNOb3RpZmljYXRpb24oKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdldFJlZnVuZE5vdGlmaWNhdGlvbih0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcmVmdW5kc05vdGlmaWNhdGlvbiA9PiB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uTGlzdCA9IHJlZnVuZHNOb3RpZmljYXRpb25bJ25vdGlmaWNhdGlvbnMnXTtcbiAgICAgIH1cbiAgICApLFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgIH07XG4gIH1cblxuICBnb1RvUmVmdW5kVmlldyhyZWZ1bmRsaXN0OiBJUmVmdW5kTGlzdCwgbmF2aWdhdGlvbnBhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0UmVmdW5kVmlldyhyZWZ1bmRsaXN0KTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldENDRENhc2VOdW1iZXIodGhpcy5jY2RDYXNlTnVtYmVyKTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVmdW5kc3RhdHVzbGlzdCc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IHRydWU7XG4gICAgdGhpcy5yZWZ1bmRsaXN0ID0gcmVmdW5kbGlzdDtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKG5hdmlnYXRpb25wYWdlKTtcbiAgfVxuXG4gIGxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IGZhbHNlO1xuICB9XG5cbiAgbG9hZFJlZnVuZExpc3RQYWdlKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0bmF2aWdhdGlvblBhZ2VWYWx1ZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5uYXZpZ2F0aW9ucGFnZSA9IGRhdGEpO1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25wYWdlID09PSAnY2FzZXRyYW5zYWN0aW9ucycpIHtcbiAgICAgIHRoaXMubG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlZnVuZC1saXN0JztcbiAgICB9XG4gIH1cblxuICBnb3RvUmV2aWV3RGV0YWlsc1BhZ2UoZXZlbnQ6IGFueSkge1xuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gdHJ1ZTtcbiAgICB0aGlzLm5nT25Jbml0KCk7XG4gIH1cblxuICBnb3RvUmV2aWV3QW5kUmVTdWJtaXRQYWdlKCkge1xuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gICAgdGhpcy5nZXRUZW1wbGF0ZUluc3RydWN0aW9uVHlwZSh0aGlzLnBheW1lbnRPYmosIHRoaXMucmVmdW5kbGlzdC5wYXltZW50X3JlZmVyZW5jZSk7XG4gICAgdGhpcy5vbGRSZWZ1bmRSZWFzb24gPSB0aGlzLnJlZnVuZGxpc3QucmVhc29uO1xuICAgIHRoaXMuY2hhbmdlZEFtb3VudCA9IHRoaXMucmVmdW5kbGlzdC5hbW91bnQ7XG4gICAgdGhpcy5yZWZ1bmRyZWFzb24gPSB0aGlzLnJlZnVuZFN0YXR1c0hpc3Rvcmllcy5maWx0ZXIoZGF0YSA9PiBkYXRhLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAndXBkYXRlIHJlcXVpcmVkJylbMF0ubm90ZXM7XG4gICAgdGhpcy5yZWZ1bmRTZXJ2aWNlLmdldFJlZnVuZFJlYXNvbnMoKS5zdWJzY3JpYmUoXG4gICAgICByZWZ1bmRSZWFzb25zID0+IHtcbiAgICAgICAgdGhpcy5yZWZ1bmRSZWFzb25zID0gcmVmdW5kUmVhc29ucztcbiAgICAgIH0pO1xuICB9XG4gIGdvdG9SZWZ1bmRSZWFzb25QYWdlKHJlZnVuZFJlYXNvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlJFRlVORExJU1QgPSBcInRydWVcIjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlUmVmdW5kUmVhc29uID0gcmVmdW5kUmVhc29uO1xuICAgIHRoaXMudmlld05hbWUgPSAnaXNzdWVyZWZ1bmRwYWdlMSc7XG4gIH1cblxuICBnb3RvQW1vdW50UGFnZSgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5SRUZVTkRMSVNUID0gXCJ0cnVlXCI7XG4gICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgaWYgKHRoaXMucmVmdW5kbGlzdC5yZWFzb24gPT0gJ1JldHJvc3BlY3RpdmUgcmVtaXNzaW9uJykge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdwcm9jZXNzcmV0cm9yZW1pc3NvbnBhZ2UnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdOYW1lID0gJ2lzc3VlcmVmdW5kJztcbiAgICB9XG4gIH1cblxuICBnb1RvUmV2aWV3QW5kU3VibWl0VmlldygpIHtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscyA9IHRoaXMucmVmdW5kU3RhdHVzRm9ybS5jb250cm9sc1xuICAgIGlmICh0aGlzLnJlZnVuZFN0YXR1c0Zvcm0uZGlydHkpIHtcbiAgICAgIGlmIChyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPT0gJycpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChyZW1pc3Npb25jdHJsc1sncmVhc29uJ10udmFsdWUgPT0gJycpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdLCAncmVhc29uJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlZnVuZGxpc3QucmVhc29uID0gcmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnZhbHVlO1xuICAgICAgICB0aGlzLnZpZXdOYW1lID0gJ3Jldmlld2FuZHN1Ym1pdHZpZXcnO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgcmVzZXRSZW1pc3Npb25Gb3JtKHZhbCwgZmllbGQpIHtcbiAgICBpZiAoZmllbGQgPT09ICdBbGwnKSB7XG4gICAgICB0aGlzLmlzQW1vdW50RW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLmFtb3VudEhhc0Vycm9yID0gdmFsWzFdO1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3IgPSB2YWxbMl07XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbM107XG4gICAgfSBlbHNlIGlmIChmaWVsZCA9PT0gJ2Ftb3VudCcgfHwgZmllbGQgPT09ICdBbGwnKSB7XG4gICAgICB0aGlzLmlzQW1vdW50RW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLmFtb3VudEhhc0Vycm9yID0gdmFsWzFdO1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3IgPSB2YWxbMl07XG4gICAgfSBlbHNlIGlmIChmaWVsZCA9PT0gJ3JlYXNvbicgfHwgZmllbGQgPT09ICdBbGwnKSB7XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbM107XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0UmFkaW9CdXR0b24oa2V5LCB2YWx1ZSkge1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uID0ga2V5O1xuICAgIGlmIChrZXkgPT09ICdPdGhlcicpIHtcbiAgICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmdW5kUmVhc29uID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIGdldFJlZnVuZExpc3RSZWFzb24ocmVmdW5kTGlzdFJlYXNvbjogYW55KSB7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkKSB7XG4gICAgICBpZiAocmVmdW5kTGlzdFJlYXNvbi5yZWFzb24gIT0gdW5kZWZpbmVkICYmIHJlZnVuZExpc3RSZWFzb24ucmVhc29uICE9IG51bGwgJiYgcmVmdW5kTGlzdFJlYXNvbi5yZWFzb24gIT0gdGhpcy5yZWZ1bmRsaXN0LnJlYXNvbikge1xuICAgICAgICB0aGlzLnJlZnVuZGxpc3QucmVhc29uID0gcmVmdW5kTGlzdFJlYXNvbi5yZWFzb247XG4gICAgICAgIHRoaXMucmVmdW5kbGlzdC5yZWFzb25fY29kZSA9IHJlZnVuZExpc3RSZWFzb24uY29kZS5zcGxpdCgnLScpWzBdLnRyaW0oKTtcbiAgICAgICAgdGhpcy5yZWZ1bmRsaXN0LmNvZGUgPSByZWZ1bmRMaXN0UmVhc29uLmNvZGU7XG4gICAgICAgIHRoaXMucmVmdW5kQ29kZSA9IHJlZnVuZExpc3RSZWFzb24uY29kZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3ID0gZmFsc2U7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdhbmRzdWJtaXR2aWV3JztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID0gdGhpcy5jY2RDYXNlTnVtYmVyO1xuICB9XG5cbiAgZ2V0UmVmdW5kQW1vdW50KGFtb3VudDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkKSB7XG4gICAgICBpZiAoYW1vdW50ID4gMCkge1xuICAgICAgICB0aGlzLmNoYW5nZWRBbW91bnQgPSBhbW91bnQ7XG4gICAgICAgIC8vIHRoaXMucmVmdW5kbGlzdC5hbW91bnQgPSBhbW91bnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNSZWZ1bmRCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMubm90aWZpY2F0aW9uUHJldmlldyA9IGZhbHNlO1xuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUiA9IHRoaXMuY2NkQ2FzZU51bWJlcjtcbiAgfVxuXG4gIGdldFJlZnVuZEZlZXMoZmVlczogSUZlZVtdKSB7XG4gICAgdGhpcy5mZWVzID0gZmVlcztcbiAgICB0aGlzLnJlZnVuZEZlZXMgPSB0aGlzLmZlZXMubWFwKG9iaiA9PiAoe1xuICAgICAgZmVlX2lkOiBvYmouaWQsXG4gICAgICBjb2RlOiBvYmouY29kZSxcbiAgICAgIHZlcnNpb246IG9iai52ZXJzaW9uLFxuICAgICAgdm9sdW1lOiBvYmoudXBkYXRlZF92b2x1bWUgPyBvYmoudXBkYXRlZF92b2x1bWUgOiBvYmoudm9sdW1lLFxuICAgICAgcmVmdW5kX2Ftb3VudDogb2JqLnJlZnVuZF9hbW91bnRcbiAgICB9KSk7XG4gIH1cblxuICBnb3RvUmV2aWV3UmVmdW5kQ29uZmlybWF0aW9uUGFnZSgpIHtcbiAgICAvLyBpZiAodGhpcy5vbGRSZWZ1bmRSZWFzb24gPT09IHRoaXMucmVmdW5kbGlzdC5yZWFzb24pIHtcbiAgICAvLyAgIHRoaXMucmVmdW5kQ29kZSA9ICcnO1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5yZWZ1bmRGZWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVmdW5kRmVlcyA9IHRoaXMucmVmdW5kbGlzdFsncmVmdW5kX2ZlZXMnXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVmdW5kbGlzdC5yZWFzb24gPT0gJ1JldHJvc3BlY3RpdmUgcmVtaXNzaW9uJykge1xuICAgICAgdGhpcy5yZWZ1bmRGZWVzWzBdLnJlZnVuZF9hbW91bnQgPSB0aGlzLmNoYW5nZWRBbW91bnQ7XG4gICAgfVxuICAgIHRoaXMucmVmdW5kQ29kZSA9IHRoaXMucmVmdW5kbGlzdC5jb2RlO1xuICAgIGNvbnN0IHJlc3VibWl0UmVxdWVzdCA9IG5ldyBJUmVzdWJtaXRSZWZ1bmRSZXF1ZXN0KHRoaXMucmVmdW5kQ29kZSwgdGhpcy5jaGFuZ2VkQW1vdW50LCB0aGlzLnJlZnVuZGxpc3QuY29udGFjdF9kZXRhaWxzLCB0aGlzLnJlZnVuZEZlZXMpO1xuICAgIHRoaXMucmVmdW5kU2VydmljZS5wYXRjaFJlc3VibWl0UmVmdW5kKHJlc3VibWl0UmVxdWVzdCwgdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9yZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRSZWZlcmVuY2UgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfcmVmZXJlbmNlO1xuICAgICAgICAgIHRoaXMucmVmdW5kQW1vdW50ID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudDtcbiAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gJ3Jldmlld3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ290b0VkaXRBZGRyZXNzRGV0YWlscyhub3RlOiBJUmVmdW5kc05vdGlmaWNhdGlvbnMpIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG5vdGU7XG4gICAgdGhpcy5pc0VkaXREZXRhaWxzQ2xpY2tlZCA9IHRydWU7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZWZ1bmRFZGl0VmlldydcbiAgfVxuICBnZXRDb250YWN0RGV0YWlscyhvYmo6IElSZWZ1bmRDb250YWN0RGV0YWlscykge1xuICAgIHRoaXMuYWRkcmVzc0RldGFpbHMgPSBvYmo7XG4gICAgdGhpcy5nZXRUZW1wbGF0ZUluc3RydWN0aW9uVHlwZSh0aGlzLnBheW1lbnRPYmosIHRoaXMucmVmdW5kbGlzdC5wYXltZW50X3JlZmVyZW5jZSk7XG4gICAgdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3ID0gZmFsc2U7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdlZGl0ZGV0YWlsc2NvbmZpcm1hdGlvbnBhZ2UnO1xuICB9XG4gIGdldENvbnRhY3REZXRhaWxzRm9yUmVmdW5kTGlzdChvYmo6IElSZWZ1bmRDb250YWN0RGV0YWlscykge1xuICAgIHRoaXMucmVmdW5kbGlzdC5jb250YWN0X2RldGFpbHMgPSBvYmo7XG4gICAgdGhpcy5nZXRUZW1wbGF0ZUluc3RydWN0aW9uVHlwZSh0aGlzLnBheW1lbnRPYmosIHRoaXMucmVmdW5kbGlzdC5wYXltZW50X3JlZmVyZW5jZSk7XG4gICAgdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3ID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXREZXRhaWxzQ2xpY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWZ1bmRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gIH1cbiAgZ290b0VkaXREZXRhaWxzUGFnZShub3RlPzogYW55LCB2aWV3Pzogc3RyaW5nKSB7XG4gICAgaWYgKG5vdGUpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uID0geyBjb250YWN0X2RldGFpbHM6IG5vdGUsIG5vdGlmaWNhdGlvbl90eXBlOiBub3RlLm5vdGlmaWNhdGlvbl90eXBlIH07XG4gICAgfVxuICAgIHRoaXMuaXNFZGl0RGV0YWlsc0NsaWNrZWQgPSB0cnVlO1xuICAgIHRoaXMudmlld05hbWUgPSB2aWV3O1xuICB9XG4gIHN1Ym1pdEVkaXREZXRhaWwoKSB7XG4gICAgdGhpcy5pc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgPSBmYWxzZTtcbiAgICBjb25zdCBjb250YWN0RGV0YWlscyA9IHRoaXMuYWRkcmVzc0RldGFpbHMubm90aWZpY2F0aW9uX3R5cGUgPT09ICdFTUFJTCcgPyB0aGlzLmFkZHJlc3NEZXRhaWxzLmVtYWlsIDpcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzc19saW5lOiB0aGlzLmFkZHJlc3NEZXRhaWxzLmFkZHJlc3NfbGluZSxcbiAgICAgICAgY2l0eTogdGhpcy5hZGRyZXNzRGV0YWlscy5jaXR5LFxuICAgICAgICBjb3VudHk6IHRoaXMuYWRkcmVzc0RldGFpbHMuY291bnR5LFxuICAgICAgICBjb3VudHJ5OiB0aGlzLmFkZHJlc3NEZXRhaWxzLmNvdW50cnksXG4gICAgICAgIHBvc3RhbF9jb2RlOiB0aGlzLmFkZHJlc3NEZXRhaWxzLnBvc3RhbF9jb2RlLFxuICAgICAgfTtcbiAgICBjb25zdCByZXNlbmRSZXF1ZXN0ID0gbmV3IElQdXROb3RpZmljYXRpb25SZXF1ZXN0KGNvbnRhY3REZXRhaWxzLCB0aGlzLmFkZHJlc3NEZXRhaWxzLm5vdGlmaWNhdGlvbl90eXBlKTtcblxuICAgIHRoaXMucmVmdW5kU2VydmljZS5wdXRSZXNlbmRPckVkaXQocmVzZW5kUmVxdWVzdCwgdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9yZWZlcmVuY2UsIHRoaXMuYWRkcmVzc0RldGFpbHMubm90aWZpY2F0aW9uX3R5cGUpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmlzUmVzZW5kT3BlcmF0aW9uU3VjY2VzcyA9IHJlc3BvbnNlO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IucmVwbGFjZSgvXCIvZywgXCJcIik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdXRSZXNlbmQobm90aWZpY2F0aW9uOiBJUmVmdW5kc05vdGlmaWNhdGlvbnMpIHtcbiAgICB0aGlzLmlzUmVzZW5kT3BlcmF0aW9uU3VjY2VzcyA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbnRhY3REZXRhaWxzID0gbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbl90eXBlID09PSAnRU1BSUwnID8gbm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5lbWFpbCA6XG4gICAgICB7XG4gICAgICAgIGFkZHJlc3NfbGluZTogbm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5hZGRyZXNzX2xpbmUsXG4gICAgICAgIGNpdHk6IG5vdGlmaWNhdGlvbi5jb250YWN0X2RldGFpbHMuY2l0eSxcbiAgICAgICAgY291bnR5OiBub3RpZmljYXRpb24uY29udGFjdF9kZXRhaWxzLmNvdW50eSxcbiAgICAgICAgY291bnRyeTogbm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5jb3VudHJ5LFxuICAgICAgICBwb3N0YWxfY29kZTogbm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5wb3N0YWxfY29kZSxcbiAgICAgIH07XG4gICAgY29uc3QgcmVzZW5kUmVxdWVzdCA9IG5ldyBJUHV0Tm90aWZpY2F0aW9uUmVxdWVzdChjb250YWN0RGV0YWlscywgbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbl90eXBlKTtcblxuICAgIHRoaXMucmVmdW5kU2VydmljZS5wdXRSZXNlbmRPckVkaXQocmVzZW5kUmVxdWVzdCwgdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9yZWZlcmVuY2UsIG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25fdHlwZSkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzID0gcmVzcG9uc2U7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgIH1cbiAgICApO1xuXG4gIH1cblxuICBnb3RvUmVmdW5kVmlld1BhZ2VDYW5jZWxCdG5DbGlja2VkKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0VkaXREZXRhaWxzQ2xpY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMudmlld05hbWUgPSAncmVmdW5kdmlldyc7XG4gIH1cblxuICBnb3RvUmVmdW5kUmV2aWV3QW5kU3VibWl0Vmlld1BhZ2VDYW5jZWxCdG5DbGlja2VkKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0VkaXREZXRhaWxzQ2xpY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gIH1cblxuICBnb1RvUmVmdW5kUHJvY2Vzc0NvbXBvbmVudChyZWZ1bmRSZWZlcmVuY2U6IHN0cmluZywgcmVmdW5kTGlzdDogSVJlZnVuZExpc3QpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucmVmdW5kbGlzdHNvdXJjZSA9IHJlZnVuZExpc3Q7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnJlZnVuZFJlZmVyZW5jZSA9IHJlZnVuZFJlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUGF5QnViYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncHJvY2Vzcy1yZWZ1bmQnO1xuICB9XG5cbiAgZ2V0VGVtcGxhdGVJbnN0cnVjdGlvblR5cGUocGF5bWVudDogSVBheW1lbnQsIHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgaWYgKHBheW1lbnQgPT0gdW5kZWZpbmVkIHx8IHBheW1lbnQgPT0gbnVsbCB8fCBwYXltZW50LnJlZmVyZW5jZSAhPSBwYXltZW50UmVmZXJlbmNlKSB7XG5cbiAgICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBheW1lbnREZXRhaWxzKHBheW1lbnRSZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudCA9PiB7XG4gICAgICAgICAgdGhpcy5wYXltZW50T2JqID0gcGF5bWVudDtcbiAgICAgICAgICB0aGlzLnBheW1lbnRPYmoucmVmZXJlbmNlID0gcGF5bWVudFJlZmVyZW5jZTtcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5zdHJ1Y3Rpb25UeXBlID0gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdldE5vdGlmaWNhdGlvbkluc3RydWN0aW9uVHlwZSh0aGlzLnBheW1lbnRPYmouY2hhbm5lbCwgdGhpcy5wYXltZW50T2JqLm1ldGhvZCk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy50ZW1wbGF0ZUluc3RydWN0aW9uVHlwZSA9ICdUZW1wbGF0ZSc7XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVtcGxhdGVJbnN0cnVjdGlvblR5cGUgPSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0Tm90aWZpY2F0aW9uSW5zdHJ1Y3Rpb25UeXBlKHBheW1lbnQuY2hhbm5lbCwgcGF5bWVudC5tZXRob2QpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dOb3RpZmljYXRpb25QcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uUHJldmlldyA9IHRydWU7XG4gIH1cblxuICBoaWRlTm90aWZpY2F0aW9uUHJldmlldygpOiB2b2lkIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXcgPSBmYWxzZTtcbiAgfVxuXG4gIHNob3dOb3RpZmljYXRpb25TZW50VmlldyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZW50Vmlld0luZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZW50VmlldyA9IHRydWU7XG4gIH1cblxuICBoaWRlTm90aWZpY2F0aW9uU2VudFZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZW50Vmlld0luZGV4ID0gLTE7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZW50VmlldyA9IGZhbHNlO1xuICB9XG5cbiAgY2hlY2s0QWxsb3dlZFJvbGVzMkRpc3BsYXlFZGl0UmVmdW5kQnRuID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kLnNvbWUocm9sZSA9PlxuICAgICAgdGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMVxuICAgICk7XG4gIH07XG5cblxuICBkaXNwbGF5UmVzZXRSZWZ1bmRDb25maXJtYXRpb24oKXtcbiAgICB0aGlzLmlzUmVmdW5kU3RhdHVzUmVzZXRCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdjb25maXJtU3VibWl0UmVzZXRSZWZ1bmQnO1xuICB9XG5cblxuICByZWRpcmVjdFRvUmVmdW5kTGlzdFBhZ2UoKSB7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZWZ1bmR2aWV3JztcbiAgICB0aGlzLmlzUmVmdW5kU3RhdHVzUmVzZXRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdyZWZ1bmRzdGF0dXNsaXN0JztcbiAgfVxuXG5cbiAgcG9zdFJlc2V0UmVmdW5kKCkge1xuXG4gICAgdGhpcy5yZWZ1bmRTZXJ2aWNlLnBvc3RSZXNldFJlZnVuZCh0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMubG9hZFJlZnVuZExpc3RQYWdlKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0UmVzZXRSZWZ1bmRWaXNpYmlsaXR5KCl7XG4gICAgdGhpcy5jaGVjazRBbGxvd2VkUm9sZXMyRGlzcGxheUVkaXRSZWZ1bmRCdG4gJiYgdGhpcy5pc0N1cnJlbnRSZWZ1bmRWaXNpYmxlRm9yUmVzZXQoKTtcbiAgfVxuXG4gIGlzQ3VycmVudFJlZnVuZFZpc2libGVGb3JSZXNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9zdGF0dXMubmFtZSAgPT09ICdFeHBpcmVkJ1xuICB9XG5cbn1cbiIsIlxuPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZVwiPlxuICA8ZGl2IGNsYXNzPVwiZXJyb3Itc3VtbWFyeVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIj5cbiAgICAgIEVycm9yIGluIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3RcbiAgICA8L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lPT09J3JlZnVuZHN0YXR1c2xpc3QnICYmIHJlamVjdGVkUmVmdW5kTGlzdCAmJiAhaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzICYmICFpc0VkaXREZXRhaWxzQ2xpY2tlZFwiPlxuICA8IS0tIHBheW1lbnRzIC0tPlxuXG4gIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMTZcIiBzY29wZT1cImNvbFwiPlN0YXR1czwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTExXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQ8L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC0xOFwiIHNjb3BlPVwiY29sXCI+RGF0ZTwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI1XCIgc2NvcGU9XCJjb2xcIj5SZWZ1bmQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMjQgXCIgc2NvcGU9XCJjb2xcIj5SZWFzb248L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj48L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJyZWplY3RlZFJlZnVuZExpc3Q/Lmxlbmd0aCA+IDBcIj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdGb3I9XCJsZXQgcmVmdW5kTGlzdCBvZiByZWplY3RlZFJlZnVuZExpc3RcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVmdW5kTGlzdD8ucmVmdW5kX3N0YXR1c1snbmFtZSddIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiY2hhbm5lbCBnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj7Co3t7IHJlZnVuZExpc3Q/LmFtb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlZnVuZExpc3Q/LmRhdGVfdXBkYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5J319XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlZnVuZExpc3Q/LnJlZnVuZF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj4ge3tyZWZ1bmRMaXN0Py5yZWFzb259fTwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiZ29Ub1JlZnVuZFZpZXcocmVmdW5kTGlzdCwnY2FzZXRyYW5zYWN0aW9ucycpXCI+UmV2aWV3PC9hPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJyZWplY3RlZFJlZnVuZExpc3Q/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIHJlZnVuZHMgcmVjb3JkZWQ8L3RkPlxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lPT09J3JlZnVuZHZpZXcnICYmICFpc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgJiYgIWlzRWRpdERldGFpbHNDbGlja2VkXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic1wiPlxuICAgIDxvbCBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0XCI+XG4gICAgICA8bGkgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdC1pdGVtXCI+XG4gICAgICAgIDxhICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImxvYWRSZWZ1bmRMaXN0UGFnZSgpXCIgY2xhc3M9XCJnb3Z1ay1iYWNrLWxpbmsgZ292dWstbGFiZWxcIj5CYWNrPC9hPlxuICAgICAgPC9saT5cbiAgICA8L29sPlxuICA8L2Rpdj5cbiAgPGgyIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+UmVmdW5kIGRldGFpbHM8L2gyPlxuICA8dGFibGU+XG5cbiAgICA8dGJvZHk+XG4gICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5SZWZ1bmQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgPHRkPnt7IHJlZnVuZGxpc3Q/LnJlZnVuZF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgdG8gYmUgcmVmdW5kZWQ8L3RkPlxuICAgICAgICA8dGQ+e3tyZWZ1bmRsaXN0Py5wYXltZW50X3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UmVhc29uIGZvciByZWZ1bmQ8L3RkPlxuICAgICAgICA8dGQ+e3sgcmVmdW5kbGlzdD8ucmVhc29uIH19PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5BbW91bnQgcmVmdW5kZWQ8L3RkPlxuICAgICAgICA8dGQ+wqN7e3JlZnVuZGxpc3Q/LmFtb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgIDwvdHI+XG5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuXG5cbiAgICA8IS0tIE5vdGlmaWNhdGlvbiBzZW50IGRldGFpbHMgLS0+XG4gICAgPGRpdj5cbiAgICAgIDxiciAvPlxuICAgICAgPGgyIGNsYXNzPVwiZ292dWstaGVhZGluZy1tXCI+Tm90aWZpY2F0aW9ucyBzZW50PC9oMj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMjQgd2hpdGVzcGFjZS1pbmhlcml0XCIgc2NvcGU9XCJjb2xcIj5EYXRlIGFuZCB0aW1lPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI3IHdoaXRlc3BhY2UtaW5oZXJpdFwiIHNjb3BlPVwiY29sXCI+U2VudCB0bzwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIHdoaXRlc3BhY2UtaW5oZXJpdFwiIHNjb3BlPVwiY29sXCI+U2VudCB2aWE8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciB3aGl0ZXNwYWNlLWluaGVyaXRcIiBzY29wZT1cImNvbFwiPkFjdGlvbnM8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJub3RpZmljYXRpb25MaXN0XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbm90aWZpY2F0aW9uIG9mIG5vdGlmaWNhdGlvbkxpc3Q7IGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7bm90aWZpY2F0aW9uLmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTU0geXl5eSBISDptbTpzcyd9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7b3JkZXJQYXJ0eX19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0IGNvbC00MFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJub3RpZmljYXRpb24/Lm5vdGlmaWNhdGlvbl90eXBlID09PSAnRU1BSUwnXCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPkVtYWlsPC9zdHJvbmc+PGJyPlxuICAgICAgICAgICAgICAgICAge3tub3RpZmljYXRpb24/LmNvbnRhY3RfZGV0YWlscz8uZW1haWw/LnRyaW0oKX19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vdGlmaWNhdGlvbj8ubm90aWZpY2F0aW9uX3R5cGUgPT09ICdMRVRURVInXCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPlBvc3Q8L3N0cm9uZz48YnI+XG4gICAgICAgICAgICAgICAgICB7e25vdGlmaWNhdGlvbj8uY29udGFjdF9kZXRhaWxzPy5hZGRyZXNzX2xpbmU/LnRyaW0oKX19IHt7bm90aWZpY2F0aW9uPy5jb250YWN0X2RldGFpbHM/LmNpdHk/LnRyaW0oKX19IHt7bm90aWZpY2F0aW9uPy5jb250YWN0X2RldGFpbHM/LmNvdW50eT8udHJpbSgpfX0ge3tub3RpZmljYXRpb24/LmNvbnRhY3RfZGV0YWlscz8uY291bnRyeT8udHJpbSgpfX0ge3tub3RpZmljYXRpb24/LmNvbnRhY3RfZGV0YWlscz8ucG9zdGFsX2NvZGU/LnRyaW0oKX19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiICpuZ0lmPVwiaSA9PT0gMFwiPjxhIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cInB1dFJlc2VuZChub3RpZmljYXRpb24pXCI+UmVzZW5kPC9hPiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDs8YSBocmVmPVwiSmF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJnb3RvRWRpdEFkZHJlc3NEZXRhaWxzKG5vdGlmaWNhdGlvbilcIj5FZGl0IGRldGFpbHM8L2E+Jm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwOzxhICpuZ0lmPVwiIW5vdGlmaWNhdGlvblNlbnRWaWV3IHx8IGkgIT0gbm90aWZpY2F0aW9uU2VudFZpZXdJbmRleFwiIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cInNob3dOb3RpZmljYXRpb25TZW50VmlldyhpKVwiPlZpZXc8L2E+PGEgKm5nSWY9XCJpID09PSBub3RpZmljYXRpb25TZW50Vmlld0luZGV4ICYmIG5vdGlmaWNhdGlvblNlbnRWaWV3XCIgaHJlZj1cIkphdmFzY3JpcHQ6dm9pZCgwKTtcIiAoY2xpY2spPVwiaGlkZU5vdGlmaWNhdGlvblNlbnRWaWV3KClcIj5IaWRlPC9hPjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiICpuZ0lmPVwiaSA+IDBcIj48YSAqbmdJZj1cIiFub3RpZmljYXRpb25TZW50VmlldyB8fCBpICE9IG5vdGlmaWNhdGlvblNlbnRWaWV3SW5kZXhcIiBocmVmPVwiSmF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJzaG93Tm90aWZpY2F0aW9uU2VudFZpZXcoaSlcIj5WaWV3PC9hPjxhICpuZ0lmPVwiaSA9PT0gbm90aWZpY2F0aW9uU2VudFZpZXdJbmRleCAmJiBub3RpZmljYXRpb25TZW50Vmlld1wiIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cImhpZGVOb3RpZmljYXRpb25TZW50VmlldygpXCI+SGlkZTwvYT48L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImkgPT09IG5vdGlmaWNhdGlvblNlbnRWaWV3SW5kZXggJiYgbm90aWZpY2F0aW9uU2VudFZpZXdcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNFwiPlxuICAgICAgICAgICAgICAgIDxhcHAtbm90aWZpY2F0aW9uLXByZXZpZXdcbiAgICAgICAgICAgICAgICAgIFtwcmV2aWV3Sm91cm5leV09XCInTm90aWZpY2F0aW9ucyBzZW50J1wiIFtub3RpZmljYXRpb25TZW50XT1cIm5vdGlmaWNhdGlvbj8uc2VudF9ub3RpZmljYXRpb25cIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1ub3RpZmljYXRpb24tcHJldmlldz5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cIiFub3RpZmljYXRpb25MaXN0XCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCIgY29sc3Bhbj1cIjRcIj5ObyByZWNvcmQgZm91bmQgLi4uIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gIDwhLS0gU3RhdHVzIGhpc3RvcnkgLS0+XG4gIDxkaXY+XG4gICAgPGJyIC8+XG4gICAgPGRpdiBjbGFzcz1cInJlZnVuZC1zdGF0dXMtaGlzdG9yeS1oZWFkZXIgZ292dWstZmxleFwiPlxuICAgICAgPGgyIGNsYXNzPVwiZ292dWstaGVhZGluZy1tXCI+UmVmdW5kIHN0YXR1cyBoaXN0b3J5PC9oMj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImNoZWNrNEFsbG93ZWRSb2xlczJEaXNwbGF5RWRpdFJlZnVuZEJ0biAmJiBpc0N1cnJlbnRSZWZ1bmRWaXNpYmxlRm9yUmVzZXQoKVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVmdW5kU3RhdHVzUmVzZXRCdG5EaXNhYmxlZFwiXG4gICAgICAgICAgY2xhc3M9XCJnb3Z1ay1idXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnlcIlxuICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5UmVzZXRSZWZ1bmRDb25maXJtYXRpb24oKVwiPlxuICAgICAgICAgIFJlc2V0IFJlZnVuZFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJyZWZ1bmRTdGF0dXNIaXN0b3JpZXNcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI0IHdoaXRlc3BhY2UtaW5oZXJpdFwiIHNjb3BlPVwiY29sXCI+U3RhdHVzPC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC0yNyB3aGl0ZXNwYWNlLWluaGVyaXRcIiBzY29wZT1cImNvbFwiPkRhdGUgYW5kIHRpbWU8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgd2hpdGVzcGFjZS1pbmhlcml0XCIgc2NvcGU9XCJjb2xcIj5Vc2VyczwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciB3aGl0ZXNwYWNlLWluaGVyaXRcIiBzY29wZT1cImNvbFwiPk5vdGVzPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0Zvcj1cImxldCByZWZ1bmRTdGF0dXNIaXN0b3J5IG9mIHJlZnVuZFN0YXR1c0hpc3RvcmllcztcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7cmVmdW5kU3RhdHVzSGlzdG9yeS5zdGF0dXN9fTwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+XG4gICAgICAgICAgICAge3tyZWZ1bmRTdGF0dXNIaXN0b3J5LmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTU0geXl5eSBISDptbTpzcyd9fVxuICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7cmVmdW5kU3RhdHVzSGlzdG9yeS5jcmVhdGVkX2J5fX08L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7cmVmdW5kU3RhdHVzSGlzdG9yeS5ub3Rlc319PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9kaXY+XG5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lPT09J3JlZnVuZHZpZXcnICYmICFpc0Zyb21QYXlCdWJibGUgJiYgIWlzUmVzZW5kT3BlcmF0aW9uU3VjY2VzcyAmJiAhaXNFZGl0RGV0YWlsc0NsaWNrZWRcIj5cbiAgICA8ZGl2ICAqbmdJZj1cInJlZnVuZEJ1dHRvblN0YXRlPT09J1VwZGF0ZSByZXF1aXJlZCdcIiA+XG4gICAgICA8IS0tIDxkaXYgKm5nSWY9XCJyZWZ1bmRCdXR0b25TdGF0ZT09PSdzZW50IGJhY2snXCI+IC0tPlxuICAgICAgPGJyIC8+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBidG5tYXJnaW5cIlxuICAgICAgICAoY2xpY2spPVwiZ290b1Jldmlld0FuZFJlU3VibWl0UGFnZSgpXCI+Q2hhbmdlIHJlZnVuZCBkZXRhaWxzPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImlzUHJvY2Vzc1JlZnVuZCAmJiAhaXNMYXN0VXBkYXRlZEJ5Q3VycmVudFVzZXIgJiYgcmVmdW5kQnV0dG9uU3RhdGU9PT0nU2VudCBmb3IgYXBwcm92YWwnXCIgPlxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaXNQcm9jZXNzUmVmdW5kICYmICFpc0xhc3RVcGRhdGVkQnlDdXJyZW50VXNlciAmJiByZWZ1bmRCdXR0b25TdGF0ZT09PSdzZW50IGZvciBhcHByb3ZhbCdcIj4gLS0+XG4gICAgICA8YnIgLz5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9SZWZ1bmRQcm9jZXNzQ29tcG9uZW50KHJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSxyZWZ1bmRsaXN0KVwiPlByb2Nlc3MgcmVmdW5kPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld05hbWU9PT0ncmV2aWV3YW5kc3VibWl0dmlldycgJiYgIWlzUmVzZW5kT3BlcmF0aW9uU3VjY2VzcyAmJiAhaXNFZGl0RGV0YWlsc0NsaWNrZWRcIj5cbiAgPCEtLSA8ZGl2IGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNcIj5cbiAgICA8b2wgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdFwiPlxuICAgICAgPGxpIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNfX2xpc3QtaXRlbVwiPlxuICAgICAgICA8YSAoY2xpY2spPVwiZ290b1Jldmlld0RldGFpbHNQYWdlKCRldmVudClcIiBjbGFzcz1cImdvdnVrLWJhY2stbGluayBnb3Z1ay1sYWJlbFwiPkJhY2s8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvb2w+XG4gIDwvZGl2PiAtLT5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dFwiPlxuICAgIDxoMSBjbGFzcz1cImhlYWRpbmctbGFyZ2VcIj5DaGVjayB5b3VyIGFuc3dlcnM8L2gxPlxuICA8L2Rpdj5cbiAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5QYXltZW50IHJlZmVyZW5jZTwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IHJlZnVuZGxpc3Q/LnBheW1lbnRfcmVmZXJlbmNlfX0gPC90ZD5cbiAgICA8L3RyPlxuICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPlJlYXNvbiBmb3IgcmV0dXJuPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tyZWZ1bmRyZWFzb259fTwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5SZWZ1bmQgcmVmZXJlbmNlPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgcmVmdW5kbGlzdD8ucmVmdW5kX3JlZmVyZW5jZX19IDwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5SZWFzb24gZm9yIHJlZnVuZDwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IHJlZnVuZGxpc3Q/LnJlYXNvbj8udHJpbSgpfX1cbiAgICAgICAgPGEgKGNsaWNrKT1cImdvdG9SZWZ1bmRSZWFzb25QYWdlKHJlZnVuZGxpc3Q/LnJlYXNvbilcIiAqbmdJZj1cInJlZnVuZGxpc3Q/LnJlYXNvbiAhPT0gJ1JldHJvc3BlY3RpdmUgcmVtaXNzaW9uJyAmJiByZWZ1bmRsaXN0Py5yZWFzb24gIT09ICdPdmVycGF5bWVudCdcIlxuICAgICAgICAgIGNsYXNzPVwiZ292dWstbGluayByaWdodFwiPkNoYW5nZTwvYT5cbiAgICAgIDwvdGQ+XG5cbiAgICAgIDwhLS0gPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyByZWZ1bmRsaXN0Py5yZWFzb24gfX08L3RkPlxuICAgICAgPGEgKGNsaWNrKT1cImdvdG9SZWZ1bmRSZWFzb25QYWdlKClcIiBjbGFzcz1cImdvdnVrLWxpbmsgcmlnaHRcIj5DaGFuZ2U8L2E+IC0tPlxuICAgIDwvdHI+XG4gICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+UmVmdW5kIGFtb3VudDwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPsKje3sgY2hhbmdlZEFtb3VudCA/IGNoYW5nZWRBbW91bnQgOiByZWZ1bmRsaXN0Py5hbW91bnQgfCBudW1iZXI6Jy4yJyB9fVxuICAgICAgICA8YSAoY2xpY2spPVwiZ290b0Ftb3VudFBhZ2UoKVwiICpuZ0lmPVwicmVmdW5kbGlzdD8ucmVhc29uICE9PSAnT3ZlcnBheW1lbnQnXCJcbiAgICAgICAgICBjbGFzcz1cImdvdnVrLWxpbmsgcmlnaHRcIj5DaGFuZ2U8L2E+XG4gICAgICA8L3RkPlxuXG4gICAgPC90cj5cbiAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5TZW5kIHRvPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tvcmRlclBhcnR5fX0gPC90ZD5cbiAgICA8L3RyPlxuICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPlNlbmQgdmlhPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicmVmdW5kbGlzdD8uY29udGFjdF9kZXRhaWxzPy5ub3RpZmljYXRpb25fdHlwZSA9PT0gJ0VNQUlMJ1wiIGNsYXNzPVwiY29udGFjdERldGFpbHMtd2lkdGggZm9udC1zaXplLTE5cHhcIj5cbiAgICAgICAgICA8c3Ryb25nPkVtYWlsPC9zdHJvbmc+XG4gICAgICAgICAgPGJyLz5cbiAgICAgICAgICB7e3JlZnVuZGxpc3Q/LmNvbnRhY3RfZGV0YWlscz8uZW1haWw/LnRyaW0oKX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicmVmdW5kbGlzdD8uY29udGFjdF9kZXRhaWxzPy5ub3RpZmljYXRpb25fdHlwZSA9PT0gJ0xFVFRFUidcIiBjbGFzcz1cImNvbnRhY3REZXRhaWxzLXdpZHRoIGZvbnQtc2l6ZS0xOXB4XCI+XG4gICAgICAgICAgPHN0cm9uZz5Qb3N0PC9zdHJvbmc+XG4gICAgICAgICAgPGJyLz5cbiAgICAgICAgICB7e3JlZnVuZGxpc3Q/LmNvbnRhY3RfZGV0YWlscz8uYWRkcmVzc19saW5lPy50cmltKCl9fSB7e3JlZnVuZGxpc3Q/LmNvbnRhY3RfZGV0YWlscz8uY2l0eT8udHJpbSgpfX0ge3tyZWZ1bmRsaXN0Py5jb250YWN0X2RldGFpbHM/LmNvdW50eT8udHJpbSgpfX0ge3tyZWZ1bmRsaXN0Py5jb250YWN0X2RldGFpbHM/LmNvdW50cnk/LnRyaW0oKX19IHt7cmVmdW5kbGlzdD8uY29udGFjdF9kZXRhaWxzPy5wb3N0YWxfY29kZT8udHJpbSgpfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhIGNsYXNzPVwiZ292dWstbGlua1wiIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMClcIiAqbmdJZj1cInJlZnVuZGxpc3Q/LmNvbnRhY3RfZGV0YWlscyAhPW51bGxcIiAgY2xhc3M9XCJnb3Z1ay1saW5rIHJpZ2h0XCIgKGNsaWNrKT1cImdvdG9FZGl0RGV0YWlsc1BhZ2UocmVmdW5kbGlzdD8uY29udGFjdF9kZXRhaWxzLCAncmV2aWV3YW5kc3VibWl0RWRpdHZpZXcnKVwiPlxuICAgICAgICAgIENoYW5nZVxuICAgICAgICA8L2E+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG5cbiAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5Ob3RpZmljYXRpb248L3RkPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57e3RlbXBsYXRlSW5zdHJ1Y3Rpb25UeXBlfX1cbiAgICAgICAgICA8YSAqbmdJZj1cIiFub3RpZmljYXRpb25QcmV2aWV3XCIgaHJlZj1cIkphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGluayByaWdodFwiIChjbGljayk9XCJzaG93Tm90aWZpY2F0aW9uUHJldmlldygpXCI+XG4gICAgICAgICAgICBQcmV2aWV3XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxhICpuZ0lmPVwibm90aWZpY2F0aW9uUHJldmlld1wiIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cImdvdnVrLWxpbmsgcmlnaHRcIiAoY2xpY2spPVwiaGlkZU5vdGlmaWNhdGlvblByZXZpZXcoKVwiPlxuICAgICAgICAgICAgSGlkZSBQcmV2aWV3XG4gICAgICAgICAgPC9hPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3RhYmxlPlxuICA8YXBwLW5vdGlmaWNhdGlvbi1wcmV2aWV3ICpuZ0lmPVwibm90aWZpY2F0aW9uUHJldmlld1wiXG4gIFtwYXltZW50UmVmZXJlbmNlXT1cInJlZnVuZGxpc3Q/LnBheW1lbnRfcmVmZXJlbmNlXCJcbiAgW3BheW1lbnRdPVwicGF5bWVudE9ialwiXG4gIFtjb250YWN0RGV0YWlsc109XCJyZWZ1bmRsaXN0Py5jb250YWN0X2RldGFpbHNcIlxuICBbcmVmdW5kUmVhc29uXT1cInJlZnVuZGxpc3Q/LnJlYXNvbl9jb2RlXCJcbiAgW3JlZnVuZEFtb3VudF09XCJjaGFuZ2VkQW1vdW50ID8gY2hhbmdlZEFtb3VudCA6IHJlZnVuZGxpc3Q/LmFtb3VudFwiXG4gIFtyZWZ1bmRSZWZlcmVuY2VdPVwicmVmdW5kbGlzdD8ucmVmdW5kX3JlZmVyZW5jZVwiPjwvYXBwLW5vdGlmaWNhdGlvbi1wcmV2aWV3PlxuXG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tZ3JvdXBcIj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJnb3RvUmV2aWV3RGV0YWlsc1BhZ2UoJGV2ZW50KVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCI+IFByZXZpb3VzPC9idXR0b24+XG4gICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNSZWZ1bmRCdG5EaXNhYmxlZFwiIChjbGljayk9XCJnb3RvUmV2aWV3UmVmdW5kQ29uZmlybWF0aW9uUGFnZSgpXCIgY2xhc3M9XCJnb3Z1ay1idXR0b24gYnV0dG9uXCJcbiAgICAgIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCI+XG4gICAgICBTdWJtaXQgcmVmdW5kXG4gICAgPC9idXR0b24+XG48L2Rpdj5cbjxwPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwibG9hZFJlZnVuZExpc3RQYWdlKClcIiBjbGFzcz1cImdvdnVrLWxpbmtcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWJ1dHRvblwiPkNhbmNlbDwvYT48L3A+XG4gIDwhLS0gPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncm91cFwiPlxuICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzUmVmdW5kQnRuRGlzYWJsZWRcIiAoY2xpY2spPVwiZ290b1Jldmlld1JlZnVuZENvbmZpcm1hdGlvblBhZ2UoKVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGJ1dHRvblwiXG4gICAgICBkYXRhLW1vZHVsZT1cImdvdnVrLWJ1dHRvblwiPlxuICAgICAgU3VibWl0IHJlZnVuZFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj4gLS0+XG4gIDwhLS0gPHA+XG4gICAgPGEgKGNsaWNrKT1cImxvYWRSZWZ1bmRMaXN0UGFnZSgpXCIgaHJlZj1cIlwiIGNsYXNzPVwiY2FuY2VsYnRuXCI+Q2FuY2VsPC9hPlxuICA8L3A+IC0tPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3Jldmlld2FuZHN1Ym1pdEVkaXR2aWV3JyAmJiBpc0VkaXREZXRhaWxzQ2xpY2tlZFwiPlxuICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J0VESVRERVRBSUxTUEFHRSc+XG4gICAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+RWRpdCBjb250YWN0IGRldGFpbHM8L2gxPlxuICAgIDxoMiBjbGFzcz1cImdvdnVrLWhlYWRpbmctbSBnb3Z1ay1mb250MTlweFwiPkNhc2UgcmVmZXJlbmNlOiB7e2NjZENhc2VOdW1iZXIgfCBjY2RIeXBoZW5zIH19PC9oMj5cbiAgICA8c3BhbiBjbGFzcz1cImdvdnVrLWhpbnQgZm9udC1zaXplLTE5cHhcIj5cbiAgICAgIFJlZnVuZCByZWZlcmVuY2U6IHt7IHJlZnVuZGxpc3Q/LnJlZnVuZF9yZWZlcmVuY2V9fVxuICAgIDwvc3Bhbj5cbiAgICA8Y2NwYXktY29udGFjdC1kZXRhaWxzXG4gICAgW2lzRWRpdE9wZXJhdGlvbkluUmVmdW5kTGlzdF0gPSBpc0VkaXREZXRhaWxzQ2xpY2tlZFxuICAgIFthZGRyZXNzT2JqXSA9IG5vdGlmaWNhdGlvblxuICAgIChhc3NpZ25Db250YWN0RGV0YWlsc0luRmVmdW5kc0xpc3QpPVwiZ2V0Q29udGFjdERldGFpbHNGb3JSZWZ1bmRMaXN0KCRldmVudClcIlxuICAgIChyZWRpcmVjdFRvSXNzdWVSZWZ1bmQpPVwiZ290b1JlZnVuZFJldmlld0FuZFN1Ym1pdFZpZXdQYWdlQ2FuY2VsQnRuQ2xpY2tlZCgkZXZlbnQpXCIgPjwvY2NwYXktY29udGFjdC1kZXRhaWxzPlxuICA8cD5cbiAgICAgIDxhIChjbGljayk9XCJsb2FkUmVmdW5kTGlzdFBhZ2UoKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICA8L2E+XG4gIDwvcD5cblxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ2lzc3VlcmVmdW5kcGFnZTEnICYmICFpc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgJiYgIWlzRWRpdERldGFpbHNDbGlja2VkXCI+XG4gIDxjY3BheS1hZGQtcmVtaXNzaW9uIFtpc0Zyb21SZWZ1bmRMaXN0UGFnZV09XCJ0cnVlXCIgW3ZpZXdDb21wU3RhdHVzXT1cInZpZXdOYW1lXCIgW2lzUmVmdW5kUmVtaXNzaW9uXT1cInRydWVcIiBbaXNGcm9tUmVmdW5kU3RhdHVzUGFnZV0gPSBcInRydWVcIlxuICAgW2NoYW5nZVJlZnVuZFJlYXNvbl09IFwiY2hhbmdlUmVmdW5kUmVhc29uXCIgW2NjZENhc2VOdW1iZXJdPVwiY2NkQ2FzZU51bWJlclwiIChyZWZ1bmRMaXN0UmVhc29uKT1cImdldFJlZnVuZExpc3RSZWFzb24oJGV2ZW50KVwiIFtyZWZ1bmRQYXltZW50UmVmZXJlbmNlXT0gXCJyZWZ1bmRsaXN0Py5wYXltZW50X3JlZmVyZW5jZVwiID48L2NjcGF5LWFkZC1yZW1pc3Npb24+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lID09PSAncHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlJyAmJiAhaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzICYmICFpc0VkaXREZXRhaWxzQ2xpY2tlZFwiPlxuICA8Y2NwYXktYWRkLXJlbWlzc2lvbiBbaXNGcm9tUmVmdW5kTGlzdFBhZ2VdPVwidHJ1ZVwiIFt2aWV3Q29tcFN0YXR1c109XCJ2aWV3TmFtZVwiIFtpc1JlZnVuZFJlbWlzc2lvbl09XCJ0cnVlXCJcbiAgICBbY2NkQ2FzZU51bWJlcl09XCJjY2RDYXNlTnVtYmVyXCIgW3JlZnVuZFBheW1lbnRSZWZlcmVuY2VdPSBcInJlZnVuZGxpc3Q/LnBheW1lbnRfcmVmZXJlbmNlXCIgKHJlZnVuZExpc3RBbW91bnQpPVwiZ2V0UmVmdW5kQW1vdW50KCRldmVudClcIj48L2NjcGF5LWFkZC1yZW1pc3Npb24+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lID09PSAnaXNzdWVyZWZ1bmQnICYmICFpc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgJiYgIWlzRWRpdERldGFpbHNDbGlja2VkXCI+XG4gIDxjY3BheS1hZGQtcmVtaXNzaW9uIFtpc0Zyb21SZWZ1bmRMaXN0UGFnZV09XCJ0cnVlXCIgW3ZpZXdDb21wU3RhdHVzXT1cInZpZXdOYW1lXCIgW2lzUmVmdW5kUmVtaXNzaW9uXT1cInRydWVcIiBbaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlXSA9IFwidHJ1ZVwiXG4gICAgW2NjZENhc2VOdW1iZXJdPVwiY2NkQ2FzZU51bWJlclwiIFtyZWZ1bmRQYXltZW50UmVmZXJlbmNlXT0gXCJyZWZ1bmRsaXN0Py5wYXltZW50X3JlZmVyZW5jZVwiIFtpc0Zyb21SZWZ1bmRTdGF0dXNQYWdlXT1cInRydWVcIiAgKHJlZnVuZExpc3RBbW91bnQpPVwiZ2V0UmVmdW5kQW1vdW50KCRldmVudClcIiAgKHJlZnVuZEZlZXMpPVwiZ2V0UmVmdW5kRmVlcygkZXZlbnQpXCI+PC9jY3BheS1hZGQtcmVtaXNzaW9uPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3Jldmlld3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnICYmICFpc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgJiYgIWlzRWRpdERldGFpbHNDbGlja2VkXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvdyBwYWdlc2l6ZVwiPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcGFuZWwgZ292dWstcGFuZWwtLWNvbmZpcm1hdGlvblwiPlxuICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1wYW5lbF9yZWZ1bmRfdGl0bGVcIj5cbiAgICAgICAgICBSZWZ1bmQgc3VibWl0dGVkXG4gICAgICAgIDwvaDE+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXBhbmVsX19ib2R5XCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJnb3Z1ay1ib2R5IHdoaXRlXCI+PHN0cm9uZyBjbGFzcz1cIndoaXRlXCI+UmVmdW5kIHJlZmVyZW5jZTp7e3JlZnVuZFJlZmVyZW5jZX19IDwvc3Ryb25nPjwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8aDIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj5XaGF0IGhhcHBlbnMgbmV4dDwvaDI+XG4gICAgICA8cCBjbGFzcz1cImdvdnVrLWJvZHlcIj5cbiAgICAgICAgQSByZWZ1bmQgcmVxdWVzdCBmb3Ige3tyZWZ1bmRBbW91bnR8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX0gaGFzIGJlZW4gY3JlYXRlZCBhbmQgd2lsbCBiZSBwYXNzZWQgdG8gYSB0ZWFtIGxlYWRlciB0byBhcHByb3ZlLlxuICAgICAgPC9wPlxuXG4gICAgICA8cCBjbGFzcz1cImdvdnVrLWJvZHlcIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJsb2FkUmVmdW5kTGlzdFBhZ2UoKVwiIGNsYXNzPVwiZ292dWstbGlua1wiPlJldHVybiB0byBjYXNlPC9hPlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvdyBwYWdlc2l6ZVwiPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcGFuZWwgZ292dWstcGFuZWwtLWNvbmZpcm1hdGlvblwiPlxuICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1wYW5lbF9yZWZ1bmRfdGl0bGVcIj5cbiAgICAgICAgICBOb3RpZmljYXRpb24gc2VudFxuICAgICAgICA8L2gxPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1wYW5lbF9fYm9keVwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwiZ292dWstYm9keSB3aGl0ZVwiPjxzdHJvbmcgY2xhc3M9XCJ3aGl0ZVwiPlJlZnVuZCByZWZlcmVuY2U6IHt7IHJlZnVuZGxpc3Q/LnJlZnVuZF9yZWZlcmVuY2V9fSA8L3N0cm9uZz48L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIGNsYXNzPVwiZ292dWstYm9keVwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImxvYWRSZWZ1bmRMaXN0UGFnZSgpXCIgY2xhc3M9XCJnb3Z1ay1saW5rXCI+UmV0dXJuIHRvIGNhc2U8L2E+XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld05hbWUgPT09ICdyZWZ1bmRFZGl0VmlldycgJiYgaXNFZGl0RGV0YWlsc0NsaWNrZWRcIj5cbiAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdFRElUREVUQUlMU1BBR0UnPlxuICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPkVkaXQgY29udGFjdCBkZXRhaWxzPC9oMT5cbiAgICA8aDIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLW0gZ292dWstZm9udDE5cHhcIj5DYXNlIHJlZmVyZW5jZToge3tjY2RDYXNlTnVtYmVyIHwgY2NkSHlwaGVucyB9fTwvaDI+XG4gICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay1oaW50IGZvbnQtc2l6ZS0xOXB4XCI+XG4gICAgICBSZWZ1bmQgcmVmZXJlbmNlOiB7eyByZWZ1bmRsaXN0Py5yZWZ1bmRfcmVmZXJlbmNlfX1cbiAgICA8L3NwYW4+XG4gICAgPGNjcGF5LWNvbnRhY3QtZGV0YWlsc1xuICAgIFtpc0VkaXRPcGVyYXRpb25JblJlZnVuZExpc3RdID0gaXNFZGl0RGV0YWlsc0NsaWNrZWRcbiAgICBbYWRkcmVzc09ial0gPSBub3RpZmljYXRpb25cbiAgICAoYXNzaWduQ29udGFjdERldGFpbHNJbkZlZnVuZHNMaXN0KT1cImdldENvbnRhY3REZXRhaWxzKCRldmVudClcIlxuICAgIChyZWRpcmVjdFRvSXNzdWVSZWZ1bmQpPVwiZ290b1JlZnVuZFZpZXdQYWdlQ2FuY2VsQnRuQ2xpY2tlZCgkZXZlbnQpXCIgPjwvY2NwYXktY29udGFjdC1kZXRhaWxzPlxuICA8cD5cbiAgICAgIDxhIChjbGljayk9XCJsb2FkUmVmdW5kTGlzdFBhZ2UoKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICA8L2E+XG4gIDwvcD5cblxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld05hbWUgPT09ICdyZXZpZXdlZGl0ZGV0YWlsc2NvbmZpcm1hdGlvbnBhZ2UnICYmICFpc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgJiYgaXNFZGl0RGV0YWlsc0NsaWNrZWRcIj5cbiAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdFRElUREVUQUlMU0NIRUNLQU5EQU5TV0VSUEFHRSc+XG4gICAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+Q2hlY2sgeW91ciBhbnN3ZXJzPC9oMT5cbiAgICA8ZGwgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3JvdyBmb250LXNpemUtMTlweFwiPlxuICAgICAgICA8ZHQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2tleVwiPlxuICAgICAgICAgIFJlZnVuZCByZWZlcmVuY2VcbiAgICAgICAgPC9kdD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X192YWx1ZVwiPlxuICAgICAgICAgIHt7IHJlZnVuZGxpc3Q/LnJlZnVuZF9yZWZlcmVuY2V9fVxuICAgICAgICA8L2RkPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fYWN0aW9uc1wiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fcm93IGZvbnQtc2l6ZS0xOXB4XCI+XG4gICAgICAgIDxkdCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fa2V5XCI+XG4gICAgICAgICAgU2VuZCB2aWFcbiAgICAgICAgICA8YnIvPlxuICAgICAgICA8L2R0PlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3ZhbHVlXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImFkZHJlc3NEZXRhaWxzPy5ub3RpZmljYXRpb25fdHlwZSA9PT0gJ0VNQUlMJ1wiIGNsYXNzPVwiY29udGFjdERldGFpbHMtd2lkdGggZm9udC1zaXplLTE5cHhcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+RW1haWw8L3N0cm9uZz5cbiAgICAgICAgICAgIDxici8+XG4gICAgICAgICAgICB7e2FkZHJlc3NEZXRhaWxzPy5lbWFpbD8udHJpbSgpfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWRkcmVzc0RldGFpbHM/Lm5vdGlmaWNhdGlvbl90eXBlID09PSAnTEVUVEVSJ1wiIGNsYXNzPVwiY29udGFjdERldGFpbHMtd2lkdGggZm9udC1zaXplLTE5cHhcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+UG9zdDwvc3Ryb25nPlxuICAgICAgICAgICAgPGJyLz5cbiAgICAgICAgICAgIHt7YWRkcmVzc0RldGFpbHM/LmFkZHJlc3NfbGluZT8udHJpbSgpfX0ge3thZGRyZXNzRGV0YWlscz8uY2l0eT8udHJpbSgpfX0ge3thZGRyZXNzRGV0YWlscz8uY291bnR5Py50cmltKCl9fSB7e2FkZHJlc3NEZXRhaWxzPy5jb3VudHJ5Py50cmltKCl9fSB7e2FkZHJlc3NEZXRhaWxzPy5wb3N0YWxfY29kZT8udHJpbSgpfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kZD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGEgY2xhc3M9XCJnb3Z1ay1saW5rXCIgaHJlZj1cIkphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb3RvRWRpdERldGFpbHNQYWdlKGFkZHJlc3NEZXRhaWxzLCAncmVmdW5kRWRpdFZpZXcnKVwiPlxuICAgICAgICAgICAgQ2hhbmdlXG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2RkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19yb3cgZm9udC1zaXplLTE5cHhcIj5cbiAgICAgICAgPGR0IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19rZXlcIj5cbiAgICAgICAgICBOb3RpZmljYXRpb25cbiAgICAgICAgPC9kdD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X192YWx1ZVwiPlxuICAgICAgICAgIHt7dGVtcGxhdGVJbnN0cnVjdGlvblR5cGV9fVxuICAgICAgICA8L2RkPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxhICpuZ0lmPVwiIW5vdGlmaWNhdGlvblByZXZpZXdcIiBocmVmPVwiSmF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rIHJpZ2h0XCIgKGNsaWNrKT1cInNob3dOb3RpZmljYXRpb25QcmV2aWV3KClcIj5cbiAgICAgICAgICAgIFByZXZpZXdcbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGEgKm5nSWY9XCJub3RpZmljYXRpb25QcmV2aWV3XCIgaHJlZj1cIkphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGluayByaWdodFwiIChjbGljayk9XCJoaWRlTm90aWZpY2F0aW9uUHJldmlldygpXCI+XG4gICAgICAgICAgICBIaWRlIFByZXZpZXdcbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGw+XG5cbiAgICA8YXBwLW5vdGlmaWNhdGlvbi1wcmV2aWV3ICpuZ0lmPVwibm90aWZpY2F0aW9uUHJldmlld1wiIFtwYXltZW50UmVmZXJlbmNlXT1cInJlZnVuZGxpc3Q/LnBheW1lbnRfcmVmZXJlbmNlXCJcbiAgICBbcGF5bWVudF09XCJwYXltZW50T2JqXCJcbiAgICBbY29udGFjdERldGFpbHNdPVwiYWRkcmVzc0RldGFpbHNcIlxuICAgIFtyZWZ1bmRSZWFzb25dPVwicmVmdW5kbGlzdD8ucmVhc29uX2NvZGVcIlxuICAgIFtyZWZ1bmRBbW91bnRdPVwicmVmdW5kbGlzdD8uYW1vdW50XCJcbiAgICBbcmVmdW5kUmVmZXJlbmNlXT1cInJlZnVuZGxpc3Q/LnJlZnVuZF9yZWZlcmVuY2VcIj5cbiAgPC9hcHAtbm90aWZpY2F0aW9uLXByZXZpZXc+XG5cblxuXG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncm91cFwiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZ290b0VkaXREZXRhaWxzUGFnZShhZGRyZXNzRGV0YWlscywgJ3JlZnVuZEVkaXRWaWV3JylcIiBjbGFzcz1cImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiPiBQcmV2aW91czwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic3VibWl0RWRpdERldGFpbCgpXCIgY2xhc3M9XCJnb3Z1ay1idXR0b24gYnV0dG9uXCJcbiAgICAgICAgZGF0YS1tb2R1bGU9XCJnb3Z1ay1idXR0b25cIj5cbiAgICAgICAgICBTZW5kIG5vdGlmaWNhdGlvblxuICAgICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8cD5cbiAgICAgIDxhIChjbGljayk9XCJsb2FkUmVmdW5kTGlzdFBhZ2UoKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICA8L2E+XG4gIDwvcD5cblxuPC9uZy1jb250YWluZXI+XG5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lID09PSAnY29uZmlybVN1Ym1pdFJlc2V0UmVmdW5kJ1wiPlxuXG4gIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPlJlc2V0IFJlZnVuZDwvaDE+XG5cblxuICA8IURPQ1RZUEUgaHRtbD5cbiAgPGh0bWwgbGFuZz1cImVuXCI+XG4gIDxoZWFkPlxuICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICAgIDx0aXRsZT5SZWZ1bmQgQWN0aW9uczwvdGl0bGU+XG4gIDwvaGVhZD5cbiAgPGJvZHk+XG4gIDxkaXYgY2xhc3M9XCJyZWZ1bmQtbGlzdFwiPlxuICAgIDx1bD5cbiAgICAgIDxsaT5DbG9zZSB0aGUgY3VycmVudCBSZWZ1bmQge3sgcmVmdW5kbGlzdD8ucmVmdW5kX3JlZmVyZW5jZSB9fTwvbGk+XG4gICAgICA8bGk+UmVpc3N1ZSB0aGUgcmVmdW5kIHdpdGggYSBuZXcgcmVmdW5kIHJlZmVyZW5jZTwvbGk+XG4gICAgICA8bGk+U2VuZCBhIG5ldyBPZmZlciBhbmQgQ29udGFjdCBub3RpZmljYXRpb24gZm9yIHRoZSBpc3N1ZWQgcmVmdW5kPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbiAgPC9ib2R5PlxuICA8L2h0bWw+XG5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncm91cFwiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cInBvc3RSZXNldFJlZnVuZCgpXCIgY2xhc3M9XCJnb3Z1ay1idXR0b25cIj4gQ29udGludWU8L2J1dHRvbj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJyZWRpcmVjdFRvUmVmdW5kTGlzdFBhZ2UoKVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCI+IENhbmNlbDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuPC9uZy1jb250YWluZXI+XG4iXX0=