@hmcts/ccpay-web-component 5.0.3 → 5.0.4-beta03

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 (102) hide show
  1. package/bundles/hmcts-ccpay-web-component.umd.js +2977 -1157
  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 +34 -31
  6. package/esm2015/lib/components/add-remission/add-remission.component.js +697 -126
  7. package/esm2015/lib/components/case-transactions/case-transactions.component.js +115 -59
  8. package/esm2015/lib/components/contact-details/contact-details.component.js +447 -0
  9. package/esm2015/lib/components/fee-summary/fee-summary.component.js +17 -12
  10. package/esm2015/lib/components/payment-view/payment-view.component.js +202 -107
  11. package/esm2015/lib/components/pba-payment/pba-payment.component.js +248 -0
  12. package/esm2015/lib/components/process-refund/process-refund.component.js +49 -28
  13. package/esm2015/lib/components/refund-list/refund-list.component.js +3 -3
  14. package/esm2015/lib/components/refund-status/refund-status.component.js +210 -31
  15. package/esm2015/lib/components/service-request/service-request.component.js +258 -153
  16. package/esm2015/lib/components/table/table.component.js +24 -9
  17. package/esm2015/lib/interfaces/IFee.js +13 -1
  18. package/esm2015/lib/interfaces/IPayment.js +7 -1
  19. package/esm2015/lib/interfaces/IPutNotificationRequest.js +25 -0
  20. package/esm2015/lib/interfaces/IRefundContactDetails.js +25 -0
  21. package/esm2015/lib/interfaces/IRefundFee.js +21 -0
  22. package/esm2015/lib/interfaces/IRefundList.js +7 -1
  23. package/esm2015/lib/interfaces/IRefundsNotifications.js +21 -0
  24. package/esm2015/lib/interfaces/IRemission.js +7 -1
  25. package/esm2015/lib/interfaces/IResubmitRefundRequest.js +10 -2
  26. package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +23 -0
  27. package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +32 -0
  28. package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +6 -2
  29. package/esm2015/lib/interfaces/PostRefundRetroRemission.js +20 -2
  30. package/esm2015/lib/payment-lib.component.js +18 -5
  31. package/esm2015/lib/payment-lib.module.js +5 -3
  32. package/esm2015/lib/payment-lib.service.js +31 -1
  33. package/esm2015/lib/services/notification/notification.service.js +85 -0
  34. package/esm2015/lib/services/payment-view/payment-view.service.js +35 -1
  35. package/esm2015/lib/services/refunds/refunds.service.js +11 -2
  36. package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +2 -2
  37. package/esm5/hmcts-ccpay-web-component.js +34 -31
  38. package/esm5/lib/components/add-remission/add-remission.component.js +819 -131
  39. package/esm5/lib/components/case-transactions/case-transactions.component.js +124 -59
  40. package/esm5/lib/components/contact-details/contact-details.component.js +472 -0
  41. package/esm5/lib/components/fee-summary/fee-summary.component.js +17 -12
  42. package/esm5/lib/components/payment-view/payment-view.component.js +236 -125
  43. package/esm5/lib/components/pba-payment/pba-payment.component.js +269 -0
  44. package/esm5/lib/components/process-refund/process-refund.component.js +52 -78
  45. package/esm5/lib/components/refund-list/refund-list.component.js +3 -3
  46. package/esm5/lib/components/refund-status/refund-status.component.js +246 -29
  47. package/esm5/lib/components/service-request/service-request.component.js +302 -183
  48. package/esm5/lib/components/table/table.component.js +27 -9
  49. package/esm5/lib/interfaces/IFee.js +13 -1
  50. package/esm5/lib/interfaces/IPayment.js +7 -1
  51. package/esm5/lib/interfaces/IPutNotificationRequest.js +23 -0
  52. package/esm5/lib/interfaces/IRefundContactDetails.js +25 -0
  53. package/esm5/lib/interfaces/IRefundFee.js +21 -0
  54. package/esm5/lib/interfaces/IRefundList.js +7 -1
  55. package/esm5/lib/interfaces/IRefundsNotifications.js +21 -0
  56. package/esm5/lib/interfaces/IRemission.js +7 -1
  57. package/esm5/lib/interfaces/IResubmitRefundRequest.js +8 -2
  58. package/esm5/lib/interfaces/IserviceRequestCardPayment.js +22 -0
  59. package/esm5/lib/interfaces/IserviceRequestPbaPayment.js +28 -0
  60. package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +5 -2
  61. package/esm5/lib/interfaces/PostRefundRetroRemission.js +16 -2
  62. package/esm5/lib/payment-lib.component.js +15 -3
  63. package/esm5/lib/payment-lib.module.js +5 -3
  64. package/esm5/lib/payment-lib.service.js +45 -1
  65. package/esm5/lib/services/notification/notification.service.js +89 -0
  66. package/esm5/lib/services/payment-view/payment-view.service.js +48 -1
  67. package/esm5/lib/services/refunds/refunds.service.js +17 -2
  68. package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +2 -2
  69. package/fesm2015/hmcts-ccpay-web-component.js +2231 -578
  70. package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
  71. package/fesm5/hmcts-ccpay-web-component.js +2974 -1108
  72. package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
  73. package/hmcts-ccpay-web-component.d.ts +33 -30
  74. package/hmcts-ccpay-web-component.metadata.json +1 -1
  75. package/lib/components/add-remission/add-remission.component.d.ts +45 -3
  76. package/lib/components/case-transactions/case-transactions.component.d.ts +8 -1
  77. package/lib/components/contact-details/contact-details.component.d.ts +49 -0
  78. package/lib/components/payment-view/payment-view.component.d.ts +25 -6
  79. package/lib/components/pba-payment/pba-payment.component.d.ts +33 -0
  80. package/lib/components/process-refund/process-refund.component.d.ts +6 -1
  81. package/lib/components/refund-status/refund-status.component.d.ts +33 -6
  82. package/lib/components/service-request/service-request.component.d.ts +31 -9
  83. package/lib/components/table/table.component.d.ts +1 -0
  84. package/lib/interfaces/IFee.d.ts +6 -0
  85. package/lib/interfaces/IPayment.d.ts +3 -0
  86. package/lib/interfaces/IPutNotificationRequest.d.ts +6 -0
  87. package/lib/interfaces/IRefundContactDetails.d.ts +9 -0
  88. package/lib/interfaces/IRefundFee.d.ts +7 -0
  89. package/lib/interfaces/IRefundList.d.ts +4 -0
  90. package/lib/interfaces/IRefundsNotifications.d.ts +16 -0
  91. package/lib/interfaces/IRemission.d.ts +3 -0
  92. package/lib/interfaces/IResubmitRefundRequest.d.ts +5 -1
  93. package/lib/interfaces/IserviceRequestCardPayment.d.ts +6 -0
  94. package/lib/interfaces/IserviceRequestPbaPayment.d.ts +8 -0
  95. package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +3 -1
  96. package/lib/interfaces/PostRefundRetroRemission.d.ts +7 -1
  97. package/lib/payment-lib.component.d.ts +5 -0
  98. package/lib/payment-lib.service.d.ts +6 -0
  99. package/lib/services/notification/notification.service.d.ts +15 -0
  100. package/lib/services/payment-view/payment-view.service.d.ts +5 -0
  101. package/lib/services/refunds/refunds.service.d.ts +2 -0
  102. package/package.json +5 -1
@@ -6,13 +6,13 @@ import * as tslib_1 from "tslib";
6
6
  import { Component, Input } from '@angular/core';
7
7
  import { PaymentViewService } from '../../services/payment-view/payment-view.service';
8
8
  import { PaymentLibComponent } from '../../payment-lib.component';
9
+ import { PostRefundRetroRemission } from '../../interfaces/PostRefundRetroRemission';
9
10
  /** @type {?} */
10
11
  var BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
11
12
  import { ChangeDetectorRef } from '@angular/core';
12
13
  import { OrderslistService } from '../../services/orderslist.service';
