@hmcts/ccpay-web-component 4.0.1-beta2 → 4.0.1-beta24

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 (80) hide show
  1. package/bundles/hmcts-ccpay-web-component.umd.js +1074 -461
  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 +28 -28
  6. package/esm2015/lib/components/add-remission/add-remission.component.js +255 -129
  7. package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +25 -12
  8. package/esm2015/lib/components/case-transactions/case-transactions.component.js +144 -135
  9. package/esm2015/lib/components/fee-summary/fee-summary.component.js +4 -4
  10. package/esm2015/lib/components/payment-view/payment-view.component.js +141 -54
  11. package/esm2015/lib/components/pba-payment/pba-payment.component.js +194 -0
  12. package/esm2015/lib/components/process-refund/process-refund.component.js +91 -14
  13. package/esm2015/lib/components/refund-list/refund-list.component.js +5 -14
  14. package/esm2015/lib/components/refund-status/refund-status.component.js +63 -39
  15. package/esm2015/lib/components/reports/reports.component.js +8 -3
  16. package/esm2015/lib/components/status-history/status-history.component.js +2 -2
  17. package/esm2015/lib/components/table/table.component.js +25 -4
  18. package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +4 -4
  19. package/esm2015/lib/interfaces/IRefundReasons.js +3 -1
  20. package/esm2015/lib/interfaces/IRefundStatusHistory.js +15 -0
  21. package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +23 -0
  22. package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +28 -0
  23. package/esm2015/lib/payment-lib.component.js +23 -5
  24. package/esm2015/lib/payment-lib.module.js +5 -7
  25. package/esm2015/lib/services/orderslist.service.js +1 -1
  26. package/esm2015/lib/services/payment-view/payment-view.service.js +30 -2
  27. package/esm2015/lib/services/refunds/refunds.service.js +17 -10
  28. package/esm2015/lib/services/shared/error-handler.service.js +15 -2
  29. package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +11 -2
  30. package/esm2015/lib/services/xl-file/xl-file.service.js +2 -2
  31. package/esm5/hmcts-ccpay-web-component.js +28 -28
  32. package/esm5/lib/components/add-remission/add-remission.component.js +262 -134
  33. package/esm5/lib/components/allocate-payments/allocate-payments.component.js +25 -12
  34. package/esm5/lib/components/case-transactions/case-transactions.component.js +149 -135
  35. package/esm5/lib/components/fee-summary/fee-summary.component.js +4 -4
  36. package/esm5/lib/components/payment-view/payment-view.component.js +159 -55
  37. package/esm5/lib/components/pba-payment/pba-payment.component.js +211 -0
  38. package/esm5/lib/components/process-refund/process-refund.component.js +147 -15
  39. package/esm5/lib/components/refund-list/refund-list.component.js +5 -14
  40. package/esm5/lib/components/refund-status/refund-status.component.js +65 -40
  41. package/esm5/lib/components/reports/reports.component.js +8 -3
  42. package/esm5/lib/components/status-history/status-history.component.js +2 -2
  43. package/esm5/lib/components/table/table.component.js +30 -4
  44. package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +4 -4
  45. package/esm5/lib/interfaces/IRefundReasons.js +3 -1
  46. package/esm5/lib/interfaces/IRefundStatusHistory.js +15 -0
  47. package/esm5/lib/interfaces/IserviceRequestCardPayment.js +22 -0
  48. package/esm5/lib/interfaces/IserviceRequestPbaPayment.js +25 -0
  49. package/esm5/lib/payment-lib.component.js +23 -5
  50. package/esm5/lib/payment-lib.module.js +5 -7
  51. package/esm5/lib/services/orderslist.service.js +1 -1
  52. package/esm5/lib/services/payment-view/payment-view.service.js +43 -2
  53. package/esm5/lib/services/refunds/refunds.service.js +17 -10
  54. package/esm5/lib/services/shared/error-handler.service.js +15 -2
  55. package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +11 -2
  56. package/esm5/lib/services/xl-file/xl-file.service.js +2 -2
  57. package/fesm2015/hmcts-ccpay-web-component.js +970 -441
  58. package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
  59. package/fesm5/hmcts-ccpay-web-component.js +1086 -454
  60. package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
  61. package/hmcts-ccpay-web-component.d.ts +27 -27
  62. package/hmcts-ccpay-web-component.metadata.json +1 -1
  63. package/lib/components/add-remission/add-remission.component.d.ts +27 -3
  64. package/lib/components/allocate-payments/allocate-payments.component.d.ts +3 -0
  65. package/lib/components/case-transactions/case-transactions.component.d.ts +4 -2
  66. package/lib/components/payment-view/payment-view.component.d.ts +7 -0
  67. package/lib/components/pba-payment/pba-payment.component.d.ts +27 -0
  68. package/lib/components/process-refund/process-refund.component.d.ts +9 -2
  69. package/lib/components/refund-status/refund-status.component.d.ts +4 -2
  70. package/lib/components/table/table.component.d.ts +1 -0
  71. package/lib/interfaces/IRefundReasons.d.ts +1 -0
  72. package/lib/interfaces/IRefundStatusHistory.d.ts +5 -0
  73. package/lib/interfaces/IserviceRequestCardPayment.d.ts +6 -0
  74. package/lib/interfaces/IserviceRequestPbaPayment.d.ts +7 -0
  75. package/lib/payment-lib.component.d.ts +6 -2
  76. package/lib/services/payment-view/payment-view.service.d.ts +5 -0
  77. package/package.json +5 -1
  78. package/esm2015/lib/components/refunds/refunds.component.js +0 -23
  79. package/esm5/lib/components/refunds/refunds.component.js +0 -29
  80. package/lib/components/refunds/refunds.component.d.ts +0 -5
@@ -10,7 +10,6 @@ import { BulkScaningPaymentService } from '../../services/bulk-scaning-payment/b
10
10
  import { PaymentViewService } from '../../services/payment-view/payment-view.service';
11
11
  import { OrderslistService } from '../../services/orderslist.service';
12
12
  import { Router } from '@angular/router';
13
- import * as ls from "local-storage";
14
13
  /** @type {?} */
15
14
  var BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
