@hmcts/ccpay-web-component 5.0.8-beta14 → 5.0.10-beta01

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 (171) hide show
  1. package/bundles/hmcts-ccpay-web-component.umd.js +8672 -5390
  2. package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
  3. package/bundles/hmcts-ccpay-web-component.umd.min.js +1 -15
  4. package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
  5. package/esm2015/hmcts-ccpay-web-component.js +6 -2
  6. package/esm2015/lib/components/add-remission/add-remission.component.js +445 -166
  7. package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +359 -61
  8. package/esm2015/lib/components/card-details/card-details.component.js +54 -15
  9. package/esm2015/lib/components/case-transactions/case-transactions.component.js +697 -127
  10. package/esm2015/lib/components/error-banner/error-banner.component.js +25 -16
  11. package/esm2015/lib/components/fee-summary/fee-summary.component.js +267 -59
  12. package/esm2015/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +191 -40
  13. package/esm2015/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +235 -44
  14. package/esm2015/lib/components/page-not-found.component.js +12 -10
  15. package/esm2015/lib/components/payment-list/payment-list.component.js +55 -15
  16. package/esm2015/lib/components/payment-view/payment-view.component.js +360 -115
  17. package/esm2015/lib/components/pba-details/pba-details.component.js +25 -16
  18. package/esm2015/lib/components/pba-payment/pba-payment.component.js +129 -27
  19. package/esm2015/lib/components/process-refund/process-refund.component.js +189 -39
  20. package/esm2015/lib/components/processed-payments/processed-payments.component.js +52 -22
  21. package/esm2015/lib/components/refund-list/refund-list.component.js +90 -32
  22. package/esm2015/lib/components/refund-status/refund-status.component.js +269 -58
  23. package/esm2015/lib/components/reports/reports.component.js +222 -39
  24. package/esm2015/lib/components/service-request/service-request.component.js +393 -108
  25. package/esm2015/lib/components/status-history/status-history.component.js +54 -19
  26. package/esm2015/lib/components/table/table.component.js +119 -39
  27. package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +202 -65
  28. package/esm2015/lib/interfaces/AddRemissionRequest.js +28 -1
  29. package/esm2015/lib/interfaces/AddRetroRemissionRequest.js +15 -1
  30. package/esm2015/lib/interfaces/AllocatePaymentRequest.js +42 -1
  31. package/esm2015/lib/interfaces/IAllocationPaymentsRequest.js +26 -1
  32. package/esm2015/lib/interfaces/IBSPayments.js +45 -1
  33. package/esm2015/lib/interfaces/ICardDetails.js +21 -1
  34. package/esm2015/lib/interfaces/IFee.js +53 -1
  35. package/esm2015/lib/interfaces/IOrderReferenceFee.js +25 -1
  36. package/esm2015/lib/interfaces/IPatchRefundAction.js +15 -1
  37. package/esm2015/lib/interfaces/IPayment.js +65 -1
  38. package/esm2015/lib/interfaces/IPaymentFailure.js +33 -1
  39. package/esm2015/lib/interfaces/IPaymentGroup.js +19 -1
  40. package/esm2015/lib/interfaces/IPaymentStatus.js +25 -1
  41. package/esm2015/lib/interfaces/IPaymentView.js +17 -1
  42. package/esm2015/lib/interfaces/IPayments.js +13 -1
  43. package/esm2015/lib/interfaces/IRefundAction.js +15 -1
  44. package/esm2015/lib/interfaces/IRefundList.js +29 -1
  45. package/esm2015/lib/interfaces/IRefundReasons.js +19 -1
  46. package/esm2015/lib/interfaces/IRefundRejectReason.js +15 -1
  47. package/esm2015/lib/interfaces/IRefundStatus.js +23 -1
  48. package/esm2015/lib/interfaces/IRefundStatusHistory.js +15 -1
  49. package/esm2015/lib/interfaces/IRemission.js +25 -1
  50. package/esm2015/lib/interfaces/IResubmitRefundRequest.js +15 -1
  51. package/esm2015/lib/interfaces/IStatusHistories.js +19 -1
  52. package/esm2015/lib/interfaces/IStatusHistory.js +21 -1
  53. package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +16 -1
  54. package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +23 -1
  55. package/esm2015/lib/interfaces/IssueRefundRequest.js +18 -1
  56. package/esm2015/lib/interfaces/PayhubAntennaRequest.js +21 -2
  57. package/esm2015/lib/interfaces/PaymentToPayhubRequest.js +27 -2
  58. package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +12 -1
  59. package/esm2015/lib/interfaces/PostRefundRetroRemission.js +15 -1
  60. package/esm2015/lib/interfaces/RefundsRequest.js +15 -1
  61. package/esm2015/lib/interfaces/UnidentifiedPaymentsRequest.js +20 -1
  62. package/esm2015/lib/interfaces/UnsolicitedPaymentsRequest.js +29 -1
  63. package/esm2015/lib/payment-lib.component.js +187 -120
  64. package/esm2015/lib/payment-lib.module.js +57 -55
  65. package/esm2015/lib/payment-lib.service.js +53 -12
  66. package/esm2015/lib/pipes/capitalize.pipe.js +19 -11
  67. package/esm2015/lib/pipes/ccd-hyphens.pipe.js +20 -11
  68. package/esm2015/lib/pipes/key-value.pipe.js +19 -11
  69. package/esm2015/lib/pipes/sanitize-html.pipe.js +26 -10
  70. package/esm2015/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +109 -22
  71. package/esm2015/lib/services/card-details/card-details.service.js +46 -15
  72. package/esm2015/lib/services/case-transactions/case-transactions.service.js +46 -15
  73. package/esm2015/lib/services/orderslist.service.js +259 -12
  74. package/esm2015/lib/services/payment-list/payment-list.service.js +49 -15
  75. package/esm2015/lib/services/payment-view/payment-view.service.js +176 -18
  76. package/esm2015/lib/services/refunds/refunds.service.js +116 -21
  77. package/esm2015/lib/services/shared/error-handler.service.js +27 -12
  78. package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +87 -15
  79. package/esm2015/lib/services/shared/logger/console-logger.service.js +34 -12
  80. package/esm2015/lib/services/shared/logger/logger.service.js +42 -12
  81. package/esm2015/lib/services/status-history/status-history.service.js +47 -15
  82. package/esm2015/lib/services/xl-file/xl-file.service.js +66 -10
  83. package/esm2015/public_api.js +8 -4
  84. package/esm5/hmcts-ccpay-web-component.js +6 -2
  85. package/esm5/lib/components/add-remission/add-remission.component.js +541 -185
  86. package/esm5/lib/components/allocate-payments/allocate-payments.component.js +419 -75
  87. package/esm5/lib/components/card-details/card-details.component.js +53 -14
  88. package/esm5/lib/components/case-transactions/case-transactions.component.js +850 -160
  89. package/esm5/lib/components/error-banner/error-banner.component.js +28 -15
  90. package/esm5/lib/components/fee-summary/fee-summary.component.js +320 -70
  91. package/esm5/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +223 -46
  92. package/esm5/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +277 -52
  93. package/esm5/lib/components/page-not-found.component.js +10 -7
  94. package/esm5/lib/components/payment-list/payment-list.component.js +60 -14
  95. package/esm5/lib/components/payment-view/payment-view.component.js +439 -134
  96. package/esm5/lib/components/pba-details/pba-details.component.js +28 -15
  97. package/esm5/lib/components/pba-payment/pba-payment.component.js +149 -30
  98. package/esm5/lib/components/process-refund/process-refund.component.js +271 -45
  99. package/esm5/lib/components/processed-payments/processed-payments.component.js +62 -22
  100. package/esm5/lib/components/refund-list/refund-list.component.js +89 -30
  101. package/esm5/lib/components/refund-status/refund-status.component.js +334 -71
  102. package/esm5/lib/components/reports/reports.component.js +275 -49
  103. package/esm5/lib/components/service-request/service-request.component.js +461 -122
  104. package/esm5/lib/components/status-history/status-history.component.js +52 -17
  105. package/esm5/lib/components/table/table.component.js +153 -44
  106. package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +258 -75
  107. package/esm5/lib/interfaces/AddRemissionRequest.js +21 -1
  108. package/esm5/lib/interfaces/AddRetroRemissionRequest.js +11 -1
  109. package/esm5/lib/interfaces/AllocatePaymentRequest.js +35 -1
  110. package/esm5/lib/interfaces/IAllocationPaymentsRequest.js +19 -1
  111. package/esm5/lib/interfaces/IBSPayments.js +45 -1
  112. package/esm5/lib/interfaces/ICardDetails.js +21 -1
  113. package/esm5/lib/interfaces/IFee.js +53 -1
  114. package/esm5/lib/interfaces/IOrderReferenceFee.js +25 -1
  115. package/esm5/lib/interfaces/IPatchRefundAction.js +15 -1
  116. package/esm5/lib/interfaces/IPayment.js +65 -1
  117. package/esm5/lib/interfaces/IPaymentFailure.js +33 -1
  118. package/esm5/lib/interfaces/IPaymentGroup.js +19 -1
  119. package/esm5/lib/interfaces/IPaymentStatus.js +25 -1
  120. package/esm5/lib/interfaces/IPaymentView.js +17 -1
  121. package/esm5/lib/interfaces/IPayments.js +13 -1
  122. package/esm5/lib/interfaces/IRefundAction.js +15 -1
  123. package/esm5/lib/interfaces/IRefundList.js +29 -1
  124. package/esm5/lib/interfaces/IRefundReasons.js +19 -1
  125. package/esm5/lib/interfaces/IRefundRejectReason.js +15 -1
  126. package/esm5/lib/interfaces/IRefundStatus.js +23 -1
  127. package/esm5/lib/interfaces/IRefundStatusHistory.js +15 -1
  128. package/esm5/lib/interfaces/IRemission.js +25 -1
  129. package/esm5/lib/interfaces/IResubmitRefundRequest.js +11 -1
  130. package/esm5/lib/interfaces/IStatusHistories.js +19 -1
  131. package/esm5/lib/interfaces/IStatusHistory.js +21 -1
  132. package/esm5/lib/interfaces/IserviceRequestCardPayment.js +13 -1
  133. package/esm5/lib/interfaces/IserviceRequestPbaPayment.js +17 -1
  134. package/esm5/lib/interfaces/IssueRefundRequest.js +13 -1
  135. package/esm5/lib/interfaces/PayhubAntennaRequest.js +16 -2
  136. package/esm5/lib/interfaces/PaymentToPayhubRequest.js +22 -2
  137. package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +9 -1
  138. package/esm5/lib/interfaces/PostRefundRetroRemission.js +11 -1
  139. package/esm5/lib/interfaces/RefundsRequest.js +11 -1
  140. package/esm5/lib/interfaces/UnidentifiedPaymentsRequest.js +15 -1
  141. package/esm5/lib/interfaces/UnsolicitedPaymentsRequest.js +21 -1
  142. package/esm5/lib/payment-lib.component.js +183 -114
  143. package/esm5/lib/payment-lib.module.js +55 -52
  144. package/esm5/lib/payment-lib.service.js +87 -17
  145. package/esm5/lib/pipes/capitalize.pipe.js +23 -9
  146. package/esm5/lib/pipes/ccd-hyphens.pipe.js +24 -9
  147. package/esm5/lib/pipes/key-value.pipe.js +22 -9
  148. package/esm5/lib/pipes/sanitize-html.pipe.js +26 -8
  149. package/esm5/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +152 -28
  150. package/esm5/lib/services/card-details/card-details.service.js +43 -13
  151. package/esm5/lib/services/case-transactions/case-transactions.service.js +43 -13
  152. package/esm5/lib/services/orderslist.service.js +419 -45
  153. package/esm5/lib/services/payment-list/payment-list.service.js +47 -13
  154. package/esm5/lib/services/payment-view/payment-view.service.js +306 -40
  155. package/esm5/lib/services/refunds/refunds.service.js +163 -29
  156. package/esm5/lib/services/shared/error-handler.service.js +37 -11
  157. package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +119 -18
  158. package/esm5/lib/services/shared/logger/console-logger.service.js +41 -13
  159. package/esm5/lib/services/shared/logger/logger.service.js +53 -11
  160. package/esm5/lib/services/status-history/status-history.service.js +45 -13
  161. package/esm5/lib/services/xl-file/xl-file.service.js +114 -15
  162. package/esm5/public_api.js +8 -4
  163. package/fesm2015/hmcts-ccpay-web-component.js +4041 -1490
  164. package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
  165. package/fesm5/hmcts-ccpay-web-component.js +5386 -1750
  166. package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
  167. package/hmcts-ccpay-web-component.metadata.json +1 -1
  168. package/lib/components/card-details/card-details.component.d.ts +1 -1
  169. package/lib/components/payment-view/payment-view.component.d.ts +2 -2
  170. package/lib/services/shared/logger/console-logger.service.d.ts +3 -3
  171. package/package.json +2 -2