13
14
  var PaymentViewComponent = /** @class */ (function () {
14
15
  function PaymentViewComponent(paymentViewService, paymentLibComponent, cd, OrderslistService) {
15
- var _this = this;
16
16
  this.paymentViewService = paymentViewService;
17
17
  this.paymentLibComponent = paymentLibComponent;
18
18
  this.cd = cd;
@@ -22,30 +22,7 @@ var PaymentViewComponent = /** @class */ (function () {
22
22
  this.isIssueRefunfBtnEnable = false;
23
23
  this.allowedRolesToAccessRefund = ['payments-refund-approver', 'payments-refund'];
24
24
  this.remissions = [];
25
- this.check4AllowedRoles2AccessRefund = (/**
26
- * @return {?}
27
- */
28
- function () {
29
- return _this.allowedRolesToAccessRefund.some((/**
30
- * @param {?} role
31
- * @return {?}
32
- */
33
- function (role) {
34
- return _this.LOGGEDINUSERROLES.indexOf(role) !== -1;
35
- }));
36
- });
37
- this.allowFurtherAccessAfter4Days = (/**
38
- * @param {?} payment
39
- * @return {?}
40
- */
41
- function (payment) {
42
- if (payment !== null && payment !== undefined) {
43
- /** @type {?} */
44
- var tmp4DayAgo = new Date();
45
- tmp4DayAgo.setDate(tmp4DayAgo.getDate() - 4);
46
- return tmp4DayAgo >= new Date(payment.date_created);
47
- }
48
- });
25
+ this.isContinueBtnDisabled = true;
49
26
  }
50
27
  /**
51
28
  * @return {?}
@@ -99,6 +76,7 @@ var PaymentViewComponent = /** @class */ (function () {
99
76
  }
100
77
  }));
101
78
  paymentGroup.fees = fees;
79
+ _this.paymentFees = fees;
102
80
  _this.paymentGroup = paymentGroup;
103
81
  _this.paymentGroup.payments = _this.paymentGroup.payments.filter((/**
104
82
  * @param {?} paymentGroupObj
@@ -143,6 +121,37 @@ var PaymentViewComponent = /** @class */ (function () {
143
121
  function () {
144
122
  this.paymentLibComponent.viewName = 'payment-list';
145
123
  };
124
+ /**
125
+ * @return {?}
126
+ */
127
+ PaymentViewComponent.prototype.getOverPaymentValue = /**
128
+ * @return {?}
129
+ */
130
+ function () {
131
+ /** @type {?} */
132
+ var feesOverPayment = 0;
133
+ this.paymentGroup.fees.forEach((/**
134
+ * @param {?} fee
135
+ * @return {?}
136
+ */
137
+ function (fee) {
138
+ feesOverPayment += fee.over_payment;
139
+ }));
140
+ return feesOverPayment > 0 ? feesOverPayment : this.paymentGroup.payments[0].over_payment;
141
+ };
142
+ /**
143
+ * @return {?}
144
+ */
145
+ PaymentViewComponent.prototype.goToServiceRequestPage = /**
146
+ * @return {?}
147
+ */
148
+ function () {
149
+ this.paymentLibComponent.viewName = 'case-transactions';
150
+ this.paymentLibComponent.TAKEPAYMENT = false;
151
+ this.paymentLibComponent.SERVICEREQUEST = 'true';
152
+ this.paymentLibComponent.isFromServiceRequestPage = true;
153
+ window.location.reload();
154
+ };
146
155
  /**
147
156
  * @param {?} event
148
157
  * @return {?}
@@ -215,7 +224,7 @@ var PaymentViewComponent = /** @class */ (function () {
215
224
  */
216
225
  function (fee) {
217
226
  var _this = this;
218
- if (this.chkForAddRemission(fee.code)) {
227
+ if (this.chkIsAddRemissionBtnEnable(fee)) {
219
228
  this.feeId = fee;
220
229
  this.paymentViewService.getApportionPaymentDetails(this.paymentGroup.payments[0].reference).subscribe((/**
221
230
  * @param {?} paymentGroup
@@ -256,6 +265,64 @@ var PaymentViewComponent = /** @class */ (function () {
256
265
  }
257
266
  return false;
258
267
  };
268
+ /**
269
+ * @return {?}
270
+ */
271
+ PaymentViewComponent.prototype.processRefund = /**
272
+ * @return {?}
273
+ */
274
+ function () {
275
+ var _this = this;
276
+ this.isConfirmationBtnDisabled = true;
277
+ this.errorMessage = '';
278
+ /** @type {?} */
279
+ var obj = this.paymentGroup.fees[0];
280
+ this.fees = [{ id: obj.id,
281
+ code: obj.code,
282
+ version: obj.version,
283
+ apportion_amount: obj.apportion_amount,
284
+ calculated_amount: obj.calculated_amount,
285
+ updated_volume: obj.updated_volume ? obj.updated_volume : obj.volume,
286
+ volume: obj.volume,
287
+ refund_amount: this.getOverPaymentValue() }];
288
+ /** @type {?} */
289
+ var requestBody = new PostRefundRetroRemission(this.contactDetailsObj, this.fees, this.paymentGroup.payments[0].reference, 'RR037', this.getOverPaymentValue(), 'op');
290
+ this.paymentViewService.postRefundsReason(requestBody).subscribe((/**
291
+ * @param {?} response
292
+ * @return {?}
293
+ */
294
+ function (response) {
295
+ if (JSON.parse(response)) {
296
+ _this.viewCompStatus = '';
297
+ _this.viewStatus = 'refundconfirmationpage';
298
+ _this.refundReference = JSON.parse(response).refund_reference;
299
+ _this.refundAmount = JSON.parse(response).refund_amount;
300
+ }
301
+ }), (/**
302
+ * @param {?} error
303
+ * @return {?}
304
+ */
305
+ function (error) {
306
+ _this.errorMessage = error;
307
+ _this.isConfirmationBtnDisabled = false;
308
+ _this.cd.detectChanges();
309
+ }));
310
+ };
311
+ /**
312
+ * @param {?=} note
313
+ * @return {?}
314
+ */
315
+ PaymentViewComponent.prototype.gotoAddressPage = /**
316
+ * @param {?=} note
317
+ * @return {?}
318
+ */
319
+ function (note) {
320
+ if (note) {
321
+ this.notification = { contact_details: note, notification_type: note.notification_type };
322
+ }
323
+ this.errorMessage = '';
324
+ this.viewCompStatus = 'overPaymentAddressCapture';
325
+ };
259
326
  /**
260
327
  * @param {?} payment
261
328
  * @param {?} remission
@@ -270,62 +337,44 @@ var PaymentViewComponent = /** @class */ (function () {
270
337
  */
271
338
  function (payment, remission, fees) {
272
339
  var _this = this;
273
- if (this.chkIsRefundRemissionBtnEnable()) {
274
- this.payment = payment;
275
- this.paymentViewService.getApportionPaymentDetails(this.payment.reference).subscribe((/**
276
- * @param {?} paymentGroup
340
+ //if(!this.chkIsIssueRefundBtnEnable(payment)) {
341
+ this.paymentViewService.getApportionPaymentDetails(payment.reference).subscribe((/**
342
+ * @param {?} paymentGroup
343
+ * @return {?}
344
+ */
345
+ function (paymentGroup) {
346
+ _this.paymentGroup = paymentGroup;
347
+ _this.paymentGroup.payments = _this.paymentGroup.payments.filter((/**
348
+ * @param {?} paymentGroupObj
277
349
  * @return {?}
278
350
  */
279
- function (paymentGroup) {
280
- _this.paymentGroup = paymentGroup;
281
- _this.paymentGroup.payments = _this.paymentGroup.payments.filter((/**
282
- * @param {?} paymentGroupObj
283
- * @return {?}
284
- */
285
- function (paymentGroupObj) { return paymentGroupObj['reference'].includes(_this.payment.reference); }));
286
- _this.payment = _this.paymentGroup.payments[0];
287
- _this.remissions = remission;
288
- _this.remissionFeeAmt = fees.filter((/**
289
- * @param {?} data
290
- * @return {?}
291
- */
292
- function (data) { return data.code === _this.remissions['fee_code']; }))[0].net_amount;
293
- _this.viewStatus = 'addrefundforremission';
294
- // const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
295
- // this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
296
- }), (/**
297
- * @param {?} error
351
+ function (paymentGroupObj) { return paymentGroupObj['reference'].includes(payment.reference); }));
352
+ _this.payment = _this.paymentGroup.payments[0];
353
+ _this.remissions = remission;
354
+ _this.remissionFeeAmt = fees.filter((/**
355
+ * @param {?} data
298
356
  * @return {?}
299
357
  */
300
- function (error) { return _this.errorMessage = error; }));
301
- }
358
+ function (data) { return data.code === _this.remissions['fee_code']; }))[0].net_amount;
359
+ _this.viewStatus = 'addrefundforremission';
360
+ // const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
361
+ // this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
362
+ }), (/**
363
+ * @param {?} error
364
+ * @return {?}
365
+ */
366
+ function (error) { return _this.errorMessage = error; }));
367
+ //}
302
368
  };
303
369
  /**
304
370
  * @return {?}
305
371
  */
306
- PaymentViewComponent.prototype.chkIsRefundRemissionBtnEnable = /**
372
+ PaymentViewComponent.prototype.goToPaymentViewComponent = /**
307
373
  * @return {?}
308
374
  */
309
375
  function () {
310
- var _this = this;
311
- if (this.paymentGroup !== null && this.paymentGroup !== undefined) {
312
- this.paymentGroup.payments.forEach((/**
313
- * @param {?} payment
314
- * @return {?}
315
- */
316
- function (payment) {
317
- if (payment.method.toLocaleLowerCase() === 'payment by account' && payment.status.toLocaleLowerCase() === 'success' && _this.allowFurtherAccessAfter4Days(payment)) {
318
- _this.isRefundRemissionBtnEnable = true;
319
- }
320
- }));
321
- if (this.isRefundRemissionBtnEnable) {
322
- return true;
323
- }
324
- else {
325
- return false;
326
- }
327
- ;
328
- }
376
+ this.viewCompStatus = '';
377
+ this.viewStatus = 'paymentview';
329
378
  };
330
379
  /**
331
380
  * @param {?} paymentgrp
@@ -337,13 +386,18 @@ var PaymentViewComponent = /** @class */ (function () {
337
386
  */
338
387
  function (paymentgrp) {
339
388
  if (paymentgrp !== null && paymentgrp !== undefined) {
340
- if (this.chkIssueRefundBtnEnable(paymentgrp.payments[0])) {
341
- this.paymentGroup = paymentgrp;
342
- this.viewStatus = 'issuerefund';
343
- this.isRefundRemission = true;
344
- this.paymentLibComponent.isFromPaymentDetailPage = true;
345
- this.isFromPaymentDetailPage = true;
346
- this.isFromServiceRequestPage = this.paymentLibComponent.isFromServiceRequestPage;
389
+ if (this.chkIsIssueRefundBtnEnable(paymentgrp.payments[0])) {
390
+ if (paymentgrp.payments[0].over_payment > 0) {
391
+ this.viewCompStatus = 'overpayment';
392
+ }
393
+ else {
394
+ this.paymentGroup = paymentgrp;
395
+ this.viewStatus = 'issuerefund';
396
+ this.isRefundRemission = true;
397
+ this.paymentLibComponent.isFromPaymentDetailPage = true;
398
+ this.isFromPaymentDetailPage = true;
399
+ this.isFromServiceRequestPage = false;
400
+ }
347
401
  }
348
402
  }
349
403
  };
@@ -382,74 +436,110 @@ var PaymentViewComponent = /** @class */ (function () {
382
436
  * @param {?} payment
383
437
  * @return {?}
384
438
  */
385
- PaymentViewComponent.prototype.chkIssueRefundBtnEnable = /**
439
+ PaymentViewComponent.prototype.chkIsIssueRefundBtnEnable = /**
386
440
  * @param {?} payment
387
441
  * @return {?}
388
442
  */
389
443
  function (payment) {
390
- if (this.check4AllowedRoles2AccessRefund() && this.allowFurtherAccessAfter4Days(payment) &&
391
- payment.method === 'payment by account' && payment.status.toLocaleLowerCase() === 'success') {
392
- this.isIssueRefunfBtnEnable = true;
393
- }
394
- if (this.isIssueRefunfBtnEnable) {
395
- return true;
444
+ if (payment !== null && payment !== undefined) {
445
+ return payment.issue_refund && payment.refund_enable;
396
446
  }
397
447
  else {
398
448
  return false;
399
449
  }
400
- ;
401
450
  };
402
451
  /**
452
+ * @param {?} remission
403
453
  * @return {?}
404
454
  */
405
- PaymentViewComponent.prototype.chkForPBAPayment = /**
455
+ PaymentViewComponent.prototype.chkIsAddRefundBtnEnable = /**
456
+ * @param {?} remission
406
457
  * @return {?}
407
458
  */
408
- function () {
409
- if (this.paymentGroup !== null && this.paymentGroup !== undefined) {
410
- /** @type {?} */
411
- var payment = this.paymentGroup.payments[0];
412
- if (payment.method.toLocaleLowerCase() === 'payment by account' && this.allowFurtherAccessAfter4Days(payment)) {
413
- return true;
414
- }
459
+ function (remission) {
460
+ if (remission !== null && remission !== undefined) {
461
+ return remission.add_refund;
462
+ }
463
+ else {
415
464
  return false;
416
465
  }
417
466
  };
418
467
  /**
419
- * @param {?} feeCode
468
+ * @param {?} fee
420
469
  * @return {?}
421
470
  */
422
- PaymentViewComponent.prototype.chkForAddRemission = /**
423
- * @param {?} feeCode
471
+ PaymentViewComponent.prototype.chkIsAddRemissionBtnEnable = /**
472
+ * @param {?} fee
424
473
  * @return {?}
425
474
  */
426
- function (feeCode) {
427
- var e_2, _a;
428
- if (this.chkForPBAPayment() && this.check4AllowedRoles2AccessRefund() && this.allowFurtherAccessAfter4Days(this.paymentGroup.payments[0])) {
429
- if (this.paymentGroup.remissions && this.paymentGroup.remissions.length > 0) {
430
- try {
431
- for (var _b = tslib_1.__values(this.paymentGroup.remissions), _c = _b.next(); !_c.done; _c = _b.next()) {
432
- var remission = _c.value;
433
- if (remission.fee_code === feeCode) {
434
- return false;
435
- }
436
- }
437
- }
438
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
439
- finally {
440
- try {
441
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
442
- }
443
- finally { if (e_2) throw e_2.error; }
444
- }
445
- return true;
446
- }
447
- return true;
475
+ function (fee) {
476
+ if (fee !== null && fee !== undefined) {
477
+ return fee.add_remission && fee.remission_enable;
448
478
  }
449
479
  else {
450
480
  return false;
451
481
  }
452
482
  };
483
+ /**
484
+ * @param {?} paymentType
485
+ * @return {?}
486
+ */
487
+ PaymentViewComponent.prototype.selectPymentOption = /**
488
+ * @param {?} paymentType
489
+ * @return {?}
490
+ */
491
+ function (paymentType) {
492
+ this.paymentType = paymentType;
493
+ this.isContinueBtnDisabled = false;
494
+ };
495
+ /**
496
+ * @param {?} paymentgrp
497
+ * @return {?}
498
+ */
499
+ PaymentViewComponent.prototype.continuePayment = /**
500
+ * @param {?} paymentgrp
501
+ * @return {?}
502
+ */
503
+ function (paymentgrp) {
504
+ if (this.paymentType === 'op') {
505
+ this.isFullyRefund = false;
506
+ this.viewCompStatus = 'overPaymentAddressCapture';
507
+ }
508
+ else if (this.paymentType === 'fp') {
509
+ this.isFullyRefund = true;
510
+ this.paymentGroup = paymentgrp;
511
+ this.viewStatus = 'issuerefund';
512
+ this.viewCompStatus = "";
513
+ this.isRefundRemission = true;
514
+ this.paymentLibComponent.isFromPaymentDetailPage = true;
515
+ this.isFromPaymentDetailPage = true;
516
+ this.isFromServiceRequestPage = this.paymentLibComponent.isFromServiceRequestPage;
517
+ }
518
+ };
519
+ /**
520
+ * @param {?} event
521
+ * @return {?}
522
+ */
523
+ PaymentViewComponent.prototype.gotoPaymentSelectPage = /**
524
+ * @param {?} event
525
+ * @return {?}
526
+ */
527
+ function (event) {
528
+ event.preventDefault();
529
+ this.viewCompStatus = 'overpayment';
530
+ };
531
+ /**
532
+ * @param {?} obj
533
+ * @return {?}
534
+ */
535
+ PaymentViewComponent.prototype.getContactDetails = /**
536
+ * @param {?} obj
537
+ * @return {?}
538
+ */
539
+ function (obj) {
540
+ this.contactDetailsObj = obj;
541
+ this.viewCompStatus = 'overpaymentcheckandanswer';
542
+ };
453
543
  /**
454
544
  * @return {?}
455
545
  */
@@ -469,8 +559,8 @@ var PaymentViewComponent = /** @class */ (function () {
469
559
  PaymentViewComponent.decorators = [
470
560
  { type: Component, args: [{
471
561
  selector: 'ccpay-payment-view',
472
- template: "\n<ng-container *ngIf=\"viewStatus === 'paymentview'\">\n<div class=\"govuk-width-container\">\n\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n\n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" id=\"main-content\" role=\"main\">\n\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 Payment details could not be retrieved\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <div class=\"payment-view-alignment\" *ngIf=\"!errorMessage && paymentGroup?.payments[0]\">\n\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PAYMENTDETAILS'>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Payment details</h1>\n </div>\n </div>\n <table>\n <tbody>\n \n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Service request reference</td>\n <td class=\"tb-col-w\">{{ serviceReference }}</td> \n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment amount</td>\n <td class=\"tb-col-w\">\u00A3{{ paymentGroup?.payments[0]?.amount | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Payment asset number(DCN)</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.document_control_number }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Banked date</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.banked_date | date:'dd MMM yyyy' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">GovPay Transaction ID</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.external_reference }}</td>\n </tr>\n <tr class=\"section\" >\n <td class=\"bold tb-col-w\">Payment method</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.method }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.method === 'payment by account'\" >\n <td class=\"bold tb-col-w\">Type</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">Credit</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">Card</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Channel</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.channel }}</td>\n </tr>\n <!-- <tr class=\"section\">\n <td class=\"bold tb-col-w\">Method</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">{{ paymentGroup?.payments[0]?.method }}</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">CARD</td>\n </tr> -->\n <!-- <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.channel !== 'telephony'\">\n <td class=\"bold tb-col-w\">Status</td>\n <td>{{ paymentGroup?.payments[0]?.status }}</td>\n </tr> -->\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.payment_allocation[0] !== undefined\">\n <td class=\"bold tb-col-w\">Allocaton status</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.payment_allocation[0]?.allocation_status }}</td>\n </tr>\n \n <tr *ngIf=\"paymentGroup?.payments[0].organisation_name\">\n <td class=\"bold tb-col-w\">PBA account name</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.organisation_name }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].account_number\">\n <td class=\"bold tb-col-w\">PBA number</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.account_number }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].customer_reference\">\n <td class=\"bold tb-col-w\">Customer internal reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.customer_reference }}</td>\n </tr>\n \n </tbody>\n </table>\n\n <div>\n <!-- Status histories -->\n <ccpay-payment-statuses *ngIf=\"isStatusAllocated\" [isTakePayment]=\"isTakePayment\"></ccpay-payment-statuses>\n </div>\n <div class=\"remission\">\n <button [disabled]=\"!chkIssueRefundBtnEnable(paymentGroup?.payments[0])\" (click)=\"issueRefund(paymentGroup)\" class=\"govuk-button govuk-button--secondary\">Issue refund</button>\n </div>\n \n <div *ngIf=\"checkForFees(paymentGroup)\">\n <div *ngIf=\"paymentGroup.fees.length > 0\">\n <div class=\"column\">\n <br/>\n <br/>\n <h2 class=\"heading-large\">Fee and remission details</h2>\n \n </div>\n </div>\n \n <div *ngFor=\"let fee of paymentGroup.fees\">\n <table class=\"table\">\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Description</td>\n <td class=\"tb-col-w\">Application for {{ fee.description }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Fee code</td>\n <td class=\"tb-col-w\">{{ fee?.code }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\" [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">Fee amount</td>\n <td [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff}\">\u00A3{{ fee?.calculated_amount | number:'.2' }}</td>\n </tr>\n \n <tr *ngIf=\"fee.apportion_amount\">\n <td class=\"bold tb-col-w tr-border\" [ngClass]=\"{'tr-border': !fee.remissions}\">Allocated amount</td>\n <td [ngClass]=\"{'tr-border': !fee.remissions}\">\u00A3{{ fee?.apportion_amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n <button [disabled]=\"!chkForAddRemission(fee.code)\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n\n\n \n <!-- <button *ngIf=\"paymentGroup.payments[0].method === 'payment by account'\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n -->\n\n </div>\n\n <!-- remissions -->\n <div class=\"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-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\" *ngFor=\"let remission of paymentGroup.remissions\">\n <tr class=\"govuk-table__row\">\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(paymentGroup.payments[0],remission,paymentGroup.fees)\" 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></div>\n \n <div *ngIf=\"paymentGroup.remissions?.length === 0\">\n <span class=\"mar-17\" >No help with fees or remissions.</span>\n </div>\n \n </div>\n\n\n\n <!-- card details -->\n <!-- <ccpay-card-details *ngIf=\"isCardPayment && !isTelephonyPayment\"></ccpay-card-details> -->\n\n <!-- pba details -->\n <!-- <ccpay-pba-details *ngIf=\"!isCardPayment\" [payment]=\"paymentGroup.payments[0]\"></ccpay-pba-details> -->\n\n \n\n </div>\n\n </main>\n</div>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'addremission' && feeId\">\n<ccpay-add-remission \n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[fee]=\"feeId\" \n[payment] = \"payment\"\n[orderStatus] =\"paymentGroup.payments[0].status\"\n[paidAmount]= \"paymentGroup.payments[0].amount\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[paymentGroupRef]=\"paymentGroup.payment_group_reference\" \n[isFromPaymentDetailPage] = \"true\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'addrefundforremission' && payment\">\n\n<ccpay-add-remission \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]=\"false\" \n[paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'issuerefund'\">\n <ccpay-add-remission \n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\" \n [isOldPcipalOff]=\"isOldPcipalOff\" \n [payment] = 'paymentGroup.payments[0]'\n [viewCompStatus]= \"viewStatus\"\n [isNewPcipalOff]=\"isNewPcipalOff\" \n [orderStatus] =\"paymentGroup.payments[0].status\"\n [paidAmount]= \"paymentGroup.payments[0].amount\"\n [isRefundRemission]=\"isRefundRemission\"\n [caseType]=\"caseType\" \n [isFromServiceRequestPage]=\"isFromServiceRequestPage\"\n [isFromPaymentDetailPage] = \"isFromPaymentDetailPage\"\n [paymentGroupRef]=\"paymentGroup.payment_group_reference\" \n [ccdCaseNumber]=\"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [orderRef] = \"orderRef\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\">\n ></ccpay-add-remission>\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'order-full-view'\">\n <ccpay-service-request\n [viewStatus] = \"viewStatus\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [takePayment] = \"isTakePayment\"\n [ccdCaseNumber] = \"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\">\n</ccpay-service-request>\n</ng-container>\n<!-- <ng-container *ngIf=\"isTakePayment\">\n <div class=\"govuk-width-container\">\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 \n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" id=\"main-content\" role=\"main\">\n \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 Payment details could not be retrieved\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n \n <div class=\"payment-view-alignment\" *ngIf=\"!errorMessage && paymentGroup\">\n \n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PAYMENTDETAILS'>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Payment details</h1>\n </div>\n </div>\n <table>\n <tbody>\n <tr class=\"section\" *ngIf=\"isTurnOff\">\n <td class=\"bold tb-col-w\">Payment group reference</td>\n <td>{{ paymentGroup.payment_group_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment reference</td>\n <td>{{ paymentGroup.payments[0].reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment amount</td>\n <td>\u00A3{{ paymentGroup.payments[0].amount | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup.payments[0] && paymentGroup.payments[0].external_reference\">\n <td class=\"bold tb-col-w\">GovPay Transaction ID</td>\n <td>{{ paymentGroup.payments[0].external_reference }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup.payments[0] && paymentGroup.payments[0].document_control_number && !paymentGroup.payments[0].external_reference\">\n <td class=\"bold tb-col-w\">Payment asset number(DCN)</td>\n <td>{{ paymentGroup.payments[0].document_control_number }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup.payments[0] && paymentGroup.payments[0].document_control_number && !paymentGroup.payments[0].external_reference\">\n <td class=\"bold tb-col-w\">Banked date</td>\n <td>{{ paymentGroup.payments[0].banked_date | date:'dd MMM yyyy' }}</td>\n </tr>\n </tbody>\n </table>\n \n <div class=\"govuk-grid-row\" *ngIf=\"paymentGroup.fees.length > 0\">\n <div class=\"column\">\n <h2 class=\"heading-large\">Fee and remission details</h2>\n </div>\n </div>\n \n <div *ngFor=\"let fee of paymentGroup.fees\">\n <table class=\"table\">\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Description</td>\n <td>Application for {{ fee.description }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Fee code</td>\n <td>{{ fee.code }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\" [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">Fee amount</td>\n <td [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">\u00A3{{ fee.calculated_amount | number:'.2' }}</td>\n </tr>\n <tr *ngIf=\"fee.net_amount && isTurnOff\">\n <td class=\"bold tb-col-w\" [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions}\" >Net amount</td>\n <td [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions}\">\u00A3{{ fee.net_amount | number:'.2' }}</td>\n </tr>\n <tr *ngIf=\"fee.apportion_amount\">\n <td class=\"bold tb-col-w tr-border\" [ngClass]=\"{'tr-border': !fee.remissions}\">Allocated amount</td>\n <td [ngClass]=\"{'tr-border': !fee.remissions}\">\u00A3{{ fee.apportion_amount | number:'.2' }}</td>\n </tr>\n \n <tr *ngIf=\"fee.remissions\">\n <td class=\"bold tb-col-w\">Remission code</td>\n <td>{{fee.remissions.hwf_reference}}</td>\n </tr>\n <tr *ngIf=\"fee.remissions\">\n <td class=\"bold tb-col-w tr-border\">Remission amount</td>\n <td class=\"tr-border\">\u00A3{{ fee.remissions.hwf_amount | number:'.2'}}</td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!-- card details -->\n <!-- <ccpay-card-details *ngIf=\"isCardPayment && !isTelephonyPayment\"></ccpay-card-details>\n -->\n <!-- pba details -->\n <!-- <ccpay-pba-details *ngIf=\"!isCardPayment\" [payment]=\"paymentGroup.payments[0]\"></ccpay-pba-details> -->\n <!-- Status histories -->\n <!-- <ccpay-payment-statuses *ngIf=\"isStatusAllocated\"[isTakePayment]=\"isTakePayment\" ></ccpay-payment-statuses>\n \n </div>\n \n </main>\n </div> -->\n<!-- </ng-container> --> \n",
473
- styles: [".tb-col-w{width:330px}.tr-border{border-bottom:2px solid}.payment-view-alignment{margin-left:30px}.govuk-button{font-size:19px;float:left;margin-top:2em}.remission{margin-bottom:7em}.govuk-error-summary__title{font-size:24px!important}.govuk-table__cell,.govuk-table__header{padding:0;line-height:1.3;vertical-align:middle}.govuk-table__row{line-height:1.3}.govuk-table__cell:last-child{text-align:right}.text-transform::first-letter{text-transform:capitalize}.govuk-link{cursor:pointer}.mar-17{font-size:19px!important}"]
562
+ template: "<div class=\"payment-view-section\">\n<ng-container *ngIf=\"viewStatus === 'paymentview' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n<div class=\"govuk-width-container\">\n\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n\n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" id=\"main-content\" role=\"main\">\n\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 Payment details could not be retrieved\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <div class=\"payment-view-alignment\" *ngIf=\"!errorMessage && paymentGroup?.payments[0]\">\n\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PAYMENTDETAILS'>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Payment details</h1>\n </div>\n </div>\n <table>\n <tbody>\n \n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Service request reference</td>\n <td class=\"tb-col-w\">{{ serviceReference }}</td> \n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment amount</td>\n <td class=\"tb-col-w\">\u00A3{{ paymentGroup?.payments[0]?.amount | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.over_payment > 0\">\n <td class=\"bold tb-col-w\">Over payment</td>\n <td class=\"tb-col-w\">\u00A3{{ getOverPaymentValue() | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Payment asset number(DCN)</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.document_control_number }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.document_control_number && !paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">Banked date</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.banked_date | date:'dd MMM yyyy' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0] && paymentGroup?.payments[0]?.external_reference\">\n <td class=\"bold tb-col-w\">GovPay Transaction ID</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.external_reference }}</td>\n </tr>\n <tr class=\"section\" >\n <td class=\"bold tb-col-w\">Payment method</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.method }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.method === 'payment by account'\" >\n <td class=\"bold tb-col-w\">Type</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">Credit</td>\n <td class=\"tb-col-w\" *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">Card</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Channel</td>\n <td class=\"tb-col-w text-transform\">{{ paymentGroup?.payments[0]?.channel }}</td>\n </tr>\n <!-- <tr class=\"section\">\n <td class=\"bold tb-col-w\">Method</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">{{ paymentGroup?.payments[0]?.method }}</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">CARD</td>\n </tr> -->\n <!-- <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.channel !== 'telephony'\">\n <td class=\"bold tb-col-w\">Status</td>\n <td>{{ paymentGroup?.payments[0]?.status }}</td>\n </tr> -->\n <tr class=\"section\" *ngIf=\"paymentGroup?.payments[0]?.payment_allocation[0] !== undefined\">\n <td class=\"bold tb-col-w\">Allocaton status</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.payment_allocation[0]?.allocation_status }}</td>\n </tr>\n \n <tr *ngIf=\"paymentGroup?.payments[0].organisation_name\">\n <td class=\"bold tb-col-w\">PBA account name</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.organisation_name }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].account_number\">\n <td class=\"bold tb-col-w\">PBA number</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.account_number }}</td>\n </tr>\n\n <tr *ngIf=\"paymentGroup?.payments[0].customer_reference\">\n <td class=\"bold tb-col-w\">Customer internal reference</td>\n <td class=\"tb-col-w\">{{ paymentGroup?.payments[0]?.customer_reference }}</td>\n </tr>\n \n </tbody>\n </table>\n\n <div>\n <!-- Status histories -->\n <ccpay-payment-statuses *ngIf=\"isStatusAllocated\" [isTakePayment]=\"isTakePayment\"></ccpay-payment-statuses>\n </div>\n <div class=\"remission\">\n <button [disabled]=\"!chkIsIssueRefundBtnEnable(paymentGroup?.payments[0])\" (click)=\"issueRefund(paymentGroup)\" class=\"govuk-button govuk-button--secondary\">Issue refund</button>\n </div>\n \n <div *ngIf=\"checkForFees(paymentGroup)\">\n <div *ngIf=\"paymentGroup.fees.length > 0\">\n <div class=\"column\">\n <br/>\n <br/>\n <h2 class=\"heading-large\">Fee and remission details</h2>\n \n </div>\n </div>\n \n <div *ngFor=\"let fee of paymentGroup.fees\">\n <table class=\"table\">\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Description</td>\n <td class=\"tb-col-w\">Application for {{ fee.description }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Fee code</td>\n <td class=\"tb-col-w\">{{ fee?.code }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\" [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">Fee amount</td>\n <td [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff}\">\u00A3{{ fee?.calculated_amount | number:'.2' }}</td>\n </tr>\n \n <tr *ngIf=\"fee.apportion_amount\">\n <td class=\"bold tb-col-w tr-border\" [ngClass]=\"{'tr-border': !fee.remissions}\">Allocated amount</td>\n <td [ngClass]=\"{'tr-border': !fee.remissions}\">\u00A3{{ fee?.apportion_amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n <button [disabled]=\"!chkIsAddRemissionBtnEnable(fee)\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n \n <!-- <button *ngIf=\"paymentGroup.payments[0].method === 'payment by account'\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n -->\n\n </div>\n\n <!-- remissions -->\n <div class=\"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-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\" *ngFor=\"let remission of paymentGroup.remissions\">\n <tr class=\"govuk-table__row\">\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]=\"!chkIsAddRefundBtnEnable(remission)\" (click)=\"addRefundForRemission(paymentGroup.payments[0],remission,paymentGroup.fees)\" 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></div>\n \n <div *ngIf=\"paymentGroup.remissions?.length === 0\">\n <span class=\"mar-17\" >No help with fees or remissions.</span>\n </div>\n \n </div>\n\n\n\n <!-- card details -->\n <!-- <ccpay-card-details *ngIf=\"isCardPayment && !isTelephonyPayment\"></ccpay-card-details> -->\n\n <!-- pba details -->\n <!-- <ccpay-pba-details *ngIf=\"!isCardPayment\" [payment]=\"paymentGroup.payments[0]\"></ccpay-pba-details> -->\n\n \n\n </div>\n\n </main>\n</div>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'addremission' && feeId && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n<ccpay-add-remission \n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[fee]=\"feeId\" \n[payment] = \"payment\"\n[orderStatus] =\"paymentGroup.payments[0].status\"\n[paidAmount]= \"paymentGroup.payments[0].amount\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[paymentGroupRef]=\"paymentGroup.payment_group_reference\" \n[isFromPaymentDetailPage] = \"true\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'addrefundforremission' && payment && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n\n<ccpay-add-remission \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]=\"false\" \n[paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n[ccdCaseNumber]=\"ccdCaseNumber\"\n[orderFeesTotal] = \"orderFeesTotal\"\n[orderTotalPayments] = \"orderTotalPayments\"\n[orderRemissionTotal] = \"orderRemissionTotal\"\n[orderRef] = \"orderRef\"\n[orderCreated] = \"orderCreated\"\n[orderParty] = \"orderParty\"\n[orderCCDEvent] = \"orderCCDEvent\"\n[orderDetail] = \"orderDetail\"\n[LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'issuerefund' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <ccpay-add-remission \n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\" \n [isOldPcipalOff]=\"isOldPcipalOff\" \n [payment] = 'paymentGroup.payments[0]'\n [viewCompStatus]= \"viewStatus\"\n [isNewPcipalOff]=\"isNewPcipalOff\" \n [orderStatus] =\"paymentGroup.payments[0].status\"\n [paidAmount]= \"paymentGroup.payments[0].amount\"\n [isRefundRemission]=\"isRefundRemission\"\n [caseType]=\"caseType\" \n [isFromServiceRequestPage]=\"isFromServiceRequestPage\"\n [isFromPaymentDetailPage] = \"isFromPaymentDetailPage\"\n [paymentGroupRef]=\"paymentGroup.payment_group_reference\" \n [ccdCaseNumber]=\"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [orderRef] = \"orderRef\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [fees] =\"paymentFees\"\n [isFullyRefund] = \"isFullyRefund\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\">\n \n ></ccpay-add-remission>\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'order-full-view' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <ccpay-service-request\n [viewStatus] = \"viewStatus\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [takePayment] = \"isTakePayment\"\n [ccdCaseNumber] = \"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [isServiceRequest] = \"isServiceRequest\"\n (goToServiceRquestComponent) = \"goToServiceRequestPage()\"\n>\n</ccpay-service-request>\n\n\n\n\n</ng-container>\n</div>\n<div class=\"over-payment\">\n<ng-container *ngIf=\"viewCompStatus === 'overpayment'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='OVERPAYMENTPAGE'> \n <h1 class=\"heading-large\">Issue refund</h1>\n <h1 class=\"heading-medium\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h1>\n <span id=\"how-contacted-conditional-hint govuk-font19px\" class=\"form-hint\">\n Payment reference: {{paymentGroup?.payments[0]?.reference}}\n </span>\n<div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <b>\n Select payment to refund\n </b>\n </legend>\n <div class=\"govuk-radios\" data-module=\"govuk-radios\">\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"over-payment\" name=\"over-payment\" type=\"radio\" (click)=\"selectPymentOption('op')\" value=\"op\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"where-do-you-live\">\n Over payment \u00A3{{getOverPaymentValue() | number:'.2'}}\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"full-payment\" name=\"over-payment\" type=\"radio\" (click)=\"selectPymentOption('fp')\" value=\"fp\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"where-do-you-live-2\">\n Full payment \u00A3{{paymentGroup?.payments[0]?.amount | number:'.2'}}\n </label>\n </div>\n </div>\n <button class=\"govuk-button govuk-button--secondary over-payment-alignment govuk-font19px\"\n (click)=\"goToPaymentViewComponent()\"> Previous</button>\n <button \n (click)=\"continuePayment(paymentGroup)\"\n [disabled]=\"isContinueBtnDisabled\"\n [ngClass]='isContinueBtnDisabled ? \"button button--disabled govuk-!-margin-right-1 govuk-font19px\" : \"button govuk-!-margin-right-1 govuk-font19px\"'\n class=\"govuk-button\"> Continue</button>\n </fieldset>\n</div>\n</ng-container>\n\n<ng-container *ngIf=\"viewCompStatus === 'overPaymentAddressCapture'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='OVERPAYMENTADDRESSCAPTUREPAGE'> \n <h1 class=\"govuk-heading-l\">Issue refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint govuk-font19px\">\n Payment reference: {{paymentGroup?.payments[0]?.reference}}\n </span>\n<ccpay-contact-details \n[addressObj] = notification\n(assignContactDetails)=\"getContactDetails($event)\"\n(redirectToIssueRefund)=\"gotoPaymentSelectPage($event)\" ></ccpay-contact-details>\n<p>\n <a (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n</p>\n</ng-container>\n\n<ng-container *ngIf=\"viewCompStatus === 'overpaymentcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREFUNDFORREMISSION'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\"> {{paymentGroup.payments[0].reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">{{paymentGroup.payments[0].amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{paymentGroup?.fees[0]?.net_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{getOverPaymentValue() | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund reason</td>\n <td class=\"govuk-table__cell\">Over payment</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line}}&nbsp;{{contactDetailsObj?.city}}&nbsp;{{contactDetailsObj?.county}}&nbsp;{{contactDetailsObj?.country}}&nbsp;{{contactDetailsObj?.postal_code}}\n </div>\n <a (click)=\"gotoAddressPage(contactDetailsObj)\" class=\"govuk-link right margin-top--size\" >Change</a>\n </td>\n </table>\n <button type=\"submit\" class=\"button govuk-button--secondary over-payment-alignment govuk-font19px\" (click)=\"gotoAddressPage(contactDetailsObj)\">Previous</button>\n <button type=\"submit\"\n [ngClass]='isContinueBtnDisabled ? \"button button--disabled govuk-!-margin-right-1 govuk-font19px\" : \"button govuk-!-margin-right-1 govuk-font19px\"'\n (click)=\"processRefund()\">\n Submit refund\n </button>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link govuk-font19px\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'refundconfirmationpage' && viewCompStatus !== 'overpayment' && viewCompStatus !== 'overPaymentAddressCapture' && viewCompStatus !== 'overpaymentcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONREFUNDCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount | currency:'GBP':'symbol-narrow':'1.2-2' }} has been created and will be passed to a team leader to approve.\n </p>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n\n</ng-container>\n</div>",
563
+ styles: [".payment-view-section .tb-col-w{width:330px}.payment-view-section .tr-border{border-bottom:2px solid}.payment-view-section .payment-view-alignment{margin-left:30px}.payment-view-section .govuk-button{font-size:19px;float:left;margin-top:2em}.payment-view-section .remission{margin-bottom:7em}.payment-view-section .govuk-error-summary__title{font-size:24px!important}.payment-view-section .govuk-table__cell,.payment-view-section .govuk-table__header{padding:0;line-height:1.3;vertical-align:middle}.payment-view-section .govuk-table__row{line-height:1.3}.payment-view-section .govuk-table__cell:last-child{text-align:right}.payment-view-section .text-transform::first-letter{text-transform:capitalize}.payment-view-section .govuk-link{cursor:pointer}.payment-view-section .mar-17{font-size:19px!important}.over-payment .contactDetails-width{width:70%}.over-payment .margin-top10px{margin-top:20px}.over-payment .govuk-font19px{font-size:19px!important}.over-payment .margin-top--size{margin-top:-30px}.over-payment .over-payment-alignment{margin-right:10px}.over-payment .govuk-button{font-size:19px;float:left;margin-top:2em}.over-payment td.govuk-table__cell{width:50%}.over-payment .govuk-label--s,.over-payment .govuk-warning-text__text,.over-payment .hmcts-currency-input__symbol{font-size:19px;font-weight:400}.over-payment .inline-error-class{outline:#a71414 solid 3px;outline-offset:0;border-color:#a71414}.over-payment .inline-error-message{color:#a71414;border-color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.over-payment .govuk-button-group{padding-top:2em}.over-payment .heading-medium{margin-top:.875em}.over-payment .heading-large{margin-top:.25em}.over-payment .govuk-panel--confirmation{color:#fff;background:#00703c}.over-payment .govuk-panel__title{font-size:5rem}.over-payment .govuk-body,.over-payment .govuk-body-m{font-size:2.1875rem}.over-payment .govuk-link{cursor:pointer}.over-payment .govuk-radios__conditional{padding-top:12px!important}.over-payment .right{float:right;cursor:pointer}.over-payment .radio{float:right}.over-payment .white{color:#fff}"]
474
564
  }] }
475
565
  ];
476
566
  /** @nocollapse */
@@ -496,7 +586,8 @@ var PaymentViewComponent = /** @class */ (function () {
496
586
  orderCCDEvent: [{ type: Input }],
497
587
  orderFeesTotal: [{ type: Input }],
498
588
  orderRemissionTotal: [{ type: Input }],
499
- orderDetail: [{ type: Input }]
589
+ orderDetail: [{ type: Input }],
590
+ isServiceRequest: [{ type: Input, args: ["isServiceRequest",] }]
500
591
  };
501
592
  return PaymentViewComponent;
502
593
  }());
@@ -535,6 +626,12 @@ if (false) {
535
626
  /** @type {?} */
536
627
  PaymentViewComponent.prototype.orderDetail;
537
628
  /** @type {?} */
629
+ PaymentViewComponent.prototype.fees;
630
+ /** @type {?} */
631
+ PaymentViewComponent.prototype.isFullyRefund;
632
+ /** @type {?} */
633
+ PaymentViewComponent.prototype.isServiceRequest;
634
+ /** @type {?} */
538
635
  PaymentViewComponent.prototype.paymentGroup;
539
636
  /** @type {?} */
540
637
  PaymentViewComponent.prototype.errorMessage;
@@ -575,9 +672,23 @@ if (false) {
575
672
  /** @type {?} */
576
673
  PaymentViewComponent.prototype.isFromPaymentDetailPage;
577
674
  /** @type {?} */
578
- PaymentViewComponent.prototype.check4AllowedRoles2AccessRefund;
675
+ PaymentViewComponent.prototype.paymentFees;
676
+ /** @type {?} */
677
+ PaymentViewComponent.prototype.paymentType;
678
+ /** @type {?} */
679
+ PaymentViewComponent.prototype.isContinueBtnDisabled;
680
+ /** @type {?} */
681
+ PaymentViewComponent.prototype.viewCompStatus;
682
+ /** @type {?} */
683
+ PaymentViewComponent.prototype.contactDetailsObj;
684
+ /** @type {?} */
685
+ PaymentViewComponent.prototype.notification;
686
+ /** @type {?} */
687
+ PaymentViewComponent.prototype.isConfirmationBtnDisabled;
688
+ /** @type {?} */
689
+ PaymentViewComponent.prototype.refundReference;
579
690
  /** @type {?} */
580
- PaymentViewComponent.prototype.allowFurtherAccessAfter4Days;
691
+ PaymentViewComponent.prototype.refundAmount;
581
692
  /**
582
693
  * @type {?}
583
694
  * @private
@@ -599,4 +710,4 @@ if (false) {
599
710
  */
600
711
  PaymentViewComponent.prototype.OrderslistService;
601
712
  }
602
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7SUFLNUQsY0FBYyxHQUFHLHVCQUF1QjtBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFdEU7SUE0Q0UsOEJBQW9CLGtCQUFzQyxFQUNoRCxtQkFBd0MsRUFDeEMsRUFBcUIsRUFDckIsaUJBQW9DO1FBSDlDLGlCQUlDO1FBSm1CLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDaEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBZjlDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUVuQyx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDcEMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBQ3hDLCtCQUEwQixHQUFHLENBQUMsMEJBQTBCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUM3RSxlQUFVLEdBQWlCLEVBQUUsQ0FBQztRQTROOUIsb0NBQStCOzs7UUFBRztZQUNoQyxPQUFPLEtBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJOzs7O1lBQUMsVUFBQSxJQUFJO2dCQUM5QyxPQUFBLEtBQUks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O0lBQzdCLGtEQUFvQzs7SUFDcEMsdUNBQTJCOztJQUMzQixpREFBcUM7O0lBQ3JDLDBDQUE0Qjs7SUFDNUIsNENBQTRCOztJQUM1Qiw2Q0FBK0I7O0lBQy9CLDhDQUFnQzs7SUFDaEMsbURBQXFDOztJQUNyQywyQ0FBNEI7O0lBRTVCLDRDQUE0Qjs7SUFDNUIsNENBQXFCOztJQUNyQiw2Q0FBc0I7O0lBQ3RCLDhDQUF1Qjs7SUFDdkIseUNBQWtCOztJQUNsQixpREFBMkI7O0lBQzNCLGlEQUEyQjs7SUFDM0IscUNBQVk7O0lBQ1osMENBQW1COztJQUNuQixpREFBbUM7O0lBQ25DLG9EQUE4Qjs7SUFDOUIsa0RBQW9DOztJQUNwQyxzREFBd0M7O0lBQ3hDLDBEQUE2RTs7SUFDN0UsMENBQThCOztJQUM5QiwrQ0FBd0I7O0lBQ3hCLDBEQUFvQzs7SUFDcEMsZ0RBQXlCOztJQUN6Qix3REFBa0M7O0lBQ2xDLHVEQUFpQzs7SUF1TmpDLCtEQUlDOztJQUVELDREQU1DOzs7OztJQWpPVyxrREFBOEM7Ozs7O0lBQ3hELG1EQUFnRDs7Ozs7SUFDaEQsa0NBQTZCOzs7OztJQUM3QixpREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IElQYXltZW50R3JvdXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHsgSUZlZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZlZSc7XG5pbXBvcnQgeyBJUGF5bWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHsgSVJlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcGF5bWVudC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BheW1lbnQtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BheW1lbnQtdmlldy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUGF5bWVudFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBpc1R1cm5PZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzVGFrZVBheW1lbnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNhc2VUeXBlOiBib29sZWFuO1xuICBASW5wdXQoKSBpc05ld1BjaXBhbE9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNPbGRQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG9yZGVyUmVmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZGVyU3RhdHVzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZGVyVG90YWxQYXltZW50czogbnVtYmVyO1xuICBASW5wdXQoKSBwYXltZW50OiBJUGF5bWVudDtcbiAgQElucHV0KCkgTE9HR0VESU5VU0VSUk9MRVM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBvcmRlclBhcnR5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZGVyQ3JlYXRlZDogRGF0ZTtcbiAgQElucHV0KCkgb3JkZXJDQ0RFdmVudDogc3RyaW5nO1xuICBASW5wdXQoKSBvcmRlckZlZXNUb3RhbDogbnVtYmVyO1xuICBASW5wdXQoKSBvcmRlclJlbWlzc2lvblRvdGFsOiBudW1iZXI7XG4gIEBJbnB1dCgpIG9yZGVyRGV0YWlsOiBhbnlbXTtcblxuICBwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXA7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmc7XG4gIGRjbk51bWJlcjogc3RyaW5nO1xuICBpc1N0YXR1c0FsbG9jYXRlZDogYm9vbGVhbjtcbiAgaXNSZW1pc3Npb25zTWF0Y2g6IGJvb2xlYW47XG4gIGZlZUlkOiBJRmVlO1xuICB2aWV3U3RhdHVzOiBzdHJpbmc7XG4gIGlzUmVmdW5kUmVtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBpc0FkZEZlZUJ0bkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJc3N1ZVJlZnVuZkJ0bkVuYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZCA9IFsncGF5bWVudHMtcmVmdW5kLWFwcHJvdmVyJywgJ3BheW1lbnRzLXJlZnVuZCddO1xuICByZW1pc3Npb25zOiBJUmVtaXNzaW9uW10gPSBbXTtcbiAgcmVtaXNzaW9uRmVlQW10OiBudW1iZXI7XG4gIGlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlOiBib29sZWFuO1xuICBzZXJ2aWNlUmVmZXJlbmNlOiBzdHJpbmc7XG4gIGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZTogYm9vbGVhbjtcbiAgaXNGcm9tUGF5bWVudERldGFpbFBhZ2U6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBPcmRlcnNsaXN0U2VydmljZTogT3JkZXJzbGlzdFNlcnZpY2UpIHtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiB9ICBcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNjZENhc2VOdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OO1xuICAgIHRoaXMuZGNuTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkRDTl9OVU1CRVI7XG4gICAgdGhpcy5pc1R1cm5PZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGO1xuICAgIHRoaXMuc2VydmljZVJlZmVyZW5jZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2U7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ3BheW1lbnR2aWV3JztcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRBcHBvcnRpb25QYXltZW50RGV0YWlscyh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgbGV0IGZlZXMgPSBbXTtcbiAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSBmYWxzZTtcblxuICAgICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtID0+IHtcbiAgICAgICAgICAgIGlmIChyZW0uZmVlX2NvZGUgPT09IGZlZS5jb2RlKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICBmZWVbJ3JlbWlzc2lvbnMnXSA9IHJlbTtcbiAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzUmVtaXNzaW9uc01hdGNoKSB7XG4gICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcyA9IGZlZXNcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5maWx0ZXJcbiAgICAgICAgICAocGF5bWVudEdyb3VwT2JqID0+IHBheW1lbnRHcm91cE9ialsncmVmZXJlbmNlJ10uaW5jbHVkZXModGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UpKTtcbiAgICAgICAgY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgIHRoaXMuaXNTdGF0dXNBbGxvY2F0ZWQgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwICYmIHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzID09PSAnQWxsb2NhdGVkJyB8fCBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPT09IDA7XG4gICAgICAgXG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuXG4gIH1cblxuICBnZXQgaXNDYXJkUGF5bWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ubWV0aG9kID09PSAnY2FyZCc7XG4gIH1cblxuICBnZXQgaXNUZWxlcGhvbnlQYXltZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5jaGFubmVsID09PSAndGVsZXBob255JztcbiAgfVxuXG4gIHB1YmxpYyBnb1RvUGF5bWVudExpc3QoKTogdm9pZCB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BheW1lbnQtbGlzdCc7XG4gIH1cblxuICBnb1RvQ2FzZVRyYW5zYXRpb25QYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKCF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7XG4gICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzZXRPcmRlckRhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlclJlZnMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJSZWYgPSBkYXRhKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0b3JkZXJDQ0RFdmVudHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJDQ0RFdmVudCA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlckNyZWF0ZWRzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyQ3JlYXRlZCA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlckRldGFpbCgpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5vcmRlckRldGFpbCA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlclBhcnR5cygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5vcmRlclBhcnR5ID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9yZGVyUmVtaXNzaW9uVG90YWxzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwgPSBkYXRhKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0b3JkZXJGZWVzVG90YWxzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyRmVlc1RvdGFsID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9vcmRlclRvdGFsUGF5bWVudHNzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyVG90YWxQYXltZW50cyA9IGRhdGEpO1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ29yZGVyLWZ1bGwtdmlldyc7XG4gICAgfVxuICAgIFxuICB9XG5cbiAgYWRkUmVtaXNzaW9uKGZlZTogSUZlZSkge1xuICAgIGlmKHRoaXMuY2hrRm9yQWRkUmVtaXNzaW9uKGZlZS5jb2RlKSkge1xuICAgIHRoaXMuZmVlSWQgPSBmZWU7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHModGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICBwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRHcm91cDtcblxuICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZpbHRlclxuICAgICAgICAgIChwYXltZW50R3JvdXBPYmogPT4gcGF5bWVudEdyb3VwT2JqWydyZWZlcmVuY2UnXS5pbmNsdWRlcyh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSkpO1xuICAgICAgICB0aGlzLnBheW1lbnQgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXTtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVBheW1lbnREZXRhaWxQYWdlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2FkZHJlbWlzc2lvbic7XG4gICAgICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvclxuICAgICk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGb3JGZWVzKHBheW1lbnRHcm91cDogYW55KSB7XG4gICAgaWYocGF5bWVudEdyb3VwICE9PSBudWxsICYmIHBheW1lbnRHcm91cCAhPT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcyAhPT0gbnVsbCAmJiBwYXltZW50R3JvdXAuZmVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICBcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYWRkUmVmdW5kRm9yUmVtaXNzaW9uKHBheW1lbnQ6IElQYXltZW50LCByZW1pc3Npb246IElSZW1pc3Npb25bXSxmZWVzOmFueSkge1xuIGlmKHRoaXMuY2hrSXNSZWZ1bmRSZW1pc3Npb25CdG5FbmFibGUoKSkge1xuICAgIHRoaXMucGF5bWVudCA9IHBheW1lbnQ7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHModGhpcy5wYXltZW50LnJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5maWx0ZXJcbiAgICAgICAgICAocGF5bWVudEdyb3VwT2JqID0+IHBheW1lbnRHcm91cE9ialsncmVmZXJlbmNlJ10uaW5jbHVkZXModGhpcy5wYXltZW50LnJlZmVyZW5jZSkpO1xuICAgICAgICB0aGlzLnBheW1lbnQgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXTtcbiAgICAgICAgdGhpcy5yZW1pc3Npb25zID0gcmVtaXNzaW9uO1xuICAgICAgICB0aGlzLnJlbWlzc2lvbkZlZUFtdCA9IGZlZXMuZmlsdGVyKGRhdGE9PmRhdGEuY29kZSA9PT0gdGhpcy5yZW1pc3Npb25zWydmZWVfY29kZSddKVswXS5uZXRfYW1vdW50O1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWRkcmVmdW5kZm9ycmVtaXNzaW9uJztcbiAgICAgICAgLy8gY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgIC8vIHRoaXMuaXNTdGF0dXNBbGxvY2F0ZWQgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwICYmIHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzID09PSAnQWxsb2NhdGVkJyB8fCBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPT09IDA7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuIH1cbiAgfVxuXG4gIGNoa0lzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cCAhPT0gbnVsbCAmJiAgdGhpcy5wYXltZW50R3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgaWYgKHBheW1lbnQubWV0aG9kLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdwYXltZW50IGJ5IGFjY291bnQnICYmIHBheW1lbnQuc3RhdHVzLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJyAmJiB0aGlzLmFsbG93RnVydGhlckFjY2Vzc0FmdGVyNERheXMocGF5bWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb25CdG5FbmFibGUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgaWYgKHRoaXMuaXNSZWZ1bmRSZW1pc3Npb25CdG5FbmFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuICB9XG5cbiAgaXNzdWVSZWZ1bmQocGF5bWVudGdycDogSVBheW1lbnRHcm91cCkge1xuICAgIGlmIChwYXltZW50Z3JwICE9PSBudWxsICYmICBwYXltZW50Z3JwICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZih0aGlzLmNoa0lzc3VlUmVmdW5kQnRuRW5hYmxlKHBheW1lbnRncnAucGF5bWVudHNbMF0pKSB7XG4gICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50Z3JwO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdpc3N1ZXJlZnVuZCc7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVBheW1lbnREZXRhaWxQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLmlzRnJvbVBheW1lbnREZXRhaWxQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2U7XG4gICAgfVxuICB9XG4gIH1cblxuICBnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlQ29kZTogc3RyaW5nLCByZW1pc3Npb25zOiBJUmVtaXNzaW9uW10pOiBJUmVtaXNzaW9uIHtcbiAgICBpZiAocmVtaXNzaW9ucyAmJiByZW1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgcmVtaXNzaW9uIG9mIHJlbWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKHJlbWlzc2lvbi5mZWVfY29kZSA9PT0gZmVlQ29kZSkge1xuICAgICAgICAgIHJldHVybiByZW1pc3Npb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjaGtJc3N1ZVJlZnVuZEJ0bkVuYWJsZShwYXltZW50OiBJUGF5bWVudCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoZWNrNEFsbG93ZWRSb2xlczJBY2Nlc3NSZWZ1bmQoKSAmJiB0aGlzLmFsbG93RnVydGhlckFjY2Vzc0FmdGVyNERheXMocGF5bWVudCkgJiZcbiAgICAgIHBheW1lbnQubWV0aG9kID09PSAncGF5bWVudCBieSBhY2NvdW50JyAmJiBwYXltZW50LnN0YXR1cy50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycpIHtcbiAgICAgIHRoaXMuaXNJc3N1ZVJlZnVuZkJ0bkVuYWJsZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzSXNzdWVSZWZ1bmZCdG5FbmFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIGNoa0ZvclBCQVBheW1lbnQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMucGF5bWVudEdyb3VwICE9PSBudWxsICYmICB0aGlzLnBheW1lbnRHcm91cCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IHBheW1lbnQgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXTtcbiAgICBpZiAocGF5bWVudC5tZXRob2QudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCcgJiYgdGhpcy5hbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzKHBheW1lbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIH1cblxuICBjaGtGb3JBZGRSZW1pc3Npb24oZmVlQ29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hrRm9yUEJBUGF5bWVudCgpICYmIHRoaXMuY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1JlZnVuZCgpICYmIHRoaXMuYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyh0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXSkpIHtcbiAgICAgIGlmICh0aGlzLnBheW1lbnRHcm91cC5yZW1pc3Npb25zICYmIHRoaXMucGF5bWVudEdyb3VwLnJlbWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlbWlzc2lvbiBvZiB0aGlzLnBheW1lbnRHcm91cC5yZW1pc3Npb25zKSB7XG4gICAgICAgICAgaWYgKHJlbWlzc2lvbi5mZWVfY29kZSA9PT0gZmVlQ29kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kLnNvbWUocm9sZSA9PlxuICAgICAgdGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMVxuICAgICk7XG4gIH1cblxuICBhbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzID0gKHBheW1lbnQ6IElQYXltZW50KTogYm9vbGVhbiA9PiB7XG4gICAgaWYocGF5bWVudCAhPT0gbnVsbCAmJiBwYXltZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBsZXQgdG1wNERheUFnbyA9IG5ldyBEYXRlKCk7XG4gICAgdG1wNERheUFnby5zZXREYXRlKHRtcDREYXlBZ28uZ2V0RGF0ZSgpIC0gNCk7XG4gICAgcmV0dXJuIHRtcDREYXlBZ28gPj0gbmV3IERhdGUocGF5bWVudC5kYXRlX2NyZWF0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0T3JkZXJEYXRhKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWYobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckNDREV2ZW50KG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJDcmVhdGVkKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJEZXRhaWwobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlclBhcnR5KG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJUb3RhbFBheW1lbnRzKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJSZW1pc3Npb25Ub3RhbChudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyRmVlc1RvdGFsKG51bGwpO1xuICB9XG59Il19
713
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUtsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7SUFDL0UsY0FBYyxHQUFHLHVCQUF1QjtBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHdEU7SUF3REUsOEJBQW9CLGtCQUFzQyxFQUNoRCxtQkFBd0MsRUFDeEMsRUFBcUIsRUFDckIsaUJBQW9DO1FBSDFCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDaEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBdkI5QyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFFbkMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QywrQkFBMEIsR0FBRyxDQUFDLDBCQUEwQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDN0UsZUFBVSxHQUFpQixFQUFFLENBQUM7UUFROUIsMEJBQXFCLEdBQVksSUFBSSxDQUFDO0lBV3RDLENBQUM7Ozs7SUFFRCxvREFBcUI7OztJQUFy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Q3ZCLHlDQUFrQjs7SUFDbEIsaURBQTJCOztJQUMzQixpREFBMkI7O0lBQzNCLHFDQUFZOztJQUNaLDBDQUFtQjs7SUFDbkIsaURBQW1DOztJQUNuQyxvREFBOEI7O0lBQzlCLGtEQUFvQzs7SUFDcEMsc0RBQXdDOztJQUN4QywwREFBNkU7O0lBQzdFLDBDQUE4Qjs7SUFDOUIsK0NBQXdCOztJQUN4QiwwREFBb0M7O0lBQ3BDLGdEQUF5Qjs7SUFDekIsd0RBQWtDOztJQUNsQyx1REFBaUM7O0lBQ2pDLDJDQUFvQjs7SUFDcEIsMkNBQW9COztJQUNwQixxREFBc0M7O0lBQ3RDLDhDQUF1Qjs7SUFDdkIsaURBQXdDOztJQUN4Qyw0Q0FBa0I7O0lBQ2xCLHlEQUFtQzs7SUFDbkMsK0NBQXdCOztJQUN4Qiw0Q0FBcUI7Ozs7O0lBQ1Qsa0RBQThDOzs7OztJQUN4RCxtREFBZ0Q7Ozs7O0lBQ2hELGtDQUE2Qjs7Ozs7SUFDN0IsaURBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJUGF5bWVudEdyb3VwIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudEdyb3VwJztcbmltcG9ydCB7IElGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHsgSVBheW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50JztcbmltcG9ydCB7IElSZW1pc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZW1pc3Npb24nO1xuaW1wb3J0IHsgUG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9Qb3N0UmVmdW5kUmV0cm9SZW1pc3Npb24nO1xuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPcmRlcnNsaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyc2xpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJUmVmdW5kQ29udGFjdERldGFpbHMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRDb250YWN0RGV0YWlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXBheW1lbnQtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYXltZW50LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYXltZW50LXZpZXcuY29tcG9uZW50LnNjc3MnXVxufSlcblxuZXhwb3J0IGNsYXNzIFBheW1lbnRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBpc1Rha2VQYXltZW50OiBib29sZWFuO1xuICBASW5wdXQoKSBjYXNlVHlwZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNOZXdQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzT2xkUGNpcGFsT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBvcmRlclJlZjogc3RyaW5nO1xuICBASW5wdXQoKSBvcmRlclN0YXR1czogc3RyaW5nO1xuICBASW5wdXQoKSBvcmRlclRvdGFsUGF5bWVudHM6IG51bWJlcjtcbiAgQElucHV0KCkgcGF5bWVudDogSVBheW1lbnQ7XG4gIEBJbnB1dCgpIExPR0dFRElOVVNFUlJPTEVTOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgb3JkZXJQYXJ0eTogc3RyaW5nO1xuICBASW5wdXQoKSBvcmRlckNyZWF0ZWQ6IERhdGU7XG4gIEBJbnB1dCgpIG9yZGVyQ0NERXZlbnQ6IHN0cmluZztcbiAgQElucHV0KCkgb3JkZXJGZWVzVG90YWw6IG51bWJlcjtcbiAgQElucHV0KCkgb3JkZXJSZW1pc3Npb25Ub3RhbDogbnVtYmVyO1xuICBASW5wdXQoKSBvcmRlckRldGFpbDogYW55W107XG4gIGZlZXM6IGFueTtcbiAgaXNGdWxseVJlZnVuZDogYm9vbGVhbjtcbiAgQElucHV0KFwiaXNTZXJ2aWNlUmVxdWVzdFwiKSBpc1NlcnZpY2VSZXF1ZXN0OiBzdHJpbmc7XG5cbiAgcGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBzZWxlY3RlZE9wdGlvbjogc3RyaW5nO1xuICBkY25OdW1iZXI6IHN0cmluZztcbiAgaXNTdGF0dXNBbGxvY2F0ZWQ6IGJvb2xlYW47XG4gIGlzUmVtaXNzaW9uc01hdGNoOiBib29sZWFuO1xuICBmZWVJZDogSUZlZTtcbiAgdmlld1N0YXR1czogc3RyaW5nO1xuICBpc1JlZnVuZFJlbWlzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1N0cmF0ZWdpY0ZpeEVuYWJsZTogYm9vbGVhbjtcbiAgaXNBZGRGZWVCdG5FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSXNzdWVSZWZ1bmZCdG5FbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWxsb3dlZFJvbGVzVG9BY2Nlc3NSZWZ1bmQgPSBbJ3BheW1lbnRzLXJlZnVuZC1hcHByb3ZlcicsICdwYXltZW50cy1yZWZ1bmQnXTtcbiAgcmVtaXNzaW9uczogSVJlbWlzc2lvbltdID0gW107XG4gIHJlbWlzc2lvbkZlZUFtdDogbnVtYmVyO1xuICBpc1JlZnVuZFJlbWlzc2lvbkJ0bkVuYWJsZTogYm9vbGVhbjtcbiAgc2VydmljZVJlZmVyZW5jZTogc3RyaW5nO1xuICBpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2U6IGJvb2xlYW47XG4gIGlzRnJvbVBheW1lbnREZXRhaWxQYWdlOiBib29sZWFuO1xuICBwYXltZW50RmVlczogSUZlZVtdO1xuICBwYXltZW50VHlwZTogc3RyaW5nO1xuICBpc0NvbnRpbnVlQnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICB2aWV3Q29tcFN0YXR1czogc3RyaW5nO1xuICBjb250YWN0RGV0YWlsc09iajogSVJlZnVuZENvbnRhY3REZXRhaWxzXG4gIG5vdGlmaWNhdGlvbjogYW55O1xuICBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkOiBib29sZWFuO1xuICByZWZ1bmRSZWZlcmVuY2U6IHN0cmluZztcbiAgcmVmdW5kQW1vdW50OiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlKSB7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gfSAgXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuaXNUdXJuT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRjtcbiAgICB0aGlzLnNlcnZpY2VSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdwYXltZW50dmlldyc7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHModGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgIGxldCBmZWVzID0gW107XG4gICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gZmFsc2U7XG5cbiAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbSA9PiB7XG4gICAgICAgICAgICBpZiAocmVtLmZlZV9jb2RlID09PSBmZWUuY29kZSkge1xuICAgICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZmVlWydyZW1pc3Npb25zJ10gPSByZW07XG4gICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCkge1xuICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMgPSBmZWVzXG4gICAgICAgIHRoaXMucGF5bWVudEZlZXMgPWZlZXM7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1xuXG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMuZmlsdGVyXG4gICAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKSk7XG4gICAgICAgIGNvbnN0IHBheW1lbnRBbGxvY2F0aW9uID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucGF5bWVudF9hbGxvY2F0aW9uO1xuICAgICAgICB0aGlzLmlzU3RhdHVzQWxsb2NhdGVkID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4gMCAmJiBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcgfHwgcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID09PSAwO1xuICAgICAgIFxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yXG4gICAgKTtcblxuICB9XG5cbiAgZ2V0IGlzQ2FyZFBheW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLm1ldGhvZCA9PT0gJ2NhcmQnO1xuICB9XG5cbiAgZ2V0IGlzVGVsZXBob255UGF5bWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0uY2hhbm5lbCA9PT0gJ3RlbGVwaG9ueSc7XG4gIH1cblxuICBwdWJsaWMgZ29Ub1BheW1lbnRMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LWxpc3QnO1xuICB9XG4gIGdldE92ZXJQYXltZW50VmFsdWUoKSB7XG4gICAgbGV0IGZlZXNPdmVyUGF5bWVudCA9IDA7XG4gICAgdGhpcy5wYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICBmZWVzT3ZlclBheW1lbnQgKz0gZmVlLm92ZXJfcGF5bWVudDtcbiAgICB9KTtcbiAgICByZXR1cm4gZmVlc092ZXJQYXltZW50ID4gMCA/IGZlZXNPdmVyUGF5bWVudCA6IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLm92ZXJfcGF5bWVudDtcblxuICB9XG4gIGdvVG9TZXJ2aWNlUmVxdWVzdFBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSBmYWxzZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QgPSAndHJ1ZSc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IHRydWU7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG4gIGdvVG9DYXNlVHJhbnNhdGlvblBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7XG4gICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzZXRPcmRlckRhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlclJlZnMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJSZWYgPSBkYXRhKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0b3JkZXJDQ0RFdmVudHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMub3JkZXJDQ0RFdmVudCA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlckNyZWF0ZWRzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyQ3JlYXRlZCA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlckRldGFpbCgpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5vcmRlckRldGFpbCA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRvcmRlclBhcnR5cygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5vcmRlclBhcnR5ID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9yZGVyUmVtaXNzaW9uVG90YWxzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwgPSBkYXRhKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0b3JkZXJGZWVzVG90YWxzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyRmVlc1RvdGFsID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG9vcmRlclRvdGFsUGF5bWVudHNzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyVG90YWxQYXltZW50cyA9IGRhdGEpO1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ29yZGVyLWZ1bGwtdmlldyc7XG4gICAgfVxuICAgIFxuICB9XG5cbiAgYWRkUmVtaXNzaW9uKGZlZTogSUZlZSkge1xuICAgIGlmKHRoaXMuY2hrSXNBZGRSZW1pc3Npb25CdG5FbmFibGUoZmVlKSkge1xuICAgIHRoaXMuZmVlSWQgPSBmZWU7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHModGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICBwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRHcm91cDtcblxuICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZpbHRlclxuICAgICAgICAgIChwYXltZW50R3JvdXBPYmogPT4gcGF5bWVudEdyb3VwT2JqWydyZWZlcmVuY2UnXS5pbmNsdWRlcyh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSkpO1xuICAgICAgICB0aGlzLnBheW1lbnQgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXTtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVBheW1lbnREZXRhaWxQYWdlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2FkZHJlbWlzc2lvbic7XG4gICAgICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvclxuICAgICk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGb3JGZWVzKHBheW1lbnRHcm91cDogYW55KSB7XG4gICAgaWYocGF5bWVudEdyb3VwICE9PSBudWxsICYmIHBheW1lbnRHcm91cCAhPT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcyAhPT0gbnVsbCAmJiBwYXltZW50R3JvdXAuZmVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICBcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb2Nlc3NSZWZ1bmQoKSB7XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGNvbnN0IG9iaiA9IHRoaXMucGF5bWVudEdyb3VwLmZlZXNbMF07XG4gICAgdGhpcy5mZWVzICA9IFt7IGlkOiBvYmouaWQsIFxuICAgICAgY29kZTogb2JqLmNvZGUsXG4gICAgICB2ZXJzaW9uOm9iai52ZXJzaW9uLCBcbiAgICAgIGFwcG9ydGlvbl9hbW91bnQ6IG9iai5hcHBvcnRpb25fYW1vdW50LFxuICAgICAgY2FsY3VsYXRlZF9hbW91bnQ6IG9iai5jYWxjdWxhdGVkX2Ftb3VudCxcbiAgICAgIHVwZGF0ZWRfdm9sdW1lOiBvYmoudXBkYXRlZF92b2x1bWUgPyBvYmoudXBkYXRlZF92b2x1bWUgOiBvYmoudm9sdW1lLFxuICAgICAgdm9sdW1lOiBvYmoudm9sdW1lLFxuICAgICAgcmVmdW5kX2Ftb3VudDogdGhpcy5nZXRPdmVyUGF5bWVudFZhbHVlKCkgfV07XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgUG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uKHRoaXMuY29udGFjdERldGFpbHNPYmosdGhpcy5mZWVzLCB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5yZWZlcmVuY2UsICdSUjAzNycsIFxuICAgIHRoaXMuZ2V0T3ZlclBheW1lbnRWYWx1ZSgpLCAnb3AnKTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UmVmdW5kc1JlYXNvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZWZ1bmRjb25maXJtYXRpb25wYWdlJztcbiAgICAgICAgICAgIHRoaXMucmVmdW5kUmVmZXJlbmNlID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX3JlZmVyZW5jZTtcbiAgICAgICAgICAgIHRoaXMucmVmdW5kQW1vdW50ID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudDtcbiAgICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgfVxuICBnb3RvQWRkcmVzc1BhZ2Uobm90ZT86IElSZWZ1bmRDb250YWN0RGV0YWlscykge1xuICAgIGlmIChub3RlKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IHsgY29udGFjdF9kZXRhaWxzOiBub3RlLCBub3RpZmljYXRpb25fdHlwZTogbm90ZS5ub3RpZmljYXRpb25fdHlwZSB9O1xuICAgIH1cbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnb3ZlclBheW1lbnRBZGRyZXNzQ2FwdHVyZSc7XG4gIH1cbiAgYWRkUmVmdW5kRm9yUmVtaXNzaW9uKHBheW1lbnQ6IElQYXltZW50LCByZW1pc3Npb246IElSZW1pc3Npb25bXSxmZWVzOmFueSkge1xuIC8vaWYoIXRoaXMuY2hrSXNJc3N1ZVJlZnVuZEJ0bkVuYWJsZShwYXltZW50KSkge1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEFwcG9ydGlvblBheW1lbnREZXRhaWxzKHBheW1lbnQucmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICBwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRHcm91cDtcblxuICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZpbHRlclxuICAgICAgICAgIChwYXltZW50R3JvdXBPYmogPT4gcGF5bWVudEdyb3VwT2JqWydyZWZlcmVuY2UnXS5pbmNsdWRlcyhwYXltZW50LnJlZmVyZW5jZSkpO1xuICAgICAgICB0aGlzLnBheW1lbnQgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXTtcbiAgICAgICAgdGhpcy5yZW1pc3Npb25zID0gcmVtaXNzaW9uO1xuICAgICAgICB0aGlzLnJlbWlzc2lvbkZlZUFtdCA9IGZlZXMuZmlsdGVyKGRhdGE9PmRhdGEuY29kZSA9PT0gdGhpcy5yZW1pc3Npb25zWydmZWVfY29kZSddKVswXS5uZXRfYW1vdW50O1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWRkcmVmdW5kZm9ycmVtaXNzaW9uJztcbiAgICAgICAgLy8gY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgIC8vIHRoaXMuaXNTdGF0dXNBbGxvY2F0ZWQgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwICYmIHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzID09PSAnQWxsb2NhdGVkJyB8fCBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPT09IDA7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICAgLy99XG4gIH1cblxuICBnb1RvUGF5bWVudFZpZXdDb21wb25lbnQoKSB7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAncGF5bWVudHZpZXcnO1xuICB9XG4gIGlzc3VlUmVmdW5kKHBheW1lbnRncnA6IElQYXltZW50R3JvdXApIHtcbiAgICBpZiAocGF5bWVudGdycCAhPT0gbnVsbCAmJiAgcGF5bWVudGdycCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZih0aGlzLmNoa0lzSXNzdWVSZWZ1bmRCdG5FbmFibGUocGF5bWVudGdycC5wYXltZW50c1swXSkpIHtcbiAgICAgICAgaWYocGF5bWVudGdycC5wYXltZW50c1swXS5vdmVyX3BheW1lbnQgPiAwKSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnb3ZlcnBheW1lbnQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudGdycDtcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnaXNzdWVyZWZ1bmQnO1xuICAgICAgICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlQ29kZTogc3RyaW5nLCByZW1pc3Npb25zOiBJUmVtaXNzaW9uW10pOiBJUmVtaXNzaW9uIHtcbiAgICBpZiAocmVtaXNzaW9ucyAmJiByZW1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgcmVtaXNzaW9uIG9mIHJlbWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKHJlbWlzc2lvbi5mZWVfY29kZSA9PT0gZmVlQ29kZSkge1xuICAgICAgICAgIHJldHVybiByZW1pc3Npb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjaGtJc0lzc3VlUmVmdW5kQnRuRW5hYmxlKHBheW1lbnQ6IElQYXltZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKHBheW1lbnQgIT09IG51bGwgJiYgcGF5bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcGF5bWVudC5pc3N1ZV9yZWZ1bmQgJiYgcGF5bWVudC5yZWZ1bmRfZW5hYmxlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjaGtJc0FkZFJlZnVuZEJ0bkVuYWJsZShyZW1pc3Npb246IElSZW1pc3Npb24pOiBib29sZWFuIHtcbiAgICBpZiAocmVtaXNzaW9uICE9PSBudWxsICYmIHJlbWlzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVtaXNzaW9uLmFkZF9yZWZ1bmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjaGtJc0FkZFJlbWlzc2lvbkJ0bkVuYWJsZShmZWU6IElGZWUpOiBib29sZWFuIHtcbiAgICBpZiAoZmVlICE9PSBudWxsICYmIGZlZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmVlLmFkZF9yZW1pc3Npb24gJiYgZmVlLnJlbWlzc2lvbl9lbmFibGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbn1cbiAgc2VsZWN0UHltZW50T3B0aW9uKHBheW1lbnRUeXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBheW1lbnRUeXBlID0gcGF5bWVudFR5cGU7XG4gICAgdGhpcy5pc0NvbnRpbnVlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuICBjb250aW51ZVBheW1lbnQocGF5bWVudGdycDogSVBheW1lbnRHcm91cCkge1xuICAgIFxuICAgIGlmICh0aGlzLnBheW1lbnRUeXBlID09PSAnb3AnKSB7XG4gICAgICB0aGlzLmlzRnVsbHlSZWZ1bmQgPSBmYWxzZVxuICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnb3ZlclBheW1lbnRBZGRyZXNzQ2FwdHVyZSc7XG4gICAgfSBlbHNlIGlmKHRoaXMucGF5bWVudFR5cGUgPT09ICdmcCcpIHtcbiAgICAgIHRoaXMuaXNGdWxseVJlZnVuZCA9IHRydWVcbiAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudGdycDtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdpc3N1ZXJlZnVuZCc7XG4gICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gXCJcIjtcbiAgICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVBheW1lbnREZXRhaWxQYWdlID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNGcm9tUGF5bWVudERldGFpbFBhZ2UgPSB0cnVlO1xuICAgICAgdGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlO1xuICAgIH1cbiAgfVxuICBnb3RvUGF5bWVudFNlbGVjdFBhZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzICA9ICdvdmVycGF5bWVudCc7XG4gIH1cbiAgZ2V0Q29udGFjdERldGFpbHMob2JqOklSZWZ1bmRDb250YWN0RGV0YWlscykge1xuICAgIHRoaXMuY29udGFjdERldGFpbHNPYmogPSBvYmo7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdvdmVycGF5bWVudGNoZWNrYW5kYW5zd2VyJztcbiAgfVxuXG4gIHJlc2V0T3JkZXJEYXRhKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWYobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckNDREV2ZW50KG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJDcmVhdGVkKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJEZXRhaWwobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlclBhcnR5KG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJUb3RhbFBheW1lbnRzKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJSZW1pc3Npb25Ub3RhbChudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyRmVlc1RvdGFsKG51bGwpO1xuICB9XG5cbiAgLy8gY2hrSXNzdWVSZWZ1bmRCdG5FbmFibGUocGF5bWVudDogSVBheW1lbnQpOiBib29sZWFuIHtcbiAgLy8gICBpZiAodGhpcy5jaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kKCkgJiYgdGhpcy5hbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzKHBheW1lbnQpICYmXG4gIC8vICAgICBwYXltZW50Lm1ldGhvZCA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCcgJiYgcGF5bWVudC5zdGF0dXMudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gIC8vICAgICB0aGlzLmlzSXNzdWVSZWZ1bmZCdG5FbmFibGUgPSB0cnVlO1xuICAvLyAgIH1cbiAgLy8gICBpZiAodGhpcy5pc0lzc3VlUmVmdW5mQnRuRW5hYmxlKSB7XG4gIC8vICAgICByZXR1cm4gdHJ1ZTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgIH07XG4gIC8vIH1cblxuICAvLyBjaGtGb3JQQkFQYXltZW50KCk6IGJvb2xlYW4ge1xuICAvLyAgIGlmICh0aGlzLnBheW1lbnRHcm91cCAhPT0gbnVsbCAmJiAgdGhpcy5wYXltZW50R3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAvLyAgIGxldCBwYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gIC8vICAgaWYgKHBheW1lbnQubWV0aG9kLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdwYXltZW50IGJ5IGFjY291bnQnICYmIHRoaXMuYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyhwYXltZW50KSkge1xuICAvLyAgICAgcmV0dXJuIHRydWU7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBmYWxzZTtcbiAgLy8gfVxuICAvLyB9XG5cbiAgLy8gY2hrRm9yQWRkUmVtaXNzaW9uKGZlZUNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyAgIGlmICh0aGlzLmNoa0ZvclBCQVBheW1lbnQoKSAmJiB0aGlzLmNoZWNrNEFsbG93ZWRSb2xlczJBY2Nlc3NSZWZ1bmQoKSAmJiB0aGlzLmFsbG93RnVydGhlckFjY2Vzc0FmdGVyNERheXModGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0pKSB7XG4gIC8vICAgICBpZiAodGhpcy5wYXltZW50R3JvdXAucmVtaXNzaW9ucyAmJiB0aGlzLnBheW1lbnRHcm91cC5yZW1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgLy8gICAgICAgZm9yIChjb25zdCByZW1pc3Npb24gb2YgdGhpcy5wYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAvLyAgICAgICAgIGlmIChyZW1pc3Npb24uZmVlX2NvZGUgPT09IGZlZUNvZGUpIHtcbiAgLy8gICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgcmV0dXJuIHRydWU7XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gdHJ1ZTtcblxuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgLy8gY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1JlZnVuZCA9ICgpOiBib29sZWFuID0+IHtcbiAgLy8gICByZXR1cm4gdGhpcy5hbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZC5zb21lKHJvbGUgPT5cbiAgLy8gICAgIHRoaXMuTE9HR0VESU5VU0VSUk9MRVMuaW5kZXhPZihyb2xlKSAhPT0gLTFcbiAgLy8gICApO1xuICAvLyB9XG5cbiAgLy8gYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyA9IChwYXltZW50OiBJUGF5bWVudCk6IGJvb2xlYW4gPT4ge1xuICAvLyAgIGlmKHBheW1lbnQgIT09IG51bGwgJiYgcGF5bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gIC8vICAgbGV0IHRtcDREYXlBZ28gPSBuZXcgRGF0ZSgpO1xuICAvLyAgIHRtcDREYXlBZ28uc2V0RGF0ZSh0bXA0RGF5QWdvLmdldERhdGUoKSAtIDQpO1xuICAvLyAgIHJldHVybiB0bXA0RGF5QWdvID49IG5ldyBEYXRlKHBheW1lbnQuZGF0ZV9jcmVhdGVkKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICAvLyBjaGtJc1JlZnVuZFJlbWlzc2lvbkJ0bkVuYWJsZSgpOiBib29sZWFuIHtcbiAgLy8gICBpZiAodGhpcy5wYXltZW50R3JvdXAgIT09IG51bGwgJiYgIHRoaXMucGF5bWVudEdyb3VwICE9PSB1bmRlZmluZWQpIHtcbiAgLy8gICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAvLyAgICAgICAgIGlmIChwYXltZW50Lm1ldGhvZC50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAncGF5bWVudCBieSBhY2NvdW50JyAmJiBwYXltZW50LnN0YXR1cy50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycgJiYgdGhpcy5hbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzKHBheW1lbnQpKSB7XG4gIC8vICAgICAgICAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlID0gdHJ1ZTtcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH0pO1xuICAvLyAgIGlmICh0aGlzLmlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlKSB7XG4gIC8vICAgICByZXR1cm4gdHJ1ZTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgIH07XG4gIC8vIH1cbiAgLy8gfVxuXG59Il19