16
15
  var CaseTransactionsComponent = /** @class */ (function () {
@@ -39,12 +38,12 @@ var CaseTransactionsComponent = /** @class */ (function () {
39
38
  this.clAmountDue = 0;
40
39
  this.isFeeRecordsExist = false;
41
40
  this.isGrpOutstandingAmtPositive = false;
42
- this.lsCcdNumber = ls.get('ccdNumber');
43
41
  //Order changes
44
42
  this.orderDetail = [];
45
43
  this.isAddRemissionEnable = false;
46
44
  this.orderRemissionDetails = [];
47
45
  this.orderLevelFees = [];
46
+ this.ispaymentGroupApisuccess = false;
48
47
  this.cpoDetails = null;
49
48
  this.orderFeesTotal = 0.00;
50
49
  this.orderRemissionTotal = 0.00;
@@ -86,12 +85,12 @@ var CaseTransactionsComponent = /** @class */ (function () {
86
85
  * @return {?}
87
86
  */
88
87
  function (payment) {
89
- /** @type {?} */
90
- var tmp4DayAgo = _this.currentDate;
91
- tmp4DayAgo.setDate(tmp4DayAgo.getDate() - 4);
92
- /** @type {?} */
93
- var paymentDate = new Date(payment.date_created);
94
- return tmp4DayAgo >= paymentDate;
88
+ if (payment !== null && payment !== undefined) {
89
+ /** @type {?} */
90
+ var tmp4DayAgo = new Date();
91
+ tmp4DayAgo.setDate(tmp4DayAgo.getDate() - 4);
92
+ return tmp4DayAgo >= new Date(payment.date_created);
93
+ }
95
94
  });
96
95
  }
97
96
  /**
@@ -102,17 +101,22 @@ var CaseTransactionsComponent = /** @class */ (function () {
102
101
  */
103
102
  function () {
104
103
  var _this = this;
105
- this.OrderslistService.getpaymentPageView().subscribe((/**
106
- * @param {?} data
107
- * @return {?}
108
- */
109
- function (data) { return _this.paymentView = data; }));
110
- this.OrderslistService.getnavigationPageValue().subscribe((/**
111
- * @param {?} data
112
- * @return {?}
113
- */
114
- function (data) { return _this.navigationpage = data; }));
115
- if (this.paymentView !== null && this.paymentView.payment_group_reference !== undefined && this.navigationpage === 'paymentdetailspage') {
104
+ this.navigationpage = '';
105
+ if (this.OrderslistService.getpaymentPageView() !== null) {
106
+ this.OrderslistService.getpaymentPageView().subscribe((/**
107
+ * @param {?} data
108
+ * @return {?}
109
+ */
110
+ function (data) { return _this.paymentView = data; }));
111
+ }
112
+ if (this.OrderslistService.getnavigationPageValue() !== null) {
113
+ this.OrderslistService.getnavigationPageValue().subscribe((/**
114
+ * @param {?} data
115
+ * @return {?}
116
+ */
117
+ function (data) { return _this.navigationpage = data; }));
118
+ }
119
+ if (this.paymentView !== undefined && this.paymentView !== null && this.paymentView.payment_group_reference !== undefined && this.navigationpage === 'paymentdetailspage') {
116
120
  this.goToPayementView(this.paymentView.payment_group_reference, this.paymentView.reference, this.paymentView.method);
117
121
  }
118
122
  this.isGrpOutstandingAmtPositive = false;
@@ -138,14 +142,12 @@ var CaseTransactionsComponent = /** @class */ (function () {
138
142
  this.isOldPcipalOff = this.paymentLibComponent.ISOLDPCIPALOFF;
139
143
  this.isStrategicFixEnable = this.paymentLibComponent.ISSFENABLE;
140
144
  if (!this.isTurnOff) {
141
- if (this.lsCcdNumber !== this.ccdCaseNumber) {
142
- this.router.navigateByUrl("/ccd-search?takePayment=true");
143
- }
144
145
  this.caseTransactionsService.getPaymentGroups(this.ccdCaseNumber).subscribe((/**
145
146
  * @param {?} paymentGroups
146
147
  * @return {?}
147
148
  */
148
149
  function (paymentGroups) {
150
+ _this.isAnyFeeGroupAvilable = true;
149
151
  _this.paymentGroups = paymentGroups['payment_groups'];
150
152
  _this.calculateAmounts();
151
153
  _this.calculateOrderFeesAmounts();
@@ -170,7 +172,7 @@ var CaseTransactionsComponent = /** @class */ (function () {
170
172
  * @return {?}
171
173
  */
172
174
  function (error) {
173
- _this.errorMessage = (/** @type {?} */ (error));
175
+ _this.errorMessage = (/** @type {?} */ (error.replace(/"/g, "")));
174
176
  _this.isCPODown = true;
175
177
  }));
176
178
  }), (/**
@@ -178,7 +180,7 @@ var CaseTransactionsComponent = /** @class */ (function () {
178
180
  * @return {?}
179
181
  */
180
182
  function (error) {
181
- _this.errorMessage = (/** @type {?} */ (error));
183
+ _this.errorMessage = (/** @type {?} */ (error.replace(/"/g, "")));
182
184
  _this.isAnyFeeGroupAvilable = false;
183
185
  _this.setDefaults();
184
186
  }));
@@ -189,6 +191,7 @@ var CaseTransactionsComponent = /** @class */ (function () {
189
191
  * @return {?}
190
192
  */
191
193
  function (paymentGroups) {
194
+ _this.isAnyFeeGroupAvilable = true;
192
195
  _this.paymentGroups = paymentGroups['payment_groups'];
193
196
  _this.calculateAmounts();
194
197
  _this.calculateOrderFeesAmounts();
@@ -204,7 +207,7 @@ var CaseTransactionsComponent = /** @class */ (function () {
204
207
  * @return {?}
205
208
  */
206
209
  function (error) {
207
- _this.errorMessage = (/** @type {?} */ (error));
210
+ _this.errorMessage = (/** @type {?} */ (error.replace(/"/g, "")));
208
211
  _this.setDefaults();
209
212
  _this.isCPODown = true;
210
213
  }));
@@ -213,17 +216,21 @@ var CaseTransactionsComponent = /** @class */ (function () {
213
216
  * @return {?}
214
217
  */
215
218
  function (error) {
216
- _this.errorMessage = (/** @type {?} */ (error));
219
+ _this.errorMessage = (/** @type {?} */ (error.replace(/"/g, "")));
217
220
  _this.isAnyFeeGroupAvilable = false;
218
221
  _this.setDefaults();
219
222
  }));
220
223
  }
221
- this.checkForExceptionRecord();
222
- this.OrderslistService.getisFromServiceRequestPages().subscribe((/**
223
- * @param {?} data
224
- * @return {?}
225
- */
226
- function (data) { return _this.isFromServiceRequestPage = data; }));
224
+ if (this.paymentGroups !== undefined) {
225
+ this.checkForExceptionRecord();
226
+ }
227
+ if (this.OrderslistService.getisFromServiceRequestPages() !== null) {
228
+ this.OrderslistService.getisFromServiceRequestPages().subscribe((/**
229
+ * @param {?} data
230
+ * @return {?}
231
+ */
232
+ function (data) { return _this.isFromServiceRequestPage = data; }));
233
+ }
227
234
  };
228
235
  /**
229
236
  * @return {?}
@@ -501,21 +508,13 @@ var CaseTransactionsComponent = /** @class */ (function () {
501
508
  * @return {?}
502
509
  */
503
510
  function (event, orderef) {
504
- event.preventDefault();
505
- // if(!this.isAnyFeeGroupAvilable || this.isTurnOff) {
506
- // let url = this.isBulkScanEnable ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
507
- // url += this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
508
- // url += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
509
- // url +=`&caseType=${this.caseType}`
510
- // url += this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
511
- // url += this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
512
- // this.router.navigateByUrl(`/fee-search?selectedOption=${this.selectedOption}&ccdCaseNumber=${this.ccdCaseNumber}${url}`);
513
- // } else {
514
- this.paymentLibComponent.bspaymentdcn = null;
515
- this.paymentLibComponent.paymentGroupReference = orderef;
516
- this.paymentLibComponent.isTurnOff = this.isTurnOff;
517
- this.paymentLibComponent.viewName = 'fee-summary';
518
- //}
511
+ if (orderef.orderAddBtnEnable) {
512
+ event.preventDefault();
513
+ this.paymentLibComponent.bspaymentdcn = null;
514
+ this.paymentLibComponent.paymentGroupReference = orderef.orderRefId;
515
+ this.paymentLibComponent.isTurnOff = this.isTurnOff;
516
+ this.paymentLibComponent.viewName = 'fee-summary';
517
+ }
519
518
  };
520
519
  /**
521
520
  * @param {?} event
@@ -530,15 +529,6 @@ var CaseTransactionsComponent = /** @class */ (function () {
530
529
  this.isFromServiceRequestPage = false;
531
530
  this.viewStatus = 'main';
532
531
  this.paymentLibComponent.viewName = 'case-transactions';
533
- // this.paymentViewService.getBSfeature().subscribe(
534
- // features => {
535
- // let result = JSON.parse(features).filter(feature => feature.uid === BS_ENABLE_FLAG);
536
- // this.paymentLibComponent.ISBSENABLE = result[0] ? result[0].enable : false;
537
- // },
538
- // err => {
539
- // this.paymentLibComponent.ISBSENABLE = false;
540
- // }
541
- // );
542
532
  };
543
533
  /**
544
534
  * @return {?}
@@ -846,39 +836,43 @@ var CaseTransactionsComponent = /** @class */ (function () {
846
836
  */
847
837
  function (fee) {
848
838
  var _this = this;
849
- this.feeId = fee;
850
- this.viewStatus = 'addremission';
851
- this.paymentViewService.getApportionPaymentDetails(this.payment.reference).subscribe((/**
852
- * @param {?} paymentGroup
853
- * @return {?}
854
- */
855
- function (paymentGroup) {
856
- _this.paymentGroup = paymentGroup;
857
- _this.paymentGroup.payments = _this.paymentGroup.payments.filter((/**
858
- * @param {?} paymentGroupObj
839
+ if (this.chkForAddRemission(fee.code)) {
840
+ this.feeId = fee;
841
+ this.viewStatus = 'addremission';
842
+ this.paymentViewService.getApportionPaymentDetails(this.payment.reference).subscribe((/**
843
+ * @param {?} paymentGroup
859
844
  * @return {?}
860
845
  */
861
- function (paymentGroupObj) { return paymentGroupObj['reference'].includes(_this.paymentLibComponent.paymentReference); }));
862
- _this.payment = _this.paymentGroup.payments[0];
863
- // const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
864
- // this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
865
- }), (/**
866
- * @param {?} error
867
- * @return {?}
868
- */
869
- function (error) { return _this.errorMessage = error; }));
846
+ function (paymentGroup) {
847
+ _this.paymentGroup = paymentGroup;
848
+ _this.paymentGroup.payments = _this.paymentGroup.payments.filter((/**
849
+ * @param {?} paymentGroupObj
850
+ * @return {?}
851
+ */
852
+ function (paymentGroupObj) { return paymentGroupObj['reference'].includes(_this.paymentLibComponent.paymentReference); }));
853
+ _this.payment = _this.paymentGroup.payments[0];
854
+ // const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
855
+ // this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
856
+ }), (/**
857
+ * @param {?} error
858
+ * @return {?}
859
+ */
860
+ function (error) { return _this.errorMessage = error.replace(/"/g, ""); }));
861
+ }
870
862
  };
871
863
  /**
872
864
  * @param {?} payment
873
865
  * @param {?} remission
866
+ * @param {?} fees
874
867
  * @return {?}
875
868
  */
876
869
  CaseTransactionsComponent.prototype.addRefundForRemission = /**
877
870
  * @param {?} payment
878
871
  * @param {?} remission
872
+ * @param {?} fees
879
873
  * @return {?}
880
874
  */
881
- function (payment, remission) {
875
+ function (payment, remission, fees) {
882
876
  var _this = this;
883
877
  this.viewStatus = 'addrefundforremission';
884
878
  this.payment = payment;
@@ -895,6 +889,11 @@ var CaseTransactionsComponent = /** @class */ (function () {
895
889
  function (paymentGroupObj) { return paymentGroupObj['reference'].includes(_this.payment.reference); }));
896
890
  _this.payment = _this.paymentGroup.payments[0];
897
891
  _this.remissions = remission;
892
+ _this.remissionFeeAmt = fees.filter((/**
893
+ * @param {?} data
894
+ * @return {?}
895
+ */
896
+ function (data) { return data.code === _this.remissions['fee_code']; }))[0].net_amount;
898
897
  // const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
899
898
  // this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
900
899
  }), (/**
@@ -914,13 +913,6 @@ var CaseTransactionsComponent = /** @class */ (function () {
914
913
  function (event) {
915
914
  event.preventDefault();
916
915
  this.paymentLibComponent.viewName = 'remission';
917
- // let url = this.isBulkScanEnable ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
918
- // url += this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
919
- // url += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
920
- // url += this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
921
- // url += this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
922
- // url +=`&caseType=${this.caseType}`
923
- // this.router.navigateByUrl(`/fee-search?selectedOption=${this.selectedOption}&ccdCaseNumber=${this.ccdCaseNumber}${url}`);
924
916
  };
925
917
  /**
926
918
  * @param {?} event
@@ -1094,9 +1086,13 @@ var CaseTransactionsComponent = /** @class */ (function () {
1094
1086
  * @return {?}
1095
1087
  */
1096
1088
  function (payment) {
1097
- this.viewStatus = 'issuerefund';
1098
- this.payment = payment;
1099
- this.isRefundRemission = true;
1089
+ if (payment !== null && payment !== undefined) {
1090
+ if (this.chkIssueRefundBtnEnable(payment)) {
1091
+ this.viewStatus = 'issuerefund';
1092
+ this.payment = payment;
1093
+ this.isRefundRemission = true;
1094
+ }
1095
+ }
1100
1096
  };
1101
1097
  /**
1102
1098
  * @param {?} feeCode
@@ -1140,30 +1136,32 @@ var CaseTransactionsComponent = /** @class */ (function () {
1140
1136
  */
1141
1137
  function () {
1142
1138
  var _this = this;
1143
- this.orderDetail.forEach((/**
1144
- * @param {?} orderDetail
1145
- * @return {?}
1146
- */
1147
- function (orderDetail) {
1148
- if (orderDetail.payments) {
1149
- orderDetail.payments.forEach((/**
1150
- * @param {?} payment
1151
- * @return {?}
1152
- */
1153
- function (payment) {
1154
- if (payment.method.toLocaleLowerCase() === 'payment by account' && _this.allowFurtherAccessAfter4Days(payment)) {
1155
- _this.isPBA = true;
1156
- }
1157
- }));
1139
+ if (this.orderDetail !== null && this.orderDetail !== undefined) {
1140
+ this.orderDetail.forEach((/**
1141
+ * @param {?} orderDetail
1142
+ * @return {?}
1143
+ */
1144
+ function (orderDetail) {
1145
+ if (orderDetail.payments) {
1146
+ orderDetail.payments.forEach((/**
1147
+ * @param {?} payment
1148
+ * @return {?}
1149
+ */
1150
+ function (payment) {
1151
+ if (payment.method.toLocaleLowerCase() === 'payment by account' && _this.allowFurtherAccessAfter4Days(payment)) {
1152
+ _this.isPBA = true;
1153
+ }
1154
+ }));
1155
+ }
1156
+ }));
1157
+ if (this.isPBA) {
1158
+ return true;
1158
1159
  }
1159
- }));
1160
- if (this.isPBA) {
1161
- return true;
1162
- }
1163
- else {
1164
- return false;
1160
+ else {
1161
+ return false;
1162
+ }
1163
+ ;
1165
1164
  }
1166
- ;
1167
1165
  };
1168
1166
  /**
1169
1167
  * @param {?} payment
@@ -1194,36 +1192,50 @@ var CaseTransactionsComponent = /** @class */ (function () {
1194
1192
  */
1195
1193
  function () {
1196
1194
  var _this = this;
1197
- this.orderDetail.forEach((/**
1198
- * @param {?} orderDetail
1199
- * @return {?}
1200
- */
1201
- function (orderDetail) {
1202
- if (orderDetail.payments) {
1203
- orderDetail.payments.forEach((/**
1204
- * @param {?} payment
1205
- * @return {?}
1206
- */
1207
- function (payment) {
1208
- if (payment.method.toLocaleLowerCase() === 'payment by account' && payment.status.toLocaleLowerCase() === 'success') {
1209
- _this.isRefundRemissionBtnEnable = true;
1210
- }
1211
- }));
1195
+ if (this.orderDetail !== null && this.orderDetail !== undefined) {
1196
+ this.orderDetail.forEach((/**
1197
+ * @param {?} orderDetail
1198
+ * @return {?}
1199
+ */
1200
+ function (orderDetail) {
1201
+ if (orderDetail.payments) {
1202
+ orderDetail.payments.forEach((/**
1203
+ * @param {?} payment
1204
+ * @return {?}
1205
+ */
1206
+ function (payment) {
1207
+ if (payment.method.toLocaleLowerCase() === 'payment by account' && payment.status.toLocaleLowerCase() === 'success' && _this.allowFurtherAccessAfter4Days(payment)) {
1208
+ _this.isRefundRemissionBtnEnable = true;
1209
+ }
1210
+ }));
1211
+ }
1212
+ }));
1213
+ if (this.isRefundRemissionBtnEnable) {
1214
+ return true;
1212
1215
  }
1213
- }));
1214
- if (this.isRefundRemissionBtnEnable) {
1215
- return true;
1216
- }
1217
- else {
1218
- return false;
1216
+ else {
1217
+ return false;
1218
+ }
1219
+ ;
1219
1220
  }
1220
- ;
1221
+ };
1222
+ /**
1223
+ * @param {?} orderRef
1224
+ * @return {?}
1225
+ */
1226
+ CaseTransactionsComponent.prototype.loadPBAAccountPage = /**
1227
+ * @param {?} orderRef
1228
+ * @return {?}
1229
+ */
1230
+ function (orderRef) {
1231
+ this.paymentLibComponent.pbaPayOrderRef = orderRef;
1232
+ this.paymentLibComponent.viewName = 'pba-payment';
1221
1233
  };
1222
1234
  CaseTransactionsComponent.decorators = [
1223
1235
  { type: Component, args: [{
1224
1236
  selector: 'ccpay-case-transactions',
1225
- template: "<div class=\"govuk-width-container\">\n\n <main class=\"govuk-main-wrapper\">\n <ng-container *ngIf=\"viewStatus === 'main1'\">\n <div *ngIf=\"viewStatus === 'main1'&& !isTurnOff && takePayment\">\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n </div>\n\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n <div *ngIf='!isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div *ngIf='isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">Exception reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\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\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header govuk-table__header--custom\" scope=\"col\" *ngIf=\"isBulkScanEnable\">Unallocated payments</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell summary-table-font\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ clAmountDue | currency :'GBP':'symbol':'1.2-2'}}</td>\n <td class=\"govuk-table__cell case-transaction__color summary-table-font\" *ngIf=\"isBulkScanEnable\">{{unprocessedRecordCount}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"govuk-grid-column-two-thirds\" *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"redirectToFeeSearchPage($event)\"\n [disabled]=\"!isAddFeeBtnEnabled\"\n [ngClass]='!isAddFeeBtnEnabled ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Take telephony payment\n </button>\n </div>\n\n </div>\n <div class=\"govuk-grid-row\">\n <!-- <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [FEE_RECORDS_EXISTS]=\"isAnyFeeGroupAvilable\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTREF]=\"paymentRef\"\n [ISNEWPCIPALOFF]=\"isNewPcipalOff\"\n [ISOLDPCIPALOFF]=\"isOldPcipalOff\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments> -->\n </div>\n <div *ngIf=\"takePayment\" class=\" govuk-!-margin-top-9\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <h3 class=\"heading-medium\">Fees</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\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\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header\" scope=\"col\">Action</td>\n\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let paymentGroup of paymentGroups;\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell\">\t{{fee.code}} </td>\n <td class=\"govuk-table__cell\">{{fee.description}}</td>\n <td class=\"govuk-table__cell\">{{fee.volume? fee.volume : '-'}}</td>\n <td class=\"govuk-table__cell\">{{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"paymentGroup.old && i==0\"> {{getGroupOutstandingAmount(paymentGroup)| currency:'GBP':'symbol-narrow':'1.2-2'}}* </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\"> {{calculateAmountDue(fee) | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='!isCheckAmountdueExist(fee.amount_due) || fee.remissions ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n <td class=\"govuk-table__cell\" *ngIf=\"paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='paymentGroup.payments?.length > 0 || paymentGroup.remissions?.length > 0 ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroups?.length === 0\">\n <tr class=\"govuk-table__row\" >\n <td class=\"govuk-table__cell\" colspan=\"7\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"hmcts-banner\" *ngIf=\"isHistoricGroupAvailable\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">information</span>\n * These fees have already been processed offline. Check the notes in CCD for more information.\n </div>\n </div>\n <div class=\"panel panel-no--style\" *ngIf=\"allPayments?.length > 0 || remissions?.length > 0\">\n <!-- payments -->\n <h3 class=\"heading-medium\">Payments</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-28\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header col-15\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Payment status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"7\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <h3 class=\"heading-medium\">Remissions</h3>\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\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"takePayment && isTurnOff\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n\n <div class=\"govuk-grid-column-one-third\" align=\"right\" >\n <a [ngClass]=\"{ 'disable': !isAddFeeBtnEnabled} \" (click)=\"redirectToFeeSearchPage($event)\" class=\"button\">Add a new fee</a>\n </div>\n </div> \n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\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\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ (totalFees - totalRemissions) - totalPayments | currency :'GBP':'symbol':'1.2-2'}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n\n <!-- No fees start -->\n <div *ngIf=\"paymentGroups?.length === 0\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Existing fees</span>\n </div>\n\n <div class=\"govuk-grid-column-full\">\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\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- No fees end -->\n\n <div *ngFor=\"let paymentGroup of paymentGroups\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full govuk-grid-column-full--gr\">\n <span class=\"heading-medium\">Group reference: {{paymentGroup.payment_group_reference}}</span>\n </div>\n </div>\n <div class=\"govuk-grid-row\">\n\n <!--New Code start-->\n\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Exisiting fees</span>\n </div>\n <div class=feeclass>\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\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"groupamount govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" >\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1\">{{fee.code}}</td>\n <td class=\"govuk-table__cell govuk-table__cell--col2\"> {{fee.description}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col3 align-center\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\"> {{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\"> {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6 govuk-table__custom--col6\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n {{getGroupOutstandingAmount(paymentGroup) | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees.length==0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"govuk-inset-text govuk-inset-text__no-border\" *ngIf=\"paymentGroup.payments || paymentGroup.remissions\">\n <details>\n <summary class=\"govuk-hidetext\">\n <span class=\"summary\">Allocated payments and remissions</span>\n </summary>\n\n <div class=\"panel panel-border-narrow\">\n <!-- payments -->\n <span class=\"heading-medium\">Payments</span>\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\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of paymentGroup.payments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(paymentGroup.payment_group_reference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <span class=\"heading-medium\">Remissions</span>\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\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee applied against</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of paymentGroup.remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </details>\n \n\n <div *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"loadFeeSummaryPage(paymentGroup)\"\n [disabled]=\"(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected)\"\n [ngClass]='(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected) ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Add telephone payment\n </button>\n </div>\n </div>\n </div>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"5\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISNEWPCIPALOFF]=\"isNewPcipalOff\"\n [ISOLDPCIPALOFF]=\"isOldPcipalOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n <div class=\"govuk-grid-row govuk-grid__surplus-payments\" *ngIf=\"totalRefundAmount > 0 && takePayment\">\n <div class=\"govuk-grid-column-full govuk-grid__surplus-payments-col1\">\n <h3 class=\"heading-medium\">Surplus payments</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\n Total surplus payments received: {{totalRefundAmount | currency :'GBP':'symbol':'1.2-2'}}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"takePayment\">\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"1\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </div>\n <div *ngIf=\"!takePayment\" class=\"govuk-grid-row govuk-grid__surplus-payments\">\n <div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Sorry, there is a problem with the service\n </h2>\n <p>Payment requests and payments cannot currently be shown. Try again.</p>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n <div class=\"govuk-grid-column-full\">\n <div>\n <h3 class=\"heading-medium\">Service requests</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-14\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-15\" scope=\"col\">Party</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let orderRef of orderLevelFees;let i = index;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderStatus}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ orderRef.orderTotalFees | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td *ngIf=\"cpoDetails !== null\" class=\"govuk-table__cell whitespace-inherit\">{{cpoDetails['responsibleParty']}}</td> \n <td *ngIf=\"cpoDetails === null\" class=\"govuk-table__cell whitespace-inherit\"></td> \n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderRefId}}</td> \n <td class=\"govuk-table__cell whitespace-inherit\"></td> \n <td class=\"govuk-table__cell whitespace-inherit\">\t\n <a href=\"javascript:void(0)\" (click)=\"goToOrderViewDetailSection(orderRef)\">Review</a>\n </td>\n </tr>\n </tbody>\n \n <tbody class=\"govuk-table__body\" *ngIf=\"orderLevelFees?.length === 0\">\n <tr class=\"govuk-table__row\" >\n <td class=\"govuk-table__cell\" colspan=\"7\" style=\"text-align:left;\">No service requests on this case.</td>\n </tr>\n </tbody>\n </table>\n <!-- <span>\n <a (click)=\"redirectToFeeSearchPage($event)\"\n [class.disabled]=\"!isAddFeeBtnEnabled\">Create payment request and pay</a>\n </span> -->\n\n </div>\n <span class=\"heading-medium\">Payments</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-13\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-14\" scope=\"col\">Date allocated</td>\n <td class=\"govuk-table__header col-20\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell col-13 whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell col-10 whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell col-17 whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"govuk-table__cell col-24 whitespace-inherit\">{{ payment.paymentGroupReference }}</td>\n <td class=\"govuk-table__cell col-13 whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n \n <!-- <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"8\">No payments recorded</td>\n </tbody> -->\n </table>\n <ccpay-app-unprocessed-payments class=\"govuk-table\"\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"2\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </div>\n </div>\n </ng-container>\n\n<!--Order Case Transactions Page-->\n <ng-container *ngIf=\"viewStatus === 'main' && !isTurnOff && takePayment\">\n <div>\n <div class=\"govuk-grid-row\">\n <h1 class=\"govuk-grid-column-two-thirds govuk-heading-l govuk-!-margin-top-0\">Case transactions</h1>\n <ng-container *ngIf='!isExceptionRecord' class=\" govuk-!-margin-bottom-6\" style=\"align-self: flex-end;\">\n <b> Case reference: </b>{{ ccdCaseNumber | ccdHyphens }}\n </ng-container>\n <ng-container *ngIf='isExceptionRecord' class=\"col-61 govuk-!-margin-bottom-3 col-55\" style=\"align-self: flex-end;\">\n <b> Exception reference:</b>{{ ccdCaseNumber | ccdHyphens }}\n </ng-container>\n <div class=\"govuk-grid-row\">\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\">Total payments</td>\n <td class=\"govuk-table__header govuk-table__header--custom\" scope=\"col\" *ngIf=\"isBulkScanEnable\">Unallocated payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n \n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell summary-table-font\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell case-transaction__color summary-table-font\" *ngIf=\"isBulkScanEnable\">{{unprocessedRecordCount}}</td>\n \n <td class=\"govuk-table__cell summary-table-font\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ clAmountDue | currency :'GBP':'symbol':'1.2-2'}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ORDERIDDETAILS'>\n\n <!--Payment Request-->\n <div class=\"paymentrequest\">\n <span class=\"heading-medium\">Service requests</span>\n <ng-container *ngIf=\"orderLevelFees?.length > 0\">\n <table class=\"govuk-table\" *ngIf=\"orderLevelFees?.length > 0\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-14\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-15\" scope=\"col\">Party</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header col\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let orderRef of orderLevelFees;let i = index;\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderStatus}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ orderRef.orderTotalFees | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td *ngIf=\"cpoDetails !== null\" class=\"govuk-table__cell whitespace-inherit\">{{cpoDetails['responsibleParty']}}</td> \n <td *ngIf=\"cpoDetails === null\" class=\"govuk-table__cell whitespace-inherit\"></td> \n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderRefId}}</td>\n <td class=\"govuk-table__cell\">\t\n <a href=\"javascript:void(0)\" (click)=\"goToOrderViewDetailSection(orderRef)\">Review</a>\n </td>\n <td style=\"text-align: right;\">\n \n <button type=\"submit\" (click)=\"redirectToOrderFeeSearchPage($event,orderRef.orderRefId)\"\n *ngIf=\"orderRef.orderAddBtnEnable\"\n [ngClass]='!orderRef.orderAddBtnEnable ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Take telephony payment\n </button></td>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"orderLevelFees?.length === 0\">\n <br/>No service requests on this case.<br/>\n </ng-container>\n <span>\n <br/>\n <a (click)=\"redirectToFeeSearchPage($event)\"\n [class.disabled]=\"!isAddFeeBtnEnabled\">Create service request and pay</a><br/>\n </span>\n </div>\n <div>\n <span class=\"heading-medium\"><br/>Payments</span>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"3\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTREF]=\"paymentRef\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n\n <ng-container *ngIf=\"allPayments?.length > 0\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell col-14 whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell col-10 whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell col-17 whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell col-24 whitespace-inherit\">{{ payment.paymentGroupReference }}</td>\n <td class=\"govuk-table__cell col-13 whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n \n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"8\">No payments recorded</td>\n </tbody>\n </table>\n \n </ng-container>\n \n </div>\n <div>\n <span class=\"heading-medium\"><br/>Refunds</span>\n <ccpay-refund-status\n [ccdCaseNumber]=\"ccdCaseNumber\" \n [isTurnOff]=\"isTurnOff\"\n [LOGGEDINUSERROLES]=\"LOGGEDINUSERROLES\" \n [isNewPcipalOff]=\"isNewPcipalOff\"\n [isOldPcipalOff]=\"isOldPcipalOff\"\n ></ccpay-refund-status>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!takePayment && viewStatus !== 'issuerefund' && viewStatus !== 'addrefundforremission' && viewStatus !== 'order-full-view' && viewStatus !== 'addremission' && viewStatus !== 'feeRemovalConfirmation' \">\n <div *ngIf=\"errorMessage && serviceRequestValue === 'false'\">\n <div *ngIf=\"isCPODown && isAnyFeeGroupAvilable\" class=\" error govuk-inset-text govuk-!-margin-top-7\">\n No party information currently available - try again later.\n </div>\n <div *ngIf=\"!isAnyFeeGroupAvilable\" class=\"error\">\n <h3 class=\"govuk-heading-m govuk-!-margin-top-7 govuk-!-margin-bottom-1\">Sorry, there is a problem with the service</h3>\n <p>Payment requests and payments cannot currently be shown. Try again.</p>\n </div>\n </div>\n <div class=\"govuk-grid-row govuk-grid__surplus-payments\">\n \n <div class=\"govuk-grid-column-full\">\n <!-- <div *ngIf=\"serviveRequestValue === 'true'\"> -->\n <span *ngIf=\"serviceRequestValue === 'false'\" class=\"heading-medium\">Service requests</span>\n <ng-container *ngIf=\"orderLevelFees?.length > 0\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-13\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-8\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-14\" scope=\"col\">Party</td>\n <td class=\"govuk-table__header col-20\" scope=\"col\">Request reference\t</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let orderRef of orderLevelFees;let i = index;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderStatus}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderTotalFees | currency :'GBP':'symbol':'1.2-2'}}</td>\n <td *ngIf=\"cpoDetails !== null\" class=\"govuk-table__cell whitespace-inherit\">{{cpoDetails['responsibleParty']}}</td> \n <td *ngIf=\"cpoDetails === null\" class=\"govuk-table__cell whitespace-inherit\"></td> \n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderRefId}}</td> \n <td class=\"govuk-table__cell of-visible\"> <a href=\"javascript:void(0)\" *ngIf=\"serviceRequestValue !== 'false' && check4AllowedRoles2AccessPBApayment()\"> Make a payment</a></td> \n <td class=\"govuk-table__cell\">\t\n <a href=\"javascript:void(0)\" (click)=\"goToOrderViewDetailSection(orderRef)\">Review</a>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"orderLevelFees?.length === 0 && serviceRequestValue === 'false'\">\n <br/>No service requests on this case.<br/>\n </ng-container>\n <ng-container *ngIf=\"orderLevelFees?.length === 0 && serviceRequestValue !== 'false'\">\n <h1 class=\"govuk-heading-l govuk-heading-lw\">If you are expecting to pay and are not able to see a service request,</h1>\n <p>please refresh and try in some time.</p>\n </ng-container>\n \n <!-- </div> -->\n\n </div>\n <div class=\"govuk-grid-column-full\">\n <div *ngIf=\"serviceRequestValue === 'false'\">\n <span class=\"heading-medium\"><br/>Payments</span>\n <ng-container *ngIf=\"allPayments?.length > 0\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-14\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-17\" scope=\"col\">Date</td>\n <td class=\"govuk-table__header col-24\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-13\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.paymentGroupReference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n \n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"8\">No payments recorded</td>\n </tbody>\n </table>\n <ccpay-app-unprocessed-payments class=\"govuk-table\"\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"4\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [FEE_RECORDS_EXISTS]=\"isAnyFeeGroupAvilable\" \n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </ng-container>\n\n <ng-container *ngIf=\"allPayments?.length === 0\">\n <br/>No payments.\n </ng-container>\n </div>\n </div>\n <div class=\"govuk-grid-column-full\" *ngIf=\"serviceRequestValue === 'false'\">\n <span class=\"heading-medium\"><br/>Refunds</span>\n <ccpay-refund-status [ccdCaseNumber]=\"ccdCaseNumber\" ></ccpay-refund-status>\n </div>\n\n \n </div>\n\n \n </ng-container>\n\n\n<input #myInput type='hidden' id='iFrameDrivenImageValue' value='FEEREMOVALCONFIRMATION_2'>\n\n<!-- Order Full View Details-->\n<ng-container *ngIf=\"viewStatus === 'order-full-view'\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"#\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n <div class=\"govuk-grid-column-full\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Service request</h1>\n </div>\n <table >\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Service request reference</td>\n <td>{{orderRef}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Status</td>\n <td>{{orderStatus}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Date created</td>\n <td>{{orderCreated | date:'dd MMMM yyyy'}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Party</td>\n <td>{{orderParty}}</td>\n </tr>\n\n\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">CCD event</td>\n <td>{{orderCCDEvent}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"govuk-grid-column-full order-class\">\n <div class=\"column\">\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\">Fee</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let order of orderDetail;\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of order.fees; let i = index;\">\n <td class=\"govuk-table__cell col-60 whitespace-inherit\">{{fee.description}}</td>\n <td class=\"govuk-table__cell\">{{fee.volume? fee.volume : '-'}} X {{ fee.calculated_amount/fee.volume| currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td *ngIf=\"chkForAddRemission(fee.code)\" class=\"govuk-table__cell\" style=\"text-align: right;\" >\n <button (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n </td>\n <td *ngIf=\"!chkForAddRemission(fee.code)\" class=\"govuk-table__cell\" style=\"text-align: right;\" >\n \n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngFor=\"let order of orderDetail;\">\n <tr class=\"govuk-table__row\" *ngIf=\"order.fees?.length === 0\" >\n <td class=\"govuk-table__cell\" colspan=\"7\" style=\"text-align:left;\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n\n </div>\n <div style=\"width: 100%;\"> \n <p class=\"totalfees\">Total fees: {{orderFeesTotal | currency:'GBP':'symbol-narrow':'1.2-2' }}</p>\n </div>\n </div>\n <!-- <div class=\"hmcts-banner\" *ngIf=\"isHistoricGroupAvailable\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">information</span>\n * These fees have already been processed offline. Check the notes in CCD for more information.\n </div>\n </div> -->\n\n <!-- remissions -->\n <ng-container *ngFor=\"let order of orderDetail;\" >\n <div *ngIf=\"order.remissions?.length > 0\" class=\"govuk-grid-column-full order-class\"> \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\">Help with fees or remission code</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Reference</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Fee</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header whitespace-inherit refundBtn\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" >\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of order.remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n <td *ngIf=\"chkIsRefundRemissionBtnEnable()\" class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n <button (click)=\"addRefundForRemission(order.payments[0],remission)\" class=\"govuk-button govuk-button--secondary\"> Add refund</button>\n </td>\n <td *ngIf=\"!chkIsRefundRemissionBtnEnable()\" class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n \n </td>\n </tr>\n </tbody>\n \n\n </table>\n <div class=\"summarypagealign\">\n <p>Total reductions: {{orderRemissionTotal | currency:'GBP':'symbol-narrow':'1.2-2' }}</p>\n </div>\n <div class=\"summarypagealign\">\n <br>\n <p class=\"summarypage\">Total fees to pay: {{(orderFeesTotal - orderRemissionTotal) | currency:'GBP':'symbol-narrow':'1.2-2' }}</p>\n </div>\n </div>\n <div *ngIf=\"order.remissions?.length === 0\">\n <span class=\"mar-17\" >No help with fees or remissions.</span>\n </div>\n \n </ng-container>\n \n \n <!--Payments-->\n <ng-container *ngFor=\"let order of orderDetail;\" >\n <div *ngIf=\"order.payments?.length > 0\" class=\"govuk-grid-column-full order-class\"> \n <h3 class=\"heading-medium\">Payments</h3>\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\"></td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of order.payments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td *ngIf=\"chkIssueRefundBtnEnable(payment)\" class=\"govuk-table__cell\" style=\"text-align: right;\">\n <button (click)=\"issueRefund(payment)\" class=\"govuk-button govuk-button--secondary\">Issue refund</button>\n </td>\n <td *ngIf=\"!chkIssueRefundBtnEnable(payment)\" class=\"govuk-table__cell\" style=\"text-align: right;\">\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"order.payments === undefined || order.payments === null\">\n <h3 class=\"heading-medium mar-17\">Payments</h3>\n <span class=\"mar-17\" >No Payments</span>\n </div>\n \n </ng-container>\n <div *ngIf=\"((orderFeesTotal - orderRemissionTotal)- orderTotalPayments) > 0\" >\n <p class=\"totalPay\">Total left to pay: <b>{{((orderFeesTotal - orderRemissionTotal)- orderTotalPayments )| currency:'GBP':'symbol-narrow':'1.2-2' }}</b> </p>\n </div>\n <div *ngIf=\"((orderFeesTotal - orderRemissionTotal)- orderTotalPayments) < 0\" >\n <p class=\"totalPay\">Total left to pay: <b>0</b> </p>\n </div>\n\n \n</ng-container>\n<ccpay-add-remission *ngIf=\"viewStatus === 'addremission' && feeId\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[fee]=\"feeId\" \n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[paymentGroupRef]=\"orderRef\" \n[isFromServiceRequestPage] = \"true\"\n[payment] = \"payment\"\n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ccpay-add-remission *ngIf=\"viewStatus === 'issuerefund' && payment\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[isFromServiceRequestPage] = \"true\"\n[payment]=\"payment\" \n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[paymentGroupRef]=\"orderRef\" \n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ccpay-add-remission *ngIf=\"viewStatus === 'addrefundforremission' && payment\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[payment]=\"payment\" \n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[remission] = \"remissions\"\n[isFromServiceRequestPage]=\"true\" \n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ng-container *ngIf=\"viewStatus === 'feeRemovalConfirmation'\">\n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to delete this fee?\n </strong>\n </div>\n <div class=\"govuk-button-grb\">\n <form novalidate>\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemoval()\">\n Cancel\n </button>\n <button type=\"submit\" class=\"button\"\n [disabled]=\"isRemoveBtnDisabled\"\n [ngClass]='isRemoveBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"removeFee(feeId)\">\n Remove\n </button>\n </form>\n </div>\n</ng-container>\n\n\n\n\n\n<!-- <table class=\"table\">\n <tr>\n <th class=\"bold font-xsmall\">Payment Group reference</th>\n <th class=\"bold font-xsmall\">Payment reference</th>\n <th class=\"bold font-xsmall\">Date created</th>\n <th class=\"bold font-xsmall\">Channel</th>\n <th class=\"bold font-xsmall\">Method</th>\n <th class=\"bold font-xsmall\">Amount</th>\n <th class=\"bold font-xsmall\">Status</th>\n </tr>\n <tr *ngFor=\"let payment of payments.payments\">\n <td class=\"font-xsmall\">\n <a href=\"javascript:void(0)\" (click)=\"loadPaymentViewComponent(payment.payment_group_reference, payment.payment_reference, payment.method)\">{{ payment.payment_group_reference }}</a>\n <td class=\"font-xsmall\">{{ payment.payment_reference }}</td>\n <td class=\"font-xsmall\">{{ payment.date_created | date:'dd MMM yyyy hh:mm:ss' }}</td>\n <td class=\"font-xsmall\">{{ payment.channel | titlecase }}</td>\n <td class=\"font-xsmall\">{{ payment.method | titlecase }}</td>\n <td class=\"font-xsmall\">\u00A3{{ payment.amount | number:'.2' }}</td>\n <td *ngIf=\"payment.method === 'card' && payment.channel === 'online'\">\n <details>\n <summary><span class=\"summary font-xsmall\">{{ payment.status }}</span></summary>\n <div class=\"panel panel-border-narrow\" *ngIf=\"payment.status === 'Failed'\">\n <div *ngFor=\"let statusHistory of payment.status_histories\">\n <p class=\"font-xsmall\" *ngIf=\"statusHistory.error_code === 'P0010'\">\n Payment rejected due to payment method selected or payment information entered, for example, failed fraud check, a 3D Secure authentication failure, or the user does not have enough money in account\n </p>\n <p class=\"font-xsmall\" *ngIf=\"statusHistory.error_code === 'P0020'\">\n Payment was not confirmed and completed within 90 minutes of being created\n </p>\n <p class=\"font-xsmall\" *ngIf=\"statusHistory.error_code === 'P0030'\">\n User clicked on the \u201CCancel payment\u201D button during the payment journey\n </p>\n <p class=\"font-xsmall\" *ngIf=\"statusHistory.error_code === 'P0050'\">\n Multiple possible causes, for example a configuration problem with the payment provider, or incorrect login credentials\n </p>\n </div>\n </div>\n </details>\n </td>\n <td *ngIf=\"payment.method === 'card' && payment.channel === 'telephony'\" class=\"font-xsmall\">\n {{ payment.status}}\n </td>\n <td *ngIf=\"payment.method === 'payment by account'\">\n <details>\n <summary><span class=\"summary font-xsmall\">{{ payment.status }}</span></summary>\n <div class=\"panel panel-border-narrow\" *ngIf=\"payment.status === 'Pending'\">\n <p class=\"font-xsmall\">This means the transaction is being processed by Liberata.</p>\n </div>\n </details>\n </td>\n </tr>\n </table> -->\n\n</main>\n</div>",
1226
- styles: [".govuk-grid-column-full--gr{position:relative;margin-bottom:10px}.disable{text-decoration:none;cursor:default;color:#fff;background-color:grey;pointer-events:none}.govuk-grid__surplus-payments{margin:20px 0}.govuk-grid__surplus-payments>.govuk-grid-column-full{padding:0}.govuk-grid__surplus-payments-col1{margin-bottom:10px}.govuk-inset-text__no-border{border-left:0}.govuk-hidetext{font-size:22px;padding-bottom:10px}.lowercase{text-transform:lowercase}.channel::first-letter{text-transform:uppercase}.govuk-heading-xl{font-size:48px;margin-bottom:1px}.govuk-section-break--visible{border-bottom:2px solid #000}.totalpayments.govuk-table__row{border-bottom:2px solid #000!important}.govuk-inset-text{margin-left:1em}.govuk-button{font-size:19px;margin-bottom:0!important}.govuk-table__cell.govuk-table__cell--col6.govuk-table__custom--col6,.groupamount.govuk-table__header{text-align:right}.feeclass{padding-left:.7em}.align-center{text-align:center}details summary{display:list-item}.case-transaction__color{color:#a71414;font-weight:700;text-align:center}.capitalize::first-letter{text-transform:uppercase}.govuk-inset-text__no-left-margin{margin-left:0;padding-left:0}.whitespace-inherit{white-space:inherit!important}.govuk-section-records-break{margin:10px;border-bottom:2px solid #000!important}.exisitng-fees{margin-left:12px}.add-telephony-payment{margin-top:-2em;margin-left:-2em}.govuk-table__header--custom{text-align:center}.disable-link{cursor:default;pointer-events:none;color:#8e8c8c}.panel-no--style{border-left-style:none}.col-28{width:28%!important}.col-8{width:8%!important}.col-60{width:60%!important}.col-32{width:32%!important}.col-34{width:34%!important}.col-15{width:15%!important;padding-right:0!important;padding-left:0!important}.col-16{width:16%!important}.col-25{width:25%!important}.col-14{width:14%!important}.col-17{width:17%!important}.col-12{width:12%!important}.col-9{width:9%!important}.col-10{width:10%!important}.col-11{width:11%!important}.col-13{width:13%!important}.col-21{width:21%!important}.col-20{width:20%!important}.col-24{width:24%!important}.govuk-table__cell,.govuk-table__header{padding:10px 10px 10px 0}.col-27{width:27%!important}td{white-space:nowrap;overflow:hidden!important}.col-19{width:19%!important;padding-left:0!important}.col-18{width:18%!important;padding-left:0!important;padding-right:0!important}.col-37{width:37%!important}.col-55{width:55%!important}.govuk-table{margin-bottom:1px}.hmcts-banner>.hmcts-banner__message{font-size:19px;line-height:1.25}.summary-table-font{font-size:36px}.order-class{padding-top:3em}.govuk-table__cell:last-child,.govuk-table__header:last-child{text-align:right}.govuk-grid-column-two-thirds{width:64%!important;padding:0!important}.govuk-heading-l{font-size:36px;margin-bottom:10px}.govuk-heading-lw{width:70%}.paymentrequest{margin-top:1em}.mar-17{margin-left:17px}.col-61{width:61px!important;padding:0!important}.error{width:960px;margin:auto}.summarypage{padding-left:36em;margin-top:2em}.summarypagealign{width:100%;text-align:right;margin-top:2em}.govuk-inset-text{font-size:2.1875rem}table{table-layout:fixed;width:100%}td,th{word-wrap:break-word}.totalPay{padding-right:14px;float:right;margin-top:2em}.govuk-back-link{font-size:1.5rem!important}.totalfees{float:right;margin-top:2em}.refundBtn{text-align:right;width:18%}.of-visible{overflow:visible!important}"]
1237
+ template: "<div class=\"govuk-width-container\">\n\n <main class=\"govuk-main-wrapper\">\n <ng-container *ngIf=\"viewStatus === 'main1'\">\n <div *ngIf=\"viewStatus === 'main1'&& !isTurnOff && takePayment\">\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n </div>\n\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n <div *ngIf='!isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div *ngIf='isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">Exception reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\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\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header govuk-table__header--custom\" scope=\"col\" *ngIf=\"isBulkScanEnable\">Unallocated payments</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell summary-table-font\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ clAmountDue | currency :'GBP':'symbol':'1.2-2'}}</td>\n <td class=\"govuk-table__cell case-transaction__color summary-table-font\" *ngIf=\"isBulkScanEnable\">{{unprocessedRecordCount}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"govuk-grid-column-two-thirds\" *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"redirectToFeeSearchPage($event)\"\n [disabled]=\"!isAddFeeBtnEnabled\"\n [ngClass]='!isAddFeeBtnEnabled ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Take telephony payment\n </button>\n </div>\n\n </div>\n <div class=\"govuk-grid-row\">\n <!-- <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [FEE_RECORDS_EXISTS]=\"isAnyFeeGroupAvilable\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTREF]=\"paymentRef\"\n [ISNEWPCIPALOFF]=\"isNewPcipalOff\"\n [ISOLDPCIPALOFF]=\"isOldPcipalOff\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments> -->\n </div>\n <div *ngIf=\"takePayment\" class=\" govuk-!-margin-top-9\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <h3 class=\"heading-medium\">Fees</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\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\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header\" scope=\"col\">Action</td>\n\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let paymentGroup of paymentGroups;\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell\">\t{{fee.code}} </td>\n <td class=\"govuk-table__cell\">{{fee.description}}</td>\n <td class=\"govuk-table__cell\">{{fee.volume? fee.volume : '-'}}</td>\n <td class=\"govuk-table__cell\">{{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"paymentGroup.old && i==0\"> {{getGroupOutstandingAmount(paymentGroup)| currency:'GBP':'symbol-narrow':'1.2-2'}}* </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\"> {{calculateAmountDue(fee) | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='!isCheckAmountdueExist(fee.amount_due) || fee.remissions ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n <td class=\"govuk-table__cell\" *ngIf=\"paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='paymentGroup.payments?.length > 0 || paymentGroup.remissions?.length > 0 ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroups?.length === 0\">\n <tr class=\"govuk-table__row\" >\n <td class=\"govuk-table__cell\" colspan=\"7\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"hmcts-banner\" *ngIf=\"isHistoricGroupAvailable\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">information</span>\n * These fees have already been processed offline. Check the notes in CCD for more information.\n </div>\n </div>\n <div class=\"panel panel-no--style\" *ngIf=\"allPayments?.length > 0 || remissions?.length > 0\">\n <!-- payments -->\n <h3 class=\"heading-medium\">Payments</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-28\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header col-15\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Payment status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"7\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <h3 class=\"heading-medium\">Remissions</h3>\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\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"takePayment && isTurnOff\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n\n <div class=\"govuk-grid-column-one-third\" align=\"right\" >\n <a [ngClass]=\"{ 'disable': !isAddFeeBtnEnabled} \" (click)=\"redirectToFeeSearchPage($event)\" class=\"button\">Add a new fee</a>\n </div>\n </div> \n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\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\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ (totalFees - totalRemissions) - totalPayments | currency :'GBP':'symbol':'1.2-2'}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n\n <!-- No fees start -->\n <div *ngIf=\"paymentGroups?.length === 0\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Existing fees</span>\n </div>\n\n <div class=\"govuk-grid-column-full\">\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\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- No fees end -->\n\n <div *ngFor=\"let paymentGroup of paymentGroups\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full govuk-grid-column-full--gr\">\n <span class=\"heading-medium\">Group reference: {{paymentGroup.payment_group_reference}}</span>\n </div>\n </div>\n <div class=\"govuk-grid-row\">\n\n <!--New Code start-->\n\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Exisiting fees</span>\n </div>\n <div class=feeclass>\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\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"groupamount govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" >\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1\">{{fee.code}}</td>\n <td class=\"govuk-table__cell govuk-table__cell--col2\"> {{fee.description}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col3 align-center\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\"> {{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\"> {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6 govuk-table__custom--col6\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n {{getGroupOutstandingAmount(paymentGroup) | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees.length==0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"govuk-inset-text govuk-inset-text__no-border\" *ngIf=\"paymentGroup.payments || paymentGroup.remissions\">\n <details>\n <summary class=\"govuk-hidetext\">\n <span class=\"summary\">Allocated payments and remissions</span>\n </summary>\n\n <div class=\"panel panel-border-narrow\">\n <!-- payments -->\n <span class=\"heading-medium\">Payments</span>\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\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of paymentGroup.payments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(paymentGroup.payment_group_reference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <span class=\"heading-medium\">Remissions</span>\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\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee applied against</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of paymentGroup.remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </details>\n \n\n <div *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"loadFeeSummaryPage(paymentGroup)\"\n [disabled]=\"(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected)\"\n [ngClass]='(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected) ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Add telephone payment\n </button>\n </div>\n </div>\n </div>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"5\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISNEWPCIPALOFF]=\"isNewPcipalOff\"\n [ISOLDPCIPALOFF]=\"isOldPcipalOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n <div class=\"govuk-grid-row govuk-grid__surplus-payments\" *ngIf=\"totalRefundAmount > 0 && takePayment\">\n <div class=\"govuk-grid-column-full govuk-grid__surplus-payments-col1\">\n <h3 class=\"heading-medium\">Surplus payments</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\n Total surplus payments received: {{totalRefundAmount | currency :'GBP':'symbol':'1.2-2'}}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"takePayment\">\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"1\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </div>\n <div *ngIf=\"!takePayment\" class=\"govuk-grid-row govuk-grid__surplus-payments\">\n <!-- <div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Sorry, there is a problem with the service\n </h2>\n <p>Payment requests and payments cannot currently be shown. Try again.</p>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div> -->\n <div class=\"govuk-grid-column-full\">\n \n <span class=\"heading-medium\">Payments</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-13\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-14\" scope=\"col\">Date allocated</td>\n <td class=\"govuk-table__header col-20\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell col-13 whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell col-10 whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell col-17 whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"govuk-table__cell col-24 whitespace-inherit\">{{ payment.paymentGroupReference }}</td>\n <td class=\"govuk-table__cell col-13 whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n \n <!-- <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"8\">No payments recorded</td>\n </tbody> -->\n </table>\n <ccpay-app-unprocessed-payments class=\"govuk-table\"\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"2\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </div>\n </div>\n </ng-container>\n\n<!--Order Case Transactions Page-->\n <ng-container *ngIf=\"viewStatus === 'main' && !isTurnOff && takePayment\">\n <div>\n \n <div class=\"govuk-grid-row\">\n <h1 class=\"govuk-grid-column-two-thirds govuk-heading-l govuk-!-margin-top-0\">Case transactions</h1>\n <ng-container *ngIf='!isExceptionRecord' class=\" govuk-!-margin-bottom-6 alignself\">\n <b> Case reference: </b>{{ ccdCaseNumber | ccdHyphens }}\n </ng-container>\n <ng-container *ngIf='isExceptionRecord' class=\"govuk-!-margin-bottom-3 col-55 alignself\" >\n <b> Exception reference:</b>{{ ccdCaseNumber | ccdHyphens }}\n </ng-container>\n <div class=\"govuk-grid-row\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-25\" scope=\"col\">Total payments</td>\n <td class=\"govuk-table__header govuk-table__header--custom col-25\" scope=\"col\" *ngIf=\"isBulkScanEnable\">Unallocated payments</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Amount due</td>\n \n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell summary-table-font\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell case-transaction__color summary-table-font\" *ngIf=\"isBulkScanEnable\">{{unprocessedRecordCount}}</td>\n \n <td class=\"govuk-table__cell summary-table-font\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ clAmountDue | currency :'GBP':'symbol':'1.2-2'}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ORDERIDDETAILS'>\n\n <!--Payment Request-->\n <div class=\"paymentrequest\">\n <span class=\"heading-medium\">Service requests</span>\n <ng-container>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-14\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Party</td>\n <td class=\"govuk-table__header col-21\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header col\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"orderLevelFees?.length > 0\">\n <tr *ngFor=\"let orderRef of orderLevelFees;let i = index;\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderStatus}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ orderRef.orderTotalFees | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td *ngIf=\"cpoDetails !== null\" class=\"govuk-table__cell whitespace-inherit\">{{cpoDetails['responsibleParty']}}</td> \n <td *ngIf=\"cpoDetails === null\" class=\"govuk-table__cell whitespace-inherit\"></td> \n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderRefId}}</td>\n <td class=\"govuk-table__cell\">\t\n <a href=\"javascript:void(0)\" (click)=\"goToOrderViewDetailSection(orderRef)\">Review</a>\n </td>\n <td class=\"alignright\">\n \n <button type=\"submit\" (click)=\"redirectToOrderFeeSearchPage($event,orderRef)\"\n [disabled]=\"!orderRef.orderAddBtnEnable\"\n [ngClass]='!orderRef.orderAddBtnEnable ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Take telephony payment\n </button></td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body alignleft\" *ngIf=\"orderLevelFees?.length === 0\">\n <td colspan=\"6\">No service requests on this case.</td>\n </tbody>\n </table>\n </ng-container>\n <!-- <ng-container *ngIf=\"orderLevelFees?.length === 0\">\n <br/>No service requests on this case.<br/>\n </ng-container> -->\n <span>\n <br/>\n <a (click)=\"redirectToFeeSearchPage($event)\"\n [class.disabled]=\"!isAddFeeBtnEnabled\">Create service request and pay</a><br/>\n </span>\n </div>\n <div>\n <span class=\"heading-medium\"><br/>Payments</span>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"3\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTREF]=\"paymentRef\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n\n <ng-container>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell col-14 whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell col-10 whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell col-17 whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell col-24 whitespace-inherit\">{{ payment.paymentGroupReference }}</td>\n <td class=\"govuk-table__cell col-13 whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n \n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0 && unprocessedRecordCount <= 0\">\n <td colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n \n </ng-container>\n \n </div>\n <div>\n <span class=\"heading-medium\"><br/>Refunds</span>\n <ccpay-refund-status\n [ccdCaseNumber]=\"ccdCaseNumber\" \n [isTurnOff]=\"isTurnOff\"\n [LOGGEDINUSERROLES]=\"LOGGEDINUSERROLES\" \n [isNewPcipalOff]=\"isNewPcipalOff\"\n [isOldPcipalOff]=\"isOldPcipalOff\"\n ></ccpay-refund-status>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!takePayment && viewStatus === 'main'\">\n <!-- <div *ngIf=\"errorMessage\">\n <div *ngIf=\"isCPODown && isAnyFeeGroupAvilable\" class=\" error govuk-inset-text govuk-!-margin-top-7\">\n No party information currently available - try again later.\n </div>\n <div *ngIf=\"!isAnyFeeGroupAvilable\" class=\"error\">\n <h3 class=\"govuk-heading-m govuk-!-margin-top-7 govuk-!-margin-bottom-1\">Sorry, there is a problem with the service</h3>\n <p>Payment requests and payments cannot currently be shown. Try again.</p>\n </div>\n </div> -->\n \n <div class=\"govuk-grid-row govuk-grid__surplus-payments\">\n \n <div class=\"govuk-grid-column-full\">\n <!-- <div *ngIf=\"serviveRequestValue === 'true'\"> -->\n <span *ngIf=\"serviceRequestValue === 'false'\" class=\"heading-medium\">Service requests</span>\n <ng-container>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-14\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Party</td>\n <td class=\"govuk-table__header col-21\" scope=\"col\">Request reference\t</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"orderLevelFees?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let orderRef of orderLevelFees;let i = index;\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderStatus}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderTotalFees | currency :'GBP':'symbol':'1.2-2'}}</td>\n <td *ngIf=\"cpoDetails !== null\" class=\"govuk-table__cell whitespace-inherit\">{{cpoDetails['responsibleParty']}}</td> \n <td *ngIf=\"cpoDetails === null\" class=\"govuk-table__cell whitespace-inherit\"></td> \n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderRefId}}</td> \n <td class=\"govuk-table__cell of-visible\"> <a href=\"javascript:void(0)\" (click)=\"loadPBAAccountPage(orderRef)\" *ngIf=\"serviceRequestValue !== 'false' && check4AllowedRoles2AccessPBApayment() && orderRef.orderStatus === 'Not paid'\"> Make a payment</a></td> \n <td class=\"govuk-table__cell\">\t\n <a href=\"javascript:void(0)\" (click)=\"goToOrderViewDetailSection(orderRef)\">Review</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"orderLevelFees?.length === 0 && serviceRequestValue === 'false'\">\n <tr class=\"govuk-table__row\" >\n <td class=\"alignleft\" colspan=\"7\">No service requests on this case.</td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"orderLevelFees?.length === 0 && serviceRequestValue !== 'false' && !isAnyFeeGroupAvilable\">\n <h1 class=\"govuk-heading-l govuk-heading-lw\">If you are expecting to pay and are not able to see a service request,</h1>\n <p>please refresh and try in some time.</p>\n </ng-container>\n \n <!-- </div> -->\n\n </div>\n <div class=\"govuk-grid-column-full\">\n <div *ngIf=\"serviceRequestValue === 'false'\">\n <span class=\"heading-medium\"><br/>Payments</span>\n <ng-container >\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-14\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-17\" scope=\"col\">Date</td>\n <td class=\"govuk-table__header col-24\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-13\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.paymentGroupReference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n <ccpay-app-unprocessed-payments class=\"govuk-table\"\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"4\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [FEE_RECORDS_EXISTS]=\"isAnyFeeGroupAvilable\" \n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </ng-container>\n\n <!-- <ng-container *ngIf=\"allPayments?.length === 0\">\n <br/>No payments.\n </ng-container> -->\n </div>\n </div>\n <div class=\"govuk-grid-column-full\" *ngIf=\"serviceRequestValue === 'false'\">\n <span class=\"heading-medium\"><br/>Refunds</span>\n <ccpay-refund-status [ccdCaseNumber]=\"ccdCaseNumber\" ></ccpay-refund-status>\n </div>\n\n \n </div>\n\n \n </ng-container>\n\n\n<input #myInput type='hidden' id='iFrameDrivenImageValue' value='FEEREMOVALCONFIRMATION_2'>\n\n<!-- Order Full View Details-->\n<ng-container *ngIf=\"viewStatus === 'order-full-view'\">\n <div *ngIf=\"takePayment\" class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n <div class=\"govuk-grid-column-full\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Service request</h1>\n </div>\n <table >\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Service request reference</td>\n <td>{{orderRef}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Status</td>\n <td>{{orderStatus}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Date created</td>\n <td>{{orderCreated | date:'dd MMMM yyyy'}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Party</td>\n <td>{{orderParty}}</td>\n </tr>\n\n\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">CCD event</td>\n <td>{{orderCCDEvent}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"govuk-grid-column-full order-class\">\n <div class=\"column\">\n <table class=\"govuk-table \">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-51\" scope=\"col\">Fee</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let order of orderDetail;\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of order.fees; let i = index;\">\n <td class=\"govuk-table__cell col-60 whitespace-inherit\">{{fee.description}}</td>\n <td class=\"govuk-table__cell\">{{fee.volume? fee.volume : '-'}} X {{ fee.calculated_amount/fee.volume| currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell alignright\">\n <button [disabled]=\"!chkForAddRemission(fee.code)\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n </td>\n \n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngFor=\"let order of orderDetail;\">\n <tr class=\"govuk-table__row\" *ngIf=\"order.fees?.length === 0\" >\n <td class=\"govuk-table__cell alignleft\" colspan=\"7\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n\n </div>\n <div class=\"maxwidth\"> \n <p class=\"totalfees\">Total fees: {{orderFeesTotal | currency:'GBP':'symbol-narrow':'1.2-2' }}</p>\n </div>\n </div>\n <!-- <div class=\"hmcts-banner\" *ngIf=\"isHistoricGroupAvailable\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">information</span>\n * These fees have already been processed offline. Check the notes in CCD for more information.\n </div>\n </div> -->\n\n <!-- remissions -->\n <ng-container *ngFor=\"let order of orderDetail;\" >\n <div class=\"govuk-grid-column-full order-class\"> \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\">Help with fees or remission code</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Reference</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Fee</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header whitespace-inherit refundBtn\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody *ngIf=\"order.remissions?.length > 0\" class=\"govuk-table__body\" >\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of order.remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n <td class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n <button [disabled]=\"!chkIsRefundRemissionBtnEnable()\" (click)=\"addRefundForRemission(order.payments[0],remission,order.fees)\" class=\"govuk-button govuk-button--secondary\"> Add refund</button>\n </td>\n <!-- <td class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n \n </td> -->\n </tr>\n </tbody>\n \n\n </table>\n <div *ngIf=\"order.remissions?.length === 0\">\n <span >No help with fees or remissions.</span>\n </div>\n <div class=\"summarypagealign\">\n <p>Total reductions: {{orderRemissionTotal | currency:'GBP':'symbol-narrow':'1.2-2' }}</p>\n </div>\n <div class=\"summarypagealign\">\n <p class=\"summarypage\">Total fees to pay: {{(orderFeesTotal - orderRemissionTotal) | currency:'GBP':'symbol-narrow':'1.2-2' }}</p>\n </div>\n </div>\n \n \n </ng-container>\n \n \n <!--Payments-->\n <ng-container *ngFor=\"let order of orderDetail;\" >\n <div class=\"govuk-grid-column-full\"> \n <h3 class=\"heading-medium\">Payments</h3>\n <table class=\"govuk-table \">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-25\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody *ngIf=\"order.payments?.length > 0\" class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of order.payments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell alignright\">\n <button [disabled] = \"!chkIssueRefundBtnEnable(payment)\" (click)=\"issueRefund(payment)\" class=\"govuk-button govuk-button--secondary\">Issue refund</button>\n </td>\n <!-- <td *ngIf=\"!chkIssueRefundBtnEnable(payment)\" class=\"govuk-table__cell\" style=\"text-align: right;\">\n </td> -->\n </tr>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"order.payments === undefined || order.payments === null\">\n <!-- <h3 class=\"heading-medium mar-17\">Payments</h3> -->\n <span class=\"mar-17\" >No Payments recorded</span>\n </div>\n \n </ng-container>\n <div *ngIf=\"((orderFeesTotal - orderRemissionTotal)- orderTotalPayments) > 0\" >\n <p class=\"totalPay\">Total left to pay: <b>{{((orderFeesTotal - orderRemissionTotal)- orderTotalPayments )| currency:'GBP':'symbol-narrow':'1.2-2' }}</b> </p>\n </div>\n <div *ngIf=\"((orderFeesTotal - orderRemissionTotal)- orderTotalPayments) < 0\" >\n <p class=\"totalPay\">Total left to pay: <b>0</b> </p>\n </div>\n\n \n</ng-container>\n<ccpay-add-remission *ngIf=\"viewStatus === 'addremission' && feeId\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[fee]=\"feeId\" \n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[paymentGroupRef]=\"orderRef\" \n[isFromServiceRequestPage] = \"true\"\n[payment] = \"payment\"\n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ccpay-add-remission *ngIf=\"viewStatus === 'issuerefund' && payment\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[isFromServiceRequestPage] = \"true\"\n[payment]=\"payment\" \n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[paymentGroupRef]=\"orderRef\" \n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ccpay-add-remission *ngIf=\"viewStatus === 'addrefundforremission' && payment\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[payment]=\"payment\" \n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[feeamount]=\"remissionFeeAmt\"\n[remission] = \"remissions\"\n[isFromServiceRequestPage]=\"true\" \n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ng-container *ngIf=\"viewStatus === 'feeRemovalConfirmation'\">\n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to delete this fee?\n </strong>\n </div>\n <div class=\"govuk-button-grb\">\n <form novalidate>\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemoval()\">\n Cancel\n </button>\n <button type=\"submit\" class=\"button\"\n [disabled]=\"isRemoveBtnDisabled\"\n [ngClass]='isRemoveBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"removeFee(feeId)\">\n Remove\n </button>\n </form>\n </div>\n</ng-container>\n\n</main>\n</div>",
1238
+ styles: [".govuk-grid-column-full--gr{position:relative;margin-bottom:10px}.disable{text-decoration:none;cursor:default;color:#fff;background-color:grey;pointer-events:none}.govuk-grid__surplus-payments{margin:20px 0}.govuk-grid__surplus-payments>.govuk-grid-column-full{padding:0}.govuk-grid__surplus-payments-col1{margin-bottom:10px}.govuk-inset-text__no-border{border-left:0}.govuk-hidetext{font-size:22px;padding-bottom:10px}.lowercase{text-transform:lowercase}.channel::first-letter{text-transform:uppercase}.govuk-heading-xl{font-size:48px;margin-bottom:1px}.govuk-section-break--visible{border-bottom:2px solid #000}.totalpayments.govuk-table__row{border-bottom:2px solid #000!important}.govuk-inset-text{margin-left:1em}.govuk-button{font-size:19px;margin-bottom:0!important}.govuk-table__cell.govuk-table__cell--col6.govuk-table__custom--col6,.groupamount.govuk-table__header{text-align:right}.feeclass{padding-left:.7em}.align-center{text-align:center}details summary{display:list-item}.case-transaction__color{color:#a71414;font-weight:700;text-align:center}.capitalize::first-letter{text-transform:uppercase}.govuk-inset-text__no-left-margin{margin-left:0;padding-left:0}.whitespace-inherit{white-space:inherit!important}.govuk-section-records-break{margin:10px;border-bottom:2px solid #000!important}.exisitng-fees{margin-left:12px}.add-telephony-payment{margin-top:-2em;margin-left:-2em}.govuk-table__header--custom{text-align:center}.disable-link{cursor:default;pointer-events:none;color:#8e8c8c}.panel-no--style{border-left-style:none}.col-28{width:28%!important}.col-8{width:8%!important}.col-60{width:60%!important}.col-32{width:32%!important}.col-34{width:34%!important}.col-15{width:15%!important;padding-right:0!important;padding-left:0!important}.col-16{width:16%!important}.col-14{width:14%!important}.col-17{width:17%!important}.col-12{width:12%!important}.col-9{width:9%!important}.col-10{width:10%!important}.col-11{width:11%!important}.col-13{width:13%!important}.col-21{width:21%!important}.col-20{width:20%!important}.col-24{width:24%!important}.govuk-table__cell,.govuk-table__header{padding:10px 10px 10px 0}.col-27{width:27%!important}td{white-space:nowrap;overflow:hidden!important}.col-19{width:19%!important;padding-left:0!important}.col-18{width:18%!important;padding-left:0!important;padding-right:0!important}.col-37{width:37%!important}.col-55{width:55%!important}.govuk-table{margin-bottom:1px}.hmcts-banner>.hmcts-banner__message{font-size:19px;line-height:1.25}.summary-table-font{font-size:36px}.order-class{padding-top:3em}.govuk-table__cell:last-child,.govuk-table__header:last-child{text-align:right}.govuk-grid-column-two-thirds{width:64%!important;padding:0!important}.govuk-heading-l{font-size:36px;margin-bottom:10px}.govuk-heading-lw{width:70%}.paymentrequest{margin-top:1em}.mar-17{margin-left:17px}.col-61{width:61px!important;padding:0!important}.error{width:960px;margin:auto}.summarypage{padding-left:36em;margin-top:2em}.summarypagealign{width:100%;text-align:right;margin-top:2em}.govuk-inset-text{font-size:2.1875rem}table{table-layout:fixed;width:100%}td,th{word-wrap:break-word}.totalPay{padding-right:14px;float:right;margin-top:2em}.govuk-back-link{font-size:1.5rem!important}.totalfees{float:right;margin-top:2em}.refundBtn{text-align:right;width:18%}.of-visible{overflow:visible!important}.col-25{width:25%!important}.col-51{width:51%!important}.alignright{text-align:right}.alignleft{text-align:left}.alignself{align-self:flex-end}.maxwidth{width:100%}"]
1227
1239
  }] }
1228
1240
  ];
1229
1241
  /** @nocollapse */
@@ -1325,8 +1337,6 @@ if (false) {
1325
1337
  /** @type {?} */
1326
1338
  CaseTransactionsComponent.prototype.caseType;
1327
1339
  /** @type {?} */
1328
- CaseTransactionsComponent.prototype.lsCcdNumber;
1329
- /** @type {?} */
1330
1340
  CaseTransactionsComponent.prototype.payment;
1331
1341
  /** @type {?} */
1332
1342
  CaseTransactionsComponent.prototype.paymentGroup;
@@ -1341,6 +1351,8 @@ if (false) {
1341
1351
  /** @type {?} */
1342
1352
  CaseTransactionsComponent.prototype.orderLevelFees;
1343
1353
  /** @type {?} */
1354
+ CaseTransactionsComponent.prototype.ispaymentGroupApisuccess;
1355
+ /** @type {?} */
1344
1356
  CaseTransactionsComponent.prototype.cpoDetails;
1345
1357
  /** @type {?} */
1346
1358
  CaseTransactionsComponent.prototype.orderRef;
@@ -1387,6 +1399,8 @@ if (false) {
1387
1399
  /** @type {?} */
1388
1400
  CaseTransactionsComponent.prototype.navigationpage;
1389
1401
  /** @type {?} */
1402
+ CaseTransactionsComponent.prototype.remissionFeeAmt;
1403
+ /** @type {?} */
1390
1404
  CaseTransactionsComponent.prototype.check4AllowedRoles2AccessRefund;
1391
1405
  /** @type {?} */
1392
1406
  CaseTransactionsComponent.prototype.check4AllowedRoles2AccessPBApayment;
@@ -1425,4 +1439,4 @@ if (false) {
1425
1439
  /* Skipping unhandled member: ;*/
1426
1440
  /* Skipping unhandled member: ;*/
1427
1441
  }
1428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS10cmFuc2FjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9jYXNlLXRyYW5zYWN0aW9ucy9jYXNlLXRyYW5zYWN0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNyRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQU10RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0lBQzlCLGNBQWMsR0FBRyx1QkFBdUI7QUFFOUM7SUFpRkUsbUNBQW9CLE1BQWMsRUFDeEIsa0JBQXNDLEVBQ3RDLHlCQUFvRCxFQUNwRCx1QkFBZ0QsRUFDaEQsbUJBQXdDLEVBQ3hDLGlCQUFvQztRQUw5QyxpQkFNSztRQU5lLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDeEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0Qyw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBM0U5QyxrQkFBYSxHQUFVLEVBQUUsQ0FBQztR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REFBc0I7O0lBQ3RCLHdEQUE0Qjs7SUFDNUIsc0RBQTJCOztJQUMzQixtREFBOEI7O0lBQzlCLHdEQUFtQzs7SUFDbkMsdURBQWtDOztJQUNsQyx5REFBb0M7O0lBQ3BDLDhDQUFtQjs7SUFDbkIseUNBQWM7O0lBQ2QsMENBQXVCOztJQUN2QiwyREFBd0M7O0lBQ3hDLDZEQUEwQzs7SUFDMUMsK0RBQTRDOztJQUM1QywrREFBNkU7O0lBQzdFLDBEQUFvSDs7SUFDcEgsZ0RBQXlCOztJQUN6Qiw2REFBa0M7O0lBQ2xDLG1EQUF1Qjs7SUErc0J2QixvRUFJQzs7SUFDRCx3RUFJQzs7SUFDRCxpRUFLQzs7Ozs7SUE3dEJXLDJDQUFzQjs7Ozs7SUFDaEMsdURBQThDOzs7OztJQUM5Qyw4REFBNEQ7Ozs7O0lBQzVELDREQUF3RDs7Ozs7SUFDeEQsd0RBQWdEOzs7OztJQUNoRCxzREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVBheW1lbnRHcm91cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5pbXBvcnQgeyBDYXNlVHJhbnNhY3Rpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nhc2UtdHJhbnNhY3Rpb25zL2Nhc2UtdHJhbnNhY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IElGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHsgSVBheW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50JztcbmltcG9ydCB7IElSZW1pc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZW1pc3Npb24nO1xuaW1wb3J0IHsgSVBheW1lbnRWaWV3IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudFZpZXcnO1xuaW1wb3J0IHsgSU9yZGVyUmVmZXJlbmNlRmVlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JT3JkZXJSZWZlcmVuY2VGZWUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAqIGFzIGxzIGZyb20gXCJsb2NhbC1zdG9yYWdlXCI7XG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1jYXNlLXRyYW5zYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXNlLXRyYW5zYWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nhc2UtdHJhbnNhY3Rpb25zLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDYXNlVHJhbnNhY3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdMT0dHRURJTlVTRVJST0xFUycpIExPR0dFRElOVVNFUlJPTEVTOiBzdHJpbmdbXTtcbiAgdGFrZVBheW1lbnQ6IGJvb2xlYW47XG4gIHNlcnZpY2VyZXF1ZXN0OiBzdHJpbmc7XG4gIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgZXhjUmVmZXJlbmNlOiBzdHJpbmc7XG4gIHBheW1lbnRHcm91cHM6IGFueVtdID0gW107XG4gIHBheW1lbnRzOiBJUGF5bWVudFtdID0gW107XG4gIG5vblBheW1lbnRzOiBJUGF5bWVudFtdID0gW107XG4gIGFsbFBheW1lbnRzOiBJUGF5bWVudFtdID0gW107XG4gIHJlbWlzc2lvbnM6IElSZW1pc3Npb25bXSA9IFtdO1xuICBmZWVzOiBJRmVlW10gPSBbXTtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIHRvdGFsRmVlczogbnVtYmVyO1xuICB0b3RhbFBheW1lbnRzOiBudW1iZXI7XG4gIHRvdGFsTm9uT2ZmUGF5bWVudHM6IG51bWJlcjtcbiAgdG90YWxSZW1pc3Npb25zOiBudW1iZXI7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmc7XG4gIGRjbk51bWJlcjogc3RyaW5nO1xuICBwYXltZW50UmVmOiBzdHJpbmc7XG4gIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgaXNOZXdQY2lwYWxPZmY6IGJvb2xlYW47XG4gIGlzUmVmdW5kUmVtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNPbGRQY2lwYWxPZmY6IGJvb2xlYW47XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBpc0FkZEZlZUJ0bkVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0V4Y2VwdGlvblJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZXhjZXB0aW9uUmVjb3JkUmVmZXJlbmNlOiBzdHJpbmc7XG4gIGlzQW55RmVlR3JvdXBBdmlsYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIGlzSGlzdG9yaWNHcm91cEF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0J1bGtTY2FuRW5hYmxlO1xuICBpc1JlbWlzc2lvbnNNYXRjaDogYm9vbGVhbjtcbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgaXNSZW1vdmVCdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBmZWVJZDogSUZlZTtcbiAgY2xBbW91bnREdWU6IG51bWJlciA9IDA7XG4gIHVucHJvY2Vzc2VkUmVjb3JkQ291bnQ6IG51bWJlcjtcbiAgaXNGZWVSZWNvcmRzRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIHRvdGFsUmVmdW5kQW1vdW50OiBOdW1iZXI7XG4gIGNhc2VUeXBlOiBTdHJpbmc7XG4gIGxzQ2NkTnVtYmVyOiBhbnkgPSBscy5nZXQ8YW55PignY2NkTnVtYmVyJyk7XG4gIHBheW1lbnQ6IElQYXltZW50O1xuICBwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXA7XG4gIHBheW1lbnRWaWV3OiBJUGF5bWVudFZpZXc7XG5cbiAgLy9PcmRlciBjaGFuZ2VzXG4gIG9yZGVyRGV0YWlsOiBhbnlbXSA9IFtdO1xuXG4gIGlzQWRkUmVtaXNzaW9uRW5hYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIG9yZGVyUmVtaXNzaW9uRGV0YWlsczogYW55W10gPSBbXTtcbiAgb3JkZXJMZXZlbEZlZXM6IElPcmRlclJlZmVyZW5jZUZlZVtdID0gW107XG4gIGNwb0RldGFpbHM6IGFueSA9IG51bGw7XG4gIG9yZGVyUmVmOiBzdHJpbmc7XG4gIG9yZGVyU3RhdHVzOiBzdHJpbmc7XG4gIG9yZGVyUGFydHk6IHN0cmluZztcbiAgb3JkZXJDcmVhdGVkOiBEYXRlO1xuICBvcmRlckNDREV2ZW50OiBzdHJpbmc7XG4gIHNlcnZpY2VSZXF1ZXN0VmFsdWU6IHN0cmluZztcbiAgb3JkZXJBZGRCdG5FbmFibGU6IGJvb2xlYW47XG4gIG9yZGVyRmVlc1RvdGFsOiBudW1iZXIgPSAwLjAwO1xuICBvcmRlclJlbWlzc2lvblRvdGFsOiBudW1iZXIgPSAwLjAwO1xuICBvcmRlclRvdGFsUGF5bWVudHM6IG51bWJlciA9IDAuMDA7XG4gIG9yZGVyUGVuZGluZ1BheW1lbnRzOiBudW1iZXIgPSAwLjAwO1xuICBpc0NQT0Rvd246IGJvb2xlYW47XG4gIHRlc3Q6IGJvb2xlYW47XG4gIGlzUEJBOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSXNzdWVSZWZ1bmZCdG5FbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNBZGRSZW1pc3Npb25CdG5FbmFibGVkOiBib29sZWFuID0gZmFsc2U7ICBcbiAgaXNSZWZ1bmRSZW1pc3Npb25CdG5FbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWxsb3dlZFJvbGVzVG9BY2Nlc3NSZWZ1bmQgPSBbJ3BheW1lbnRzLXJlZnVuZC1hcHByb3ZlcicsICdwYXltZW50cy1yZWZ1bmQnXTtcbiAgaXNFbGlnaWJsZTRQQkFQYXltZW50ID0gWydwdWktZmluYW5jZS1tYW5hZ2VyJywgJ3B1aS11c2VyLW1hbmFnZXInLCAncHVpLW9yZ2FuaXNhdGlvbi1tYW5hZ2VyJywgJ3B1aS1jYXNlLW1hbmFnZXInXTtcbiAgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICBpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2U6IGJvb2xlYW47XG4gIG5hdmlnYXRpb25wYWdlOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYXNlVHJhbnNhY3Rpb25zU2VydmljZTogQ2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRwYXltZW50UGFnZVZpZXcoKS5zdWJzY3JpYmUoKGRhdGEpPT4gdGhpcy5wYXltZW50VmlldyA9IGRhdGEpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0bmF2aWdhdGlvblBhZ2VWYWx1ZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5uYXZpZ2F0aW9ucGFnZSA9IGRhdGEpO1xuICAgIGlmICh0aGlzLnBheW1lbnRWaWV3ICE9PSBudWxsICYmIHRoaXMucGF5bWVudFZpZXcucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm5hdmlnYXRpb25wYWdlID09PSdwYXltZW50ZGV0YWlsc3BhZ2UnKSB7XG4gICAgICB0aGlzLmdvVG9QYXllbWVudFZpZXcodGhpcy5wYXltZW50Vmlldy5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSwgdGhpcy5wYXltZW50Vmlldy5yZWZlcmVuY2UsIHRoaXMucGF5bWVudFZpZXcubWV0aG9kKSA7XG4gICAgfVxuICAgIHRoaXMuaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmNhc2VUeXBlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNBU0VUWVBFO1xuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID09PSAnJykge1xuICAgICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgfVxuICAgIHRoaXMuZXhjUmVmZXJlbmNlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgdGhpcy50YWtlUGF5bWVudCA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVDtcbiAgICB0aGlzLnNlcnZpY2VyZXF1ZXN0ID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUO1xuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QgPT09ICd0cnVlJykge1xuICAgICAgdGhpcy5zZXJ2aWNlUmVxdWVzdFZhbHVlID0gJ3RydWUnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2VSZXF1ZXN0VmFsdWUgPSAnZmFsc2UnO1xuICAgIH1cbiAgICB0aGlzLmlzQnVsa1NjYW5FbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRTtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5pc1R1cm5PZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGO1xuICAgIHRoaXMuaXNOZXdQY2lwYWxPZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkY7XG4gICAgdGhpcy5pc09sZFBjaXBhbE9mZiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRjtcbiAgICB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTU0ZFTkFCTEU7XG4gICAgaWYgKCF0aGlzLmlzVHVybk9mZikge1xuICAgICAgaWYgKHRoaXMubHNDY2ROdW1iZXIgIT09IHRoaXMuY2NkQ2FzZU51bWJlcikge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvY2NkLXNlYXJjaD90YWtlUGF5bWVudD10cnVlYCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UuZ2V0UGF5bWVudEdyb3Vwcyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudEdyb3VwcyA9PiB7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzID0gcGF5bWVudEdyb3Vwc1sncGF5bWVudF9ncm91cHMnXTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUFtb3VudHMoKTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZU9yZGVyRmVlc0Ftb3VudHMoKTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVJlZnVuZEFtb3VudCgpO1xuICAgICAgICAgIGlmICh0aGlzLmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRTZWxlY3RlZE9yZGVyUmVmSWQoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJSZWYgPSBkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub09yZGVyVmlld0RldGFpbFNlY3Rpb24odGhpcy5vcmRlclJlZik7XG4gICAgICAgICAgICAvLyB0aGlzLnZpZXdTdGF0dXMgPSAnb3JkZXItZnVsbC12aWV3JztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRQYXJ0eURldGFpbHModGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY3BvRGV0YWlscyA9IEpTT04ucGFyc2UocmVzcG9uc2UpLmRhdGEuY29udGVudFswXTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSA8YW55PmVycm9yO1xuICAgICAgICAgICAgICB0aGlzLmlzQ1BPRG93biA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gPGFueT5lcnJvcjtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdHMoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXNlVHJhbnNhY3Rpb25zU2VydmljZS5nZXRQYXltZW50R3JvdXBzKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50R3JvdXBzID0+IHtcbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cHMgPSBwYXltZW50R3JvdXBzWydwYXltZW50X2dyb3VwcyddO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQW1vdW50cygpO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlT3JkZXJGZWVzQW1vdW50cygpO1xuICAgICAgICAgIHRoaXMudG90YWxSZWZ1bmRBbW91bnQgPSB0aGlzLmNhbGN1bGF0ZVJlZnVuZEFtb3VudCgpO1xuICAgICAgICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBhcnR5RGV0YWlscyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jcG9EZXRhaWxzID0gSlNPTi5wYXJzZShyZXNwb25zZSkuZGF0YS5jb250ZW50WzBdO1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSA8YW55PmVycm9yO1xuICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRzKCk7XG4gICAgICAgICAgICAgIHRoaXMuaXNDUE9Eb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSA8YW55PmVycm9yO1xuICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zZXREZWZhdWx0cygpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrRm9yRXhjZXB0aW9uUmVjb3JkKCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2VzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IGRhdGEpXG4gICBcbiAgfVxuXG4gIHNldERlZmF1bHRzKCk6IHZvaWQge1xuICAgIHRoaXMudG90YWxQYXltZW50cyA9IDAuMDA7XG4gICAgdGhpcy50b3RhbFJlbWlzc2lvbnMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxOb25PZmZQYXltZW50cyA9IDAuMDA7XG4gICAgdGhpcy50b3RhbEZlZXMgPSAwLjAwO1xuICB9XG5cbiAgZ2V0QWxsb2NhdGlvblN0YXR1cyhwYXltZW50czogYW55KSB7XG5cbiAgICBsZXQgcGF5bWVudEFsbG9jYXRpb24gPSBwYXltZW50cy5wYXltZW50X2FsbG9jYXRpb24sXG4gICAgICBpc0FsbG9jYXRpb25TdGF0dXNFeGlzdCA9IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA+IDA7XG4gICAgcmV0dXJuIGlzQWxsb2NhdGlvblN0YXR1c0V4aXN0ID8gcGF5bWVudEFsbG9jYXRpb25bMF0uYWxsb2NhdGlvbl9zdGF0dXMgOiAnLSc7XG4gICAgLy9yZXR1cm4gXCItXCI7XG5cbiAgfVxuXG4gIGNoZWNrRm9yRXhjZXB0aW9uUmVjb3JkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cHMubGVuZ3RoID09PSAwICYmICh0aGlzLnNlbGVjdGVkT3B0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdjY2RvcmV4Y2VwdGlvbicgfHwgdGhpcy5zZWxlY3RlZE9wdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAncmMnKSkge1xuICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeUNDRCh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcmVjb3JkRGF0YSA9PiB7XG4gICAgICAgICAgaWYgKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWNvcmREYXRhWydkYXRhJ10gJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZS5sZW5ndGggPT09IHVuZGVmaW5lZCAmJiByZWNvcmREYXRhWydkYXRhJ10uY2NkX3JlZmVyZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cHMubGVuZ3RoID09PSAwICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ2RjbicpIHtcbiAgICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLmxlbmd0aCA+IDAgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0UubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUi5sZW5ndGggPT09IDAgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0UubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5wYXltZW50R3JvdXBzLmxlbmd0aCA+IDApXG4gICAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bWVudC5jYXNlX3JlZmVyZW5jZSAhPT0gdW5kZWZpbmVkICYmIHBheW1lbnQuY2NkX2Nhc2VfbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU9yZGVyRmVlc0Ftb3VudHMoKTogdm9pZCB7XG4gICAgbGV0IGZlZXNUb3RhbCA9IDAuMDA7XG4gICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2gocGF5bWVudEdyb3VwID0+IHtcbiAgICAgIHRoaXMucmVzZXRPcmRlclZhcmlhYmxlcygpO1xuICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICB0aGlzLm9yZGVyRmVlc1RvdGFsID0gdGhpcy5vcmRlckZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudFxuICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsID0gdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzID0gKHRoaXMub3JkZXJGZWVzVG90YWwgLSB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwpIC0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHM7XG4gICAgICBpZiAodGhpcy5vcmRlclBlbmRpbmdQYXltZW50cyA8PSAwLjAwKSB7XG4gICAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnUGFpZCc7XG4gICAgICAgIHRoaXMub3JkZXJBZGRCdG5FbmFibGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcmRlckZlZXNUb3RhbCA+IDAgJiYgKHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID4gMCB8fCB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwgPiAwKSAmJiAodGhpcy5vcmRlclRvdGFsUGF5bWVudHMgPCB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzKSkge1xuICAgICAgICB0aGlzLm9yZGVyU3RhdHVzID0gJ1BhcnRpYWxseSBwYWlkJ1xuICAgICAgICB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnTm90IHBhaWQnXG4gICAgICAgIHRoaXMub3JkZXJBZGRCdG5FbmFibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvL3RoaXMub3JkZXJMZXZlbEZlZXMucHVzaCh7b3JkZXJSZWZJZDpwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10sb3JkZXJUb3RhbEZlZXM6IHRoaXMub3JkZXJGZWVzVG90YWwsb3JkZXJTdGF0dXM6IHRoaXMub3JkZXJTdGF0dXMsb3JkZXJQYXJ0eTonU2FudG9zaCcsIG9yZGVyQ0NERXZlbnQ6J0Nhc2UgQ3JlYXRpb24nLG9yZGVyQ3JlYXRlZDogbmV3IERhdGUoKSwgb3JkZXJBZGRCdG5FbmFibGU6IHRoaXMub3JkZXJBZGRCdG5FbmFibGV9KTsgdGhpcy5jcG9EZXRhaWxzWydjcmVhdGVkVGltZXN0YW1wJ11cbiAgICAgIGlmICh0aGlzLmNwb0RldGFpbHMgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vcmRlckxldmVsRmVlcy5wdXNoKHsgb3JkZXJSZWZJZDogcGF5bWVudEdyb3VwWydwYXltZW50X2dyb3VwX3JlZmVyZW5jZSddLCBvcmRlclRvdGFsRmVlczogdGhpcy5vcmRlckZlZXNUb3RhbCwgb3JkZXJTdGF0dXM6IHRoaXMub3JkZXJTdGF0dXMsIG9yZGVyUGFydHk6IHRoaXMuY3BvRGV0YWlsc1sncmVzcG9uc2libGVQYXJ0eSddLCBvcmRlckNDREV2ZW50OiB0aGlzLmNwb0RldGFpbHNbJ2FjdGlvbiddLCBvcmRlckNyZWF0ZWQ6ICBwYXltZW50R3JvdXBbJ2RhdGVfY3JlYXRlZCddLCBvcmRlckFkZEJ0bkVuYWJsZTogdGhpcy5vcmRlckFkZEJ0bkVuYWJsZSB9KTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcmRlckxldmVsRmVlcy5wdXNoKHsgb3JkZXJSZWZJZDogcGF5bWVudEdyb3VwWydwYXltZW50X2dyb3VwX3JlZmVyZW5jZSddLCBvcmRlclRvdGFsRmVlczogdGhpcy5vcmRlckZlZXNUb3RhbCwgb3JkZXJTdGF0dXM6IHRoaXMub3JkZXJTdGF0dXMsIG9yZGVyUGFydHk6ICcnLCBvcmRlckNDREV2ZW50OiAnJywgb3JkZXJDcmVhdGVkOiAgcGF5bWVudEdyb3VwWydkYXRlX2NyZWF0ZWQnXSwgb3JkZXJBZGRCdG5FbmFibGU6IHRoaXMub3JkZXJBZGRCdG5FbmFibGUgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9yZGVyU3RhdHVzICE9PSAnUGFpZCcpIHtcbiAgICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRPcmRlcnNMaXN0KHRoaXMub3JkZXJMZXZlbEZlZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJlc2V0T3JkZXJWYXJpYWJsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5vcmRlckZlZXNUb3RhbCA9IDAuMDA7XG4gICAgdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCA9IDAuMDA7XG4gICAgdGhpcy5vcmRlclBlbmRpbmdQYXltZW50cyA9IDAuMDA7XG4gICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuXG4gIH07XG5cbiAgZ29Ub09yZGVyVmlld0RldGFpbFNlY3Rpb24ob3JkZXJSZWZlcmVuY2VPYmo6IGFueSkge1xuICAgIGlmICh0aGlzLmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSkgeyBcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWZJZChvcmRlclJlZmVyZW5jZU9iaik7XG4gICAgICB0aGlzLm9yZGVyUmVmID0gb3JkZXJSZWZlcmVuY2VPYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWZJZChvcmRlclJlZmVyZW5jZU9iai5vcmRlclJlZklkKTtcbiAgICAgIHRoaXMub3JkZXJSZWYgPSBvcmRlclJlZmVyZW5jZU9iai5vcmRlclJlZklkO1xuICAgIH1cblxuICAgIHRoaXMub3JkZXJGZWVzVG90YWwgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCA9IDAuMDA7XG4gICAgdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJQZW5kaW5nUGF5bWVudHMgPSAwLjAwO1xuXG4gICAgdGhpcy5vcmRlckRldGFpbCA9IHRoaXMucGF5bWVudEdyb3Vwcy5maWx0ZXIoeCA9PiB4LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlID09PSAgdGhpcy5vcmRlclJlZik7XG4gICAgdGhpcy5vcmRlckRldGFpbC5mb3JFYWNoKG9yZGVyRGV0YWlsID0+IHtcbiAgICAgIGlmIChvcmRlckRldGFpbC5mZWVzKSB7XG4gICAgICAgIG9yZGVyRGV0YWlsLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgIHRoaXMub3JkZXJGZWVzVG90YWwgPSB0aGlzLm9yZGVyRmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChvcmRlckRldGFpbC5yZW1pc3Npb25zKSB7XG4gICAgICAgIG9yZGVyRGV0YWlsLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc3Npb24gPT4ge1xuICAgICAgICAgIHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCA9IHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCArIHJlbWlzc2lvbi5od2ZfYW1vdW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9yZGVyRGV0YWlsLnBheW1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5wYXltZW50ID0gb3JkZXJEZXRhaWwucGF5bWVudHNbMF07XG4gICAgICAgICAgb3JkZXJEZXRhaWwucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgPSB0aGlzLm9yZGVyVG90YWxQYXltZW50cyArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vcmRlclBlbmRpbmdQYXltZW50cyA9ICh0aGlzLm9yZGVyRmVlc1RvdGFsIC0gdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsKSAtIHRoaXMub3JkZXJUb3RhbFBheW1lbnRzO1xuICAgLy8gdGhpcy5vcmRlclJlZiA9IG9yZGVyUmVmZXJlbmNlT2JqLm9yZGVyUmVmSWQ7XG4gICAgaWYgKHRoaXMub3JkZXJQZW5kaW5nUGF5bWVudHMgPD0gMC4wMCkge1xuICAgICAgdGhpcy5vcmRlclN0YXR1cyA9ICdQYWlkJztcbiAgICB9IGVsc2UgaWYgKHRoaXMub3JkZXJGZWVzVG90YWwgPiAwICYmICh0aGlzLm9yZGVyVG90YWxQYXltZW50cyA+IDAgfHwgdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsID4gMCkgJiYgKHRoaXMub3JkZXJUb3RhbFBheW1lbnRzIDwgdGhpcy5vcmRlclBlbmRpbmdQYXltZW50cykpIHtcbiAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnUGFydGlhbGx5IHBhaWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnTm90IHBhaWQnXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3BvRGV0YWlscyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5vcmRlclBhcnR5ID0gdGhpcy5jcG9EZXRhaWxzWydyZXNwb25zaWJsZVBhcnR5J107XG4gICAgICB0aGlzLm9yZGVyQ3JlYXRlZCA9IHRoaXMuY3BvRGV0YWlsc1snY3JlYXRlZFRpbWVzdGFtcCddO1xuICAgICAgdGhpcy5vcmRlckNDREV2ZW50ID0gdGhpcy5jcG9EZXRhaWxzWydhY3Rpb24nXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcmRlclBhcnR5ID0gJyc7XG4gICAgICB0aGlzLm9yZGVyQ0NERXZlbnQgPSAnJztcbiAgICAgIHRoaXMub3JkZXJDcmVhdGVkID0gb3JkZXJSZWZlcmVuY2VPYmoub3JkZXJDcmVhdGVkO1xuICAgIH1cbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnb3JkZXItZnVsbC12aWV3JztcbiAgfVxuXG4gIHJlZGlyZWN0VG9PcmRlckZlZVNlYXJjaFBhZ2UoZXZlbnQ6IGFueSwgb3JkZXJlZjogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAvLyBpZighdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgfHwgdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAvLyBsZXQgdXJsID0gdGhpcy5pc0J1bGtTY2FuRW5hYmxlID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICAvLyAgIHVybCArPSB0aGlzLmlzVHVybk9mZiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAvLyAgIHVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgLy8gICB1cmwgKz1gJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gXG4gICAgLy8gICB1cmwgKz0gdGhpcy5pc05ld1BjaXBhbE9mZiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgLy8gICB1cmwgKz0gdGhpcy5pc09sZFBjaXBhbE9mZiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSc7XG5cbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvZmVlLXNlYXJjaD9zZWxlY3RlZE9wdGlvbj0ke3RoaXMuc2VsZWN0ZWRPcHRpb259JmNjZENhc2VOdW1iZXI9JHt0aGlzLmNjZENhc2VOdW1iZXJ9JHt1cmx9YCk7XG4gICAgLy8gfSBlbHNlIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuID0gbnVsbDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gb3JkZXJlZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICAvL31cbiAgfVxuXG4gIGdvVG9DYXNlVHJhbnNhdGlvblBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbidcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuXG4gICAgLy8gIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAvLyAgICBmZWF0dXJlcyA9PiB7XG4gICAgLy8gICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShmZWF0dXJlcykuZmlsdGVyKGZlYXR1cmUgPT4gZmVhdHVyZS51aWQgPT09IEJTX0VOQUJMRV9GTEFHKTtcbiAgICAvLyAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgIC8vICAgIH0sXG4gICAgLy8gICAgZXJyID0+IHtcbiAgICAvLyAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgLy8gICAgfVxuICAgIC8vICApO1xuICB9XG5cblxuICBjYWxjdWxhdGVBbW91bnRzKCk6IHZvaWQge1xuICAgIGxldCBmZWVzVG90YWwgPSAwLjAwLFxuICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICByZW1pc3Npb25zVG90YWwgPSAwLjAwLFxuICAgICAgbm9uT2ZmTGluZVBheW1lbnQgPSAwLjAwO1xuXG4gICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2gocGF5bWVudEdyb3VwID0+IHtcbiAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgLy8gbmV3IGZlYXR1cmUgQXBwb3J0aW9ubWVudCB0b2dnbGUgY2hhbmdlc1xuICAgICAgICAgIGlmICghdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgICAgIGlmIChmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICAgICAgICAgIGxldCBhID0gZmVlLmFtb3VudF9kdWUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgbGV0IGIgPSBmZWUuYW1vdW50X2R1ZSA8PSAwO1xuICAgICAgICAgICAgICB0aGlzLmNsQW1vdW50RHVlID0gYSA/IHRoaXMuY2xBbW91bnREdWUgKyBmZWUubmV0X2Ftb3VudCA6IGIgPyB0aGlzLmNsQW1vdW50RHVlICsgMCA6IHRoaXMuY2xBbW91bnREdWUgKyBmZWUuYW1vdW50X2R1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlZVsncGF5bWVudF9ncm91cF9yZWZlcmVuY2UnXSA9IHBheW1lbnRHcm91cFsncGF5bWVudF9ncm91cF9yZWZlcmVuY2UnXTtcbiAgICAgICAgICAgIHRoaXMuZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZlZXNUb3RhbCA9IGZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudDtcbiAgICAgICAgICAgIHRoaXMuZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgIHRoaXMudG90YWxGZWVzID0gZmVlc1RvdGFsO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgIC8vIG5ldyBmZWF0dXJlIEFwcG9ydGlvbm1lbnQgdG9nZ2xlIGNoYW5nZXNcbiAgICAgICAgICBpZiAoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgICAgICBsZXQgYWxsb2NhdGlvbkxlbiA9IHBheW1lbnQucGF5bWVudF9hbGxvY2F0aW9uO1xuXG4gICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uTGVuLmxlbmd0aCA9PT0gMCB8fCBhbGxvY2F0aW9uTGVuLmxlbmd0aCA+IDAgJiYgYWxsb2NhdGlvbkxlblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcpIHtcbiAgICAgICAgICAgICAgICBub25PZmZMaW5lUGF5bWVudCA9IG5vbk9mZkxpbmVQYXltZW50ICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25MZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9uUGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25MZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlXG4gICAgICAgICAgICB0aGlzLmFsbFBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IHBheW1lbnRzVG90YWwgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50cy5wdXNoKHBheW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF5bWVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2VcbiAgICAgICAgICAgIHRoaXMuYWxsUGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy50b3RhbFBheW1lbnRzID0gcGF5bWVudHNUb3RhbDtcbiAgICAgIC8vIG5ldyBmZWF0dXJlIEFwcG9ydGlvbm1lbnQgdG9nZ2xlIGNoYW5nZXNcbiAgICAgIGlmICghdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgdGhpcy50b3RhbE5vbk9mZlBheW1lbnRzID0gbm9uT2ZmTGluZVBheW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzaXNvbiA9PiB7XG4gICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNpc29uLmh3Zl9hbW91bnQ7XG4gICAgICAgICAgdGhpcy5yZW1pc3Npb25zLnB1c2gocmVtaXNpc29uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvdGFsUmVtaXNzaW9ucyA9IHJlbWlzc2lvbnNUb3RhbDtcbiAgICB9KTtcblxuICB9XG5cbiAgY2FsY3VsYXRlUmVmdW5kQW1vdW50KCkge1xuICAgIGlmICghdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgIGxldCBpc05ld1BheW1lbnRHcm91cCA9IGZhbHNlO1xuXG4gICAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaCgocGF5bWVudEdyb3VwLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAwLjAwLFxuICAgICAgICAgIGZlZXNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gMC4wMCxcbiAgICAgICAgICBmZWVzID0gW107XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgICAgLy8gdGhpcy5pc0ZlZVJlY29yZHNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgZmVlc1RvdGFsID0gZmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuXG4gICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZW0uZmVlX2NvZGUgPT09IGZlZS5jb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZmVlWydyZW1pc3Npb25zJ10gPSByZW07XG4gICAgICAgICAgICAgICAgLy8gaWYoIWZlZXMuZmluZChrID0+IGsuY29kZT1mZWUuY29kZSkpXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgICAgIC8vfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVtaXNzaW9uc01hdGNoKSB7XG4gICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmVlLmRhdGVfY3JlYXRlZCkge1xuICAgICAgICAgICAgICBpc05ld1BheW1lbnRHcm91cCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmlzSGlzdG9yaWNHcm91cEF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudEdyb3Vwc1tpbmRleF1bJ29sZCddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cHNbaW5kZXhdLmZlZXMgPSBmZWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXltZW50R3JvdXAucGF5bWVudHMpIHtcbiAgICAgICAgICBwYXltZW50R3JvdXAucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IHBheW1lbnRzVG90YWwgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtaXNzaW9uID0+IHtcbiAgICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IHJlbWlzc2lvbnNUb3RhbCArIHJlbWlzc2lvbi5od2ZfYW1vdW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdycE91dHN0YW5kaW5nQW1vdW50ID0gKGZlZXNUb3RhbCAtIHJlbWlzc2lvbnNUb3RhbCkgLSBwYXltZW50c1RvdGFsO1xuICAgICAgICBpZiAoZ3JwT3V0c3RhbmRpbmdBbW91bnQgPiAwICYmIGlzTmV3UGF5bWVudEdyb3VwKSB7XG4gICAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNGZWVSZWNvcmRzRXhpc3QgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucGF5bWVudFJlZiA9IHBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMgJiYgcGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoID4gMCAmJiBncnBPdXRzdGFuZGluZ0Ftb3VudCA8PSAwICYmIGlzTmV3UGF5bWVudEdyb3VwKSB7XG4gICAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoKCFpc05ld1BheW1lbnRHcm91cCAmJiB0aGlzLmlzSGlzdG9yaWNHcm91cEF2YWlsYWJsZSkgfHwgKCFpc05ld1BheW1lbnRHcm91cCAmJiAhdGhpcy5pc0hpc3RvcmljR3JvdXBBdmFpbGFibGUpKSB7XG4gICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0b3RhbFJlZnVuZEFtb3VudCA9IDAsXG4gICAgICAgIGlzRmVlQW1vdW50WmVybyA9IGZhbHNlO1xuICAgICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2gocGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgbGV0IGdycE91dHN0YW5kaW5nQW1vdW50ID0gMC4wMCxcbiAgICAgICAgICBmZWVzVG90YWwgPSAwLjAwLFxuICAgICAgICAgIHBheW1lbnRzVG90YWwgPSAwLjAwLFxuICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IDAuMDA7XG4gICAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgICAgIHRoaXMuaXNGZWVSZWNvcmRzRXhpc3QgPSB0cnVlO1xuICAgICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICAgIGZlZXNUb3RhbCA9IGZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudDtcbiAgICAgICAgICAgIGlmIChmZWUuY2FsY3VsYXRlZF9hbW91bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgaXNGZWVBbW91bnRaZXJvID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSByZW1pc3Npb25zVG90YWwgKyByZW1pc3Npb24uaHdmX2Ftb3VudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBncnBPdXRzdGFuZGluZ0Ftb3VudCA9IChmZWVzVG90YWwgLSByZW1pc3Npb25zVG90YWwpIC0gcGF5bWVudHNUb3RhbDtcbiAgICAgICAgaWYgKGdycE91dHN0YW5kaW5nQW1vdW50IDwgMCkge1xuICAgICAgICAgIGlmICh0b3RhbFJlZnVuZEFtb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdG90YWxSZWZ1bmRBbW91bnQgPSBncnBPdXRzdGFuZGluZ0Ftb3VudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG90YWxSZWZ1bmRBbW91bnQgPSAodG90YWxSZWZ1bmRBbW91bnQgKyBncnBPdXRzdGFuZGluZ0Ftb3VudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGdycE91dHN0YW5kaW5nQW1vdW50ID4gMCB8fCAoZ3JwT3V0c3RhbmRpbmdBbW91bnQgPT09IDAgJiYgaXNGZWVBbW91bnRaZXJvKSkge1xuICAgICAgICAgIHRoaXMuaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdG90YWxSZWZ1bmRBbW91bnQgKiAtMTtcbiAgICB9XG4gIH1cblxuICBnZXRHcm91cE91dHN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5jYWxjdWxhdGVPdXRTdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXApOztcbiAgfVxuXG4gIHJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCB1cmwgPSB0aGlzLmlzQnVsa1NjYW5FbmFibGUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAgIHVybCArPSB0aGlzLmlzVHVybk9mZiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICB1cmwgKz0gdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAgIHVybCArPSB0aGlzLmlzTmV3UGNpcGFsT2ZmID8gJyZpc05ld1BjaXBhbE9mZj1FbmFibGUnIDogJyZpc05ld1BjaXBhbE9mZj1EaXNhYmxlJztcbiAgICB1cmwgKz0gdGhpcy5pc09sZFBjaXBhbE9mZiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgdXJsICs9IGAmY2FzZVR5cGU9JHt0aGlzLmNhc2VUeXBlfWBcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvZmVlLXNlYXJjaD9zZWxlY3RlZE9wdGlvbj0ke3RoaXMuc2VsZWN0ZWRPcHRpb259JmNjZENhc2VOdW1iZXI9JHt0aGlzLmNjZENhc2VOdW1iZXJ9JHt1cmx9YCk7XG4gIH1cblxuICBhZGRSZW1pc3Npb24oZmVlOiBJRmVlKSB7XG4gICAgdGhpcy5mZWVJZCA9IGZlZTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWRkcmVtaXNzaW9uJztcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRBcHBvcnRpb25QYXltZW50RGV0YWlscyh0aGlzLnBheW1lbnQucmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICBwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRHcm91cDtcblxuICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZpbHRlclxuICAgICAgICAgIChwYXltZW50R3JvdXBPYmogPT4gcGF5bWVudEdyb3VwT2JqWydyZWZlcmVuY2UnXS5pbmNsdWRlcyh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSkpO1xuICAgICAgICB0aGlzLnBheW1lbnQgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXTtcbiAgICAgICAgLy8gY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgIC8vIHRoaXMuaXNTdGF0dXNBbGxvY2F0ZWQgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwICYmIHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzID09PSAnQWxsb2NhdGVkJyB8fCBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPT09IDA7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICB9XG5cbiAgYWRkUmVmdW5kRm9yUmVtaXNzaW9uKHBheW1lbnQ6IElQYXltZW50LCByZW1pc3Npb246IElSZW1pc3Npb25bXSkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdhZGRyZWZ1bmRmb3JyZW1pc3Npb24nO1xuICAgIHRoaXMucGF5bWVudCA9IHBheW1lbnQ7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHModGhpcy5wYXltZW50LnJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5maWx0ZXJcbiAgICAgICAgICAocGF5bWVudEdyb3VwT2JqID0+IHBheW1lbnRHcm91cE9ialsncmVmZXJlbmNlJ10uaW5jbHVkZXModGhpcy5wYXltZW50LnJlZmVyZW5jZSkpO1xuICAgICAgICB0aGlzLnBheW1lbnQgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXTtcbiAgICAgICAgdGhpcy5yZW1pc3Npb25zID0gcmVtaXNzaW9uO1xuICAgICAgICAvLyBjb25zdCBwYXltZW50QWxsb2NhdGlvbiA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnBheW1lbnRfYWxsb2NhdGlvbjtcbiAgICAgICAgLy8gdGhpcy5pc1N0YXR1c0FsbG9jYXRlZCA9IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA+IDAgJiYgcGF5bWVudEFsbG9jYXRpb25bMF0uYWxsb2NhdGlvbl9zdGF0dXMgPT09ICdBbGxvY2F0ZWQnIHx8IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA9PT0gMDtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvclxuICAgICk7XG4gIH1cblxuICByZWRpcmVjdFRvcmVtaXNzaW9uUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVtaXNzaW9uJ1xuICAgIC8vICAgbGV0IHVybCA9IHRoaXMuaXNCdWxrU2NhbkVuYWJsZSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgLy8gICB1cmwgKz0gdGhpcy5pc1R1cm5PZmYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgLy8gICB1cmwgKz0gdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAgIC8vICAgdXJsICs9IHRoaXMuaXNOZXdQY2lwYWxPZmYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAgIC8vICAgdXJsICs9IHRoaXMuaXNPbGRQY2lwYWxPZmYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnO1xuICAgIC8vICAgdXJsICs9YCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YFxuICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9mZWUtc2VhcmNoP3NlbGVjdGVkT3B0aW9uPSR7dGhpcy5zZWxlY3RlZE9wdGlvbn0mY2NkQ2FzZU51bWJlcj0ke3RoaXMuY2NkQ2FzZU51bWJlcn0ke3VybH1gKTtcbiAgfVxuXG4gIHJlZGlyZWN0VG9SZXBvcnRzUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvcmVwb3J0cz9zZWxlY3RlZE9wdGlvbj0ke3RoaXMuc2VsZWN0ZWRPcHRpb259JmNjZENhc2VOdW1iZXI9JHt0aGlzLmNjZENhc2VOdW1iZXJ9YCk7XG4gIH1cblxuICBsb2FkRmVlU3VtbWFyeVBhZ2UocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IG51bGw7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgfVxuXG4gIGdvVG9QYXltZW50Vmlld0NvbXBvbmVudChwYXltZW50R3JvdXA6IGFueSkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50TWV0aG9kID0gcGF5bWVudEdyb3VwLnBheW1lbnRNZXRob2Q7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50R3JvdXBSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudFJlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncGF5bWVudC12aWV3JztcbiAgfVxuXG4gIGdvVG9QYXllbWVudFZpZXcocGF5bWVudEdyb3VwUmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudE1ldGhvZDogc3RyaW5nKSB7XG4gICAgdGhpcy5nb1RvUGF5bWVudFZpZXdDb21wb25lbnQoeyBwYXltZW50R3JvdXBSZWZlcmVuY2UsIHBheW1lbnRSZWZlcmVuY2UsIHBheW1lbnRNZXRob2QgfSk7XG4gIH1cblxuICBzZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQodW5wcm9jZXNzZWRSZWNvcmRJZDogc3RyaW5nKSB7XG4gICAgaWYgKHVucHJvY2Vzc2VkUmVjb3JkSWQpIHtcbiAgICAgIGlmICh0aGlzLmlzVHVybk9mZikge1xuICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXRVbnByb2Nlc3NlZEZlZUNvdW50KHVuUHJvY2Vzc2VkUmVjb3JkQ291bnQ6IG51bWJlcikge1xuICAgIHRoaXMudW5wcm9jZXNzZWRSZWNvcmRDb3VudCA9IHVuUHJvY2Vzc2VkUmVjb3JkQ291bnQ7XG4gIH1cblxuICBjYWxjdWxhdGVBbW91bnREdWUoZmVlOiBJRmVlKSB7XG5cbiAgICBpZiAoZmVlLmRhdGVfY3JlYXRlZCkge1xuICAgICAgcmV0dXJuIGZlZS5hbW91bnRfZHVlICE9PSB1bmRlZmluZWQgPyBmZWUuYW1vdW50X2R1ZSA6IGZlZS5uZXRfYW1vdW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCIwLjAwXCI7XG4gICAgfVxuICB9XG5cbiAgY29uZmlybVJlbW92ZUZlZShmZWU6IElGZWUpIHtcbiAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZlZUlkID0gZmVlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdmZWVSZW1vdmFsQ29uZmlybWF0aW9uJztcbiAgfVxuXG4gIGNhbmNlbFJlbW92YWwoKSB7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICB9XG5cbiAgcmVtb3ZlRmVlKGZlZTogYW55KSB7XG4gICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5kZWxldGVGZWVGcm9tUGF5bWVudEdyb3VwKGZlZSkuc3Vic2NyaWJlKFxuICAgICAgKHN1Y2Nlc3M6IGFueSkgPT4ge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGlzQ2hlY2tBbW91bnRkdWVFeGlzdChhbW91bnREdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgYW1vdW50RHVlID09PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIGlzc3VlUmVmdW5kKHBheW1lbnQ6IElQYXltZW50KSB7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ2lzc3VlcmVmdW5kJztcbiAgICB0aGlzLnBheW1lbnQgPSBwYXltZW50O1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICB9XG5cbiAgY2hrRm9yQWRkUmVtaXNzaW9uKGZlZUNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoa0ZvclBCQVBheW1lbnQoKSAmJiB0aGlzLmNoZWNrNEFsbG93ZWRSb2xlczJBY2Nlc3NSZWZ1bmQoKSkge1xuICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxbMF1bJ3JlbWlzc2lvbnMnXS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVtaXNzaW9uIG9mIHRoaXMub3JkZXJEZXRhaWxbMF1bJ3JlbWlzc2lvbnMnXSkge1xuICAgICAgICAgIGlmIChyZW1pc3Npb24uZmVlX2NvZGUgPT09IGZlZUNvZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2hrRm9yUEJBUGF5bWVudCgpOiBib29sZWFuIHtcbiAgICB0aGlzLm9yZGVyRGV0YWlsLmZvckVhY2gob3JkZXJEZXRhaWwgPT4ge1xuICAgICAgaWYgKG9yZGVyRGV0YWlsLnBheW1lbnRzKSB7XG4gICAgICAgIG9yZGVyRGV0YWlsLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgaWYgKHBheW1lbnQubWV0aG9kLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdwYXltZW50IGJ5IGFjY291bnQnICYmIHRoaXMuYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyhwYXltZW50KSkge1xuICAgICAgICAgICAgdGhpcy5pc1BCQSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5pc1BCQSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgY2hrSXNzdWVSZWZ1bmRCdG5FbmFibGUocGF5bWVudDogSVBheW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kKCkgJiYgdGhpcy5hbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzKHBheW1lbnQpICYmIFxuICAgIHBheW1lbnQubWV0aG9kID09PSAncGF5bWVudCBieSBhY2NvdW50JyAmJiBwYXltZW50LnN0YXR1cy50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycpIHtcbiAgICAgIHRoaXMuaXNJc3N1ZVJlZnVuZkJ0bkVuYWJsZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzSXNzdWVSZWZ1bmZCdG5FbmFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIGNoa0lzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMub3JkZXJEZXRhaWwuZm9yRWFjaChvcmRlckRldGFpbCA9PiB7XG4gICAgICBpZiAob3JkZXJEZXRhaWwucGF5bWVudHMpIHtcbiAgICAgICAgb3JkZXJEZXRhaWwucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICBpZiAocGF5bWVudC5tZXRob2QudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCcgJiYgcGF5bWVudC5zdGF0dXMudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH1cblxuICBjaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kLnNvbWUocm9sZSA9PlxuICAgICAgdGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMVxuICAgICk7XG4gIH1cbiAgY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1BCQXBheW1lbnQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbGlnaWJsZTRQQkFQYXltZW50LnNvbWUocm9sZSA9PlxuICAgICAgdGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMVxuICAgICk7XG4gIH1cbiAgYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyA9IChwYXltZW50OiBJUGF5bWVudCk6IGJvb2xlYW4gPT4ge1xuICAgIGxldCB0bXA0RGF5QWdvID0gdGhpcy5jdXJyZW50RGF0ZTtcbiAgICB0bXA0RGF5QWdvLnNldERhdGUodG1wNERheUFnby5nZXREYXRlKCkgLSA0KTtcbiAgICBsZXQgcGF5bWVudERhdGUgPSBuZXcgRGF0ZShwYXltZW50LmRhdGVfY3JlYXRlZCk7XG4gICAgcmV0dXJuIHRtcDREYXlBZ28gPj0gcGF5bWVudERhdGU7XG4gIH1cbiAgLy8gdGhpcy5hbGxvd1BheW1lbnRBZnRlcjREYXlzKHBheW1lbnQpXG59XG5cbiJdfQ==
1442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS10cmFuc2FjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9jYXNlLXRyYW5zYWN0aW9ucy9jYXNlLXRyYW5zYWN0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNyRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQU10RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0lBQ25DLGNBQWMsR0FBRyx1QkFBdUI7QUFFOUM7SUFrRkUsbUNBQW9CLE1BQWMsRUFDeEIsa0JBQXNDLEVBQ3RDLHlCQUFvRCxFQUNwRCx1QkFBZ0QsRUFDaEQsbUJBQXdDLEVBQ3hDLGlCQUFvQztRQUw5QyxpQkFNSztRQU5lLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDeEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0Qyw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBNUU5QyxrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQUMxQixhQUFRLEdBQWUsRUFBRSxDQUFDO1FBQzFCLGdCQUFX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M0IsbURBQThCOztJQUM5Qix3REFBbUM7O0lBQ25DLHVEQUFrQzs7SUFDbEMseURBQW9DOztJQUNwQyw4Q0FBbUI7O0lBQ25CLHlDQUFjOztJQUNkLDBDQUF1Qjs7SUFDdkIsMkRBQXdDOztJQUN4Qyw2REFBMEM7O0lBQzFDLCtEQUE0Qzs7SUFDNUMsK0RBQTZFOztJQUM3RSwwREFBb0g7O0lBQ3BILGdEQUF5Qjs7SUFDekIsNkRBQWtDOztJQUNsQyxtREFBdUI7O0lBQ3ZCLG9EQUF3Qjs7SUE4c0J4QixvRUFJQzs7SUFDRCx3RUFJQzs7SUFDRCxpRUFNQzs7Ozs7SUE3dEJXLDJDQUFzQjs7Ozs7SUFDaEMsdURBQThDOzs7OztJQUM5Qyw4REFBNEQ7Ozs7O0lBQzVELDREQUF3RDs7Ozs7SUFDeEQsd0RBQWdEOzs7OztJQUNoRCxzREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVBheW1lbnRHcm91cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5pbXBvcnQgeyBDYXNlVHJhbnNhY3Rpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nhc2UtdHJhbnNhY3Rpb25zL2Nhc2UtdHJhbnNhY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IElGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHsgSVBheW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50JztcbmltcG9ydCB7IElSZW1pc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZW1pc3Npb24nO1xuaW1wb3J0IHsgSVBheW1lbnRWaWV3IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudFZpZXcnO1xuaW1wb3J0IHsgSU9yZGVyUmVmZXJlbmNlRmVlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JT3JkZXJSZWZlcmVuY2VGZWUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmNvbnN0IEJTX0VOQUJMRV9GTEFHID0gJ2J1bGstc2Nhbi1lbmFibGluZy1mZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWNhc2UtdHJhbnNhY3Rpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nhc2UtdHJhbnNhY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FzZS10cmFuc2FjdGlvbnMuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhc2VUcmFuc2FjdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ0xPR0dFRElOVVNFUlJPTEVTJykgTE9HR0VESU5VU0VSUk9MRVM6IHN0cmluZ1tdO1xuICB0YWtlUGF5bWVudDogYm9vbGVhbjtcbiAgc2VydmljZXJlcXVlc3Q6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBleGNSZWZlcmVuY2U6IHN0cmluZztcbiAgcGF5bWVudEdyb3VwczogYW55W10gPSBbXTtcbiAgcGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgbm9uUGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgYWxsUGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgcmVtaXNzaW9uczogSVJlbWlzc2lvbltdID0gW107XG4gIGZlZXM6IElGZWVbXSA9IFtdO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgdG90YWxGZWVzOiBudW1iZXI7XG4gIHRvdGFsUGF5bWVudHM6IG51bWJlcjtcbiAgdG90YWxOb25PZmZQYXltZW50czogbnVtYmVyO1xuICB0b3RhbFJlbWlzc2lvbnM6IG51bWJlcjtcbiAgc2VsZWN0ZWRPcHRpb246IHN0cmluZztcbiAgZGNuTnVtYmVyOiBzdHJpbmc7XG4gIHBheW1lbnRSZWY6IHN0cmluZztcbiAgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBpc05ld1BjaXBhbE9mZjogYm9vbGVhbjtcbiAgaXNSZWZ1bmRSZW1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xuICBpc09sZFBjaXBhbE9mZjogYm9vbGVhbjtcbiAgaXNTdHJhdGVnaWNGaXhFbmFibGU6IGJvb2xlYW47XG4gIGlzQWRkRmVlQnRuRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIGlzRXhjZXB0aW9uUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBleGNlcHRpb25SZWNvcmRSZWZlcmVuY2U6IHN0cmluZztcbiAgaXNBbnlGZWVHcm91cEF2aWxhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQnVsa1NjYW5FbmFibGU7XG4gIGlzUmVtaXNzaW9uc01hdGNoOiBib29sZWFuO1xuICB2aWV3U3RhdHVzID0gJ21haW4nO1xuICBpc1JlbW92ZUJ0bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGZlZUlkOiBJRmVlO1xuICBjbEFtb3VudER1ZTogbnVtYmVyID0gMDtcbiAgdW5wcm9jZXNzZWRSZWNvcmRDb3VudDogbnVtYmVyO1xuICBpc0ZlZVJlY29yZHNFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0dycE91dHN0YW5kaW5nQW10UG9zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG90YWxSZWZ1bmRBbW91bnQ6IE51bWJlcjtcbiAgY2FzZVR5cGU6IFN0cmluZztcbiAgcGF5bWVudDogSVBheW1lbnQ7XG4gIHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cDtcbiAgcGF5bWVudFZpZXc6IElQYXltZW50VmlldztcblxuICAvL09yZGVyIGNoYW5nZXNcbiAgb3JkZXJEZXRhaWw6IGFueVtdID0gW107XG5cbiAgaXNBZGRSZW1pc3Npb25FbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgb3JkZXJSZW1pc3Npb25EZXRhaWxzOiBhbnlbXSA9IFtdO1xuICBvcmRlckxldmVsRmVlczogSU9yZGVyUmVmZXJlbmNlRmVlW10gPSBbXTtcbiAgaXNwYXltZW50R3JvdXBBcGlzdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIGNwb0RldGFpbHM6IGFueSA9IG51bGw7XG4gIG9yZGVyUmVmOiBzdHJpbmc7XG4gIG9yZGVyU3RhdHVzOiBzdHJpbmc7XG4gIG9yZGVyUGFydHk6IHN0cmluZztcbiAgb3JkZXJDcmVhdGVkOiBEYXRlO1xuICBvcmRlckNDREV2ZW50OiBzdHJpbmc7XG4gIHNlcnZpY2VSZXF1ZXN0VmFsdWU6IHN0cmluZztcbiAgb3JkZXJBZGRCdG5FbmFibGU6IGJvb2xlYW47XG4gIG9yZGVyRmVlc1RvdGFsOiBudW1iZXIgPSAwLjAwO1xuICBvcmRlclJlbWlzc2lvblRvdGFsOiBudW1iZXIgPSAwLjAwO1xuICBvcmRlclRvdGFsUGF5bWVudHM6IG51bWJlciA9IDAuMDA7XG4gIG9yZGVyUGVuZGluZ1BheW1lbnRzOiBudW1iZXIgPSAwLjAwO1xuICBpc0NQT0Rvd246IGJvb2xlYW47XG4gIHRlc3Q6IGJvb2xlYW47XG4gIGlzUEJBOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSXNzdWVSZWZ1bmZCdG5FbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNBZGRSZW1pc3Npb25CdG5FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kID0gWydwYXltZW50cy1yZWZ1bmQtYXBwcm92ZXInLCAncGF5bWVudHMtcmVmdW5kJ107XG4gIGlzRWxpZ2libGU0UEJBUGF5bWVudCA9IFsncHVpLWZpbmFuY2UtbWFuYWdlcicsICdwdWktdXNlci1tYW5hZ2VyJywgJ3B1aS1vcmdhbmlzYXRpb24tbWFuYWdlcicsICdwdWktY2FzZS1tYW5hZ2VyJ107XG4gIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlOiBib29sZWFuO1xuICBuYXZpZ2F0aW9ucGFnZTogc3RyaW5nO1xuICByZW1pc3Npb25GZWVBbXQ6IG51bWJlcjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnVsa1NjYW5pbmdQYXltZW50U2VydmljZTogQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlOiBDYXNlVHJhbnNhY3Rpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBPcmRlcnNsaXN0U2VydmljZTogT3JkZXJzbGlzdFNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm5hdmlnYXRpb25wYWdlICA9ICcnO1xuICAgIGlmKHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0cGF5bWVudFBhZ2VWaWV3KCkgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0cGF5bWVudFBhZ2VWaWV3KCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLnBheW1lbnRWaWV3ID0gZGF0YSk7XG4gICAgfVxuICAgIGlmKHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0bmF2aWdhdGlvblBhZ2VWYWx1ZSgpICE9PSBudWxsKSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG5hdmlnYXRpb25QYWdlVmFsdWUoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMubmF2aWdhdGlvbnBhZ2UgPSBkYXRhKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgaWYgKHRoaXMucGF5bWVudFZpZXcgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnBheW1lbnRWaWV3ICE9PSBudWxsICYmIHRoaXMucGF5bWVudFZpZXcucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm5hdmlnYXRpb25wYWdlID09PSAncGF5bWVudGRldGFpbHNwYWdlJykge1xuICAgICAgdGhpcy5nb1RvUGF5ZW1lbnRWaWV3KHRoaXMucGF5bWVudFZpZXcucGF5bWVudF9ncm91cF9yZWZlcmVuY2UsIHRoaXMucGF5bWVudFZpZXcucmVmZXJlbmNlLCB0aGlzLnBheW1lbnRWaWV3Lm1ldGhvZCk7XG4gICAgfVxuICAgIHRoaXMuaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmNhc2VUeXBlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNBU0VUWVBFO1xuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID09PSAnJykge1xuICAgICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgfVxuICAgIHRoaXMuZXhjUmVmZXJlbmNlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgdGhpcy50YWtlUGF5bWVudCA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVDtcbiAgICB0aGlzLnNlcnZpY2VyZXF1ZXN0ID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUO1xuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QgPT09ICd0cnVlJykge1xuICAgICAgdGhpcy5zZXJ2aWNlUmVxdWVzdFZhbHVlID0gJ3RydWUnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2VSZXF1ZXN0VmFsdWUgPSAnZmFsc2UnO1xuICAgIH1cbiAgICB0aGlzLmlzQnVsa1NjYW5FbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRTtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5pc1R1cm5PZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGO1xuICAgIHRoaXMuaXNOZXdQY2lwYWxPZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkY7XG4gICAgdGhpcy5pc09sZFBjaXBhbE9mZiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRjtcbiAgICB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTU0ZFTkFCTEU7XG4gICAgaWYgKCF0aGlzLmlzVHVybk9mZikge1xuXG4gICAgICB0aGlzLmNhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLmdldFBheW1lbnRHcm91cHModGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgIHBheW1lbnRHcm91cHMgPT4ge1xuICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID10cnVlO1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwcyA9IHBheW1lbnRHcm91cHNbJ3BheW1lbnRfZ3JvdXBzJ107XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVBbW91bnRzKCk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVPcmRlckZlZXNBbW91bnRzKCk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVSZWZ1bmRBbW91bnQoKTtcbiAgICAgICAgICBpZiAodGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0U2VsZWN0ZWRPcmRlclJlZklkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyUmVmID0gZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmdvVG9PcmRlclZpZXdEZXRhaWxTZWN0aW9uKHRoaXMub3JkZXJSZWYpO1xuICAgICAgICAgICAgLy8gdGhpcy52aWV3U3RhdHVzID0gJ29yZGVyLWZ1bGwtdmlldyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0UGFydHlEZXRhaWxzKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNwb0RldGFpbHMgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5kYXRhLmNvbnRlbnRbMF07XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0NQT0Rvd24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG5cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKTtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdHMoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXNlVHJhbnNhY3Rpb25zU2VydmljZS5nZXRQYXltZW50R3JvdXBzKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50R3JvdXBzID0+IHtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9dHJ1ZTtcbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cHMgPSBwYXltZW50R3JvdXBzWydwYXltZW50X2dyb3VwcyddO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQW1vdW50cygpO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlT3JkZXJGZWVzQW1vdW50cygpO1xuICAgICAgICAgIHRoaXMudG90YWxSZWZ1bmRBbW91bnQgPSB0aGlzLmNhbGN1bGF0ZVJlZnVuZEFtb3VudCgpO1xuICAgICAgICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBhcnR5RGV0YWlscyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jcG9EZXRhaWxzID0gSlNPTi5wYXJzZShyZXNwb25zZSkuZGF0YS5jb250ZW50WzBdO1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSA8YW55PmVycm9yLnJlcGxhY2UoL1wiL2csXCJcIik7XG4gICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdHMoKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0NQT0Rvd24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG5cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKTtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdHMoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiggdGhpcy5wYXltZW50R3JvdXBzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hlY2tGb3JFeGNlcHRpb25SZWNvcmQoKTtcbiAgICB9XG4gICBcbiAgICBpZih0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZXMoKSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2VzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IGRhdGEpO1xuICAgIH1cbiAgXG4gIH1cblxuICBzZXREZWZhdWx0cygpOiB2b2lkIHtcbiAgICB0aGlzLnRvdGFsUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxSZW1pc3Npb25zID0gMC4wMDtcbiAgICB0aGlzLnRvdGFsTm9uT2ZmUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxGZWVzID0gMC4wMDtcbiAgfVxuXG4gIGdldEFsbG9jYXRpb25TdGF0dXMocGF5bWVudHM6IGFueSkge1xuXG4gICAgbGV0IHBheW1lbnRBbGxvY2F0aW9uID0gcGF5bWVudHMucGF5bWVudF9hbGxvY2F0aW9uLFxuICAgICAgaXNBbGxvY2F0aW9uU3RhdHVzRXhpc3QgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwO1xuICAgIHJldHVybiBpc0FsbG9jYXRpb25TdGF0dXNFeGlzdCA/IHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzIDogJy0nO1xuICAgIC8vcmV0dXJuIFwiLVwiO1xuXG4gIH1cblxuICBjaGVja0ZvckV4Y2VwdGlvblJlY29yZCgpOiB2b2lkIHtcbiAgIFxuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cHMubGVuZ3RoID09PSAwICYmICh0aGlzLnNlbGVjdGVkT3B0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdjY2RvcmV4Y2VwdGlvbicgfHwgdGhpcy5zZWxlY3RlZE9wdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAncmMnKSkge1xuICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeUNDRCh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcmVjb3JkRGF0YSA9PiB7XG4gICAgICAgICAgaWYgKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWNvcmREYXRhWydkYXRhJ10gJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZS5sZW5ndGggPT09IHVuZGVmaW5lZCAmJiByZWNvcmREYXRhWydkYXRhJ10uY2NkX3JlZmVyZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cHMubGVuZ3RoID09PSAwICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ2RjbicpIHtcbiAgICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLmxlbmd0aCA+IDAgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0UubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUi5sZW5ndGggPT09IDAgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0UubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5wYXltZW50R3JvdXBzLmxlbmd0aCA+IDApXG4gICAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bWVudC5jYXNlX3JlZmVyZW5jZSAhPT0gdW5kZWZpbmVkICYmIHBheW1lbnQuY2NkX2Nhc2VfbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU9yZGVyRmVlc0Ftb3VudHMoKTogdm9pZCB7XG4gICAgbGV0IGZlZXNUb3RhbCA9IDAuMDA7XG4gICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2gocGF5bWVudEdyb3VwID0+IHtcbiAgICAgIHRoaXMucmVzZXRPcmRlclZhcmlhYmxlcygpO1xuICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICB0aGlzLm9yZGVyRmVlc1RvdGFsID0gdGhpcy5vcmRlckZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudFxuICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsID0gdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzID0gKHRoaXMub3JkZXJGZWVzVG90YWwgLSB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwpIC0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHM7XG4gICAgICBpZiAodGhpcy5vcmRlclBlbmRpbmdQYXltZW50cyA8PSAwLjAwKSB7XG4gICAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnUGFpZCc7XG4gICAgICAgIHRoaXMub3JkZXJBZGRCdG5FbmFibGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcmRlckZlZXNUb3RhbCA+IDAgJiYgKHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID4gMCB8fCB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwgPiAwKSAmJiAodGhpcy5vcmRlclRvdGFsUGF5bWVudHMgPCB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzKSkge1xuICAgICAgICB0aGlzLm9yZGVyU3RhdHVzID0gJ1BhcnRpYWxseSBwYWlkJ1xuICAgICAgICB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnTm90IHBhaWQnXG4gICAgICAgIHRoaXMub3JkZXJBZGRCdG5FbmFibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvL3RoaXMub3JkZXJMZXZlbEZlZXMucHVzaCh7b3JkZXJSZWZJZDpwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10sb3JkZXJUb3RhbEZlZXM6IHRoaXMub3JkZXJGZWVzVG90YWwsb3JkZXJTdGF0dXM6IHRoaXMub3JkZXJTdGF0dXMsb3JkZXJQYXJ0eTonU2FudG9zaCcsIG9yZGVyQ0NERXZlbnQ6J0Nhc2UgQ3JlYXRpb24nLG9yZGVyQ3JlYXRlZDogbmV3IERhdGUoKSwgb3JkZXJBZGRCdG5FbmFibGU6IHRoaXMub3JkZXJBZGRCdG5FbmFibGV9KTsgdGhpcy5jcG9EZXRhaWxzWydjcmVhdGVkVGltZXN0YW1wJ11cbiAgICAgIGlmICh0aGlzLmNwb0RldGFpbHMgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vcmRlckxldmVsRmVlcy5wdXNoKHsgb3JkZXJSZWZJZDogcGF5bWVudEdyb3VwWydwYXltZW50X2dyb3VwX3JlZmVyZW5jZSddLCBvcmRlclRvdGFsRmVlczogdGhpcy5vcmRlckZlZXNUb3RhbCwgb3JkZXJTdGF0dXM6IHRoaXMub3JkZXJTdGF0dXMsIG9yZGVyUGFydHk6IHRoaXMuY3BvRGV0YWlsc1sncmVzcG9uc2libGVQYXJ0eSddLCBvcmRlckNDREV2ZW50OiB0aGlzLmNwb0RldGFpbHNbJ2FjdGlvbiddLCBvcmRlckNyZWF0ZWQ6IHBheW1lbnRHcm91cFsnZGF0ZV9jcmVhdGVkJ10sIG9yZGVyQWRkQnRuRW5hYmxlOiB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9yZGVyTGV2ZWxGZWVzLnB1c2goeyBvcmRlclJlZklkOiBwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10sIG9yZGVyVG90YWxGZWVzOiB0aGlzLm9yZGVyRmVlc1RvdGFsLCBvcmRlclN0YXR1czogdGhpcy5vcmRlclN0YXR1cywgb3JkZXJQYXJ0eTogJycsIG9yZGVyQ0NERXZlbnQ6ICcnLCBvcmRlckNyZWF0ZWQ6IHBheW1lbnRHcm91cFsnZGF0ZV9jcmVhdGVkJ10sIG9yZGVyQWRkQnRuRW5hYmxlOiB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcmRlclN0YXR1cyAhPT0gJ1BhaWQnKSB7XG4gICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJzTGlzdCh0aGlzLm9yZGVyTGV2ZWxGZWVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXNldE9yZGVyVmFyaWFibGVzKCk6IHZvaWQge1xuICAgIHRoaXMub3JkZXJGZWVzVG90YWwgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID0gMC4wMDtcbiAgICB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJQZW5kaW5nUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcblxuICB9O1xuXG4gIGdvVG9PcmRlclZpZXdEZXRhaWxTZWN0aW9uKG9yZGVyUmVmZXJlbmNlT2JqOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UpIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWZJZChvcmRlclJlZmVyZW5jZU9iaik7XG4gICAgICB0aGlzLm9yZGVyUmVmID0gb3JkZXJSZWZlcmVuY2VPYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWZJZChvcmRlclJlZmVyZW5jZU9iai5vcmRlclJlZklkKTtcbiAgICAgIHRoaXMub3JkZXJSZWYgPSBvcmRlclJlZmVyZW5jZU9iai5vcmRlclJlZklkO1xuICAgIH1cblxuICAgIHRoaXMub3JkZXJGZWVzVG90YWwgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCA9IDAuMDA7XG4gICAgdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJQZW5kaW5nUGF5bWVudHMgPSAwLjAwO1xuXG4gICAgdGhpcy5vcmRlckRldGFpbCA9IHRoaXMucGF5bWVudEdyb3Vwcy5maWx0ZXIoeCA9PiB4LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlID09PSB0aGlzLm9yZGVyUmVmKTtcbiAgICB0aGlzLm9yZGVyRGV0YWlsLmZvckVhY2gob3JkZXJEZXRhaWwgPT4ge1xuICAgICAgaWYgKG9yZGVyRGV0YWlsLmZlZXMpIHtcbiAgICAgICAgb3JkZXJEZXRhaWwuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgdGhpcy5vcmRlckZlZXNUb3RhbCA9IHRoaXMub3JkZXJGZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9yZGVyRGV0YWlsLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgb3JkZXJEZXRhaWwucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsID0gdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JkZXJEZXRhaWwucGF5bWVudHMpIHtcbiAgICAgICAgICB0aGlzLnBheW1lbnQgPSBvcmRlckRldGFpbC5wYXltZW50c1swXTtcbiAgICAgICAgICBvcmRlckRldGFpbC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICB0aGlzLm9yZGVyVG90YWxQYXltZW50cyA9IHRoaXMub3JkZXJUb3RhbFBheW1lbnRzICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzID0gKHRoaXMub3JkZXJGZWVzVG90YWwgLSB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwpIC0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHM7XG4gICAgLy8gdGhpcy5vcmRlclJlZiA9IG9yZGVyUmVmZXJlbmNlT2JqLm9yZGVyUmVmSWQ7XG4gICAgaWYgKHRoaXMub3JkZXJQZW5kaW5nUGF5bWVudHMgPD0gMC4wMCkge1xuICAgICAgdGhpcy5vcmRlclN0YXR1cyA9ICdQYWlkJztcbiAgICB9IGVsc2UgaWYgKHRoaXMub3JkZXJGZWVzVG90YWwgPiAwICYmICh0aGlzLm9yZGVyVG90YWxQYXltZW50cyA+IDAgfHwgdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsID4gMCkgJiYgKHRoaXMub3JkZXJUb3RhbFBheW1lbnRzIDwgdGhpcy5vcmRlclBlbmRpbmdQYXltZW50cykpIHtcbiAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnUGFydGlhbGx5IHBhaWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnTm90IHBhaWQnXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3BvRGV0YWlscyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5vcmRlclBhcnR5ID0gdGhpcy5jcG9EZXRhaWxzWydyZXNwb25zaWJsZVBhcnR5J107XG4gICAgICB0aGlzLm9yZGVyQ3JlYXRlZCA9IHRoaXMuY3BvRGV0YWlsc1snY3JlYXRlZFRpbWVzdGFtcCddO1xuICAgICAgdGhpcy5vcmRlckNDREV2ZW50ID0gdGhpcy5jcG9EZXRhaWxzWydhY3Rpb24nXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcmRlclBhcnR5ID0gJyc7XG4gICAgICB0aGlzLm9yZGVyQ0NERXZlbnQgPSAnJztcbiAgICAgIHRoaXMub3JkZXJDcmVhdGVkID0gb3JkZXJSZWZlcmVuY2VPYmoub3JkZXJDcmVhdGVkO1xuICAgIH1cbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnb3JkZXItZnVsbC12aWV3JztcbiAgfVxuXG4gIHJlZGlyZWN0VG9PcmRlckZlZVNlYXJjaFBhZ2UoZXZlbnQ6IGFueSwgb3JkZXJlZjogYW55KSB7XG4gICAgaWYob3JkZXJlZi5vcmRlckFkZEJ0bkVuYWJsZSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IG51bGw7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IG9yZGVyZWYub3JkZXJSZWZJZDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICB9XG4gIH1cblxuICBnb1RvQ2FzZVRyYW5zYXRpb25QYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlID0gZmFsc2U7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nXG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgfVxuXG5cbiAgY2FsY3VsYXRlQW1vdW50cygpOiB2b2lkIHtcbiAgICBsZXQgZmVlc1RvdGFsID0gMC4wMCxcbiAgICAgIHBheW1lbnRzVG90YWwgPSAwLjAwLFxuICAgICAgcmVtaXNzaW9uc1RvdGFsID0gMC4wMCxcbiAgICAgIG5vbk9mZkxpbmVQYXltZW50ID0gMC4wMDtcblxuICAgIHRoaXMucGF5bWVudEdyb3Vwcy5mb3JFYWNoKHBheW1lbnRHcm91cCA9PiB7XG4gICAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMpIHtcbiAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgIC8vIG5ldyBmZWF0dXJlIEFwcG9ydGlvbm1lbnQgdG9nZ2xlIGNoYW5nZXNcbiAgICAgICAgICBpZiAoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgICAgICBpZiAoZmVlLmRhdGVfY3JlYXRlZCkge1xuICAgICAgICAgICAgICBsZXQgYSA9IGZlZS5hbW91bnRfZHVlID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIGxldCBiID0gZmVlLmFtb3VudF9kdWUgPD0gMDtcbiAgICAgICAgICAgICAgdGhpcy5jbEFtb3VudER1ZSA9IGEgPyB0aGlzLmNsQW1vdW50RHVlICsgZmVlLm5ldF9hbW91bnQgOiBiID8gdGhpcy5jbEFtb3VudER1ZSArIDAgOiB0aGlzLmNsQW1vdW50RHVlICsgZmVlLmFtb3VudF9kdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWVbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10gPSBwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ107XG4gICAgICAgICAgICB0aGlzLmZlZXMucHVzaChmZWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZWVzVG90YWwgPSBmZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnQ7XG4gICAgICAgICAgICB0aGlzLmZlZXMucHVzaChmZWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzVHVybk9mZikge1xuICAgICAgICB0aGlzLnRvdGFsRmVlcyA9IGZlZXNUb3RhbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgICBwYXltZW50R3JvdXAucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICAvLyBuZXcgZmVhdHVyZSBBcHBvcnRpb25tZW50IHRvZ2dsZSBjaGFuZ2VzXG4gICAgICAgICAgaWYgKCF0aGlzLmlzVHVybk9mZikge1xuICAgICAgICAgICAgbGV0IGFsbG9jYXRpb25MZW4gPSBwYXltZW50LnBheW1lbnRfYWxsb2NhdGlvbjtcblxuICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbkxlbi5sZW5ndGggPT09IDAgfHwgYWxsb2NhdGlvbkxlbi5sZW5ndGggPiAwICYmIGFsbG9jYXRpb25MZW5bMF0uYWxsb2NhdGlvbl9zdGF0dXMgPT09ICdBbGxvY2F0ZWQnKSB7XG4gICAgICAgICAgICAgICAgbm9uT2ZmTGluZVBheW1lbnQgPSBub25PZmZMaW5lUGF5bWVudCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uTGVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vblBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uTGVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLnBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXltZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZVxuICAgICAgICAgICAgdGhpcy5hbGxQYXltZW50cy5wdXNoKHBheW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlXG4gICAgICAgICAgICB0aGlzLmFsbFBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG90YWxQYXltZW50cyA9IHBheW1lbnRzVG90YWw7XG4gICAgICAvLyBuZXcgZmVhdHVyZSBBcHBvcnRpb25tZW50IHRvZ2dsZSBjaGFuZ2VzXG4gICAgICBpZiAoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgIHRoaXMudG90YWxOb25PZmZQYXltZW50cyA9IG5vbk9mZkxpbmVQYXltZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc2lzb24gPT4ge1xuICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IHJlbWlzc2lvbnNUb3RhbCArIHJlbWlzaXNvbi5od2ZfYW1vdW50O1xuICAgICAgICAgIHRoaXMucmVtaXNzaW9ucy5wdXNoKHJlbWlzaXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy50b3RhbFJlbWlzc2lvbnMgPSByZW1pc3Npb25zVG90YWw7XG4gICAgfSk7XG5cbiAgfVxuXG4gIGNhbGN1bGF0ZVJlZnVuZEFtb3VudCgpIHtcbiAgICBpZiAoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICBsZXQgaXNOZXdQYXltZW50R3JvdXAgPSBmYWxzZTtcblxuICAgICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2goKHBheW1lbnRHcm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGdycE91dHN0YW5kaW5nQW1vdW50ID0gMC4wMCxcbiAgICAgICAgICBmZWVzVG90YWwgPSAwLjAwLFxuICAgICAgICAgIHBheW1lbnRzVG90YWwgPSAwLjAwLFxuICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgZmVlcyA9IFtdO1xuXG4gICAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgICAgIC8vIHRoaXMuaXNGZWVSZWNvcmRzRXhpc3QgPSB0cnVlO1xuICAgICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICAgIGZlZXNUb3RhbCA9IGZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudDtcblxuICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW0gPT4ge1xuICAgICAgICAgICAgICBpZiAocmVtLmZlZV9jb2RlID09PSBmZWUuY29kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZlZVsncmVtaXNzaW9ucyddID0gcmVtO1xuICAgICAgICAgICAgICAgIC8vIGlmKCFmZWVzLmZpbmQoayA9PiBrLmNvZGU9ZmVlLmNvZGUpKVxuICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgICAgICAvL31cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCkge1xuICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZlZS5kYXRlX2NyZWF0ZWQpIHtcbiAgICAgICAgICAgICAgaXNOZXdQYXltZW50R3JvdXAgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0hpc3RvcmljR3JvdXBBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cHNbaW5kZXhdWydvbGQnXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzW2luZGV4XS5mZWVzID0gZmVlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSByZW1pc3Npb25zVG90YWwgKyByZW1pc3Npb24uaHdmX2Ftb3VudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBncnBPdXRzdGFuZGluZ0Ftb3VudCA9IChmZWVzVG90YWwgLSByZW1pc3Npb25zVG90YWwpIC0gcGF5bWVudHNUb3RhbDtcbiAgICAgICAgaWYgKGdycE91dHN0YW5kaW5nQW1vdW50ID4gMCAmJiBpc05ld1BheW1lbnRHcm91cCkge1xuICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzRmVlUmVjb3Jkc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnBheW1lbnRSZWYgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzICYmIHBheW1lbnRHcm91cC5mZWVzLmxlbmd0aCA+IDAgJiYgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPD0gMCAmJiBpc05ld1BheW1lbnRHcm91cCkge1xuICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCghaXNOZXdQYXltZW50R3JvdXAgJiYgdGhpcy5pc0hpc3RvcmljR3JvdXBBdmFpbGFibGUpIHx8ICghaXNOZXdQYXltZW50R3JvdXAgJiYgIXRoaXMuaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlKSkge1xuICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdG90YWxSZWZ1bmRBbW91bnQgPSAwLFxuICAgICAgICBpc0ZlZUFtb3VudFplcm8gPSBmYWxzZTtcbiAgICAgIHRoaXMucGF5bWVudEdyb3Vwcy5mb3JFYWNoKHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgIGxldCBncnBPdXRzdGFuZGluZ0Ftb3VudCA9IDAuMDAsXG4gICAgICAgICAgZmVlc1RvdGFsID0gMC4wMCxcbiAgICAgICAgICBwYXltZW50c1RvdGFsID0gMC4wMCxcbiAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSAwLjAwO1xuICAgICAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMpIHtcbiAgICAgICAgICB0aGlzLmlzRmVlUmVjb3Jkc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgICBmZWVzVG90YWwgPSBmZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnQ7XG4gICAgICAgICAgICBpZiAoZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgIGlzRmVlQW1vdW50WmVybyA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5yZW1pc3Npb25zKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc3Npb24gPT4ge1xuICAgICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAoZmVlc1RvdGFsIC0gcmVtaXNzaW9uc1RvdGFsKSAtIHBheW1lbnRzVG90YWw7XG4gICAgICAgIGlmIChncnBPdXRzdGFuZGluZ0Ftb3VudCA8IDApIHtcbiAgICAgICAgICBpZiAodG90YWxSZWZ1bmRBbW91bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRvdGFsUmVmdW5kQW1vdW50ID0gZ3JwT3V0c3RhbmRpbmdBbW91bnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvdGFsUmVmdW5kQW1vdW50ID0gKHRvdGFsUmVmdW5kQW1vdW50ICsgZ3JwT3V0c3RhbmRpbmdBbW91bnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChncnBPdXRzdGFuZGluZ0Ftb3VudCA+IDAgfHwgKGdycE91dHN0YW5kaW5nQW1vdW50ID09PSAwICYmIGlzRmVlQW1vdW50WmVybykpIHtcbiAgICAgICAgICB0aGlzLmlzR3JwT3V0c3RhbmRpbmdBbXRQb3NpdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRvdGFsUmVmdW5kQW1vdW50ICogLTE7XG4gICAgfVxuICB9XG5cbiAgZ2V0R3JvdXBPdXRzdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXApOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuY2FsY3VsYXRlT3V0U3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKTs7XG4gIH1cblxuICByZWRpcmVjdFRvRmVlU2VhcmNoUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgdXJsID0gdGhpcy5pc0J1bGtTY2FuRW5hYmxlID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICB1cmwgKz0gdGhpcy5pc1R1cm5PZmYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgdXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICB1cmwgKz0gdGhpcy5pc05ld1BjaXBhbE9mZiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgdXJsICs9IHRoaXMuaXNPbGRQY2lwYWxPZmYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnO1xuICAgIHVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2ZlZS1zZWFyY2g/c2VsZWN0ZWRPcHRpb249JHt0aGlzLnNlbGVjdGVkT3B0aW9ufSZjY2RDYXNlTnVtYmVyPSR7dGhpcy5jY2RDYXNlTnVtYmVyfSR7dXJsfWApO1xuICB9XG5cbiAgYWRkUmVtaXNzaW9uKGZlZTogSUZlZSkge1xuICAgIGlmKHRoaXMuY2hrRm9yQWRkUmVtaXNzaW9uKGZlZS5jb2RlKSkge1xuICAgIHRoaXMuZmVlSWQgPSBmZWU7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ2FkZHJlbWlzc2lvbic7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHModGhpcy5wYXltZW50LnJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5maWx0ZXJcbiAgICAgICAgICAocGF5bWVudEdyb3VwT2JqID0+IHBheW1lbnRHcm91cE9ialsncmVmZXJlbmNlJ10uaW5jbHVkZXModGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UpKTtcbiAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgIC8vIGNvbnN0IHBheW1lbnRBbGxvY2F0aW9uID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucGF5bWVudF9hbGxvY2F0aW9uO1xuICAgICAgICAvLyB0aGlzLmlzU3RhdHVzQWxsb2NhdGVkID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4gMCAmJiBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcgfHwgcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID09PSAwO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLnJlcGxhY2UoL1wiL2csXCJcIilcbiAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJlZnVuZEZvclJlbWlzc2lvbihwYXltZW50OiBJUGF5bWVudCwgcmVtaXNzaW9uOiBJUmVtaXNzaW9uW10sZmVlczphbnkpIHtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWRkcmVmdW5kZm9ycmVtaXNzaW9uJztcbiBcbiAgICB0aGlzLnBheW1lbnQgPSBwYXltZW50O1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEFwcG9ydGlvblBheW1lbnREZXRhaWxzKHRoaXMucGF5bWVudC5yZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1xuXG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMuZmlsdGVyXG4gICAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudC5yZWZlcmVuY2UpKTtcbiAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgIHRoaXMucmVtaXNzaW9ucyA9IHJlbWlzc2lvbjtcbiAgICAgICAgdGhpcy5yZW1pc3Npb25GZWVBbXQgPSBmZWVzLmZpbHRlcihkYXRhPT5kYXRhLmNvZGUgPT09IHRoaXMucmVtaXNzaW9uc1snZmVlX2NvZGUnXSlbMF0ubmV0X2Ftb3VudDtcbiAgICAgICAgLy8gY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgIC8vIHRoaXMuaXNTdGF0dXNBbGxvY2F0ZWQgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwICYmIHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzID09PSAnQWxsb2NhdGVkJyB8fCBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPT09IDA7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICB9XG5cbiAgcmVkaXJlY3RUb3JlbWlzc2lvblBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlbWlzc2lvbidcbiAgfVxuXG4gIHJlZGlyZWN0VG9SZXBvcnRzUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvcmVwb3J0cz9zZWxlY3RlZE9wdGlvbj0ke3RoaXMuc2VsZWN0ZWRPcHRpb259JmNjZENhc2VOdW1iZXI9JHt0aGlzLmNjZENhc2VOdW1iZXJ9YCk7XG4gIH1cblxuICBsb2FkRmVlU3VtbWFyeVBhZ2UocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IG51bGw7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgfVxuXG4gIGdvVG9QYXltZW50Vmlld0NvbXBvbmVudChwYXltZW50R3JvdXA6IGFueSkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50TWV0aG9kID0gcGF5bWVudEdyb3VwLnBheW1lbnRNZXRob2Q7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50R3JvdXBSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudFJlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncGF5bWVudC12aWV3JztcbiAgfVxuXG4gIGdvVG9QYXllbWVudFZpZXcocGF5bWVudEdyb3VwUmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudE1ldGhvZDogc3RyaW5nKSB7XG4gICAgdGhpcy5nb1RvUGF5bWVudFZpZXdDb21wb25lbnQoeyBwYXltZW50R3JvdXBSZWZlcmVuY2UsIHBheW1lbnRSZWZlcmVuY2UsIHBheW1lbnRNZXRob2QgfSk7XG4gIH1cblxuICBzZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQodW5wcm9jZXNzZWRSZWNvcmRJZDogc3RyaW5nKSB7XG4gICAgaWYgKHVucHJvY2Vzc2VkUmVjb3JkSWQpIHtcbiAgICAgIGlmICh0aGlzLmlzVHVybk9mZikge1xuICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXRVbnByb2Nlc3NlZEZlZUNvdW50KHVuUHJvY2Vzc2VkUmVjb3JkQ291bnQ6IG51bWJlcikge1xuICAgIHRoaXMudW5wcm9jZXNzZWRSZWNvcmRDb3VudCA9IHVuUHJvY2Vzc2VkUmVjb3JkQ291bnQ7XG4gIH1cblxuICBjYWxjdWxhdGVBbW91bnREdWUoZmVlOiBJRmVlKSB7XG5cbiAgICBpZiAoZmVlLmRhdGVfY3JlYXRlZCkge1xuICAgICAgcmV0dXJuIGZlZS5hbW91bnRfZHVlICE9PSB1bmRlZmluZWQgPyBmZWUuYW1vdW50X2R1ZSA6IGZlZS5uZXRfYW1vdW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCIwLjAwXCI7XG4gICAgfVxuICB9XG5cbiAgY29uZmlybVJlbW92ZUZlZShmZWU6IElGZWUpIHtcbiAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZlZUlkID0gZmVlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdmZWVSZW1vdmFsQ29uZmlybWF0aW9uJztcbiAgfVxuXG4gIGNhbmNlbFJlbW92YWwoKSB7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICB9XG5cbiAgcmVtb3ZlRmVlKGZlZTogYW55KSB7XG4gICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5kZWxldGVGZWVGcm9tUGF5bWVudEdyb3VwKGZlZSkuc3Vic2NyaWJlKFxuICAgICAgKHN1Y2Nlc3M6IGFueSkgPT4ge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGlzQ2hlY2tBbW91bnRkdWVFeGlzdChhbW91bnREdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgYW1vdW50RHVlID09PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIGlzc3VlUmVmdW5kKHBheW1lbnQ6IElQYXltZW50KSB7XG4gICAgaWYgKHBheW1lbnQgIT09IG51bGwgJiYgcGF5bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYodGhpcy5jaGtJc3N1ZVJlZnVuZEJ0bkVuYWJsZShwYXltZW50KSkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdpc3N1ZXJlZnVuZCc7XG4gICAgdGhpcy5wYXltZW50ID0gcGF5bWVudDtcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgfVxuXG4gIGNoa0ZvckFkZFJlbWlzc2lvbihmZWVDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGtGb3JQQkFQYXltZW50KCkgJiYgdGhpcy5jaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kKCkpIHtcbiAgICAgIGlmICh0aGlzLm9yZGVyRGV0YWlsWzBdWydyZW1pc3Npb25zJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlbWlzc2lvbiBvZiB0aGlzLm9yZGVyRGV0YWlsWzBdWydyZW1pc3Npb25zJ10pIHtcbiAgICAgICAgICBpZiAocmVtaXNzaW9uLmZlZV9jb2RlID09PSBmZWVDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNoa0ZvclBCQVBheW1lbnQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMub3JkZXJEZXRhaWwgIT09IG51bGwgJiYgIHRoaXMub3JkZXJEZXRhaWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMub3JkZXJEZXRhaWwuZm9yRWFjaChvcmRlckRldGFpbCA9PiB7XG4gICAgICBpZiAob3JkZXJEZXRhaWwucGF5bWVudHMpIHtcbiAgICAgICAgb3JkZXJEZXRhaWwucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICBpZiAocGF5bWVudC5tZXRob2QudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCcgJiYgdGhpcy5hbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzKHBheW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmlzUEJBID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmlzUEJBKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH1cbiAgfVxuXG4gIGNoa0lzc3VlUmVmdW5kQnRuRW5hYmxlKHBheW1lbnQ6IElQYXltZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1JlZnVuZCgpICYmIHRoaXMuYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyhwYXltZW50KSAmJlxuICAgICAgcGF5bWVudC5tZXRob2QgPT09ICdwYXltZW50IGJ5IGFjY291bnQnICYmIHBheW1lbnQuc3RhdHVzLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJykge1xuICAgICAgdGhpcy5pc0lzc3VlUmVmdW5mQnRuRW5hYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNJc3N1ZVJlZnVuZkJ0bkVuYWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgY2hrSXNSZWZ1bmRSZW1pc3Npb25CdG5FbmFibGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMub3JkZXJEZXRhaWwgIT09IG51bGwgJiYgIHRoaXMub3JkZXJEZXRhaWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMub3JkZXJEZXRhaWwuZm9yRWFjaChvcmRlckRldGFpbCA9PiB7XG4gICAgICBpZiAob3JkZXJEZXRhaWwucGF5bWVudHMpIHtcbiAgICAgICAgb3JkZXJEZXRhaWwucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICBpZiAocGF5bWVudC5tZXRob2QudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCcgJiYgcGF5bWVudC5zdGF0dXMudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnICYmIHRoaXMuYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyhwYXltZW50KSkge1xuICAgICAgICAgICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbkJ0bkVuYWJsZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5pc1JlZnVuZFJlbWlzc2lvbkJ0bkVuYWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB9XG4gIH1cblxuICBjaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kLnNvbWUocm9sZSA9PlxuICAgICAgdGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMVxuICAgICk7XG4gIH1cbiAgY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1BCQXBheW1lbnQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbGlnaWJsZTRQQkFQYXltZW50LnNvbWUocm9sZSA9PlxuICAgICAgdGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMVxuICAgICk7XG4gIH1cbiAgYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyA9IChwYXltZW50OiBJUGF5bWVudCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChwYXltZW50ICE9PSBudWxsICYmIHBheW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGxldCB0bXA0RGF5QWdvID0gbmV3IERhdGUoKTtcbiAgICB0bXA0RGF5QWdvLnNldERhdGUodG1wNERheUFnby5nZXREYXRlKCkgLSA0KTtcbiAgICByZXR1cm4gdG1wNERheUFnbyA+PSBuZXcgRGF0ZShwYXltZW50LmRhdGVfY3JlYXRlZCk7XG4gICAgfVxuICB9XG4gIGxvYWRQQkFBY2NvdW50UGFnZShvcmRlclJlZjogSVBheW1lbnQpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGJhUGF5T3JkZXJSZWYgPSBvcmRlclJlZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncGJhLXBheW1lbnQnO1xuICB9XG59XG5cbiJdfQ==