@hmcts/ccpay-web-component 4.0.1-beta3 → 4.0.1-beta34

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 (90) hide show
  1. package/bundles/hmcts-ccpay-web-component.umd.js +3712 -2353
  2. package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
  3. package/bundles/hmcts-ccpay-web-component.umd.min.js +1 -1
  4. package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
  5. package/esm2015/hmcts-ccpay-web-component.js +12 -12
  6. package/esm2015/lib/components/add-remission/add-remission.component.js +318 -136
  7. package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +25 -12
  8. package/esm2015/lib/components/case-transactions/case-transactions.component.js +169 -162
  9. package/esm2015/lib/components/fee-summary/fee-summary.component.js +4 -4
  10. package/esm2015/lib/components/payment-view/payment-view.component.js +220 -56
  11. package/esm2015/lib/components/pba-payment/pba-payment.component.js +84 -3
  12. package/esm2015/lib/components/process-refund/process-refund.component.js +151 -15
  13. package/esm2015/lib/components/refund-list/refund-list.component.js +10 -23
  14. package/esm2015/lib/components/refund-status/refund-status.component.js +85 -75
  15. package/esm2015/lib/components/reports/reports.component.js +8 -3
  16. package/esm2015/lib/components/service-request/service-request.component.js +628 -0
  17. package/esm2015/lib/components/status-history/status-history.component.js +3 -3
  18. package/esm2015/lib/components/table/table.component.js +47 -9
  19. package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +4 -4
  20. package/esm2015/lib/interfaces/IFee.js +3 -1
  21. package/esm2015/lib/interfaces/IPayment.js +3 -1
  22. package/esm2015/lib/interfaces/IRefundReasons.js +3 -1
  23. package/esm2015/lib/interfaces/IRefundStatusHistory.js +15 -0
  24. package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +23 -0
  25. package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +28 -0
  26. package/esm2015/lib/payment-lib.component.js +64 -8
  27. package/esm2015/lib/payment-lib.module.js +6 -8
  28. package/esm2015/lib/services/orderslist.service.js +193 -1
  29. package/esm2015/lib/services/payment-view/payment-view.service.js +23 -3
  30. package/esm2015/lib/services/refunds/refunds.service.js +17 -10
  31. package/esm2015/lib/services/shared/error-handler.service.js +41 -5
  32. package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +11 -2
  33. package/esm2015/lib/services/xl-file/xl-file.service.js +2 -2
  34. package/esm5/hmcts-ccpay-web-component.js +12 -12
  35. package/esm5/lib/components/add-remission/add-remission.component.js +325 -138
  36. package/esm5/lib/components/allocate-payments/allocate-payments.component.js +25 -12
  37. package/esm5/lib/components/case-transactions/case-transactions.component.js +170 -166
  38. package/esm5/lib/components/fee-summary/fee-summary.component.js +4 -4
  39. package/esm5/lib/components/payment-view/payment-view.component.js +241 -56
  40. package/esm5/lib/components/pba-payment/pba-payment.component.js +89 -3
  41. package/esm5/lib/components/process-refund/process-refund.component.js +211 -16
  42. package/esm5/lib/components/refund-list/refund-list.component.js +10 -23
  43. package/esm5/lib/components/refund-status/refund-status.component.js +90 -77
  44. package/esm5/lib/components/reports/reports.component.js +8 -3
  45. package/esm5/lib/components/service-request/service-request.component.js +704 -0
  46. package/esm5/lib/components/status-history/status-history.component.js +3 -3
  47. package/esm5/lib/components/table/table.component.js +51 -10
  48. package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +4 -4
  49. package/esm5/lib/interfaces/IFee.js +3 -1
  50. package/esm5/lib/interfaces/IPayment.js +3 -1
  51. package/esm5/lib/interfaces/IRefundReasons.js +3 -1
  52. package/esm5/lib/interfaces/IRefundStatusHistory.js +15 -0
  53. package/esm5/lib/interfaces/IserviceRequestCardPayment.js +22 -0
  54. package/esm5/lib/interfaces/IserviceRequestPbaPayment.js +25 -0
  55. package/esm5/lib/payment-lib.component.js +65 -6
  56. package/esm5/lib/payment-lib.module.js +6 -8
  57. package/esm5/lib/services/orderslist.service.js +256 -1
  58. package/esm5/lib/services/payment-view/payment-view.service.js +33 -3
  59. package/esm5/lib/services/refunds/refunds.service.js +17 -10
  60. package/esm5/lib/services/shared/error-handler.service.js +41 -5
  61. package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +11 -2
  62. package/esm5/lib/services/xl-file/xl-file.service.js +2 -2
  63. package/fesm2015/hmcts-ccpay-web-component.js +1872 -703
  64. package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
  65. package/fesm5/hmcts-ccpay-web-component.js +4380 -2979
  66. package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
  67. package/hmcts-ccpay-web-component.d.ts +11 -11
  68. package/hmcts-ccpay-web-component.metadata.json +1 -1
  69. package/lib/components/add-remission/add-remission.component.d.ts +42 -4
  70. package/lib/components/allocate-payments/allocate-payments.component.d.ts +3 -0
  71. package/lib/components/case-transactions/case-transactions.component.d.ts +4 -3
  72. package/lib/components/payment-view/payment-view.component.d.ts +20 -3
  73. package/lib/components/pba-payment/pba-payment.component.d.ts +8 -0
  74. package/lib/components/process-refund/process-refund.component.d.ts +15 -2
  75. package/lib/components/refund-status/refund-status.component.d.ts +6 -2
  76. package/lib/components/service-request/service-request.component.d.ts +105 -0
  77. package/lib/components/table/table.component.d.ts +6 -2
  78. package/lib/interfaces/IFee.d.ts +1 -0
  79. package/lib/interfaces/IPayment.d.ts +1 -0
  80. package/lib/interfaces/IRefundReasons.d.ts +1 -0
  81. package/lib/interfaces/IRefundStatusHistory.d.ts +5 -0
  82. package/lib/interfaces/IserviceRequestCardPayment.d.ts +6 -0
  83. package/lib/interfaces/IserviceRequestPbaPayment.d.ts +7 -0
  84. package/lib/payment-lib.component.d.ts +19 -2
  85. package/lib/services/orderslist.service.d.ts +34 -0
  86. package/lib/services/payment-view/payment-view.service.d.ts +4 -0
  87. package/package.json +5 -1
  88. package/esm2015/lib/components/refunds/refunds.component.js +0 -23
  89. package/esm5/lib/components/refunds/refunds.component.js +0 -29
  90. package/lib/components/refunds/refunds.component.d.ts +0 -5
@@ -14,6 +14,7 @@ import { PaymentLibComponent } from '../../payment-lib.component';
14
14
  var BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