@@ -1,11 +1,22 @@
1
- import { __decorate, __metadata } from "tslib";
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
2
5
  import { Component, Input } from '@angular/core';
3
- import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms';
6
+ import { FormBuilder, Validators, FormControl } from '@angular/forms';
4
7
  import { RefundsService } from '../../services/refunds/refunds.service';
5
8
  import { OrderslistService } from '../../services/orderslist.service';
6
9
  import { PaymentLibComponent } from '../../payment-lib.component';
7
10
  import { ActivatedRoute, Router } from '@angular/router';
8
- let ProcessRefundComponent = class ProcessRefundComponent {
11
+ export class ProcessRefundComponent {
12
+ /**
13
+ * @param {?} RefundsService
14
+ * @param {?} formBuilder
15
+ * @param {?} OrderslistService
16
+ * @param {?} paymentLibComponent
17
+ * @param {?} router
18
+ * @param {?} activeRoute
19
+ */
9
20
  constructor(RefundsService, formBuilder, OrderslistService, paymentLibComponent, router, activeRoute) {
10
21
  this.RefundsService = RefundsService;
11
22
  this.formBuilder = formBuilder;
@@ -32,13 +43,24 @@ let ProcessRefundComponent = class ProcessRefundComponent {
32
43
  this.successMsg = null;
33
44
  this.isConfirmButtondisabled = true;
34
45
  }
46
+ /**
47
+ * @return {?}
48
+ */
35
49
  ngOnInit() {
36
50
  this.viewStatus = 'RefundProcess';
37
- this.RefundsService.getRefundActions(this.refundReference).subscribe(refundActionList => {
38
- this.refundActionList = refundActionList;
39
- }, err => {
51
+ this.RefundsService.getRefundActions(this.refundReference).subscribe((/**
52
+ * @param {?} refundActionList
53
+ * @return {?}
54
+ */
55
+ refundActionList => {
56
+ this.refundActionList = (/** @type {?} */ (refundActionList));
57
+ }), (/**
58
+ * @param {?} err
59
+ * @return {?}
60
+ */
61
+ err => {
40
62
  this.errorMessage = this.getErrorMessage(true, err.statusCode, err.err, err);
41
- });
63
+ }));
42
64
  this.processRefundForm = this.formBuilder.group({
43
65
  refundActionField: new FormControl('', Validators.compose([
44
66
  Validators.required
@@ -63,6 +85,10 @@ let ProcessRefundComponent = class ProcessRefundComponent {
63
85
  this.isFromRefundListPage = true;
64
86
  }
65
87
  }
88
+ /**
89
+ * @param {?} code
90
+ * @return {?}
91
+ */
66
92
  checkRefundActions(code) {
67
93
  this.refundActionsHasError = false;
68
94
  this.isReasonFieldEmpty = false;
@@ -85,11 +111,19 @@ let ProcessRefundComponent = class ProcessRefundComponent {
85
111
  this.isRejectClicked = true;
86
112
  this.isSendMeBackClicked = false;
87
113
  this.isOtherClicked = false;
88
- this.RefundsService.getRefundRejectReasons().subscribe(refundRejectReasonList => {
89
- this.refundRejectReasonList = refundRejectReasonList;
90
- }, err => {
114
+ this.RefundsService.getRefundRejectReasons().subscribe((/**
115
+ * @param {?} refundRejectReasonList
116
+ * @return {?}
117
+ */
118
+ refundRejectReasonList => {
119
+ this.refundRejectReasonList = (/** @type {?} */ (refundRejectReasonList));
120
+ }), (/**
121
+ * @param {?} err
122
+ * @return {?}
123
+ */
124
+ err => {
91
125
  this.errorMessage = this.getErrorMessage(true, err.statusCode, err.err, err);
92
- });
126
+ }));
93
127
  }
94
128
  else if (code === 'RE005') {
95
129
  this.isOtherClicked = true;
@@ -98,11 +132,18 @@ let ProcessRefundComponent = class ProcessRefundComponent {
98
132
  this.isOtherClicked = false;
99
133
  }
100
134
  }
135
+ /**
136
+ * @return {?}
137
+ */
101
138
  processRefundSubmit() {
139
+ /** @type {?} */
102
140
  let processRefundRequest;
141
+ /** @type {?} */
103
142
  let status;
104
143
  this.resetForm([false, false, false, false, false, false, false, false], 'all');
144
+ /** @type {?} */
105
145
  const controls = this.processRefundForm.controls;
146
+ /** @type {?} */
106
147
  const processFormError = controls.sendMeBackField.errors;
107
148
  if (this.processRefundForm.dirty && controls.refundActionField.valid
108
149
  && (controls.refundActionField.value == 'Approve'
@@ -130,13 +171,21 @@ let ProcessRefundComponent = class ProcessRefundComponent {
130
171
  reason: controls.sendMeBackField.value
131
172
  };
132
173
  }
133
- this.RefundsService.patchRefundActions(processRefundRequest, this.refundReference, status).subscribe(response => {
174
+ this.RefundsService.patchRefundActions(processRefundRequest, this.refundReference, status).subscribe((/**
175
+ * @param {?} response
176
+ * @return {?}
177
+ */
178
+ response => {
134
179
  this.isSuccesspageEnable = true;
135
180
  // this.successMsg = JSON.parse(response)['data'];
136
181
  this.successMsg = response.replace(/['"]+/g, '');
137
- }, err => {
182
+ }), (/**
183
+ * @param {?} err
184
+ * @return {?}
185
+ */
186
+ err => {
138
187
  this.errorMessage = this.getErrorMessage(true, err.statusCode, err.err, err);
139
- });
188
+ }));
140
189
  }
141
190
  else {
142
191
  if (controls.refundActionField.value == "") {
@@ -169,7 +218,15 @@ let ProcessRefundComponent = class ProcessRefundComponent {
169
218
  }
170
219
  }
171
220
  }
221
+ /**
222
+ * @param {?} isErrorExist
223
+ * @param {?} status
224
+ * @param {?} errorMsg
225
+ * @param {?} err
226
+ * @return {?}
227
+ */
172
228
  getErrorMessage(isErrorExist, status, errorMsg, err) {
229
+ /** @type {?} */
173
230
  let bodyTxt = 'Please try again later';
174
231
  if (status !== 500) {
175
232
  if (errorMsg !== undefined) {
@@ -185,8 +242,15 @@ let ProcessRefundComponent = class ProcessRefundComponent {
185
242
  showError: isErrorExist
186
243
  };
187
244
  }
245
+ /**
246
+ * @return {?}
247
+ */
188
248
  loadRefundListPage() {
189
- this.OrderslistService.getnavigationPageValue().subscribe((data) => this.navigationpage = data);
249
+ this.OrderslistService.getnavigationPageValue().subscribe((/**
250
+ * @param {?} data
251
+ * @return {?}
252
+ */
253
+ (data) => this.navigationpage = data));
190
254
  if (this.navigationpage === 'casetransactions') {
191
255
  // window.location.href='/refund-list?takePayment=false&refundlist=true';
192
256
  // // this.OrderslistService.setnavigationPage('casetransactions');
@@ -203,6 +267,9 @@ let ProcessRefundComponent = class ProcessRefundComponent {
203
267
  this.paymentLibComponent.isRefundStatusView = true;
204
268
  }
205
269
  }
270
+ /**
271
+ * @return {?}
272
+ */
206
273
  loadRefundsHomePage() {
207
274
  if (typeof this.paymentLibComponent.TAKEPAYMENT === 'string' && this.paymentLibComponent.TAKEPAYMENT === 'false') {
208
275
  //window.location.href='/refund-list?takePayment=false&refundlist=true';
@@ -217,6 +284,9 @@ let ProcessRefundComponent = class ProcessRefundComponent {
217
284
  this.paymentLibComponent.isRefundStatusView = false;
218
285
  }
219
286
  }
287
+ /**
288
+ * @return {?}
289
+ */
220
290
  redirecttoRefundListPage() {
221
291
  if ((typeof this.paymentLibComponent.TAKEPAYMENT === 'string' && this.paymentLibComponent.TAKEPAYMENT === 'false') || (typeof this.paymentLibComponent.TAKEPAYMENT === 'boolean' && !this.paymentLibComponent.TAKEPAYMENT)) {
222
292
  // window.location.href='/refund-list?takePayment=false&refundlist=true';
@@ -250,6 +320,11 @@ let ProcessRefundComponent = class ProcessRefundComponent {
250
320
  // let url = `/payment-history/${this.ccdCaseNumber}?view=case-transactions&takePayment=true&${partUrl}`;
251
321
  // this.router.navigateByUrl(url);
252
322
  // }
323
+ /**
324
+ * @param {?} vals
325
+ * @param {?} field
326
+ * @return {?}
327
+ */
253
328
  resetForm(vals, field) {
254
329
  if (field === 'action' || field === 'all') {
255
330
  this.refundActionsHasError = vals[0];
@@ -268,10 +343,21 @@ let ProcessRefundComponent = class ProcessRefundComponent {
268
343
  this.isReasonInvalid = vals[7];
269
344
  }
270
345
  }
346
+ /**
347
+ * @return {?}
348
+ */
271
349
  goToCaseReview() {
272
350
  this.router.navigate([`/cases/case-details/${this.ccdCaseNumber}`], { relativeTo: this.activeRoute });
273
351
  }
274
- };
352
+ }
353
+ ProcessRefundComponent.decorators = [
354
+ { type: Component, args: [{
355
+ selector: 'ccpay-process-refund',
356
+ template: "<ng-container *ngIf=\"viewStatus === 'RefundProcess'\">\n<div class=\"govuk-width-container\">\n\n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" [ngClass]=\"{'govuk-radios__conditional--hidden': isSuccesspageEnable}\" id=\"main-content\" role=\"main\">\n <div *ngIf=\"errorMessage.showError\">\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 {{errorMessage.title}}\n </h2>\n <div class=\"govuk-error-summary__body process-refund-font\">\n {{errorMessage.body}}\n </div>\n </div>\n </div>\n\n <div class=\"payment-view-alignment\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Review refund details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment to be refunded</td>\n <td>\t{{refundlistsource?.refund_reference}} ({{refundlistsource.amount | currency :'GBP':'symbol':'1.2-2' }})</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Reason for refund</td>\n <td>\t{{refundlistsource?.reason}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Amount to be refunded</td>\n <td>{{refundlistsource?.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Submitted by</td>\n <td>{{refundlistsource?.user_full_name}}</td>\n\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Date submitted</td>\n <td>\t{{refundlistsource?.date_created | date:'d MMMM yyyy' }}</td>\n </tr>\n\n </tbody>\n </table>\n\n <div>\n </div>\n </div>\n <div class=\"process-refund__panel\">\n <form [formGroup]=\"processRefundForm\" novalidate>\n <div class=\"\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"sign-in-hint\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"heading-large\">\n What do you want to do with this refund?\n </h1>\n </legend>\n <div class=\"govuk-radios\" [ngClass]=\"{'form-group-error': refundActionsHasError}\">\n <p class=\"inline-error-message\"\n *ngIf=\"refundActionsHasError\">\n <span *ngIf=\"refundActionsHasError\">Please select an action</span>\n </p>\n <div class=\"govuk-radios__item\" *ngFor=\"let refundAction of refundActionList; let i = index;\">\n <input class=\"govuk-radios__input\" \n id=\"refundAction-{{i}}\" \n name=\"refundActionField\"\n type=\"radio\"\n formControlName=\"refundActionField\"\n (click)=\"checkRefundActions(refundAction.code)\"\n value=\"{{refundAction.code}}\">\n <label class=\"govuk-label govuk-radios__label process-refund-font\" for=\"refundAction-{{i}}\">\n {{refundAction.code}}\n </label>\n <div id=\"sign-in-item-hint\" class=\"govuk-hint govuk-radios__hint process-refund-font\">\n {{refundAction.label}}\n </div>\n </div>\n <div class=\"govuk-radios__conditional\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isSendMeBackClicked}\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label process-refund-font\" for=\"contact-by-text\">\n Add a reason\n </label>\n <p class=\"inline-error-message\"\n *ngIf=\"isReasonFieldEmpty || isReasonFieldInvalid || reasonFieldMinHasError || reasonFieldMaxHasError\">\n <span *ngIf=\"isReasonFieldEmpty\">Add a reason</span>\n <span *ngIf=\"isReasonFieldInvalid\">Add a valid reason</span>\n <span *ngIf=\"reasonFieldMinHasError\">Reason should be at least 3 characters.</span>\n <span *ngIf=\"reasonFieldMaxHasError\">Reason should be 255 characters or under.</span>\n </p>\n <textarea class=\"govuk-textarea govuk-!-width-one-third reason-font\"\n [ngClass]=\"{'inline-error-class': isReasonFieldEmpty || isReasonFieldInvalid || reasonFieldMinHasError || reasonFieldMaxHasError}\"\n id=\"sendmeback\"\n name=\"sendMeBackField\" \n formControlName=\"sendMeBackField\"\n rows=\"5\"></textarea>\n \n </div>\n\n </div>\n \n </div>\n \n </fieldset>\n </div>\n\n <div [ngClass]=\"{'govuk-radios__conditional--hidden': !isRejectClicked}\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h2 class=\"heading-medium\">\n Why are you rejecting this refund?\n </h2>\n </legend>\n <div class=\"govuk-radios\" [ngClass]=\"{'form-group-error': refundRejectReasonHasError}\">\n <p class=\"inline-error-message\"\n *ngIf=\"refundRejectReasonHasError\">\n <span *ngIf=\"refundRejectReasonHasError\">Please select a reject reason</span>\n </p>\n <div class=\"govuk-radios__item\" *ngFor=\"let refundRejectReason of refundRejectReasonList; let j = index;\">\n <input class=\"govuk-radios__input\" \n id=\"refundRejectReason-{{j}}\"\n formControlName=\"refundRejectReasonField\"\n name=\"refundRejectReasonField\"\n (click)=\"checkRefundActions(refundRejectReason.code)\"\n type=\"radio\" value=\"{{refundRejectReason.code}}\">\n <label class=\"govuk-label govuk-radios__label process-refund-font\" for=\"refundRejectReason-{{j}}\">\n {{refundRejectReason.name}}\n </label>\n </div>\n </div>\n <div class=\"govuk-radios__conditional\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isOtherClicked}\" id=\"conditional-contact-3\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label process-refund-font \" for=\"contact-by-text\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty || isReasonInvalid\">\n <span *ngIf=\"isReasonEmpty\">Enter reason.</span>\n <span *ngIf=\"isReasonInvalid\">Enter a valid reason</span>\n </p>\n <input class=\"govuk-input govuk-!-width-one-third reason-font\" id=\"otherReason\" \n [ngClass]=\"{'inline-error-class': isReasonEmpty || isReasonInvalid}\"\n formControlName=\"enterReasonField\" name=\"enterReasonField\" type=\"text\"></div>\n \n </div>\n \n </fieldset>\n </div>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"redirecttoRefundListPage()\" class=\"govuk-button govuk-button--secondary marginright\"> Previous</button>\n <button (click)=\"processRefundSubmit()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit \n </button>\n <br/><br/>\n </div>\n \n <div *ngIf=\"!isFromRefundListPage\" class=\"govuk-button-group margin\">\n\n <p><a (click)=\"loadRefundsHomePage()\" class=\"govuk-link pointer\" data-module=\"govuk-button\">Cancel</a></p>\n</div>\n</form>\n </div>\n \n\n </main>\n \n <main class=\"govuk-main-wrapper govuk-main-wrapper--l success-page-padding--top25\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isSuccesspageEnable}\" id=\"main-content\" role=\"main\" >\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-panel govuk-panel-refund--confirmation\">\n <h1 class=\"heading-xlarge\">\n {{successMsg}}\n </h1>\n </div>\n <p class=\"govuk-body process-refund-font\">\n <a (click) = \"goToCaseReview()\" class=\"govuk-link pointer\">Return to case</a>\n </p>\n </div>\n </main>\n</div>\n</ng-container>\n\n",
357
+ styles: [".tb-col-w{width:330px}.tr-border{border-bottom:2px solid}.payment-view-alignment{margin-left:30px}.govuk-button{float:left!important;font-size:19px;margin-top:2em!important}.remission{margin-bottom:7em}.process-refund-font{font-size:19px!important}.govuk-radios__conditional--hidden{display:none}.inline-error-message{color:#c11717;font-weight:700;margin-top:10px;border-color:#c11717}.inline-error-class{outline:#c11717 solid 3px;outline-offset:0;border-color:#c11717}.form-group-error{border-left:5px solid #c11717;padding-left:15px}.govuk-panel-refund--confirmation{color:#fff;background:#00703c}.process-refund__panel{display:flex;flex-direction:column;margin-left:25px;margin-top:30px}.button-margin--left25{margin-left:25px}.success-page-padding--top25{padding-top:25px}.margin{margin-top:5em}.marginright{margin-right:1.5em}.govuk-textarea{line-height:2.25}.reason-font{font-size:19px!important}.pointer{cursor:pointer}"]
358
+ }] }
359
+ ];
360
+ /** @nocollapse */
275
361
  ProcessRefundComponent.ctorParameters = () => [
276
362
  { type: RefundsService },
277
363
  { type: FormBuilder },
@@ -280,26 +366,90 @@ ProcessRefundComponent.ctorParameters = () => [
280
366
  { type: Router },
281
367
  { type: ActivatedRoute }
282
368
  ];
283
- __decorate([
284
- Input(),
285
- __metadata("design:type", String)
286
- ], ProcessRefundComponent.prototype, "refundReference", void 0);
287
- __decorate([
288
- Input(),
289
- __metadata("design:type", Object)
290
- ], ProcessRefundComponent.prototype, "refundlistsource", void 0);
291
- ProcessRefundComponent = __decorate([
292
- Component({
293
- selector: 'ccpay-process-refund',
294
- template: "<ng-container *ngIf=\"viewStatus === 'RefundProcess'\">\n<div class=\"govuk-width-container\">\n\n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" [ngClass]=\"{'govuk-radios__conditional--hidden': isSuccesspageEnable}\" id=\"main-content\" role=\"main\">\n <div *ngIf=\"errorMessage.showError\">\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 {{errorMessage.title}}\n </h2>\n <div class=\"govuk-error-summary__body process-refund-font\">\n {{errorMessage.body}}\n </div>\n </div>\n </div>\n\n <div class=\"payment-view-alignment\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Review refund details</h1>\n </div>\n </div>\n <table>\n <tbody>\n\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment to be refunded</td>\n <td>\t{{refundlistsource?.refund_reference}} ({{refundlistsource.amount | currency :'GBP':'symbol':'1.2-2' }})</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Reason for refund</td>\n <td>\t{{refundlistsource?.reason}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Amount to be refunded</td>\n <td>{{refundlistsource?.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Submitted by</td>\n <td>{{refundlistsource?.user_full_name}}</td>\n\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Date submitted</td>\n <td>\t{{refundlistsource?.date_created | date:'d MMMM yyyy' }}</td>\n </tr>\n\n </tbody>\n </table>\n\n <div>\n </div>\n </div>\n <div class=\"process-refund__panel\">\n <form [formGroup]=\"processRefundForm\" novalidate>\n <div class=\"\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"sign-in-hint\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"heading-large\">\n What do you want to do with this refund?\n </h1>\n </legend>\n <div class=\"govuk-radios\" [ngClass]=\"{'form-group-error': refundActionsHasError}\">\n <p class=\"inline-error-message\"\n *ngIf=\"refundActionsHasError\">\n <span *ngIf=\"refundActionsHasError\">Please select an action</span>\n </p>\n <div class=\"govuk-radios__item\" *ngFor=\"let refundAction of refundActionList; let i = index;\">\n <input class=\"govuk-radios__input\" \n id=\"refundAction-{{i}}\" \n name=\"refundActionField\"\n type=\"radio\"\n formControlName=\"refundActionField\"\n (click)=\"checkRefundActions(refundAction.code)\"\n value=\"{{refundAction.code}}\">\n <label class=\"govuk-label govuk-radios__label process-refund-font\" for=\"refundAction-{{i}}\">\n {{refundAction.code}}\n </label>\n <div id=\"sign-in-item-hint\" class=\"govuk-hint govuk-radios__hint process-refund-font\">\n {{refundAction.label}}\n </div>\n </div>\n <div class=\"govuk-radios__conditional\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isSendMeBackClicked}\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label process-refund-font\" for=\"contact-by-text\">\n Add a reason\n </label>\n <p class=\"inline-error-message\"\n *ngIf=\"isReasonFieldEmpty || isReasonFieldInvalid || reasonFieldMinHasError || reasonFieldMaxHasError\">\n <span *ngIf=\"isReasonFieldEmpty\">Add a reason</span>\n <span *ngIf=\"isReasonFieldInvalid\">Add a valid reason</span>\n <span *ngIf=\"reasonFieldMinHasError\">Reason should be at least 3 characters.</span>\n <span *ngIf=\"reasonFieldMaxHasError\">Reason should be 255 characters or under.</span>\n </p>\n <textarea class=\"govuk-textarea govuk-!-width-one-third reason-font\"\n [ngClass]=\"{'inline-error-class': isReasonFieldEmpty || isReasonFieldInvalid || reasonFieldMinHasError || reasonFieldMaxHasError}\"\n id=\"sendmeback\"\n name=\"sendMeBackField\" \n formControlName=\"sendMeBackField\"\n rows=\"5\"></textarea>\n \n </div>\n\n </div>\n \n </div>\n \n </fieldset>\n </div>\n\n <div [ngClass]=\"{'govuk-radios__conditional--hidden': !isRejectClicked}\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h2 class=\"heading-medium\">\n Why are you rejecting this refund?\n </h2>\n </legend>\n <div class=\"govuk-radios\" [ngClass]=\"{'form-group-error': refundRejectReasonHasError}\">\n <p class=\"inline-error-message\"\n *ngIf=\"refundRejectReasonHasError\">\n <span *ngIf=\"refundRejectReasonHasError\">Please select a reject reason</span>\n </p>\n <div class=\"govuk-radios__item\" *ngFor=\"let refundRejectReason of refundRejectReasonList; let j = index;\">\n <input class=\"govuk-radios__input\" \n id=\"refundRejectReason-{{j}}\"\n formControlName=\"refundRejectReasonField\"\n name=\"refundRejectReasonField\"\n (click)=\"checkRefundActions(refundRejectReason.code)\"\n type=\"radio\" value=\"{{refundRejectReason.code}}\">\n <label class=\"govuk-label govuk-radios__label process-refund-font\" for=\"refundRejectReason-{{j}}\">\n {{refundRejectReason.name}}\n </label>\n </div>\n </div>\n <div class=\"govuk-radios__conditional\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isOtherClicked}\" id=\"conditional-contact-3\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label process-refund-font \" for=\"contact-by-text\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty || isReasonInvalid\">\n <span *ngIf=\"isReasonEmpty\">Enter reason.</span>\n <span *ngIf=\"isReasonInvalid\">Enter a valid reason</span>\n </p>\n <input class=\"govuk-input govuk-!-width-one-third reason-font\" id=\"otherReason\" \n [ngClass]=\"{'inline-error-class': isReasonEmpty || isReasonInvalid}\"\n formControlName=\"enterReasonField\" name=\"enterReasonField\" type=\"text\"></div>\n \n </div>\n \n </fieldset>\n </div>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"redirecttoRefundListPage()\" class=\"govuk-button govuk-button--secondary marginright\"> Previous</button>\n <button (click)=\"processRefundSubmit()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit \n </button>\n <br/><br/>\n </div>\n \n <div *ngIf=\"!isFromRefundListPage\" class=\"govuk-button-group margin\">\n\n <p><a (click)=\"loadRefundsHomePage()\" class=\"govuk-link pointer\" data-module=\"govuk-button\">Cancel</a></p>\n</div>\n</form>\n </div>\n \n\n </main>\n \n <main class=\"govuk-main-wrapper govuk-main-wrapper--l success-page-padding--top25\" [ngClass]=\"{'govuk-radios__conditional--hidden': !isSuccesspageEnable}\" id=\"main-content\" role=\"main\" >\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-panel govuk-panel-refund--confirmation\">\n <h1 class=\"heading-xlarge\">\n {{successMsg}}\n </h1>\n </div>\n <p class=\"govuk-body process-refund-font\">\n <a (click) = \"goToCaseReview()\" class=\"govuk-link pointer\">Return to case</a>\n </p>\n </div>\n </main>\n</div>\n</ng-container>\n\n",
295
- styles: [".tb-col-w{width:330px}.tr-border{border-bottom:2px solid}.payment-view-alignment{margin-left:30px}.govuk-button{float:left!important;font-size:19px;margin-top:2em!important}.remission{margin-bottom:7em}.process-refund-font{font-size:19px!important}.govuk-radios__conditional--hidden{display:none}.inline-error-message{color:#c11717;font-weight:700;margin-top:10px;border-color:#c11717}.inline-error-class{outline:#c11717 solid 3px;outline-offset:0;border-color:#c11717}.form-group-error{border-left:5px solid #c11717;padding-left:15px}.govuk-panel-refund--confirmation{color:#fff;background:#00703c}.process-refund__panel{display:flex;flex-direction:column;margin-left:25px;margin-top:30px}.button-margin--left25{margin-left:25px}.success-page-padding--top25{padding-top:25px}.margin{margin-top:5em}.marginright{margin-right:1.5em}.govuk-textarea{line-height:2.25}.reason-font{font-size:19px!important}.pointer{cursor:pointer}"]
296
- }),
297
- __metadata("design:paramtypes", [RefundsService,
298
- FormBuilder,
299
- OrderslistService,
300
- PaymentLibComponent,
301
- Router,
302
- ActivatedRoute])
303
- ], ProcessRefundComponent);
304
- export { ProcessRefundComponent };
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1yZWZ1bmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wcm9jZXNzLXJlZnVuZC9wcm9jZXNzLXJlZnVuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFJdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBQyxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU94RCxJQUFhLHNCQUFzQixHQUFuQyxNQUFhLHNCQUFzQjtJQThCakMsWUFBb0IsY0FBOEIsRUFDOUIsV0FBd0IsRUFDeEIsaUJBQW9DLEVBQ3BDLG1CQUF3QyxFQUN4QyxNQUFjLEVBQ2QsV0FBMkI7UUFMM0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBN0IvQyxpQkFBWSxHQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEQsZUFBVSxHQUFXLElBQUksQ0FBQztR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Q0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUcsS0FBSyxLQUFHLGFBQWEsSUFBSSxLQUFLLEtBQUcsS0FBSyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHVCQUF1QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQztJQUN0RyxDQUFDO0NBQ0YsQ0FBQTs7WUFuUXFDLGNBQWM7WUFDakIsV0FBVztZQUNMLGlCQUFpQjtZQUNmLG1CQUFtQjtZQUNoQyxNQUFNO1lBQ0QsY0FBYzs7QUFsQ3RDO0lBQVIsS0FBSyxFQUFFOzsrREFBeUI7QUFDeEI7SUFBUixLQUFLLEVBQUU7O2dFQUErQjtBQUY1QixzQkFBc0I7SUFMbEMsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxveFFBQThDOztLQUUvQyxDQUFDO3FDQStCb0MsY0FBYztRQUNqQixXQUFXO1FBQ0wsaUJBQWlCO1FBQ2YsbUJBQW1CO1FBQ2hDLE1BQU07UUFDRCxjQUFjO0dBbkNwQyxzQkFBc0IsQ0FpU2xDO1NBalNZLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtSZWZ1bmRzU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVmdW5kcy9yZWZ1bmRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVJlZnVuZEFjdGlvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZEFjdGlvbic7XG5pbXBvcnQgeyBJUmVmdW5kTGlzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZExpc3QnO1xuaW1wb3J0IHsgSVJlZnVuZFJlamVjdFJlYXNvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZFJlamVjdFJlYXNvbic7XG5pbXBvcnQgeyBPcmRlcnNsaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyc2xpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXByb2Nlc3MtcmVmdW5kJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2Nlc3MtcmVmdW5kLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvY2Vzcy1yZWZ1bmQuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NSZWZ1bmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSByZWZ1bmRSZWZlcmVuY2U6IHN0cmluZztcbiAgQElucHV0KCkgcmVmdW5kbGlzdHNvdXJjZTogSVJlZnVuZExpc3Q7XG5cbiAgcHJvY2Vzc1JlZnVuZEZvcm06IEZvcm1Hcm91cDtcblxuICBlcnJvck1lc3NhZ2UgPSAgdGhpcy5nZXRFcnJvck1lc3NhZ2UoZmFsc2UsICcnLCAnJywgJycpO1xuICBzZW5kbWViYWNrOiBzdHJpbmcgPSBudWxsO1xuICB2aWV3U3RhdHVzOiBzdHJpbmc7XG4gIHJlZnVuZEFjdGlvbkxpc3Q6IElSZWZ1bmRBY3Rpb25bXSA9IFtdOyBcbiAgcmVmdW5kUmVqZWN0UmVhc29uTGlzdDogSVJlZnVuZFJlamVjdFJlYXNvbltdID0gW107IFxuICBpc1NlbmRNZUJhY2tDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVqZWN0Q2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc090aGVyQ2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1N1Y2Nlc3NwYWdlRW5hYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmVmdW5kQWN0aW9uc0hhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlZnVuZFJlamVjdFJlYXNvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVhc29uRmllbGRFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlYXNvbkZpZWxkSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICByZWFzb25GaWVsZE1pbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlYXNvbkZpZWxkTWF4SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZWFzb25FbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlYXNvbkludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3VjY2Vzc01zZzogc3RyaW5nID0gbnVsbDtcbiAgbmF2aWdhdGlvbnBhZ2U6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBpc0Zyb21SZWZ1bmRMaXN0UGFnZTogYm9vbGVhbjtcblxuICBpc0NvbmZpcm1CdXR0b25kaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgUmVmdW5kc1NlcnZpY2U6IFJlZnVuZHNTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBPcmRlcnNsaXN0U2VydmljZTogT3JkZXJzbGlzdFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdSZWZ1bmRQcm9jZXNzJztcbiAgICB0aGlzLlJlZnVuZHNTZXJ2aWNlLmdldFJlZnVuZEFjdGlvbnModGhpcy5yZWZ1bmRSZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHJlZnVuZEFjdGlvbkxpc3QgPT4ge1xuICAgICAgICB0aGlzLnJlZnVuZEFjdGlvbkxpc3QgPSA8YW55PnJlZnVuZEFjdGlvbkxpc3Q7XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0cnVlLCBlcnIuc3RhdHVzQ29kZSwgZXJyLmVyciwgZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucHJvY2Vzc1JlZnVuZEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHJlZnVuZEFjdGlvbkZpZWxkOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgIF0pKSxcbiAgICAgIHJlZnVuZFJlamVjdFJlYXNvbkZpZWxkOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgIF0pKSxcbiAgICAgIHNlbmRNZUJhY2tGaWVsZDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSxcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFthLXpBLVowLTlcXFxccyxcXFxcLl0qKSQnKSxcblxuICAgICAgXSkpLFxuICAgICAgZW50ZXJSZWFzb25GaWVsZDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgzMCksXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05LlxcXFxzXSopJCcpLFxuICAgICAgXSkpLFxuICAgIH0pO1xuICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5yZWZ1bmRsaXN0c291cmNlLmNjZF9jYXNlX251bWJlcjtcblxuICAgaWYoKHR5cGVvZiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPT09ICdzdHJpbmcnICYmIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gJ2ZhbHNlJykgfHwgKHR5cGVvZiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPT09ICdib29sZWFuJyAmJiAhdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UKSApIHtcbiAgICB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlID0gdHJ1ZTtcbiAgIH1cbiAgfVxuICBjaGVja1JlZnVuZEFjdGlvbnMoY29kZTogc3RyaW5nKSB7XG4gICAgdGhpcy5yZWZ1bmRBY3Rpb25zSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmlzUmVhc29uRmllbGRFbXB0eSA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWFzb25JbnZhbGlkID0gZmFsc2U7XG4gICAgdGhpcy5yZWZ1bmRSZWplY3RSZWFzb25IYXNFcnJvciA9IGZhbHNlO1xuICAgIGlmKGNvZGUgPT09ICdSZXR1cm4gdG8gY2FzZXdvcmtlcicpIHtcbiAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5pc1NlbmRNZUJhY2tDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNSZWplY3RDbGlja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzT3RoZXJDbGlja2VkID0gZmFsc2U7XG5cbiAgICB9IGVsc2UgaWYgKGNvZGUgPT09ICdBcHByb3ZlJykge1xuICAgICAgdGhpcy5pc1NlbmRNZUJhY2tDbGlja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzUmVqZWN0Q2xpY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc090aGVyQ2xpY2tlZCA9IGZhbHNlO1xuXG4gICAgfSBlbHNlIGlmIChjb2RlID09PSAnUmVqZWN0Jykge1xuICAgICAgdGhpcy5pc1JlamVjdENsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5pc1NlbmRNZUJhY2tDbGlja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzT3RoZXJDbGlja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLlJlZnVuZHNTZXJ2aWNlLmdldFJlZnVuZFJlamVjdFJlYXNvbnMoKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlZnVuZFJlamVjdFJlYXNvbkxpc3QgPT4ge1xuICAgICAgICAgIHRoaXMucmVmdW5kUmVqZWN0UmVhc29uTGlzdCA9IDxhbnk+cmVmdW5kUmVqZWN0UmVhc29uTGlzdDtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUsIGVyci5zdGF0dXNDb2RlLCBlcnIuZXJyLCBlcnIpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gJ1JFMDA1Jykge1xuICAgICAgdGhpcy5pc090aGVyQ2xpY2tlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjb2RlICE9PSAnUkUwMDUnKSB7XG4gICAgICB0aGlzLmlzT3RoZXJDbGlja2VkID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHByb2Nlc3NSZWZ1bmRTdWJtaXQoKSB7XG4gICAgbGV0IHByb2Nlc3NSZWZ1bmRSZXF1ZXN0O1xuICAgIGxldCBzdGF0dXM7XG4gICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhbGwnKTtcbiAgICBjb25zdCBjb250cm9scyA9IHRoaXMucHJvY2Vzc1JlZnVuZEZvcm0uY29udHJvbHM7XG4gICAgY29uc3QgcHJvY2Vzc0Zvcm1FcnJvciA9IGNvbnRyb2xzLnNlbmRNZUJhY2tGaWVsZC5lcnJvcnM7XG5cbiAgICBpZiAodGhpcy5wcm9jZXNzUmVmdW5kRm9ybS5kaXJ0eSAmJiBjb250cm9scy5yZWZ1bmRBY3Rpb25GaWVsZC52YWxpZCBcbiAgICAgICYmIChjb250cm9scy5yZWZ1bmRBY3Rpb25GaWVsZC52YWx1ZSA9PSAnQXBwcm92ZSdcbiAgICAgIHx8IChjb250cm9scy5yZWZ1bmRBY3Rpb25GaWVsZC52YWx1ZSA9PSAnUmVqZWN0JyAmJiBjb250cm9scy5yZWZ1bmRSZWplY3RSZWFzb25GaWVsZC52YWxpZCAmJiBjb250cm9scy5yZWZ1bmRSZWplY3RSZWFzb25GaWVsZC52YWx1ZSAhPSAnUkUwMDUnKVxuICAgICAgfHwgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09ICdSZWplY3QnICYmIGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbHVlID09ICdSRTAwNScgJiYgY29udHJvbHMuZW50ZXJSZWFzb25GaWVsZC52YWxpZClcbiAgICAgIHx8IChjb250cm9scy5yZWZ1bmRBY3Rpb25GaWVsZC52YWx1ZSA9PSAnUmV0dXJuIHRvIGNhc2V3b3JrZXInICYmIGNvbnRyb2xzLnNlbmRNZUJhY2tGaWVsZC52YWxpZCkpKSB7XG4gICAgICBpZiAoY29udHJvbHMucmVmdW5kQWN0aW9uRmllbGQudmFsdWUgPT09ICdBcHByb3ZlJyl7XG4gICAgICAgIHN0YXR1cyA9ICdBUFBST1ZFJztcbiAgICAgICAgcHJvY2Vzc1JlZnVuZFJlcXVlc3QgPSB7XG4gICAgICAgICAgY29kZTonJyxcbiAgICAgICAgICByZWFzb246ICcnXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09PSAnUmVqZWN0Jykge1xuICAgICAgICBzdGF0dXMgPSAnUkVKRUNUJztcblxuICAgICAgICBwcm9jZXNzUmVmdW5kUmVxdWVzdCA9IHtcbiAgICAgICAgICBjb2RlOiBjb250cm9scy5yZWZ1bmRSZWplY3RSZWFzb25GaWVsZC52YWx1ZSA/IGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbHVlIDogJycsXG4gICAgICAgICAgcmVhc29uOiBjb250cm9scy5yZWZ1bmRSZWplY3RSZWFzb25GaWVsZC52YWx1ZSA9PSAnUkUwMDUnID8gY29udHJvbHMuZW50ZXJSZWFzb25GaWVsZC52YWx1ZSA6ICcnXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09PSAnUmV0dXJuIHRvIGNhc2V3b3JrZXInKSB7XG4gICAgICAgIHN0YXR1cyA9ICdTRU5EQkFDSyc7XG5cbiAgICAgICAgcHJvY2Vzc1JlZnVuZFJlcXVlc3QgPSB7XG4gICAgICAgICAgY29kZTogJycsXG4gICAgICAgICAgcmVhc29uOiBjb250cm9scy5zZW5kTWVCYWNrRmllbGQudmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMuUmVmdW5kc1NlcnZpY2UucGF0Y2hSZWZ1bmRBY3Rpb25zKHByb2Nlc3NSZWZ1bmRSZXF1ZXN0LCB0aGlzLnJlZnVuZFJlZmVyZW5jZSwgc3RhdHVzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICB0aGlzLmlzU3VjY2Vzc3BhZ2VFbmFibGUgPSB0cnVlO1xuICAgICAgICAgIC8vIHRoaXMuc3VjY2Vzc01zZyA9IEpTT04ucGFyc2UocmVzcG9uc2UpWydkYXRhJ107XG4gICAgICAgICAgdGhpcy5zdWNjZXNzTXNnID0gcmVzcG9uc2UucmVwbGFjZSgvWydcIl0rL2csICcnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUsIGVyci5zdGF0dXNDb2RlLCBlcnIuZXJyLCBlcnIpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZihjb250cm9scy5yZWZ1bmRBY3Rpb25GaWVsZC52YWx1ZSA9PSBcIlwiKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09ICdSZWplY3QnICYmIGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbHVlID09IFwiXCIpIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlamVjdFJlYXNvbicpO1xuICAgICAgfVxuICAgICAgaWYoY29udHJvbHMucmVmdW5kQWN0aW9uRmllbGQudmFsdWUgPT0gJ1JldHVybiB0byBjYXNld29ya2VyJykge1xuICAgICAgICBpZihjb250cm9scy5zZW5kTWVCYWNrRmllbGQudmFsdWUgPT0gJycgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2FkZEFyZWFzb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZihjb250cm9scy5zZW5kTWVCYWNrRmllbGQudmFsdWUgIT0gJycgJiYgY29udHJvbHMuc2VuZE1lQmFja0ZpZWxkLmludmFsaWQgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2FkZEFyZWFzb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZihwcm9jZXNzRm9ybUVycm9yICYmIHByb2Nlc3NGb3JtRXJyb3IubWlubGVuZ3RoICYmIHByb2Nlc3NGb3JtRXJyb3IubWlubGVuZ3RoLmFjdHVhbExlbmd0aCA8IDMgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2FkZEFyZWFzb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZihwcm9jZXNzRm9ybUVycm9yICYmIHByb2Nlc3NGb3JtRXJyb3IubWF4bGVuZ3RoICYmIHByb2Nlc3NGb3JtRXJyb3IubWF4bGVuZ3RoLmFjdHVhbExlbmd0aCA+IDI1NSApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnYWRkQXJlYXNvbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihjb250cm9scy5yZWZ1bmRBY3Rpb25GaWVsZC52YWx1ZSA9PSAnUmVqZWN0JyAmJiBjb250cm9scy5yZWZ1bmRSZWplY3RSZWFzb25GaWVsZC52YWx1ZSA9PSAnUkUwMDUnKSB7XG4gICAgICAgIGlmKGNvbnRyb2xzLmVudGVyUmVhc29uRmllbGQudmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2VdLCAnZW50ZXJSZWFzb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZihjb250cm9scy5lbnRlclJlYXNvbkZpZWxkLnZhbHVlIT09IFwiXCIgJiYgY29udHJvbHMuZW50ZXJSZWFzb25GaWVsZC5pbnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXSwgJ2VudGVyUmVhc29uJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuICBnZXRFcnJvck1lc3NhZ2UoaXNFcnJvckV4aXN0LCBzdGF0dXMsIGVycm9yTXNnLCBlcnIpIHtcbiAgICBsZXQgYm9keVR4dCA9ICdQbGVhc2UgdHJ5IGFnYWluIGxhdGVyJztcbiAgICBpZiAoc3RhdHVzICE9PSA1MDApIHtcbiAgICAgIGlmIChlcnJvck1zZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJvZHlUeHQgPSBlcnJvck1zZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJvZHlUeHQgPSBlcnI7XG4gICAgICB9XG4gICAgICBcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnU29tZXRoaW5nIHdlbnQgd3JvbmcnLFxuICAgICAgYm9keTogYm9keVR4dCxcbiAgICAgIHNob3dFcnJvcjogaXNFcnJvckV4aXN0XG4gICAgfTtcbiAgfVxuICBsb2FkUmVmdW5kTGlzdFBhZ2UoKSB7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRuYXZpZ2F0aW9uUGFnZVZhbHVlKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm5hdmlnYXRpb25wYWdlID0gZGF0YSk7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbnBhZ2UgPT09ICdjYXNldHJhbnNhY3Rpb25zJykge1xuICAgICAgLy8gd2luZG93LmxvY2F0aW9uLmhyZWY9Jy9yZWZ1bmQtbGlzdD90YWtlUGF5bWVudD1mYWxzZSZyZWZ1bmRsaXN0PXRydWUnO1xuICAgICAgLy8gLy8gdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnY2FzZXRyYW5zYWN0aW9ucycpO1xuICAgICAgLy8gLy8gdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgICAgLy8gLy8gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlZJRVcgPSdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgICAvLyAvLyB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgICAgLy8gLy8gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgICAgLy8gLy8gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IGZhbHNlO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlZnVuZHN0YXR1c2xpc3QnO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdyZWZ1bmRzdGF0dXNsaXN0JztcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1JlZnVuZFN0YXR1c1ZpZXcgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBsb2FkUmVmdW5kc0hvbWVQYWdlKCkge1xuICAgIGlmKHR5cGVvZiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPT09ICdzdHJpbmcnICYmIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gJ2ZhbHNlJykge1xuICAgICAgLy93aW5kb3cubG9jYXRpb24uaHJlZj0nL3JlZnVuZC1saXN0P3Rha2VQYXltZW50PWZhbHNlJnJlZnVuZGxpc3Q9dHJ1ZSc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVmdW5kLWxpc3QnO1xuICAgICB9XG4gICAgIGVsc2Uge1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnY2FzZXRyYW5zYWN0aW9ucycpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlZJRVcgPSdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IGZhbHNlO1xuICAgICB9XG4gIH1cbiByZWRpcmVjdHRvUmVmdW5kTGlzdFBhZ2UoKSB7XG4gICBpZigodHlwZW9mIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gJ3N0cmluZycgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID09PSAnZmFsc2UnKSB8fCAodHlwZW9mIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gJ2Jvb2xlYW4nICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQpICkge1xuICAgLy8gd2luZG93LmxvY2F0aW9uLmhyZWY9Jy9yZWZ1bmQtbGlzdD90YWtlUGF5bWVudD1mYWxzZSZyZWZ1bmRsaXN0PXRydWUnO1xuICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlZnVuZC1saXN0JztcbiAgIH1cbiAgIGVsc2Uge1xuICAgIHRoaXMubG9hZFJlZnVuZExpc3RQYWdlKCk7XG4gICB9XG4gIH1cbiAgLy8gbG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKSB7XG4gIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IGZhbHNlO1xuICAvLyAgIHRoaXMucGF5bWVudExpYkNvfW1wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAvLyAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gIC8vICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QlNmZWF0dXJlKCkuc3Vic2NyaWJlKFxuICAvLyAgICAgZmVhdHVyZXMgPT4ge1xuICAvLyAgICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShmZWF0dXJlcykuZmlsdGVyKGZlYXR1cmUgPT4gZmVhdHVyZS51aWQgPT09IEJTX0VOQUJMRV9GTEFHKTtcbiAgLy8gICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSByZXN1bHRbMF0gPyByZXN1bHRbMF0uZW5hYmxlIDogZmFsc2U7XG4gIC8vICAgICB9LFxuICAvLyAgICAgZXJyID0+IHtcbiAgLy8gICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSBmYWxzZTtcbiAgLy8gICAgIH1cbiAgLy8gICApO1xuXG4gIC8vICAgbGV0IHBhcnRVcmwgPSBgc2VsZWN0ZWRPcHRpb249JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OfWA7XG4gIC8vICAgcGFydFVybCArPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAvLyAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAvLyAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgLy8gICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gIC8vICAgcGFydFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNBU0VUWVBFfWA7XG4gIC8vICAgcGFydFVybCArPSB0aGlzLmlzTmV3UGNpcGFsT2ZmID8gJyZpc05ld1BjaXBhbE9mZj1FbmFibGUnIDogJyZpc05ld1BjaXBhbE9mZj1EaXNhYmxlJztcbiAgLy8gICBwYXJ0VXJsICs9IHRoaXMuaXNPbGRQY2lwYWxPZmYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnO1xuICAvLyAgIGxldCB1cmwgPSBgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1jYXNlLXRyYW5zYWN0aW9ucyZ0YWtlUGF5bWVudD10cnVlJiR7cGFydFVybH1gO1xuICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgLy8gfVxuXG4gIHJlc2V0Rm9ybSh2YWxzLCBmaWVsZCkge1xuICAgIGlmKGZpZWxkPT09J2FjdGlvbicgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5yZWZ1bmRBY3Rpb25zSGFzRXJyb3IgPSB2YWxzWzBdO1xuICAgIH1cbiAgICBpZihmaWVsZD09PSdyZWplY3RSZWFzb24nIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMucmVmdW5kUmVqZWN0UmVhc29uSGFzRXJyb3IgPSB2YWxzWzFdO1xuICAgIH1cbiAgICBpZihmaWVsZD09PSdhZGRBcmVhc29uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzUmVhc29uRmllbGRFbXB0eSA9IHZhbHNbMl07XG4gICAgICB0aGlzLmlzUmVhc29uRmllbGRJbnZhbGlkID0gdmFsc1szXTtcbiAgICAgIHRoaXMucmVhc29uRmllbGRNaW5IYXNFcnJvciA9IHZhbHNbNF07XG4gICAgICB0aGlzLnJlYXNvbkZpZWxkTWF4SGFzRXJyb3IgPSB2YWxzWzVdO1xuICAgIH1cbiAgICBpZihmaWVsZD09PSdlbnRlclJlYXNvbicgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gdmFsc1s2XTtcbiAgICAgIHRoaXMuaXNSZWFzb25JbnZhbGlkID0gdmFsc1s3XTtcbiAgICB9XG4gIH1cblxuICBnb1RvQ2FzZVJldmlldygpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9jYXNlcy9jYXNlLWRldGFpbHMvJHt0aGlzLmNjZENhc2VOdW1iZXJ9YF0sIHtyZWxhdGl2ZVRvOiB0aGlzLmFjdGl2ZVJvdXRlfSk7XG4gIH1cbn1cbiJdfQ==
369
+ ProcessRefundComponent.propDecorators = {
370
+ refundReference: [{ type: Input }],
371
+ refundlistsource: [{ type: Input }]
372
+ };
373
+ if (false) {
374
+ /** @type {?} */
375
+ ProcessRefundComponent.prototype.refundReference;
376
+ /** @type {?} */
377
+ ProcessRefundComponent.prototype.refundlistsource;
378
+ /** @type {?} */
379
+ ProcessRefundComponent.prototype.processRefundForm;
380
+ /** @type {?} */
381
+ ProcessRefundComponent.prototype.errorMessage;
382
+ /** @type {?} */
383
+ ProcessRefundComponent.prototype.sendmeback;
384
+ /** @type {?} */
385
+ ProcessRefundComponent.prototype.viewStatus;
386
+ /** @type {?} */
387
+ ProcessRefundComponent.prototype.refundActionList;
388
+ /** @type {?} */
389
+ ProcessRefundComponent.prototype.refundRejectReasonList;
390
+ /** @type {?} */
391
+ ProcessRefundComponent.prototype.isSendMeBackClicked;
392
+ /** @type {?} */
393
+ ProcessRefundComponent.prototype.isRejectClicked;
394
+ /** @type {?} */
395
+ ProcessRefundComponent.prototype.isOtherClicked;
396
+ /** @type {?} */
397
+ ProcessRefundComponent.prototype.isSuccesspageEnable;
398
+ /** @type {?} */
399
+ ProcessRefundComponent.prototype.refundActionsHasError;
400
+ /** @type {?} */
401
+ ProcessRefundComponent.prototype.refundRejectReasonHasError;
402
+ /** @type {?} */
403
+ ProcessRefundComponent.prototype.isReasonFieldEmpty;
404
+ /** @type {?} */
405
+ ProcessRefundComponent.prototype.isReasonFieldInvalid;
406
+ /** @type {?} */
407
+ ProcessRefundComponent.prototype.reasonFieldMinHasError;
408
+ /** @type {?} */
409
+ ProcessRefundComponent.prototype.reasonFieldMaxHasError;
410
+ /** @type {?} */
411
+ ProcessRefundComponent.prototype.isReasonEmpty;
412
+ /** @type {?} */
413
+ ProcessRefundComponent.prototype.isReasonInvalid;
414
+ /** @type {?} */
415
+ ProcessRefundComponent.prototype.successMsg;
416
+ /** @type {?} */
417
+ ProcessRefundComponent.prototype.navigationpage;
418
+ /** @type {?} */
419
+ ProcessRefundComponent.prototype.ccdCaseNumber;
420
+ /** @type {?} */
421
+ ProcessRefundComponent.prototype.isFromRefundListPage;
422
+ /** @type {?} */
423
+ ProcessRefundComponent.prototype.isConfirmButtondisabled;
424
+ /**
425
+ * @type {?}
426
+ * @private
427
+ */
428
+ ProcessRefundComponent.prototype.RefundsService;
429
+ /**
430
+ * @type {?}
431
+ * @private
432
+ */
433
+ ProcessRefundComponent.prototype.formBuilder;
434
+ /**
435
+ * @type {?}
436
+ * @private
437
+ */
438
+ ProcessRefundComponent.prototype.OrderslistService;
439
+ /**
440
+ * @type {?}
441
+ * @private
442
+ */
443
+ ProcessRefundComponent.prototype.paymentLibComponent;
444
+ /**
445
+ * @type {?}
446
+ * @private
447
+ */
448
+ ProcessRefundComponent.prototype.router;
449
+ /**
450
+ * @type {?}
451
+ * @private
452
+ */
453
+ ProcessRefundComponent.prototype.activeRoute;
454
+ }
455
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1yZWZ1bmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wcm9jZXNzLXJlZnVuZC9wcm9jZXNzLXJlZnVuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQWEsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUl0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFDLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBT3hELE1BQU0sT0FBTyxzQkFBc0I7Ozs7Ozs7OztJQThCakMsWUFBb0IsY0FBOEIsRUFDOUIsV0FBd0IsRUFDeEIsaUJBQW9DLEVBQ3BDLG1CQUF3QyxFQUN4QyxNQUFjLEVBQ2QsV0FBMkI7UUFMM0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBN0IvQyxpQkFBWSxHQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEQsZUFBVSxHQUFXLElBQUksQ0FBQztRQUUxQixxQkFBZ0Is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aEM7SUFDSCxDQUFDOzs7O0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsdUJBQXVCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7OztZQXJTRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsb3hRQUE4Qzs7YUFFL0M7Ozs7WUFaTyxjQUFjO1lBRGIsV0FBVztZQUtYLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFDSixNQUFNO1lBQXJCLGNBQWM7Ozs4QkFRcEIsS0FBSzsrQkFDTCxLQUFLOzs7O0lBRE4saURBQWlDOztJQUNqQyxrREFBdUM7O0lBRXZDLG1EQUE2Qjs7SUFFN0IsOENBQXdEOztJQUN4RCw0Q0FBMEI7O0lBQzFCLDRDQUFtQjs7SUFDbkIsa0RBQXVDOztJQUN2Qyx3REFBbUQ7O0lBQ25ELHFEQUFxQzs7SUFDckMsaURBQWlDOztJQUNqQyxnREFBZ0M7O0lBQ2hDLHFEQUFxQzs7SUFFckMsdURBQXVDOztJQUN2Qyw0REFBNEM7O0lBQzVDLG9EQUFvQzs7SUFDcEMsc0RBQXNDOztJQUN0Qyx3REFBd0M7O0lBQ3hDLHdEQUF3Qzs7SUFDeEMsK0NBQStCOztJQUMvQixpREFBaUM7O0lBQ2pDLDRDQUEwQjs7SUFDMUIsZ0RBQXVCOztJQUN2QiwrQ0FBc0I7O0lBQ3RCLHNEQUE4Qjs7SUFFOUIseURBQXdDOzs7OztJQUM1QixnREFBc0M7Ozs7O0lBQ3RDLDZDQUFnQzs7Ozs7SUFDaEMsbURBQTRDOzs7OztJQUM1QyxxREFBZ0Q7Ozs7O0lBQ2hELHdDQUFzQjs7Ozs7SUFDdEIsNkNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1JlZnVuZHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWZ1bmRzL3JlZnVuZHMuc2VydmljZSc7XG5pbXBvcnQgeyBJUmVmdW5kQWN0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kQWN0aW9uJztcbmltcG9ydCB7IElSZWZ1bmRMaXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kTGlzdCc7XG5pbXBvcnQgeyBJUmVmdW5kUmVqZWN0UmVhc29uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kUmVqZWN0UmVhc29uJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcHJvY2Vzcy1yZWZ1bmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvY2Vzcy1yZWZ1bmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9jZXNzLXJlZnVuZC5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHJvY2Vzc1JlZnVuZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHJlZnVuZFJlZmVyZW5jZTogc3RyaW5nO1xuICBASW5wdXQoKSByZWZ1bmRsaXN0c291cmNlOiBJUmVmdW5kTGlzdDtcblxuICBwcm9jZXNzUmVmdW5kRm9ybTogRm9ybUdyb3VwO1xuXG4gIGVycm9yTWVzc2FnZSA9ICB0aGlzLmdldEVycm9yTWVzc2FnZShmYWxzZSwgJycsICcnLCAnJyk7XG4gIHNlbmRtZWJhY2s6IHN0cmluZyA9IG51bGw7XG4gIHZpZXdTdGF0dXM6IHN0cmluZztcbiAgcmVmdW5kQWN0aW9uTGlzdDogSVJlZnVuZEFjdGlvbltdID0gW107IFxuICByZWZ1bmRSZWplY3RSZWFzb25MaXN0OiBJUmVmdW5kUmVqZWN0UmVhc29uW10gPSBbXTsgXG4gIGlzU2VuZE1lQmFja0NsaWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZWplY3RDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzT3RoZXJDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3VjY2Vzc3BhZ2VFbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICByZWZ1bmRBY3Rpb25zSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVmdW5kUmVqZWN0UmVhc29uSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZWFzb25GaWVsZEVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVhc29uRmllbGRJbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gIHJlYXNvbkZpZWxkTWluSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVhc29uRmllbGRNYXhIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlYXNvbkVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVhc29uSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzdWNjZXNzTXNnOiBzdHJpbmcgPSBudWxsO1xuICBuYXZpZ2F0aW9ucGFnZTogc3RyaW5nO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIGlzRnJvbVJlZnVuZExpc3RQYWdlOiBib29sZWFuO1xuXG4gIGlzQ29uZmlybUJ1dHRvbmRpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBSZWZ1bmRzU2VydmljZTogUmVmdW5kc1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIE9yZGVyc2xpc3RTZXJ2aWNlOiBPcmRlcnNsaXN0U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIGFjdGl2ZVJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ1JlZnVuZFByb2Nlc3MnO1xuICAgIHRoaXMuUmVmdW5kc1NlcnZpY2UuZ2V0UmVmdW5kQWN0aW9ucyh0aGlzLnJlZnVuZFJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcmVmdW5kQWN0aW9uTGlzdCA9PiB7XG4gICAgICAgIHRoaXMucmVmdW5kQWN0aW9uTGlzdCA9IDxhbnk+cmVmdW5kQWN0aW9uTGlzdDtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRydWUsIGVyci5zdGF0dXNDb2RlLCBlcnIuZXJyLCBlcnIpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5wcm9jZXNzUmVmdW5kRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgcmVmdW5kQWN0aW9uRmllbGQ6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgXSkpLFxuICAgICAgcmVmdW5kUmVqZWN0UmVhc29uRmllbGQ6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgXSkpLFxuICAgICAgc2VuZE1lQmFja0ZpZWxkOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpLFxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oW2EtekEtWjAtOVxcXFxzLFxcXFwuXSopJCcpLFxuXG4gICAgICBdKSksXG4gICAgICBlbnRlclJlYXNvbkZpZWxkOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDMwKSxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFthLXpBLVowLTkuXFxcXHNdKikkJyksXG4gICAgICBdKSksXG4gICAgfSk7XG4gICB0aGlzLmNjZENhc2VOdW1iZXIgPSB0aGlzLnJlZnVuZGxpc3Rzb3VyY2UuY2NkX2Nhc2VfbnVtYmVyO1xuXG4gICBpZigodHlwZW9mIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gJ3N0cmluZycgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID09PSAnZmFsc2UnKSB8fCAodHlwZW9mIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gJ2Jvb2xlYW4nICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQpICkge1xuICAgIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgPSB0cnVlO1xuICAgfVxuICB9XG4gIGNoZWNrUmVmdW5kQWN0aW9ucyhjb2RlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlZnVuZEFjdGlvbnNIYXNFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWFzb25GaWVsZEVtcHR5ID0gZmFsc2U7XG4gICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gZmFsc2U7XG4gICAgdGhpcy5pc1JlYXNvbkludmFsaWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlZnVuZFJlamVjdFJlYXNvbkhhc0Vycm9yID0gZmFsc2U7XG4gICAgaWYoY29kZSA9PT0gJ1JldHVybiB0byBjYXNld29ya2VyJykge1xuICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLmlzU2VuZE1lQmFja0NsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5pc1JlamVjdENsaWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNPdGhlckNsaWNrZWQgPSBmYWxzZTtcblxuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gJ0FwcHJvdmUnKSB7XG4gICAgICB0aGlzLmlzU2VuZE1lQmFja0NsaWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNDb25maXJtQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNSZWplY3RDbGlja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzT3RoZXJDbGlja2VkID0gZmFsc2U7XG5cbiAgICB9IGVsc2UgaWYgKGNvZGUgPT09ICdSZWplY3QnKSB7XG4gICAgICB0aGlzLmlzUmVqZWN0Q2xpY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLmlzU2VuZE1lQmFja0NsaWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNPdGhlckNsaWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuUmVmdW5kc1NlcnZpY2UuZ2V0UmVmdW5kUmVqZWN0UmVhc29ucygpLnN1YnNjcmliZShcbiAgICAgICAgcmVmdW5kUmVqZWN0UmVhc29uTGlzdCA9PiB7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRSZWplY3RSZWFzb25MaXN0ID0gPGFueT5yZWZ1bmRSZWplY3RSZWFzb25MaXN0O1xuICAgICAgICB9LFxuICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodHJ1ZSwgZXJyLnN0YXR1c0NvZGUsIGVyci5lcnIsIGVycik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChjb2RlID09PSAnUkUwMDUnKSB7XG4gICAgICB0aGlzLmlzT3RoZXJDbGlja2VkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGNvZGUgIT09ICdSRTAwNScpIHtcbiAgICAgIHRoaXMuaXNPdGhlckNsaWNrZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcHJvY2Vzc1JlZnVuZFN1Ym1pdCgpIHtcbiAgICBsZXQgcHJvY2Vzc1JlZnVuZFJlcXVlc3Q7XG4gICAgbGV0IHN0YXR1cztcbiAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2FsbCcpO1xuICAgIGNvbnN0IGNvbnRyb2xzID0gdGhpcy5wcm9jZXNzUmVmdW5kRm9ybS5jb250cm9scztcbiAgICBjb25zdCBwcm9jZXNzRm9ybUVycm9yID0gY29udHJvbHMuc2VuZE1lQmFja0ZpZWxkLmVycm9ycztcblxuICAgIGlmICh0aGlzLnByb2Nlc3NSZWZ1bmRGb3JtLmRpcnR5ICYmIGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbGlkIFxuICAgICAgJiYgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09ICdBcHByb3ZlJ1xuICAgICAgfHwgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09ICdSZWplY3QnICYmIGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbGlkICYmIGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbHVlICE9ICdSRTAwNScpXG4gICAgICB8fCAoY29udHJvbHMucmVmdW5kQWN0aW9uRmllbGQudmFsdWUgPT0gJ1JlamVjdCcgJiYgY29udHJvbHMucmVmdW5kUmVqZWN0UmVhc29uRmllbGQudmFsdWUgPT0gJ1JFMDA1JyAmJiBjb250cm9scy5lbnRlclJlYXNvbkZpZWxkLnZhbGlkKVxuICAgICAgfHwgKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09ICdSZXR1cm4gdG8gY2FzZXdvcmtlcicgJiYgY29udHJvbHMuc2VuZE1lQmFja0ZpZWxkLnZhbGlkKSkpIHtcbiAgICAgIGlmIChjb250cm9scy5yZWZ1bmRBY3Rpb25GaWVsZC52YWx1ZSA9PT0gJ0FwcHJvdmUnKXtcbiAgICAgICAgc3RhdHVzID0gJ0FQUFJPVkUnO1xuICAgICAgICBwcm9jZXNzUmVmdW5kUmVxdWVzdCA9IHtcbiAgICAgICAgICBjb2RlOicnLFxuICAgICAgICAgIHJlYXNvbjogJydcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbHMucmVmdW5kQWN0aW9uRmllbGQudmFsdWUgPT09ICdSZWplY3QnKSB7XG4gICAgICAgIHN0YXR1cyA9ICdSRUpFQ1QnO1xuXG4gICAgICAgIHByb2Nlc3NSZWZ1bmRSZXF1ZXN0ID0ge1xuICAgICAgICAgIGNvZGU6IGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbHVlID8gY29udHJvbHMucmVmdW5kUmVqZWN0UmVhc29uRmllbGQudmFsdWUgOiAnJyxcbiAgICAgICAgICByZWFzb246IGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbHVlID09ICdSRTAwNScgPyBjb250cm9scy5lbnRlclJlYXNvbkZpZWxkLnZhbHVlIDogJydcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbHMucmVmdW5kQWN0aW9uRmllbGQudmFsdWUgPT09ICdSZXR1cm4gdG8gY2FzZXdvcmtlcicpIHtcbiAgICAgICAgc3RhdHVzID0gJ1NFTkRCQUNLJztcblxuICAgICAgICBwcm9jZXNzUmVmdW5kUmVxdWVzdCA9IHtcbiAgICAgICAgICBjb2RlOiAnJyxcbiAgICAgICAgICByZWFzb246IGNvbnRyb2xzLnNlbmRNZUJhY2tGaWVsZC52YWx1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5SZWZ1bmRzU2VydmljZS5wYXRjaFJlZnVuZEFjdGlvbnMocHJvY2Vzc1JlZnVuZFJlcXVlc3QsIHRoaXMucmVmdW5kUmVmZXJlbmNlLCBzdGF0dXMpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIHRoaXMuaXNTdWNjZXNzcGFnZUVuYWJsZSA9IHRydWU7XG4gICAgICAgICAgLy8gdGhpcy5zdWNjZXNzTXNnID0gSlNPTi5wYXJzZShyZXNwb25zZSlbJ2RhdGEnXTtcbiAgICAgICAgICB0aGlzLnN1Y2Nlc3NNc2cgPSByZXNwb25zZS5yZXBsYWNlKC9bJ1wiXSsvZywgJycpO1xuICAgICAgICB9LFxuICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodHJ1ZSwgZXJyLnN0YXR1c0NvZGUsIGVyci5lcnIsIGVycik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09IFwiXCIpIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2FjdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYoY29udHJvbHMucmVmdW5kQWN0aW9uRmllbGQudmFsdWUgPT0gJ1JlamVjdCcgJiYgY29udHJvbHMucmVmdW5kUmVqZWN0UmVhc29uRmllbGQudmFsdWUgPT0gXCJcIikge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVqZWN0UmVhc29uJyk7XG4gICAgICB9XG4gICAgICBpZihjb250cm9scy5yZWZ1bmRBY3Rpb25GaWVsZC52YWx1ZSA9PSAnUmV0dXJuIHRvIGNhc2V3b3JrZXInKSB7XG4gICAgICAgIGlmKGNvbnRyb2xzLnNlbmRNZUJhY2tGaWVsZC52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnYWRkQXJlYXNvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKGNvbnRyb2xzLnNlbmRNZUJhY2tGaWVsZC52YWx1ZSAhPSAnJyAmJiBjb250cm9scy5zZW5kTWVCYWNrRmllbGQuaW52YWxpZCApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnYWRkQXJlYXNvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHByb2Nlc3NGb3JtRXJyb3IgJiYgcHJvY2Vzc0Zvcm1FcnJvci5taW5sZW5ndGggJiYgcHJvY2Vzc0Zvcm1FcnJvci5taW5sZW5ndGguYWN0dWFsTGVuZ3RoIDwgMyApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnYWRkQXJlYXNvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHByb2Nlc3NGb3JtRXJyb3IgJiYgcHJvY2Vzc0Zvcm1FcnJvci5tYXhsZW5ndGggJiYgcHJvY2Vzc0Zvcm1FcnJvci5tYXhsZW5ndGguYWN0dWFsTGVuZ3RoID4gMjU1ICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhZGRBcmVhc29uJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKGNvbnRyb2xzLnJlZnVuZEFjdGlvbkZpZWxkLnZhbHVlID09ICdSZWplY3QnICYmIGNvbnRyb2xzLnJlZnVuZFJlamVjdFJlYXNvbkZpZWxkLnZhbHVlID09ICdSRTAwNScpIHtcbiAgICAgICAgaWYoY29udHJvbHMuZW50ZXJSZWFzb25GaWVsZC52YWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZV0sICdlbnRlclJlYXNvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKGNvbnRyb2xzLmVudGVyUmVhc29uRmllbGQudmFsdWUhPT0gXCJcIiAmJiBjb250cm9scy5lbnRlclJlYXNvbkZpZWxkLmludmFsaWQpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdLCAnZW50ZXJSZWFzb24nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICB9XG4gIGdldEVycm9yTWVzc2FnZShpc0Vycm9yRXhpc3QsIHN0YXR1cywgZXJyb3JNc2csIGVycikge1xuICAgIGxldCBib2R5VHh0ID0gJ1BsZWFzZSB0cnkgYWdhaW4gbGF0ZXInO1xuICAgIGlmIChzdGF0dXMgIT09IDUwMCkge1xuICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYm9keVR4dCA9IGVycm9yTXNnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYm9keVR4dCA9IGVycjtcbiAgICAgIH1cbiAgICAgIFxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGU6ICdTb21ldGhpbmcgd2VudCB3cm9uZycsXG4gICAgICBib2R5OiBib2R5VHh0LFxuICAgICAgc2hvd0Vycm9yOiBpc0Vycm9yRXhpc3RcbiAgICB9O1xuICB9XG4gIGxvYWRSZWZ1bmRMaXN0UGFnZSgpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG5hdmlnYXRpb25QYWdlVmFsdWUoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMubmF2aWdhdGlvbnBhZ2UgPSBkYXRhKTtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9ucGFnZSA9PT0gJ2Nhc2V0cmFuc2FjdGlvbnMnKSB7XG4gICAgICAvLyB3aW5kb3cubG9jYXRpb24uaHJlZj0nL3JlZnVuZC1saXN0P3Rha2VQYXltZW50PWZhbHNlJnJlZnVuZGxpc3Q9dHJ1ZSc7XG4gICAgICAvLyAvLyB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgICAvLyAvLyB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gICAgICAvLyAvLyB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVklFVyA9J2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICAgIC8vIC8vIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgICAvLyAvLyB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgICAvLyAvLyB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gZmFsc2U7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVmdW5kc3RhdHVzbGlzdCc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlZnVuZHN0YXR1c2xpc3QnO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IHRydWU7XG4gICAgfVxuICB9XG4gIGxvYWRSZWZ1bmRzSG9tZVBhZ2UoKSB7XG4gICAgaWYodHlwZW9mIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gJ3N0cmluZycgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID09PSAnZmFsc2UnKSB7XG4gICAgICAvL3dpbmRvdy5sb2NhdGlvbi5ocmVmPScvcmVmdW5kLWxpc3Q/dGFrZVBheW1lbnQ9ZmFsc2UmcmVmdW5kbGlzdD10cnVlJztcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdyZWZ1bmQtbGlzdCc7XG4gICAgIH1cbiAgICAgZWxzZSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVklFVyA9J2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gZmFsc2U7XG4gICAgIH1cbiAgfVxuIHJlZGlyZWN0dG9SZWZ1bmRMaXN0UGFnZSgpIHtcbiAgIGlmKCh0eXBlb2YgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID09PSAnc3RyaW5nJyAmJiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPT09ICdmYWxzZScpIHx8ICh0eXBlb2YgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID09PSAnYm9vbGVhbicgJiYgIXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCkgKSB7XG4gICAvLyB3aW5kb3cubG9jYXRpb24uaHJlZj0nL3JlZnVuZC1saXN0P3Rha2VQYXltZW50PWZhbHNlJnJlZnVuZGxpc3Q9dHJ1ZSc7XG4gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVmdW5kLWxpc3QnO1xuICAgfVxuICAgZWxzZSB7XG4gICAgdGhpcy5sb2FkUmVmdW5kTGlzdFBhZ2UoKTtcbiAgIH1cbiAgfVxuICAvLyBsb2FkQ2FzZVRyYW5zYWN0aW9uUGFnZSgpIHtcbiAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gZmFsc2U7XG4gIC8vICAgdGhpcy5wYXltZW50TGliQ299bXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgLy8gICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRCU2ZlYXR1cmUoKS5zdWJzY3JpYmUoXG4gIC8vICAgICBmZWF0dXJlcyA9PiB7XG4gIC8vICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKGZlYXR1cmVzKS5maWx0ZXIoZmVhdHVyZSA9PiBmZWF0dXJlLnVpZCA9PT0gQlNfRU5BQkxFX0ZMQUcpO1xuICAvLyAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHJlc3VsdFswXSA/IHJlc3VsdFswXS5lbmFibGUgOiBmYWxzZTtcbiAgLy8gICAgIH0sXG4gIC8vICAgICBlcnIgPT4ge1xuICAvLyAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IGZhbHNlO1xuICAvLyAgICAgfVxuICAvLyAgICk7XG5cbiAgLy8gICBsZXQgcGFydFVybCA9IGBzZWxlY3RlZE9wdGlvbj0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT059YDtcbiAgLy8gICBwYXJ0VXJsICs9IHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID8gYCZkY249JHt0aGlzLmJzUGF5bWVudERjbk51bWJlcn1gIDogJyc7XG4gIC8vICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gIC8vICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnO1xuICAvLyAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTU0ZFTkFCTEUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgLy8gICBwYXJ0VXJsICs9IGAmY2FzZVR5cGU9JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0FTRVRZUEV9YDtcbiAgLy8gICBwYXJ0VXJsICs9IHRoaXMuaXNOZXdQY2lwYWxPZmYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAvLyAgIHBhcnRVcmwgKz0gdGhpcy5pc09sZFBjaXBhbE9mZiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSc7XG4gIC8vICAgbGV0IHVybCA9IGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWNhc2UtdHJhbnNhY3Rpb25zJnRha2VQYXltZW50PXRydWUmJHtwYXJ0VXJsfWA7XG4gIC8vICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAvLyB9XG5cbiAgcmVzZXRGb3JtKHZhbHMsIGZpZWxkKSB7XG4gICAgaWYoZmllbGQ9PT0nYWN0aW9uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLnJlZnVuZEFjdGlvbnNIYXNFcnJvciA9IHZhbHNbMF07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J3JlamVjdFJlYXNvbicgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5yZWZ1bmRSZWplY3RSZWFzb25IYXNFcnJvciA9IHZhbHNbMV07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J2FkZEFyZWFzb24nIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuaXNSZWFzb25GaWVsZEVtcHR5ID0gdmFsc1syXTtcbiAgICAgIHRoaXMuaXNSZWFzb25GaWVsZEludmFsaWQgPSB2YWxzWzNdO1xuICAgICAgdGhpcy5yZWFzb25GaWVsZE1pbkhhc0Vycm9yID0gdmFsc1s0XTtcbiAgICAgIHRoaXMucmVhc29uRmllbGRNYXhIYXNFcnJvciA9IHZhbHNbNV07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J2VudGVyUmVhc29uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxzWzZdO1xuICAgICAgdGhpcy5pc1JlYXNvbkludmFsaWQgPSB2YWxzWzddO1xuICAgIH1cbiAgfVxuXG4gIGdvVG9DYXNlUmV2aWV3KCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgL2Nhc2VzL2Nhc2UtZGV0YWlscy8ke3RoaXMuY2NkQ2FzZU51bWJlcn1gXSwge3JlbGF0aXZlVG86IHRoaXMuYWN0aXZlUm91dGV9KTtcbiAgfVxufVxuIl19