15
15
  var RefundStatusComponent = /** @class */ (function () {
16
16
  function RefundStatusComponent(formBuilder, refundService, paymentLibComponent, paymentViewService, router, OrderslistService) {
17
+ var _this = this;
17
18
  this.formBuilder = formBuilder;
18
19
  this.refundService = refundService;
19
20
  this.paymentLibComponent = paymentLibComponent;
@@ -22,8 +23,10 @@ var RefundStatusComponent = /** @class */ (function () {
22
23
  this.OrderslistService = OrderslistService;
23
24
  this.LOGGEDINUSERROLES = [];
24
25
  this.rejectedRefundList = [];
25
- this.approvalStatus = 'sent for approval';
26
- this.rejectStatus = 'sent back';
26
+ this.approvalStatus = 'Sent for approval';
27
+ this.rejectStatus = 'Update required';
28
+ // approvalStatus = 'sent for approval';
29
+ // rejectStatus = 'sent back';
27
30
  this.errorMessage = null;
28
31
  this.refundButtonState = '';
29
32
  this.isAmountEmpty = false;
@@ -33,7 +36,21 @@ var RefundStatusComponent = /** @class */ (function () {
33
36
  this.refundHasError = false;
34
37
  this.refundReasons = [];
35
38
  this.isRefundBtnDisabled = true;
39
+ this.isLastUpdatedByCurrentUser = true;
40
+ this.isProcessRefund = false;
36
41
  this.allowedRolesToAccessRefund = ['payments-refund-approver', 'payments-refund'];
42
+ this.check4AllowedRoles2AccessRefund = (/**
43
+ * @return {?}
44
+ */
45
+ function () {
46
+ return _this.allowedRolesToAccessRefund.some((/**
47
+ * @param {?} role
48
+ * @return {?}
49
+ */
50
+ function (role) {
51
+ return _this.LOGGEDINUSERROLES.indexOf(role) !== -1;
52
+ }));
53
+ });
37
54
  }
38
55
  /**
39
56
  * @return {?}
@@ -43,6 +60,7 @@ var RefundStatusComponent = /** @class */ (function () {
43
60
  */
44
61
  function () {
45
62
  var _this = this;
63
+ // if (this.check4AllowedRoles2AccessRefund()) {
46
64
  this.resetRemissionForm([false, false, false, false], 'All');
47
65
  this.bsPaymentDcnNumber = this.paymentLibComponent.bspaymentdcn;
48
66
  this.isCallFromRefundList = this.paymentLibComponent.isCallFromRefundList;
@@ -69,34 +87,45 @@ var RefundStatusComponent = /** @class */ (function () {
69
87
  * @return {?}
70
88
  */
71
89
  function (refundList) {
72
- _this.rejectedRefundList = refundList['data']['refund_list'];
90
+ _this.rejectedRefundList = refundList['refund_list'];
73
91
  })),
74
92
  (/**
75
93
  * @param {?} error
76
94
  * @return {?}
77
95
  */
78
96
  function (error) {
79
- _this.errorMessage = error;
97
+ _this.errorMessage = error.replace(/"/g, "");
80
98
  });
81
99
  }
82
100
  this.refundStatusForm = this.formBuilder.group({
83
101
  amount: new FormControl('', Validators.compose([
84
102
  Validators.required,
85
- Validators.pattern('^[0-9]+(\\.[0-9]{2})?$')
103
+ Validators.pattern('^[0-9]+(\.[0-9]{1,2})?$')
86
104
  ])),
87
105
  refundReason: new FormControl('', Validators.compose([Validators.required])),
88
106
  reason: new FormControl()
89
107
  });
90
- this.getRefundsStatusHistoryList();
91
- this.allowedRolesToAccessRefund.forEach((/**
92
- * @param {?} role
93
- * @return {?}
94
- */
95
- function (role) {
96
- if (_this.LOGGEDINUSERROLES.indexOf(role) !== -1) {
97
- _this.refundButtonState = _this.refundlist.refund_status.name;
108
+ if (this.refundlist !== undefined) {
109
+ this.getRefundsStatusHistoryList();
110
+ if (this.LOGGEDINUSERROLES.some((/**
111
+ * @param {?} i
112
+ * @return {?}
113
+ */
114
+ function (i) { return i.includes('payments-refund-approver'); }))) {
115
+ this.isProcessRefund = true;
116
+ this.refundButtonState = this.refundlist.refund_status.name;
117
+ return;
98
118
  }
99
- }));
119
+ if (this.LOGGEDINUSERROLES.some((/**
120
+ * @param {?} i
121
+ * @return {?}
122
+ */
123
+ function (i) { return i.includes('payments-refund'); }))) {
124
+ this.isProcessRefund = false;
125
+ this.refundButtonState = this.refundlist.refund_status.name;
126
+ }
127
+ }
128
+ //}
100
129
  };
101
130
  /**
102
131
  * @return {?}
@@ -106,20 +135,23 @@ var RefundStatusComponent = /** @class */ (function () {
106
135
  */
107
136
  function () {
108
137
  var _this = this;
109
- this.refundService.getRefundStatusHistory(this.refundlist.refund_reference).subscribe((/**
110
- * @param {?} statusHistoryList
111
- * @return {?}
112
- */
113
- function (statusHistoryList) {
114
- _this.refundStatusHistories = statusHistoryList['data'];
115
- })),
116
- (/**
117
- * @param {?} error
138
+ if (this.refundlist !== undefined) {
139
+ this.refundService.getRefundStatusHistory(this.refundlist.refund_reference).subscribe((/**
140
+ * @param {?} statusHistoryList
118
141
  * @return {?}
119
142
  */
120
- function (error) {
121
- _this.errorMessage = error;
122
- });
143
+ function (statusHistoryList) {
144
+ _this.refundStatusHistories = statusHistoryList.status_history_dto_list;
145
+ _this.isLastUpdatedByCurrentUser = statusHistoryList.last_updated_by_current_user;
146
+ })),
147
+ (/**
148
+ * @param {?} error
149
+ * @return {?}
150
+ */
151
+ function (error) {
152
+ _this.errorMessage = error.replace(/"/g, "");
153
+ });
154
+ }
123
155
  };
124
156
  /**
125
157
  * @param {?} refundlist
@@ -146,41 +178,11 @@ var RefundStatusComponent = /** @class */ (function () {
146
178
  * @return {?}
147
179
  */
148
180
  function () {
149
- var _this = this;
150
- this.paymentLibComponent.isRefundStatusView = false;
151
- this.paymentLibComponent.TAKEPAYMENT = true;
181
+ this.OrderslistService.setnavigationPage('casetransactions');
182
+ this.OrderslistService.setisFromServiceRequestPage(false);
152
183
  this.paymentLibComponent.viewName = 'case-transactions';
153
- this.paymentViewService.getBSfeature().subscribe((/**
154
- * @param {?} features
155
- * @return {?}
156
- */
157
- function (features) {
158
- /** @type {?} */
159
- var result = JSON.parse(features).filter((/**
160
- * @param {?} feature
161
- * @return {?}
162
- */
163
- function (feature) { return feature.uid === BS_ENABLE_FLAG; }));
164
- _this.paymentLibComponent.ISBSENABLE = result[0] ? result[0].enable : false;
165
- }), (/**
166
- * @param {?} err
167
- * @return {?}
168
- */
169
- function (err) {
170
- _this.paymentLibComponent.ISBSENABLE = false;
171
- }));
172
- /** @type {?} */
173
- var partUrl = "selectedOption=" + this.paymentLibComponent.SELECTED_OPTION;
174
- partUrl += this.bsPaymentDcnNumber ? "&dcn=" + this.bsPaymentDcnNumber : '';
175
- partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
176
- partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
177
- partUrl += this.paymentLibComponent.ISSFENABLE ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
178
- partUrl += "&caseType=" + this.paymentLibComponent.CASETYPE;
179
- partUrl += this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
180
- partUrl += this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
181
- /** @type {?} */
182
- var url = "/payment-history/" + this.ccdCaseNumber + "?view=case-transactions&takePayment=true&" + partUrl;
183
- this.router.navigateByUrl(url);
184
+ this.paymentLibComponent.ISBSENABLE = true;
185
+ this.paymentLibComponent.isRefundStatusView = false;
184
186
  };
185
187
  /**
186
188
  * @return {?}
@@ -203,20 +205,18 @@ var RefundStatusComponent = /** @class */ (function () {
203
205
  }
204
206
  };
205
207
  /**
208
+ * @param {?} event
206
209
  * @return {?}
207
210
  */
208
211
  RefundStatusComponent.prototype.gotoReviewDetailsPage = /**
212
+ * @param {?} event
209
213
  * @return {?}
210
214
  */
211
- function () {
212
- event.preventDefault();
215
+ function (event) {
216
+ // event.preventDefault();
213
217
  this.errorMessage = false;
214
218
  this.paymentLibComponent.isRefundStatusView = true;
215
219
  this.ngOnInit();
216
- // this.viewName='refundview';
217
- // this.paymentLibComponent.CCD_CASE_NUMBER = this.ccdCaseNumber;
218
- // this.paymentLibComponent.isRefundStatusView = true;
219
- // this.paymentLibComponent.isCallFromRefundList = true;
220
220
  };
221
221
  /**
222
222
  * @return {?}
@@ -228,17 +228,18 @@ var RefundStatusComponent = /** @class */ (function () {
228
228
  var _this = this;
229
229
  this.viewName = 'reviewandsubmitview';
230
230
  this.oldRefundReason = this.refundlist.reason;
231
+ this.changedAmount = this.refundlist.amount;
231
232
  this.refundreason = this.refundStatusHistories.filter((/**
232
233
  * @param {?} data
233
234
  * @return {?}
234
235
  */
235
- function (data) { return data.status === 'sentback'; }))[0].notes;
236
+ function (data) { return data.status.toLowerCase() === 'update required'; }))[0].notes;
236
237
  this.refundService.getRefundReasons().subscribe((/**
237
238
  * @param {?} refundReasons
238
239
  * @return {?}
239
240
  */
240
241
  function (refundReasons) {
241
- _this.refundReasons = refundReasons['data'];
242
+ _this.refundReasons = refundReasons;
242
243
  }));
243
244
  };
244
245
  /**
@@ -249,6 +250,7 @@ var RefundStatusComponent = /** @class */ (function () {
249
250
  */
250
251
  function () {
251
252
  this.isRefundBtnDisabled = false;
253
+ this.paymentLibComponent.REFUNDLIST = "true";
252
254
  this.paymentLibComponent.isFromRefundStatusPage = true;
253
255
  this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
254
256
  this.errorMessage = false;
@@ -261,6 +263,8 @@ var RefundStatusComponent = /** @class */ (function () {
261
263
  * @return {?}
262
264
  */
263
265
  function () {
266
+ this.errorMessage = false;
267
+ this.paymentLibComponent.REFUNDLIST = "true";
264
268
  this.isRefundBtnDisabled = false;
265
269
  this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
266
270
  this.paymentLibComponent.isFromRefundStatusPage = true;
@@ -365,7 +369,8 @@ var RefundStatusComponent = /** @class */ (function () {
365
369
  function (amount) {
366
370
  if (this.paymentLibComponent.isFromRefundStatusPage && !this.paymentLibComponent.iscancelClicked) {
367
371
  if (amount > 0) {
368
- this.refundlist.amount = amount;
372
+ this.changedAmount = amount;
373
+ // this.refundlist.amount = amount;
369
374
  }
370
375
  }
371
376
  else {
@@ -386,15 +391,15 @@ var RefundStatusComponent = /** @class */ (function () {
386
391
  this.refundCode = '';
387
392
  }
388
393
  /** @type {?} */
389
- var resubmitRequest = new IResubmitRefundRequest(this.refundCode, this.refundlist.amount);
394
+ var resubmitRequest = new IResubmitRefundRequest(this.refundCode, this.changedAmount);
390
395
  this.refundService.patchResubmitRefund(resubmitRequest, this.refundlist.refund_reference).subscribe((/**
391
396
  * @param {?} response
392
397
  * @return {?}
393
398
  */
394
399
  function (response) {
395
400
  if (JSON.parse(response)) {
396
- _this.refundReference = JSON.parse(response).data.refund_reference;
397
- _this.refundAmount = JSON.parse(response).data.refund_amount;
401
+ _this.refundReference = JSON.parse(response).refund_reference;
402
+ _this.refundAmount = JSON.parse(response).refund_amount;
398
403
  _this.viewName = 'reviewrefundconfirmationpage';
399
404
  }
400
405
  }), (/**
@@ -402,7 +407,7 @@ var RefundStatusComponent = /** @class */ (function () {
402
407
  * @return {?}
403
408
  */
404
409
  function (error) {
405
- _this.errorMessage = error;
410
+ _this.errorMessage = error.replace(/"/g, "");
406
411
  }));
407
412
  };
408
413
  /**
@@ -423,8 +428,8 @@ var RefundStatusComponent = /** @class */ (function () {
423
428
  RefundStatusComponent.decorators = [
424
429
  { type: Component, args: [{
425
430
  selector: 'ccpay-refund-status',
426
- template: "<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<ng-container *ngIf=\"viewName==='refundstatuslist'\">\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\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date</td>\n <td class=\"govuk-table__header\" scope=\"col\">Refund reference</td>\n <td class=\"govuk-table__header\" 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'] | capitalize }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">\u00A3{{ refundList.amount | number:'.2' }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ refundList.date_created | 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'\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a (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 <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<!-- Status history -->\n <div>\n <br />\n <h2 class=\"govuk-heading-m\">Refund status history</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\">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 | capitalize}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.date_created | date:'d MMMM yyyy hh:mm:ss'}}</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\n </div>\n\n <ng-container *ngIf=\"viewName==='refundview'\">\n <div *ngIf=\"refundButtonState==='sent back'\">\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary btnmargin\" (click)=\"gotoReviewAndReSubmitPage()\">Resubmit\n refund</button>\n </div>\n <div *ngIf=\"refundButtonState==='sent for approval'\">\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"goToRefundProcessComponent(refundlist.refund_reference,refundlist)\">Process refund</button>\n </div>\n </ng-container>\n\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='reviewandsubmitview'\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a (click)=\"gotoReviewDetailsPage()\" 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\">Review and resubmit refund</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for rejection</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}}\n <a (click)=\"gotoRefundReasonPage()\" *ngIf=\"refundlist?.reason !== 'Retrospective remission'\" 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\">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\">Payment amount</td>\n <td class=\"govuk-table__cell\"> \u00A3{{ refundlist?.amount | number:'.2' }}\n <a (click)=\"gotoAmountPage()\" *ngIf=\"refundlist?.reason === 'Retrospective remission'\" class=\"govuk-link right\">Change</a>\n </td>\n \n </tr>\n </table>\n <div class=\"govuk-button-group\">\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\" data-module=\"govuk-button\">\n Submit refund\n </button>\n </div>\n <p>\n <a (click)=\"gotoReviewDetailsPage()\" href=\"\" class=\"cancelbtn\">Cancel</a>\n </p>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefund'\">\n <ccpay-add-remission \n [isFromRefundListPage] = \"true\"\n [viewCompStatus] = \"viewName\"\n [isRefundRemission] = \"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\"\n (refundListReason) = \"getRefundListReason($event)\"\n ></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'processretroremissonpage'\">\n <ccpay-add-remission \n [isFromRefundListPage] = \"true\"\n [viewCompStatus] = \"viewName\"\n [isRefundRemission] = \"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\"\n (refundListAmount) = \"getRefundAmount($event)\"\n ></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewrefundconfirmationpage'\">\n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body\" style=\"color: white\"><strong>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}} has been passed to a team leader to approve.\n </p>\n \n <p class=\"govuk-body\">\n <a (click)=\"loadCaseTransactionPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n </ng-container>",
427
- 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 0 #858688;color:#0b0c0c;margin-right:.5em}.govuk-label--s,.govuk-warning-text__text,.hmcts-currency-input__symbol{font-size:19px;font-weight:400}.inline-error-class{outline:#a71414 solid 3px;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-body,.govuk-body-m{font-size:2.1875rem}.govuk-input--width-10{max-width:36ex}"]
431
+ template: "<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<ng-container *ngIf=\"viewName==='refundstatuslist' && rejectedRefundList\">\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'\">\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 <!-- Status history -->\n <div>\n <br />\n <h2 class=\"govuk-heading-m\">Refund status history</h2>\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\">{{refundStatusHistory.date_created | date:'d MMMM yyyy\n hh:mm:ss'}}</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'\">\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()\">Resubmit\n refund</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'\">\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\">Review and resubmit refund</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for rejection</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}}\n <a (click)=\"gotoRefundReasonPage()\" *ngIf=\"refundlist?.reason !== 'Retrospective remission'\"\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\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.payment_reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"refundlist?.reason === 'Retrospective remission'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"refundlist?.reason !== 'Retrospective remission'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\"> \u00A3{{ changedAmount | number:'.2' }}\n <a (click)=\"gotoAmountPage()\" *ngIf=\"refundlist?.reason === 'Retrospective remission'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\n </tr>\n </table>\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 === 'issuerefund'\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" (refundListReason)=\"getRefundListReason($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'processretroremissonpage'\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" (refundListAmount)=\"getRefundAmount($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewrefundconfirmationpage'\">\n <div class=\"govuk-grid-row\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>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>",
432
+ 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 0 #858688;color:#0b0c0c;margin-right:.5em}.govuk-label--s,.govuk-warning-text__text,.hmcts-currency-input__symbol{font-size:19px;font-weight:400}.inline-error-class{outline:#a71414 solid 3px;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-body,.govuk-body-m{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-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}.white{color:#fff}"]
428
433
  }] }
429
434
  ];
430
435
  /** @nocollapse */
@@ -508,9 +513,17 @@ if (false) {
508
513
  /** @type {?} */
509
514
  RefundStatusComponent.prototype.refundreason;
510
515
  /** @type {?} */
516
+ RefundStatusComponent.prototype.navigationpage;
517
+ /** @type {?} */
518
+ RefundStatusComponent.prototype.isLastUpdatedByCurrentUser;
519
+ /** @type {?} */
520
+ RefundStatusComponent.prototype.isProcessRefund;
521
+ /** @type {?} */
522
+ RefundStatusComponent.prototype.changedAmount;
523
+ /** @type {?} */
511
524
  RefundStatusComponent.prototype.allowedRolesToAccessRefund;
512
525
  /** @type {?} */
513
- RefundStatusComponent.prototype.navigationpage;
526
+ RefundStatusComponent.prototype.check4AllowedRoles2AccessRefund;
514
527
  /**
515
528
  * @type {?}
516
529
  * @private
@@ -542,4 +555,4 @@ if (false) {
542
555
  */
543
556
  RefundStatusComponent.prototype.OrderslistService;
544
557
  }
545
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmdW5kLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3JlZnVuZC1zdGF0dXMvcmVmdW5kLXN0YXR1cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxXQUFXLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztJQUM1RCxjQUFjLEdBQUcsdUJBQXVCO0FBRTlDO0lBdUNFLCtCQUFvQixXQUF3QixFQUNsQyxhQUE2QixFQUM3QixtQkFBd0MsRUFDeEMsa0JBQXNDLEVBQ3RDLE1BQWMsRUFDZCxpQkFBb0M7UUFMMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBQzdCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQXRDbEIsc0JBQWlCLEdBQWEsRUFBRSxDQUFDO1FBTzdELHVCQUFr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O0lBQ2pCLDZDQUFxQjs7SUFDckIsMkNBQXdCOztJQUN4QixtREFBMkI7O0lBQzNCLHFEQUE4Qjs7SUFDOUIsa0RBQStCOztJQUMvQiw4Q0FBK0I7O0lBQy9CLDhDQUErQjs7SUFDL0IsK0NBQWdDOztJQUNoQyw0REFBNkM7O0lBQzdDLCtDQUFnQzs7SUFDaEMsOENBQTBCOztJQUMxQixzREFBdUM7O0lBQ3ZDLGdEQUF3Qjs7SUFDeEIsNkNBQXFCOztJQUNyQiwyQ0FBbUI7O0lBQ25CLG9EQUFvQzs7SUFDcEMsZ0RBQXdCOztJQUN4Qiw2Q0FBcUI7O0lBQ3JCLDJEQUE2RTs7SUFDN0UsK0NBQXVCOzs7OztJQUVYLDRDQUFnQzs7Ozs7SUFDMUMsOENBQXFDOzs7OztJQUNyQyxvREFBZ0Q7Ozs7O0lBQ2hELG1EQUE4Qzs7Ozs7SUFDOUMsdUNBQXNCOzs7OztJQUN0QixrREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlZnVuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVmdW5kcy9yZWZ1bmRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wsIFJlcXVpcmVkVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSVJlZnVuZExpc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRMaXN0JztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT3JkZXJzbGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcmRlcnNsaXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSVJlZnVuZFJlYXNvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRSZWFzb25zJztcbmltcG9ydCB7IElSZWZ1bmRTdGF0dXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRTdGF0dXMnO1xuaW1wb3J0IHsgSVJlc3VibWl0UmVmdW5kUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlc3VibWl0UmVmdW5kUmVxdWVzdCc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmNvbnN0IEJTX0VOQUJMRV9GTEFHID0gJ2J1bGstc2Nhbi1lbmFibGluZy1mZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXJlZnVuZC1zdGF0dXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVmdW5kLXN0YXR1cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlZnVuZC1zdGF0dXMuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJlZnVuZFN0YXR1c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgnTE9HR0VESU5VU0VSUk9MRVMnKSBMT0dHRURJTlVTRVJST0xFUzogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgaXNPbGRQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzTmV3UGNpcGFsT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgcmVmdW5kU3RhdHVzRm9ybTogRm9ybUdyb3VwO1xuICBzZWxlY3RlZFJlZnVuZFJlYXNvbjogc3RyaW5nO1xuICByZWplY3RlZFJlZnVuZExpc3Q6IElSZWZ1bmRMaXN0W10gPSBbXTtcbiAgYXBwcm92YWxTdGF0dXMgPSAnc2VudCBmb3IgYXBwcm92YWwnO1xuICByZWplY3RTdGF0dXMgPSAnc2VudCBiYWNrJztcbiAgZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgdmlld05hbWU6IHN0cmluZztcbiAgcmVmdW5kUmVhc29uOiBzdHJpbmc7XG4gIHJlZnVuZGxpc3Q6IElSZWZ1bmRMaXN0O1xuICBic1BheW1lbnREY25OdW1iZXI6IHN0cmluZztcbiAgaXNDYWxsRnJvbVJlZnVuZExpc3Q6IGJvb2xlYW47XG4gIHJlZnVuZEJ1dHRvblN0YXRlOiBzdHJpbmcgPSAnJztcbiAgaXNBbW91bnRFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlYXNvbkVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGFtb3VudEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICByZWZ1bmRIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICByZWZ1bmRSZWFzb25zOiBhbnlbXSA9IFtdO1xuICByZWZ1bmRTdGF0dXNIaXN0b3JpZXM6IElSZWZ1bmRTdGF0dXNbXTtcbiAgcmVmdW5kUmVmZXJlbmNlOiBzdHJpbmc7XG4gIHJlZnVuZEFtb3VudDogc3RyaW5nO1xuICByZWZ1bmRDb2RlOiBzdHJpbmc7XG4gIGlzUmVmdW5kQnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBvbGRSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgcmVmdW5kcmVhc29uOiBzdHJpbmc7XG4gIGFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kID0gWydwYXltZW50cy1yZWZ1bmQtYXBwcm92ZXInLCAncGF5bWVudHMtcmVmdW5kJ107XG4gIG5hdmlnYXRpb25wYWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWZ1bmRTZXJ2aWNlOiBSZWZ1bmRzU2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuO1xuICAgIHRoaXMuaXNDYWxsRnJvbVJlZnVuZExpc3QgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNDYWxsRnJvbVJlZnVuZExpc3Q7XG4gICAgLy8gaWYodGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UpIHtcbiAgICAvLyAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gICAgLy8gfVxuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3KSB7XG4gICAgICB0aGlzLnZpZXdOYW1lID0gJ3JlZnVuZHZpZXcnO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRSZWZ1bmRWaWV3KCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLnJlZnVuZGxpc3QgPSBkYXRhKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0Q0NEQ2FzZU51bWJlcmZvclJlZnVuZC5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMuY2NkQ2FzZU51bWJlciA9IGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdOYW1lID0gJ3JlZnVuZHN0YXR1c2xpc3QnO1xuICAgICAgdGhpcy5yZWZ1bmRTZXJ2aWNlLmdldFJlZnVuZFN0YXR1c0xpc3QodGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlZnVuZExpc3QgPT4ge1xuICAgICAgICAgIHRoaXMucmVqZWN0ZWRSZWZ1bmRMaXN0ID0gcmVmdW5kTGlzdFsnZGF0YSddWydyZWZ1bmRfbGlzdCddO1xuICAgICAgICB9XG4gICAgICApLFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIH07XG4gICAgfVxuIFxuXG4gICAgdGhpcy5yZWZ1bmRTdGF0dXNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBhbW91bnQ6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rKFxcXFwuWzAtOV17Mn0pPyQnKVxuICAgICAgXSkpLFxuICAgICAgcmVmdW5kUmVhc29uOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcbiAgICAgIHJlYXNvbjogbmV3IEZvcm1Db250cm9sKClcbiAgICB9KTtcblxuICAgIHRoaXMuZ2V0UmVmdW5kc1N0YXR1c0hpc3RvcnlMaXN0KCk7XG4gICAgXG4gICAgdGhpcy5hbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZC5mb3JFYWNoKChyb2xlKSA9PiB7XG4gICAgICBpZiAodGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMSkge1xuICAgICAgICB0aGlzLnJlZnVuZEJ1dHRvblN0YXRlID0gdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9zdGF0dXMubmFtZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFJlZnVuZHNTdGF0dXNIaXN0b3J5TGlzdCgpIHtcbiAgICB0aGlzLnJlZnVuZFNlcnZpY2UuZ2V0UmVmdW5kU3RhdHVzSGlzdG9yeSh0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgc3RhdHVzSGlzdG9yeUxpc3QgPT4ge1xuICAgICAgICB0aGlzLnJlZnVuZFN0YXR1c0hpc3RvcmllcyA9IHN0YXR1c0hpc3RvcnlMaXN0WydkYXRhJ107XG4gICAgICB9XG4gICAgKSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICB9OyBcbiAgfVxuXG4gIGdvVG9SZWZ1bmRWaWV3KHJlZnVuZGxpc3Q6IElSZWZ1bmRMaXN0LG5hdmlnYXRpb25wYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldFJlZnVuZFZpZXcocmVmdW5kbGlzdCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRDQ0RDYXNlTnVtYmVyKHRoaXMuY2NkQ2FzZU51bWJlcik7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlZnVuZHN0YXR1c2xpc3QnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1JlZnVuZFN0YXR1c1ZpZXcgPSB0cnVlO1xuICAgIHRoaXMucmVmdW5kbGlzdCA9IHJlZnVuZGxpc3Q7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZShuYXZpZ2F0aW9ucGFnZSk7XG4gIH1cblxuICBsb2FkQ2FzZVRyYW5zYWN0aW9uUGFnZSgpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gZmFsc2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAgIGZlYXR1cmVzID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZmVhdHVyZXMpLmZpbHRlcihmZWF0dXJlID0+IGZlYXR1cmUudWlkID09PSBCU19FTkFCTEVfRkxBRyk7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGxldCBwYXJ0VXJsID0gYHNlbGVjdGVkT3B0aW9uPSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTn1gO1xuICAgIHBhcnRVcmwgKz0gdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQVNFVFlQRX1gO1xuICAgIHBhcnRVcmwgKz0gdGhpcy5pc05ld1BjaXBhbE9mZiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgcGFydFVybCArPSB0aGlzLmlzT2xkUGNpcGFsT2ZmID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJztcbiAgICBsZXQgdXJsID0gYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9Y2FzZS10cmFuc2FjdGlvbnMmdGFrZVBheW1lbnQ9dHJ1ZSYke3BhcnRVcmx9YDtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gIH1cblxuICBsb2FkUmVmdW5kTGlzdFBhZ2UoKSB7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRuYXZpZ2F0aW9uUGFnZVZhbHVlKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm5hdmlnYXRpb25wYWdlID0gZGF0YSk7XG4gICAgaWYodGhpcy5uYXZpZ2F0aW9ucGFnZSA9PT0gJ2Nhc2V0cmFuc2FjdGlvbnMnKSB7XG4gICAgICB0aGlzLmxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKCk7XG4gICAgfSBlbHNlIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVmdW5kLWxpc3QnO1xuICAgIH1cbiAgfVxuXG4gIGdvdG9SZXZpZXdEZXRhaWxzUGFnZSgpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IHRydWU7XG4gICAgdGhpcy5uZ09uSW5pdCgpO1xuICAgIC8vIHRoaXMudmlld05hbWU9J3JlZnVuZHZpZXcnO1xuICAgIC8vIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVIgPSB0aGlzLmNjZENhc2VOdW1iZXI7XG4gICAgLy8gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IHRydWU7XG4gICAgLy8gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzQ2FsbEZyb21SZWZ1bmRMaXN0ID0gdHJ1ZTtcbiAgfVxuXG4gIGdvdG9SZXZpZXdBbmRSZVN1Ym1pdFBhZ2UoKSB7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdhbmRzdWJtaXR2aWV3JztcbiAgICB0aGlzLm9sZFJlZnVuZFJlYXNvbiA9IHRoaXMucmVmdW5kbGlzdC5yZWFzb247XG4gICAgdGhpcy5yZWZ1bmRyZWFzb24gPSB0aGlzLnJlZnVuZFN0YXR1c0hpc3Rvcmllcy5maWx0ZXIoZGF0YSA9PiBkYXRhLnN0YXR1cz09PSdzZW50YmFjaycpWzBdLm5vdGVzO1xuICAgIHRoaXMucmVmdW5kU2VydmljZS5nZXRSZWZ1bmRSZWFzb25zKCkuc3Vic2NyaWJlKFxuICAgICAgcmVmdW5kUmVhc29ucyA9PiB7XG4gICAgICAgIHRoaXMucmVmdW5kUmVhc29ucyA9IHJlZnVuZFJlYXNvbnNbJ2RhdGEnXTtcbiAgICAgIH0pO1xuICB9XG4gIGdvdG9SZWZ1bmRSZWFzb25QYWdlKCkge1xuICAgIHRoaXMuaXNSZWZ1bmRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLmNjZENhc2VOdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdpc3N1ZXJlZnVuZCc7XG4gIH1cblxuICBnb3RvQW1vdW50UGFnZSgpIHtcbiAgICB0aGlzLmlzUmVmdW5kQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNjZENhc2VOdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLnZpZXdOYW1lID0ncHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlJztcbiAgfVxuXG4gIGdvVG9SZXZpZXdBbmRTdWJtaXRWaWV3KCkge1xuICAgIGNvbnN0IHJlbWlzc2lvbmN0cmxzID0gdGhpcy5yZWZ1bmRTdGF0dXNGb3JtLmNvbnRyb2xzXG4gICAgaWYgKHRoaXMucmVmdW5kU3RhdHVzRm9ybS5kaXJ0eSkge1xuICAgICAgaWYgKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJykge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHJlbWlzc2lvbmN0cmxzWydyZWFzb24nXS52YWx1ZSA9PSAnJykge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdyZWFzb24nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVmdW5kbGlzdC5yZWFzb24gPSByZW1pc3Npb25jdHJsc1sncmVhc29uJ10udmFsdWU7XG4gICAgICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICByZXNldFJlbWlzc2lvbkZvcm0odmFsLCBmaWVsZCkge1xuICAgIGlmIChmaWVsZCA9PT0gJ0FsbCcpIHtcbiAgICAgIHRoaXMuaXNBbW91bnRFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMuYW1vdW50SGFzRXJyb3IgPSB2YWxbMV07XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvciA9IHZhbFsyXTtcbiAgICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IHZhbFszXTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkID09PSAnYW1vdW50JyB8fCBmaWVsZCA9PT0gJ0FsbCcpIHtcbiAgICAgIHRoaXMuaXNBbW91bnRFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMuYW1vdW50SGFzRXJyb3IgPSB2YWxbMV07XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvciA9IHZhbFsyXTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkID09PSAncmVhc29uJyB8fCBmaWVsZCA9PT0gJ0FsbCcpIHtcbiAgICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IHZhbFszXTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RSYWRpb0J1dHRvbihrZXksIHZhbHVlKSB7XG4gICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24gPSBrZXk7XG4gICAgaWYgKGtleSA9PT0gJ090aGVyJykge1xuICAgICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWZ1bmRSZWFzb24gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVmdW5kTGlzdFJlYXNvbihyZWZ1bmRMaXN0UmVhc29uOiBhbnkpIHtcbiAgICBpZih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSAmJiAhdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCkge1xuICAgIHRoaXMucmVmdW5kbGlzdC5yZWFzb24gPSByZWZ1bmRMaXN0UmVhc29uLnJlYXNvbjtcbiAgICB0aGlzLnJlZnVuZENvZGUgPSByZWZ1bmRMaXN0UmVhc29uLmNvZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNSZWZ1bmRCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUiA9IHRoaXMuY2NkQ2FzZU51bWJlcjtcbiAgfVxuXG4gIGdldFJlZnVuZEFtb3VudChhbW91bnQ6IG51bWJlcikge1xuICAgIGlmKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkKSB7XG4gICAgIGlmIChhbW91bnQgPiAwKSB7XG4gICAgICB0aGlzLnJlZnVuZGxpc3QuYW1vdW50ID0gYW1vdW50O1xuICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID0gdGhpcy5jY2RDYXNlTnVtYmVyO1xuICB9XG5cbiAgZ290b1Jldmlld1JlZnVuZENvbmZpcm1hdGlvblBhZ2UoKSB7XG4gICAgaWYoIHRoaXMub2xkUmVmdW5kUmVhc29uID09PSB0aGlzLnJlZnVuZGxpc3QucmVhc29uKSB7XG4gICAgICB0aGlzLnJlZnVuZENvZGUgPSAnJztcbiAgICB9XG4gICAgY29uc3QgcmVzdWJtaXRSZXF1ZXN0ID0gbmV3IElSZXN1Ym1pdFJlZnVuZFJlcXVlc3QodGhpcy5yZWZ1bmRDb2RlLHRoaXMucmVmdW5kbGlzdC5hbW91bnQpO1xuICAgIHRoaXMucmVmdW5kU2VydmljZS5wYXRjaFJlc3VibWl0UmVmdW5kKHJlc3VibWl0UmVxdWVzdCx0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICB0aGlzLnJlZnVuZFJlZmVyZW5jZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpLmRhdGEucmVmdW5kX3JlZmVyZW5jZTtcbiAgICAgICAgICB0aGlzLnJlZnVuZEFtb3VudCA9IEpTT04ucGFyc2UocmVzcG9uc2UpLmRhdGEucmVmdW5kX2Ftb3VudDtcbiAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gJ3Jldmlld3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgIH1cbiAgICApO1xuICAgIFxuICB9XG5cbiAgZ29Ub1JlZnVuZFByb2Nlc3NDb21wb25lbnQocmVmdW5kUmVmZXJlbmNlOiBzdHJpbmcsIHJlZnVuZExpc3Q6IElSZWZ1bmRMaXN0ICkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5yZWZ1bmRsaXN0c291cmNlID0gcmVmdW5kTGlzdDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucmVmdW5kUmVmZXJlbmNlID0gcmVmdW5kUmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwcm9jZXNzLXJlZnVuZCc7XG4gIH1cblxufVxuIl19
558
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmdW5kLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3JlZnVuZC1zdGF0dXMvcmVmdW5kLXN0YXR1cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxXQUFXLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztJQUM1RCxjQUFjLEdBQUcsdUJBQXVCO0FBRTlDO0lBNENFLCtCQUFvQixXQUF3QixFQUNsQyxhQUE2QixFQUM3QixtQkFBd0MsRUFDeEMsa0JBQXNDLEVBQ3RDLE1BQWMsRUFDZCxpQkFBb0M7UUFMOUMsaUJBS21EO1FBTC9CLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQUM3Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUEzQ2xCLHNCQUFpQixHQUFhLEVBQUUsQ0FB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d0I7O0lBQ3hCLDZDQUFxQjs7SUFDckIsMkNBQW1COztJQUNuQixvREFBb0M7O0lBQ3BDLGdEQUF3Qjs7SUFDeEIsNkNBQXFCOztJQUNyQiwrQ0FBdUI7O0lBQ3ZCLDJEQUEyQzs7SUFDM0MsZ0RBQWlDOztJQUNqQyw4Q0FBc0I7O0lBQ3RCLDJEQUE2RTs7SUE4RDdFLGdFQUlDOzs7OztJQWhFVyw0Q0FBZ0M7Ozs7O0lBQzFDLDhDQUFxQzs7Ozs7SUFDckMsb0RBQWdEOzs7OztJQUNoRCxtREFBOEM7Ozs7O0lBQzlDLHVDQUFzQjs7Ozs7SUFDdEIsa0RBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWZ1bmRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlZnVuZHMvcmVmdW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sLCBSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElSZWZ1bmRMaXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kTGlzdCc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IElSZWZ1bmRSZWFzb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kUmVhc29ucyc7XG5pbXBvcnQgeyBJUmVmdW5kU3RhdHVzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kU3RhdHVzJztcbmltcG9ydCB7IElSZXN1Ym1pdFJlZnVuZFJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZXN1Ym1pdFJlZnVuZFJlcXVlc3QnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1yZWZ1bmQtc3RhdHVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZnVuZC1zdGF0dXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWZ1bmQtc3RhdHVzLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZWZ1bmRTdGF0dXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ0xPR0dFRElOVVNFUlJPTEVTJykgTE9HR0VESU5VU0VSUk9MRVM6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGlzT2xkUGNpcGFsT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBpc05ld1BjaXBhbE9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBpc1R1cm5PZmY6IGJvb2xlYW47XG4gIHJlZnVuZFN0YXR1c0Zvcm06IEZvcm1Hcm91cDtcbiAgc2VsZWN0ZWRSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgcmVqZWN0ZWRSZWZ1bmRMaXN0OiBJUmVmdW5kTGlzdFtdID0gW107XG4gIGFwcHJvdmFsU3RhdHVzID0gJ1NlbnQgZm9yIGFwcHJvdmFsJztcbiAgcmVqZWN0U3RhdHVzID0gJ1VwZGF0ZSByZXF1aXJlZCc7XG4gIC8vIGFwcHJvdmFsU3RhdHVzID0gJ3NlbnQgZm9yIGFwcHJvdmFsJztcbiAgLy8gcmVqZWN0U3RhdHVzID0gJ3NlbnQgYmFjayc7XG4gIGVycm9yTWVzc2FnZSA9IG51bGw7XG4gIHZpZXdOYW1lOiBzdHJpbmc7XG4gIHJlZnVuZFJlYXNvbjogc3RyaW5nO1xuICByZWZ1bmRsaXN0OiBJUmVmdW5kTGlzdDtcbiAgYnNQYXltZW50RGNuTnVtYmVyOiBzdHJpbmc7XG4gIGlzQ2FsbEZyb21SZWZ1bmRMaXN0OiBib29sZWFuO1xuICByZWZ1bmRCdXR0b25TdGF0ZTogc3RyaW5nID0gJyc7XG4gIGlzQW1vdW50RW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZWFzb25FbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbW91bnRIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVmdW5kSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVmdW5kUmVhc29uczogYW55W10gPSBbXTtcbiAgcmVmdW5kU3RhdHVzSGlzdG9yaWVzOiBJUmVmdW5kU3RhdHVzW107XG4gIHJlZnVuZFJlZmVyZW5jZTogc3RyaW5nO1xuICByZWZ1bmRBbW91bnQ6IHN0cmluZztcbiAgcmVmdW5kQ29kZTogc3RyaW5nO1xuICBpc1JlZnVuZEJ0bkRpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgb2xkUmVmdW5kUmVhc29uOiBzdHJpbmc7XG4gIHJlZnVuZHJlYXNvbjogc3RyaW5nO1xuICBuYXZpZ2F0aW9ucGFnZTogc3RyaW5nO1xuICBpc0xhc3RVcGRhdGVkQnlDdXJyZW50VXNlcjogYm9vbGVhbiA9IHRydWU7XG4gIGlzUHJvY2Vzc1JlZnVuZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjaGFuZ2VkQW1vdW50OiBudW1iZXI7XG4gIGFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kID0gWydwYXltZW50cy1yZWZ1bmQtYXBwcm92ZXInLCAncGF5bWVudHMtcmVmdW5kJ107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWZ1bmRTZXJ2aWNlOiBSZWZ1bmRzU2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgLy8gaWYgKHRoaXMuY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1JlZnVuZCgpKSB7XG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ0FsbCcpO1xuICAgIHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbjtcbiAgICB0aGlzLmlzQ2FsbEZyb21SZWZ1bmRMaXN0ID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzQ2FsbEZyb21SZWZ1bmRMaXN0O1xuICAgIC8vIGlmKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlKSB7XG4gICAgLy8gICB0aGlzLnZpZXdOYW1lID0gJ3Jldmlld2FuZHN1Ym1pdHZpZXcnO1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldykge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdyZWZ1bmR2aWV3JztcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0UmVmdW5kVmlldygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5yZWZ1bmRsaXN0ID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldENDRENhc2VOdW1iZXJmb3JSZWZ1bmQuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLmNjZENhc2VOdW1iZXIgPSBkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdyZWZ1bmRzdGF0dXNsaXN0JztcbiAgICAgIHRoaXMucmVmdW5kU2VydmljZS5nZXRSZWZ1bmRTdGF0dXNMaXN0KHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICByZWZ1bmRMaXN0ID0+IHtcbiAgICAgICAgICB0aGlzLnJlamVjdGVkUmVmdW5kTGlzdCA9IHJlZnVuZExpc3RbJ3JlZnVuZF9saXN0J107XG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLFwiXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgICB0aGlzLnJlZnVuZFN0YXR1c0Zvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgYW1vdW50OiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bMC05XSsoXFwuWzAtOV17MSwyfSk/JCcpXG4gICAgICAgIF0pKSxcbiAgICAgICAgcmVmdW5kUmVhc29uOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcbiAgICAgICAgcmVhc29uOiBuZXcgRm9ybUNvbnRyb2woKVxuICAgICAgfSk7XG5cbiAgICAgIGlmKHRoaXMucmVmdW5kbGlzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZ2V0UmVmdW5kc1N0YXR1c0hpc3RvcnlMaXN0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuTE9HR0VESU5VU0VSUk9MRVMuc29tZShpID0+IGkuaW5jbHVkZXMoJ3BheW1lbnRzLXJlZnVuZC1hcHByb3ZlcicpKSkge1xuICAgICAgICAgIHRoaXMuaXNQcm9jZXNzUmVmdW5kID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnJlZnVuZEJ1dHRvblN0YXRlID0gdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9zdGF0dXMubmFtZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgaWYgKHRoaXMuTE9HR0VESU5VU0VSUk9MRVMuc29tZShpID0+IGkuaW5jbHVkZXMoJ3BheW1lbnRzLXJlZnVuZCcpKSkge1xuICAgICAgICAgIHRoaXMuaXNQcm9jZXNzUmVmdW5kID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRCdXR0b25TdGF0ZSA9IHRoaXMucmVmdW5kbGlzdC5yZWZ1bmRfc3RhdHVzLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgIC8vfVxuICB9XG4gIFxuXG4gIGNoZWNrNEFsbG93ZWRSb2xlczJBY2Nlc3NSZWZ1bmQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dlZFJvbGVzVG9BY2Nlc3NSZWZ1bmQuc29tZShyb2xlID0+XG4gICAgICB0aGlzLkxPR0dFRElOVVNFUlJPTEVTLmluZGV4T2Yocm9sZSkgIT09IC0xXG4gICAgKTtcbiAgfVxuXG4gIGdldFJlZnVuZHNTdGF0dXNIaXN0b3J5TGlzdCgpIHtcbiAgICBpZih0aGlzLnJlZnVuZGxpc3QgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucmVmdW5kU2VydmljZS5nZXRSZWZ1bmRTdGF0dXNIaXN0b3J5KHRoaXMucmVmdW5kbGlzdC5yZWZ1bmRfcmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICBzdGF0dXNIaXN0b3J5TGlzdCA9PiB7XG4gICAgICAgIHRoaXMucmVmdW5kU3RhdHVzSGlzdG9yaWVzID0gc3RhdHVzSGlzdG9yeUxpc3Quc3RhdHVzX2hpc3RvcnlfZHRvX2xpc3Q7XG4gICAgICAgIHRoaXMuaXNMYXN0VXBkYXRlZEJ5Q3VycmVudFVzZXIgPSBzdGF0dXNIaXN0b3J5TGlzdC5sYXN0X3VwZGF0ZWRfYnlfY3VycmVudF91c2VyO1xuICAgICAgfVxuICAgICksXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLnJlcGxhY2UoL1wiL2csXCJcIik7XG4gICAgICB9OyBcbiAgICB9XG4gIH1cblxuICBnb1RvUmVmdW5kVmlldyhyZWZ1bmRsaXN0OiBJUmVmdW5kTGlzdCwgbmF2aWdhdGlvbnBhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0UmVmdW5kVmlldyhyZWZ1bmRsaXN0KTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldENDRENhc2VOdW1iZXIodGhpcy5jY2RDYXNlTnVtYmVyKTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVmdW5kc3RhdHVzbGlzdCc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IHRydWU7XG4gICAgdGhpcy5yZWZ1bmRsaXN0ID0gcmVmdW5kbGlzdDtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKG5hdmlnYXRpb25wYWdlKTtcbiAgfVxuXG4gIGxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IGZhbHNlO1xuICB9XG5cbiAgbG9hZFJlZnVuZExpc3RQYWdlKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0bmF2aWdhdGlvblBhZ2VWYWx1ZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5uYXZpZ2F0aW9ucGFnZSA9IGRhdGEpO1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25wYWdlID09PSAnY2FzZXRyYW5zYWN0aW9ucycpIHtcbiAgICAgIHRoaXMubG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlZnVuZC1saXN0JztcbiAgICB9XG4gIH1cblxuICBnb3RvUmV2aWV3RGV0YWlsc1BhZ2UoZXZlbnQ6YW55KSB7XG4gICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IHRydWU7XG4gICAgdGhpcy5uZ09uSW5pdCgpO1xuICB9XG5cbiAgZ290b1Jldmlld0FuZFJlU3VibWl0UGFnZSgpIHtcbiAgICB0aGlzLnZpZXdOYW1lID0gJ3Jldmlld2FuZHN1Ym1pdHZpZXcnO1xuICAgIHRoaXMub2xkUmVmdW5kUmVhc29uID0gdGhpcy5yZWZ1bmRsaXN0LnJlYXNvbjtcbiAgICB0aGlzLmNoYW5nZWRBbW91bnQgPSB0aGlzLnJlZnVuZGxpc3QuYW1vdW50O1xuICAgIHRoaXMucmVmdW5kcmVhc29uID0gdGhpcy5yZWZ1bmRTdGF0dXNIaXN0b3JpZXMuZmlsdGVyKGRhdGEgPT4gZGF0YS5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZGF0ZSByZXF1aXJlZCcpWzBdLm5vdGVzO1xuICAgIHRoaXMucmVmdW5kU2VydmljZS5nZXRSZWZ1bmRSZWFzb25zKCkuc3Vic2NyaWJlKFxuICAgICAgcmVmdW5kUmVhc29ucyA9PiB7XG4gICAgICAgIHRoaXMucmVmdW5kUmVhc29ucyA9IHJlZnVuZFJlYXNvbnM7XG4gICAgICB9KTtcbiAgfVxuICBnb3RvUmVmdW5kUmVhc29uUGFnZSgpIHtcbiAgICB0aGlzLmlzUmVmdW5kQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuUkVGVU5ETElTVCA9IFwidHJ1ZVwiO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLmNjZENhc2VOdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdpc3N1ZXJlZnVuZCc7XG4gIH1cblxuICBnb3RvQW1vdW50UGFnZSgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5SRUZVTkRMSVNUID0gXCJ0cnVlXCI7XG4gICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdwcm9jZXNzcmV0cm9yZW1pc3NvbnBhZ2UnO1xuICB9XG5cbiAgZ29Ub1Jldmlld0FuZFN1Ym1pdFZpZXcoKSB7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHMgPSB0aGlzLnJlZnVuZFN0YXR1c0Zvcm0uY29udHJvbHNcbiAgICBpZiAodGhpcy5yZWZ1bmRTdGF0dXNGb3JtLmRpcnR5KSB7XG4gICAgICBpZiAocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlICE9ICcnICYmIHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS5pbnZhbGlkKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAocmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnZhbHVlID09ICcnKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXSwgJ3JlYXNvbicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWZ1bmRsaXN0LnJlYXNvbiA9IHJlbWlzc2lvbmN0cmxzWydyZWFzb24nXS52YWx1ZTtcbiAgICAgICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdhbmRzdWJtaXR2aWV3JztcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIHJlc2V0UmVtaXNzaW9uRm9ybSh2YWwsIGZpZWxkKSB7XG4gICAgaWYgKGZpZWxkID09PSAnQWxsJykge1xuICAgICAgdGhpcy5pc0Ftb3VudEVtcHR5ID0gdmFsWzBdO1xuICAgICAgdGhpcy5hbW91bnRIYXNFcnJvciA9IHZhbFsxXTtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yID0gdmFsWzJdO1xuICAgICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gdmFsWzNdO1xuICAgIH0gZWxzZSBpZiAoZmllbGQgPT09ICdhbW91bnQnIHx8IGZpZWxkID09PSAnQWxsJykge1xuICAgICAgdGhpcy5pc0Ftb3VudEVtcHR5ID0gdmFsWzBdO1xuICAgICAgdGhpcy5hbW91bnRIYXNFcnJvciA9IHZhbFsxXTtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yID0gdmFsWzJdO1xuICAgIH0gZWxzZSBpZiAoZmllbGQgPT09ICdyZWFzb24nIHx8IGZpZWxkID09PSAnQWxsJykge1xuICAgICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gdmFsWzNdO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFJhZGlvQnV0dG9uKGtleSwgdmFsdWUpIHtcbiAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiA9IGtleTtcbiAgICBpZiAoa2V5ID09PSAnT3RoZXInKSB7XG4gICAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZnVuZFJlYXNvbiA9IGtleTtcbiAgICB9XG4gIH1cblxuICBnZXRSZWZ1bmRMaXN0UmVhc29uKHJlZnVuZExpc3RSZWFzb246IGFueSkge1xuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSAmJiAhdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCkge1xuICAgICAgdGhpcy5yZWZ1bmRsaXN0LnJlYXNvbiA9IHJlZnVuZExpc3RSZWFzb24ucmVhc29uO1xuICAgICAgdGhpcy5yZWZ1bmRDb2RlID0gcmVmdW5kTGlzdFJlYXNvbi5jb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzUmVmdW5kQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnZpZXdOYW1lID0gJ3Jldmlld2FuZHN1Ym1pdHZpZXcnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVIgPSB0aGlzLmNjZENhc2VOdW1iZXI7XG4gIH1cblxuICBnZXRSZWZ1bmRBbW91bnQoYW1vdW50OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgJiYgIXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQpIHtcbiAgICAgIGlmIChhbW91bnQgPiAwKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZEFtb3VudCA9IGFtb3VudDtcbiAgICAgICAgLy8gdGhpcy5yZWZ1bmRsaXN0LmFtb3VudCA9IGFtb3VudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdhbmRzdWJtaXR2aWV3JztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID0gdGhpcy5jY2RDYXNlTnVtYmVyO1xuICB9XG5cbiAgZ290b1Jldmlld1JlZnVuZENvbmZpcm1hdGlvblBhZ2UoKSB7XG4gICAgaWYgKHRoaXMub2xkUmVmdW5kUmVhc29uID09PSB0aGlzLnJlZnVuZGxpc3QucmVhc29uKSB7XG4gICAgICB0aGlzLnJlZnVuZENvZGUgPSAnJztcbiAgICB9XG4gICAgY29uc3QgcmVzdWJtaXRSZXF1ZXN0ID0gbmV3IElSZXN1Ym1pdFJlZnVuZFJlcXVlc3QodGhpcy5yZWZ1bmRDb2RlLCAgdGhpcy5jaGFuZ2VkQW1vdW50KTtcbiAgICB0aGlzLnJlZnVuZFNlcnZpY2UucGF0Y2hSZXN1Ym1pdFJlZnVuZChyZXN1Ym1pdFJlcXVlc3QsIHRoaXMucmVmdW5kbGlzdC5yZWZ1bmRfcmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgIHRoaXMucmVmdW5kUmVmZXJlbmNlID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX3JlZmVyZW5jZTtcbiAgICAgICAgICB0aGlzLnJlZnVuZEFtb3VudCA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQ7XG4gICAgICAgICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdyZWZ1bmRjb25maXJtYXRpb25wYWdlJztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKTtcbiAgICAgIH1cbiAgICApO1xuXG4gIH1cblxuICBnb1RvUmVmdW5kUHJvY2Vzc0NvbXBvbmVudChyZWZ1bmRSZWZlcmVuY2U6IHN0cmluZywgcmVmdW5kTGlzdDogSVJlZnVuZExpc3QpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucmVmdW5kbGlzdHNvdXJjZSA9IHJlZnVuZExpc3Q7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnJlZnVuZFJlZmVyZW5jZSA9IHJlZnVuZFJlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncHJvY2Vzcy1yZWZ1bmQnO1xuICB9XG5cbn1cbiJdfQ==