@myclub_se/data-access 3.7.10 → 3.7.11

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 (180) hide show
  1. package/esm2022/lib/api-models/api-invoice/api-payment-attempt-create.mjs +1 -8
  2. package/esm2022/lib/authentication/authentication.interceptor.mjs +6 -8
  3. package/esm2022/lib/authentication/authentication.service.mjs +8 -11
  4. package/esm2022/lib/authentication/guards/authenticated.guard.mjs +4 -6
  5. package/esm2022/lib/authentication/guards/handle-grant-token.guard.mjs +4 -7
  6. package/esm2022/lib/data-access.module.mjs +6 -6
  7. package/esm2022/lib/maintenance/maintenance.interceptor.mjs +4 -5
  8. package/esm2022/lib/models/activity-extra-member.mjs +1 -8
  9. package/esm2022/lib/models/activity-invite.mjs +1 -23
  10. package/esm2022/lib/models/activity-location-group.mjs +1 -7
  11. package/esm2022/lib/models/activity-location-part.mjs +1 -3
  12. package/esm2022/lib/models/activity-location-tag.mjs +1 -6
  13. package/esm2022/lib/models/activity-location.mjs +1 -11
  14. package/esm2022/lib/models/activity-participant.mjs +1 -8
  15. package/esm2022/lib/models/activity-question-connection.mjs +1 -8
  16. package/esm2022/lib/models/activity-question-response.mjs +1 -3
  17. package/esm2022/lib/models/activity-question.mjs +1 -8
  18. package/esm2022/lib/models/activity-rule-relation.mjs +1 -9
  19. package/esm2022/lib/models/activity-rule.mjs +1 -8
  20. package/esm2022/lib/models/activity-settings.mjs +1 -18
  21. package/esm2022/lib/models/activity-type.mjs +1 -9
  22. package/esm2022/lib/models/activity-waiting-list-entry.mjs +1 -16
  23. package/esm2022/lib/models/activity.mjs +1 -82
  24. package/esm2022/lib/models/app-settings.mjs +1 -5
  25. package/esm2022/lib/models/auth/auth-member.mjs +3 -7
  26. package/esm2022/lib/models/auth/auth-section.mjs +1 -6
  27. package/esm2022/lib/models/auth/auth-team-section.mjs +1 -3
  28. package/esm2022/lib/models/auth/auth-team.mjs +1 -6
  29. package/esm2022/lib/models/auth/auth.mjs +1 -17
  30. package/esm2022/lib/models/authentication.mjs +1 -3
  31. package/esm2022/lib/models/bookable-item.mjs +1 -11
  32. package/esm2022/lib/models/bookable-part.mjs +1 -3
  33. package/esm2022/lib/models/bookable-tag.mjs +1 -6
  34. package/esm2022/lib/models/booking-calendar-application-time.mjs +1 -33
  35. package/esm2022/lib/models/booking-calendar-slot-session.mjs +1 -35
  36. package/esm2022/lib/models/booking-calendar-slot-validate-copy-result.mjs +1 -5
  37. package/esm2022/lib/models/booking-calendar-slot.mjs +1 -26
  38. package/esm2022/lib/models/booking-calendar.mjs +1 -33
  39. package/esm2022/lib/models/booking-settings.mjs +1 -8
  40. package/esm2022/lib/models/booking-slot-filter.mjs +1 -12
  41. package/esm2022/lib/models/calendar-event.mjs +1 -16
  42. package/esm2022/lib/models/calendar.mjs +1 -6
  43. package/esm2022/lib/models/card/card-deal.mjs +1 -6
  44. package/esm2022/lib/models/card/card-logo-urls.mjs +1 -9
  45. package/esm2022/lib/models/card/card-logo.mjs +1 -4
  46. package/esm2022/lib/models/card/card-member-ticket.mjs +1 -7
  47. package/esm2022/lib/models/card/card-theme.mjs +1 -6
  48. package/esm2022/lib/models/card/card-ticket-location.mjs +1 -5
  49. package/esm2022/lib/models/card/card-ticket.mjs +1 -17
  50. package/esm2022/lib/models/card/card.mjs +1 -9
  51. package/esm2022/lib/models/card/home-team.mjs +1 -4
  52. package/esm2022/lib/models/card/member-card.mjs +1 -11
  53. package/esm2022/lib/models/card/search-member-card.mjs +1 -5
  54. package/esm2022/lib/models/card/selected-field.mjs +1 -3
  55. package/esm2022/lib/models/club-image.mjs +1 -14
  56. package/esm2022/lib/models/club-section.mjs +1 -3
  57. package/esm2022/lib/models/club.mjs +1 -3
  58. package/esm2022/lib/models/collection.mjs +1 -5
  59. package/esm2022/lib/models/contact.mjs +1 -19
  60. package/esm2022/lib/models/databank-category.mjs +1 -7
  61. package/esm2022/lib/models/databank-item.mjs +1 -7
  62. package/esm2022/lib/models/directory.mjs +1 -10
  63. package/esm2022/lib/models/email.mjs +1 -4
  64. package/esm2022/lib/models/event.mjs +1 -28
  65. package/esm2022/lib/models/external-link.mjs +1 -3
  66. package/esm2022/lib/models/feature-flags.mjs +1 -14
  67. package/esm2022/lib/models/file-object.mjs +1 -10
  68. package/esm2022/lib/models/general-image.mjs +1 -4
  69. package/esm2022/lib/models/group-role.mjs +1 -7
  70. package/esm2022/lib/models/guest.mjs +1 -5
  71. package/esm2022/lib/models/image-urls.mjs +1 -6
  72. package/esm2022/lib/models/invoice/member-fee.mjs +1 -6
  73. package/esm2022/lib/models/invoice/member-invoice-row.mjs +1 -14
  74. package/esm2022/lib/models/invoice/member-invoice.mjs +1 -24
  75. package/esm2022/lib/models/invoice/payment-attempt.mjs +1 -10
  76. package/esm2022/lib/models/invoice/payment-order-row.mjs +1 -3
  77. package/esm2022/lib/models/invoice/payment-order.mjs +1 -18
  78. package/esm2022/lib/models/invoice/payment-types/credit-card.mjs +1 -12
  79. package/esm2022/lib/models/invoice/payment-types/giro.mjs +1 -7
  80. package/esm2022/lib/models/invoice/payment-types/swish.mjs +1 -14
  81. package/esm2022/lib/models/invoice/payment-types/zimpler.mjs +1 -8
  82. package/esm2022/lib/models/invoice/search-member-invoice.mjs +1 -10
  83. package/esm2022/lib/models/invoice/swish-qr-code.mjs +1 -2
  84. package/esm2022/lib/models/invoice/unpaid-member-invoice.mjs +1 -5
  85. package/esm2022/lib/models/leader-activity.mjs +1 -12
  86. package/esm2022/lib/models/member/member-attribute.mjs +1 -12
  87. package/esm2022/lib/models/member/member-contact.mjs +1 -6
  88. package/esm2022/lib/models/member/member-function.mjs +1 -6
  89. package/esm2022/lib/models/member/member-validation-settings.mjs +1 -9
  90. package/esm2022/lib/models/member/member.mjs +1 -27
  91. package/esm2022/lib/models/member/other-member-field.mjs +1 -4
  92. package/esm2022/lib/models/member/other-member.mjs +1 -9
  93. package/esm2022/lib/models/member/search-member.mjs +1 -17
  94. package/esm2022/lib/models/member-activity-invite.mjs +1 -12
  95. package/esm2022/lib/models/member-public-form-field-option.mjs +1 -5
  96. package/esm2022/lib/models/member-public-form-field.mjs +1 -12
  97. package/esm2022/lib/models/member-public-form.mjs +1 -26
  98. package/esm2022/lib/models/member-team-through.mjs +1 -10
  99. package/esm2022/lib/models/member-team.mjs +1 -10
  100. package/esm2022/lib/models/member-type.mjs +1 -4
  101. package/esm2022/lib/models/mypages-menu-item.mjs +1 -4
  102. package/esm2022/lib/models/news.mjs +1 -20
  103. package/esm2022/lib/models/open-activity.mjs +3 -79
  104. package/esm2022/lib/models/optional-fee.mjs +2 -7
  105. package/esm2022/lib/models/overbooked-bookable-item.mjs +1 -6
  106. package/esm2022/lib/models/overbooked-location.mjs +1 -6
  107. package/esm2022/lib/models/partner.mjs +1 -5
  108. package/esm2022/lib/models/public-authentication.mjs +1 -3
  109. package/esm2022/lib/models/registration-qr-code.mjs +1 -8
  110. package/esm2022/lib/models/retrieve-2fa.mjs +1 -3
  111. package/esm2022/lib/models/saved-search.mjs +1 -3
  112. package/esm2022/lib/models/search-attribute.mjs +1 -5
  113. package/esm2022/lib/models/search-club.mjs +1 -10
  114. package/esm2022/lib/models/search-team.mjs +1 -9
  115. package/esm2022/lib/models/section.mjs +1 -3
  116. package/esm2022/lib/models/swish-incident.mjs +1 -11
  117. package/esm2022/lib/models/token.mjs +1 -4
  118. package/esm2022/lib/models/user-notification.mjs +1 -9
  119. package/esm2022/lib/models/user.mjs +1 -13
  120. package/esm2022/lib/services/activity.service.mjs +4 -7
  121. package/esm2022/lib/services/api.service.mjs +4 -6
  122. package/esm2022/lib/services/auth.service.mjs +4 -5
  123. package/esm2022/lib/services/bookable.service.mjs +4 -5
  124. package/esm2022/lib/services/booking-calendar.service.mjs +22 -6
  125. package/esm2022/lib/services/club.service.mjs +4 -5
  126. package/esm2022/lib/services/constant.service.mjs +4 -5
  127. package/esm2022/lib/services/databank.service.mjs +4 -5
  128. package/esm2022/lib/services/email.service.mjs +4 -5
  129. package/esm2022/lib/services/external-link.service.mjs +4 -5
  130. package/esm2022/lib/services/feature-flags.service.mjs +4 -5
  131. package/esm2022/lib/services/file.service.mjs +4 -5
  132. package/esm2022/lib/services/invoice/invoice.service.mjs +4 -5
  133. package/esm2022/lib/services/invoice/payment-attempt.service.mjs +4 -5
  134. package/esm2022/lib/services/invoice/payment-order.service.mjs +4 -5
  135. package/esm2022/lib/services/leader-notification.service.mjs +4 -5
  136. package/esm2022/lib/services/maintenance-mode.service.mjs +8 -7
  137. package/esm2022/lib/services/member-card.service.mjs +4 -5
  138. package/esm2022/lib/services/member-fee.service.mjs +4 -5
  139. package/esm2022/lib/services/member-public-form.service.mjs +4 -5
  140. package/esm2022/lib/services/member.service.mjs +4 -5
  141. package/esm2022/lib/services/news.service.mjs +4 -5
  142. package/esm2022/lib/services/registration-qr-code.service.mjs +4 -5
  143. package/esm2022/lib/services/saved-search.service.mjs +4 -5
  144. package/esm2022/lib/services/section.service.mjs +4 -5
  145. package/esm2022/lib/services/storage.service.mjs +5 -6
  146. package/esm2022/lib/services/swish-incident.service.mjs +4 -5
  147. package/esm2022/lib/services/team.service.mjs +4 -5
  148. package/esm2022/lib/services/token.service.mjs +4 -5
  149. package/esm2022/lib/services/user-notification.service.mjs +4 -5
  150. package/esm2022/lib/services/user.service.mjs +4 -5
  151. package/esm2022/lib/store/actions/booking.actions.mjs +7 -1
  152. package/esm2022/lib/store/effects/activity.effects.mjs +358 -355
  153. package/esm2022/lib/store/effects/auth.effects.mjs +121 -119
  154. package/esm2022/lib/store/effects/booking.effects.mjs +139 -134
  155. package/esm2022/lib/store/effects/calendar.effects.mjs +61 -59
  156. package/esm2022/lib/store/effects/club-info.effects.mjs +17 -15
  157. package/esm2022/lib/store/effects/constant.effects.mjs +78 -76
  158. package/esm2022/lib/store/effects/databank.effects.mjs +23 -21
  159. package/esm2022/lib/store/effects/email.effects.mjs +16 -14
  160. package/esm2022/lib/store/effects/external-link.effects.mjs +11 -9
  161. package/esm2022/lib/store/effects/file.effects.mjs +92 -90
  162. package/esm2022/lib/store/effects/invoice.effects.mjs +176 -174
  163. package/esm2022/lib/store/effects/member-card.effects.mjs +73 -71
  164. package/esm2022/lib/store/effects/member-fee.effects.mjs +9 -7
  165. package/esm2022/lib/store/effects/member.effects.mjs +41 -39
  166. package/esm2022/lib/store/effects/mixins/extra-members-mixin.mjs +4 -2
  167. package/esm2022/lib/store/effects/news.effects.mjs +47 -45
  168. package/esm2022/lib/store/effects/public-form.effects.mjs +24 -22
  169. package/esm2022/lib/store/effects/registration-qr-code.effects.mjs +14 -12
  170. package/esm2022/lib/store/effects/saved-search.effects.mjs +9 -7
  171. package/esm2022/lib/store/effects/swish-incidents.effects.mjs +11 -9
  172. package/esm2022/lib/store/effects/team.effects.mjs +82 -79
  173. package/esm2022/lib/store/effects/token.effects.mjs +93 -91
  174. package/esm2022/lib/store/effects/user.effects.mjs +35 -35
  175. package/fesm2022/myclub_se-data-access.mjs +1771 -2857
  176. package/fesm2022/myclub_se-data-access.mjs.map +1 -1
  177. package/lib/services/booking-calendar.service.d.ts +3 -0
  178. package/lib/store/actions/booking.actions.d.ts +24 -0
  179. package/lib/store/effects/booking.effects.d.ts +5 -0
  180. package/package.json +1 -1
@@ -7,182 +7,184 @@ import { catchError, map } from 'rxjs/operators';
7
7
  import { HttpErrorResponse } from '@angular/common/http';
8
8
  import * as i0 from "@angular/core";
9
9
  export class InvoiceEffects {
10
- actions$ = inject(Actions);
11
- invoiceService = inject(InvoiceService);
12
- paymentOrderService = inject(PaymentOrderService);
13
- paymentAttemptService = inject(PaymentAttemptService);
14
- createMemberInvoiceFritidskortetPayment$ = createEffect(() => this.actions$
15
- .pipe(ofType(createFritidskortetMemberInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, {
16
- type: 'fritidskortet',
17
- childPersonalId: payload.childPersonalId,
18
- adultPersonalId: payload.adultPersonalId,
19
- public: false
20
- })
21
- .pipe(map((paymentAttempt) => createFritidskortetInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createFritidskortetInvoicePaymentFailureAction({ payload: error })))))));
22
- createMemberInvoiceMondidoPayment$ = createEffect(() => this.actions$
23
- .pipe(ofType(createMondidoMemberInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, { type: 'mondido' })
24
- .pipe(map((paymentAttempt) => createMondidoInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createMondidoInvoicePaymentFailureAction({ payload: error })))))));
25
- createMemberPingCreditCardPayment$ = createEffect(() => this.actions$
26
- .pipe(ofType(createPingCreditCardMemberInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, { type: 'ping_card' })
27
- .pipe(map((paymentAttempt) => createPingCreditCardPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingCreditCardPaymentFailureAction({ payload: error })))))));
28
- createMemberPingSwishPayment$ = createEffect(() => this.actions$
29
- .pipe(ofType(createPingSwishMemberInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, { type: 'ping_swish', phone_number: payload.telephoneNumber })
30
- .pipe(map((paymentAttempt) => createPingSwishPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingSwishPaymentFailureAction({ payload: error })))))));
31
- createMemberInvoiceSwishPayment$ = createEffect(() => this.actions$
32
- .pipe(ofType(createSwishMemberInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, { type: 'swish', phone_number: payload.telephoneNumber })
33
- .pipe(map((paymentAttempt) => createSwishInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createSwishInvoicePaymentFailureAction({ payload: error })))))));
34
- createMemberPaymentOrderMondidoPayment$ = createEffect(() => this.actions$
35
- .pipe(ofType(createMondidoMemberPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberPaymentOrderPaymentAttempt(payload.memberId, payload.paymentOrderId, 'mondido')
36
- .pipe(map((paymentAttempt) => createMondidoPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createMondidoPaymentOrderPaymentFailureAction({ payload: error })))))));
37
- createMemberPingCreditCardPaymentOrderPayment$ = createEffect(() => this.actions$
38
- .pipe(ofType(createPingCreditCardMemberPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberPaymentOrderPaymentAttempt(payload.memberId, payload.paymentOrderId, 'ping_card')
39
- .pipe(map((paymentAttempt) => createPingCreditCardPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingCreditCardPaymentOrderPaymentFailureAction({ payload: error })))))));
40
- createMemberPingSwishPaymentOrderPayment$ = createEffect(() => this.actions$
41
- .pipe(ofType(createPingSwishMemberPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberPaymentOrderPaymentAttempt(payload.memberId, payload.paymentOrderId, 'ping_swish', payload.telephoneNumber)
42
- .pipe(map((paymentAttempt) => createPingSwishPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingSwishPaymentOrderPaymentFailureAction({ payload: error })))))));
43
- createMemberPaymentOrderSwishPayment$ = createEffect(() => this.actions$
44
- .pipe(ofType(createSwishMemberPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberPaymentOrderPaymentAttempt(payload.memberId, payload.paymentOrderId, 'swish', payload.telephoneNumber)
45
- .pipe(map((paymentAttempt) => createSwishPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createSwishPaymentOrderPaymentFailureAction({ payload: error })))))));
46
- createMemberZimplerPayment$ = createEffect(() => this.actions$
47
- .pipe(ofType(createZimplerMemberPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, { type: 'zimpler' })
48
- .pipe(map((paymentAttempt) => createZimplerPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createZimplerPaymentFailureAction({ payload: error })))))));
49
- createPublicInvoiceFritidskortPayment$ = createEffect(() => this.actions$
50
- .pipe(ofType(createFritidskortetPublicInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, {
51
- type: 'fritidskortet',
52
- adultPersonalId: payload.adultPersonalId,
53
- childPersonalId: payload.childPersonalId,
54
- public: true
55
- }).pipe(map((paymentAttempt) => createFritidskortetInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createFritidskortetInvoicePaymentFailureAction({ payload: error })))))));
56
- createPublicInvoiceMondidoPayment$ = createEffect(() => this.actions$
57
- .pipe(ofType(createMondidoPublicInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, { type: 'mondido' })
58
- .pipe(map((paymentAttempt) => createMondidoInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createMondidoInvoicePaymentFailureAction({ payload: error })))))));
59
- createPublicInvoicePingCreditCardPayment$ = createEffect(() => this.actions$
60
- .pipe(ofType(createPingCreditCardPublicInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, { type: 'ping_card', public: true })
61
- .pipe(map((paymentAttempt) => createPingCreditCardPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingCreditCardPaymentFailureAction({ payload: error })))))));
62
- createPublicInvoicePingSwishPayment$ = createEffect(() => this.actions$
63
- .pipe(ofType(createPingSwishPublicInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, {
64
- type: 'ping_swish',
65
- phone_number: payload.telephoneNumber,
66
- public: true
67
- })
68
- .pipe(map((paymentAttempt) => createPingSwishPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingSwishPaymentFailureAction({ payload: error })))))));
69
- createPublicInvoiceSwishPayment$ = createEffect(() => this.actions$
70
- .pipe(ofType(createSwishPublicInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, {
71
- type: 'swish',
72
- phone_number: payload.telephoneNumber
73
- })
74
- .pipe(map((paymentAttempt) => createSwishInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createSwishInvoicePaymentFailureAction({ payload: error })))))));
75
- createPublicPaymentOrderMondidoPayment$ = createEffect(() => this.actions$
76
- .pipe(ofType(createMondidoPublicPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicPaymentOrderPaymentAttempt(payload.paymentOrderId, payload.token, 'mondido')
77
- .pipe(map((paymentAttempt) => createMondidoPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createMondidoPaymentOrderPaymentFailureAction({ payload: error })))))));
78
- createPublicPaymentOrderPingCreditCardPayment$ = createEffect(() => this.actions$
79
- .pipe(ofType(createPingCreditCardPublicPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicPaymentOrderPaymentAttempt(payload.paymentOrderId, payload.token, 'ping_card')
80
- .pipe(map((paymentAttempt) => createPingCreditCardPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingCreditCardPaymentFailureAction({ payload: error })))))));
81
- createPublicPaymentOrderPingSwishPayment$ = createEffect(() => this.actions$
82
- .pipe(ofType(createPingSwishPublicPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicPaymentOrderPaymentAttempt(payload.paymentOrderId, payload.token, 'ping_swish', payload.telephoneNumber)
83
- .pipe(map((paymentAttempt) => createPingSwishPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingSwishPaymentFailureAction({ payload: error })))))));
84
- createPublicPaymentOrderSwishPayment$ = createEffect(() => this.actions$
85
- .pipe(ofType(createSwishPublicPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicPaymentOrderPaymentAttempt(payload.paymentOrderId, payload.token, 'swish', payload.telephoneNumber)
86
- .pipe(map((paymentAttempt) => createSwishPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createSwishPaymentOrderPaymentFailureAction({ payload: error })))))));
87
- createPublicZimplerPayment$ = createEffect(() => this.actions$
88
- .pipe(ofType(createZimplerPublicPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, { type: 'zimpler' })
89
- .pipe(map((paymentAttempt) => createZimplerPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createZimplerPaymentFailureAction({ payload: error })))))));
90
- listMemberInvoices$ = createEffect(() => this.actions$
91
- .pipe(ofType(listMemberInvoicesAction), mergeMap(({ payload }) => forkJoin(payload.map((id) => this.invoiceService.getMemberInvoices(id)
92
- .pipe(map((invoices) => ({ id, invoices: invoices.toArray() })), catchError((error) => of({ id, error }))))).pipe(mergeMap((results) => {
93
- const invoiceMap = new Map();
94
- const errors = results.filter(result => result.error);
95
- if (errors.length) {
96
- return of(listMemberInvoicesFailureAction({ payload: errors[0].error }));
97
- }
98
- results.forEach((result) => {
99
- if (result.invoices) {
100
- invoiceMap.set(result.id, result.invoices);
10
+ constructor() {
11
+ this.actions$ = inject(Actions);
12
+ this.invoiceService = inject(InvoiceService);
13
+ this.paymentOrderService = inject(PaymentOrderService);
14
+ this.paymentAttemptService = inject(PaymentAttemptService);
15
+ this.createMemberInvoiceFritidskortetPayment$ = createEffect(() => this.actions$
16
+ .pipe(ofType(createFritidskortetMemberInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, {
17
+ type: 'fritidskortet',
18
+ childPersonalId: payload.childPersonalId,
19
+ adultPersonalId: payload.adultPersonalId,
20
+ public: false
21
+ })
22
+ .pipe(map((paymentAttempt) => createFritidskortetInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createFritidskortetInvoicePaymentFailureAction({ payload: error })))))));
23
+ this.createMemberInvoiceMondidoPayment$ = createEffect(() => this.actions$
24
+ .pipe(ofType(createMondidoMemberInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, { type: 'mondido' })
25
+ .pipe(map((paymentAttempt) => createMondidoInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createMondidoInvoicePaymentFailureAction({ payload: error })))))));
26
+ this.createMemberPingCreditCardPayment$ = createEffect(() => this.actions$
27
+ .pipe(ofType(createPingCreditCardMemberInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, { type: 'ping_card' })
28
+ .pipe(map((paymentAttempt) => createPingCreditCardPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingCreditCardPaymentFailureAction({ payload: error })))))));
29
+ this.createMemberPingSwishPayment$ = createEffect(() => this.actions$
30
+ .pipe(ofType(createPingSwishMemberInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, { type: 'ping_swish', phone_number: payload.telephoneNumber })
31
+ .pipe(map((paymentAttempt) => createPingSwishPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingSwishPaymentFailureAction({ payload: error })))))));
32
+ this.createMemberInvoiceSwishPayment$ = createEffect(() => this.actions$
33
+ .pipe(ofType(createSwishMemberInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, { type: 'swish', phone_number: payload.telephoneNumber })
34
+ .pipe(map((paymentAttempt) => createSwishInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createSwishInvoicePaymentFailureAction({ payload: error })))))));
35
+ this.createMemberPaymentOrderMondidoPayment$ = createEffect(() => this.actions$
36
+ .pipe(ofType(createMondidoMemberPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberPaymentOrderPaymentAttempt(payload.memberId, payload.paymentOrderId, 'mondido')
37
+ .pipe(map((paymentAttempt) => createMondidoPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createMondidoPaymentOrderPaymentFailureAction({ payload: error })))))));
38
+ this.createMemberPingCreditCardPaymentOrderPayment$ = createEffect(() => this.actions$
39
+ .pipe(ofType(createPingCreditCardMemberPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberPaymentOrderPaymentAttempt(payload.memberId, payload.paymentOrderId, 'ping_card')
40
+ .pipe(map((paymentAttempt) => createPingCreditCardPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingCreditCardPaymentOrderPaymentFailureAction({ payload: error })))))));
41
+ this.createMemberPingSwishPaymentOrderPayment$ = createEffect(() => this.actions$
42
+ .pipe(ofType(createPingSwishMemberPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberPaymentOrderPaymentAttempt(payload.memberId, payload.paymentOrderId, 'ping_swish', payload.telephoneNumber)
43
+ .pipe(map((paymentAttempt) => createPingSwishPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingSwishPaymentOrderPaymentFailureAction({ payload: error })))))));
44
+ this.createMemberPaymentOrderSwishPayment$ = createEffect(() => this.actions$
45
+ .pipe(ofType(createSwishMemberPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberPaymentOrderPaymentAttempt(payload.memberId, payload.paymentOrderId, 'swish', payload.telephoneNumber)
46
+ .pipe(map((paymentAttempt) => createSwishPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createSwishPaymentOrderPaymentFailureAction({ payload: error })))))));
47
+ this.createMemberZimplerPayment$ = createEffect(() => this.actions$
48
+ .pipe(ofType(createZimplerMemberPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, { type: 'zimpler' })
49
+ .pipe(map((paymentAttempt) => createZimplerPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createZimplerPaymentFailureAction({ payload: error })))))));
50
+ this.createPublicInvoiceFritidskortPayment$ = createEffect(() => this.actions$
51
+ .pipe(ofType(createFritidskortetPublicInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, {
52
+ type: 'fritidskortet',
53
+ adultPersonalId: payload.adultPersonalId,
54
+ childPersonalId: payload.childPersonalId,
55
+ public: true
56
+ }).pipe(map((paymentAttempt) => createFritidskortetInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createFritidskortetInvoicePaymentFailureAction({ payload: error })))))));
57
+ this.createPublicInvoiceMondidoPayment$ = createEffect(() => this.actions$
58
+ .pipe(ofType(createMondidoPublicInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, { type: 'mondido' })
59
+ .pipe(map((paymentAttempt) => createMondidoInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createMondidoInvoicePaymentFailureAction({ payload: error })))))));
60
+ this.createPublicInvoicePingCreditCardPayment$ = createEffect(() => this.actions$
61
+ .pipe(ofType(createPingCreditCardPublicInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, { type: 'ping_card', public: true })
62
+ .pipe(map((paymentAttempt) => createPingCreditCardPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingCreditCardPaymentFailureAction({ payload: error })))))));
63
+ this.createPublicInvoicePingSwishPayment$ = createEffect(() => this.actions$
64
+ .pipe(ofType(createPingSwishPublicInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, {
65
+ type: 'ping_swish',
66
+ phone_number: payload.telephoneNumber,
67
+ public: true
68
+ })
69
+ .pipe(map((paymentAttempt) => createPingSwishPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingSwishPaymentFailureAction({ payload: error })))))));
70
+ this.createPublicInvoiceSwishPayment$ = createEffect(() => this.actions$
71
+ .pipe(ofType(createSwishPublicInvoicePaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, {
72
+ type: 'swish',
73
+ phone_number: payload.telephoneNumber
74
+ })
75
+ .pipe(map((paymentAttempt) => createSwishInvoicePaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createSwishInvoicePaymentFailureAction({ payload: error })))))));
76
+ this.createPublicPaymentOrderMondidoPayment$ = createEffect(() => this.actions$
77
+ .pipe(ofType(createMondidoPublicPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicPaymentOrderPaymentAttempt(payload.paymentOrderId, payload.token, 'mondido')
78
+ .pipe(map((paymentAttempt) => createMondidoPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createMondidoPaymentOrderPaymentFailureAction({ payload: error })))))));
79
+ this.createPublicPaymentOrderPingCreditCardPayment$ = createEffect(() => this.actions$
80
+ .pipe(ofType(createPingCreditCardPublicPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicPaymentOrderPaymentAttempt(payload.paymentOrderId, payload.token, 'ping_card')
81
+ .pipe(map((paymentAttempt) => createPingCreditCardPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingCreditCardPaymentFailureAction({ payload: error })))))));
82
+ this.createPublicPaymentOrderPingSwishPayment$ = createEffect(() => this.actions$
83
+ .pipe(ofType(createPingSwishPublicPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicPaymentOrderPaymentAttempt(payload.paymentOrderId, payload.token, 'ping_swish', payload.telephoneNumber)
84
+ .pipe(map((paymentAttempt) => createPingSwishPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createPingSwishPaymentFailureAction({ payload: error })))))));
85
+ this.createPublicPaymentOrderSwishPayment$ = createEffect(() => this.actions$
86
+ .pipe(ofType(createSwishPublicPaymentOrderPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicPaymentOrderPaymentAttempt(payload.paymentOrderId, payload.token, 'swish', payload.telephoneNumber)
87
+ .pipe(map((paymentAttempt) => createSwishPaymentOrderPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createSwishPaymentOrderPaymentFailureAction({ payload: error })))))));
88
+ this.createPublicZimplerPayment$ = createEffect(() => this.actions$
89
+ .pipe(ofType(createZimplerPublicPaymentAction), exhaustMap(({ payload }) => this.paymentAttemptService.createPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, { type: 'zimpler' })
90
+ .pipe(map((paymentAttempt) => createZimplerPaymentSuccessAction({ payload: paymentAttempt })), catchError((error) => of(createZimplerPaymentFailureAction({ payload: error })))))));
91
+ this.listMemberInvoices$ = createEffect(() => this.actions$
92
+ .pipe(ofType(listMemberInvoicesAction), mergeMap(({ payload }) => forkJoin(payload.map((id) => this.invoiceService.getMemberInvoices(id)
93
+ .pipe(map((invoices) => ({ id, invoices: invoices.toArray() })), catchError((error) => of({ id, error }))))).pipe(mergeMap((results) => {
94
+ const invoiceMap = new Map();
95
+ const errors = results.filter(result => result.error);
96
+ if (errors.length) {
97
+ return of(listMemberInvoicesFailureAction({ payload: errors[0].error }));
101
98
  }
102
- });
103
- return of(listMemberInvoicesSuccessAction({ payload: invoiceMap }));
104
- })))));
105
- retrieveMemberInvoice$ = createEffect(() => this.actions$
106
- .pipe(ofType(retrieveMemberInvoiceAction), exhaustMap(({ payload }) => this.invoiceService.getMemberInvoice(payload.memberId, payload.invoiceId)
107
- .pipe(map((invoice) => retrieveMemberInvoiceSuccessAction({ payload: invoice })), catchError((error) => of(retrieveMemberInvoiceFailureAction({ payload: error })))))));
108
- listMemberPaymentOrders$ = createEffect(() => this.actions$
109
- .pipe(ofType(listMemberPaymentOrdersAction), mergeMap(({ payload }) => forkJoin(payload.map((id) => this.paymentOrderService.getMemberPaymentOrders(id)
110
- .pipe(map((paymentOrders) => ({ id, paymentOrders: paymentOrders.toArray() })), catchError((error) => of({ id, error }))))).pipe(mergeMap((results) => {
111
- const paymentOrderMap = new Map();
112
- const errors = results.filter(result => result.error);
113
- if (errors.length) {
114
- return of(listMemberPaymentOrdersFailureAction({ payload: errors[0].error }));
115
- }
116
- results.forEach((result) => {
117
- if (result.paymentOrders) {
118
- paymentOrderMap.set(result.id, result.paymentOrders);
99
+ results.forEach((result) => {
100
+ if (result.invoices) {
101
+ invoiceMap.set(result.id, result.invoices);
102
+ }
103
+ });
104
+ return of(listMemberInvoicesSuccessAction({ payload: invoiceMap }));
105
+ })))));
106
+ this.retrieveMemberInvoice$ = createEffect(() => this.actions$
107
+ .pipe(ofType(retrieveMemberInvoiceAction), exhaustMap(({ payload }) => this.invoiceService.getMemberInvoice(payload.memberId, payload.invoiceId)
108
+ .pipe(map((invoice) => retrieveMemberInvoiceSuccessAction({ payload: invoice })), catchError((error) => of(retrieveMemberInvoiceFailureAction({ payload: error })))))));
109
+ this.listMemberPaymentOrders$ = createEffect(() => this.actions$
110
+ .pipe(ofType(listMemberPaymentOrdersAction), mergeMap(({ payload }) => forkJoin(payload.map((id) => this.paymentOrderService.getMemberPaymentOrders(id)
111
+ .pipe(map((paymentOrders) => ({ id, paymentOrders: paymentOrders.toArray() })), catchError((error) => of({ id, error }))))).pipe(mergeMap((results) => {
112
+ const paymentOrderMap = new Map();
113
+ const errors = results.filter(result => result.error);
114
+ if (errors.length) {
115
+ return of(listMemberPaymentOrdersFailureAction({ payload: errors[0].error }));
119
116
  }
120
- });
121
- return of(listMemberPaymentOrdersSuccessAction({ payload: paymentOrderMap }));
122
- })))));
123
- retrievePaymentOrder$ = createEffect(() => this.actions$
124
- .pipe(ofType(retrievePaymentOrderAction), exhaustMap(({ payload }) => this.paymentOrderService.getMemberPaymentOrder(payload.memberId, payload.paymentOrderId)
125
- .pipe(map((paymentOrder) => retrievePaymentOrderSuccessAction({ payload: paymentOrder })), catchError((error) => of(retrievePaymentOrderFailureAction({ payload: error })))))));
126
- deletePaymentOrder$ = createEffect(() => this.actions$
127
- .pipe(ofType(deletePaymentOrderAction), exhaustMap(({ payload }) => this.paymentOrderService.deleteMemberPaymentOrder(payload.memberId, payload.paymentOrderId)
128
- .pipe(map((value) => {
129
- if (value) {
130
- return deletePaymentOrderSuccessAction();
131
- }
132
- else {
133
- return deletePaymentOrderFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
134
- }
135
- }), catchError((error) => of(deletePaymentOrderFailureAction({ payload: error })))))));
136
- deletePublicPaymentOrder$ = createEffect(() => this.actions$
137
- .pipe(ofType(deletePublicPaymentOrderAction), exhaustMap(({ payload }) => this.paymentOrderService.deletePublicPaymentOrder(payload.token, payload.paymentOrderId)
138
- .pipe(map((value) => {
139
- if (value) {
140
- return deletePublicPaymentOrderSuccessAction();
141
- }
142
- else {
143
- return deletePublicPaymentOrderFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
144
- }
145
- }), catchError((error) => of(deletePublicPaymentOrderFailureAction({ payload: error })))))));
146
- retrieveMemberInvoicePaymentAttempt$ = createEffect(() => this.actions$
147
- .pipe(ofType(retrieveMemberInvoicePaymentAttemptAction), exhaustMap(({ payload }) => this.paymentAttemptService.getMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, payload.paymentAttemptId)
148
- .pipe(map((paymentAttempt) => retrieveMemberInvoicePaymentAttemptSuccessAction({ payload: paymentAttempt })), catchError((error) => of(retrieveMemberInvoicePaymentAttemptFailureAction({ payload: error })))))));
149
- retrieveMemberInvoiceSwishQRCode$ = createEffect(() => this.actions$
150
- .pipe(ofType(retrieveMemberInvoiceSwishQRCodeAction), exhaustMap(({ payload }) => this.paymentAttemptService.getMemberInvoiceSwishQRCode(payload.memberId, payload.invoiceId, payload.paymentAttemptId)
151
- .pipe(map((swishQRCode) => retrieveInvoiceSwishQRCodeSuccessAction({ payload: swishQRCode })), catchError((error) => of(retrieveInvoiceSwishQRCodeFailureAction({ payload: error })))))));
152
- retrieveMemberPaymentOrderSwishQRCode$ = createEffect(() => this.actions$
153
- .pipe(ofType(retrieveMemberPaymentOrderSwishQRCodeAction), exhaustMap(({ payload }) => this.paymentAttemptService.getMemberPaymentOrderSwishQRCode(payload.memberId, payload.paymentOrderId, payload.paymentAttemptId)
154
- .pipe(map((swishQRCode) => retrievePaymentOrderSwishQRCodeSuccessAction({ payload: swishQRCode })), catchError((error) => of(retrievePaymentOrderSwishQRCodeFailureAction({ payload: error })))))));
155
- retrievePublicInvoice$ = createEffect(() => this.actions$
156
- .pipe(ofType(retrievePublicInvoiceAction), exhaustMap(({ payload }) => this.invoiceService.getPublicInvoice(payload.invoiceId, payload.token)
157
- .pipe(map((invoice) => retrievePublicInvoiceSuccessAction({ payload: invoice })), catchError((error) => of(retrievePublicInvoiceFailureAction({ payload: error })))))));
158
- retrievePublicInvoiceLogo$ = createEffect(() => this.actions$
159
- .pipe(ofType(retrievePublicInvoiceLogoAction), exhaustMap(({ payload }) => this.invoiceService.getPublicInvoiceLogo(payload.invoiceId, payload.token)
160
- .pipe(map((image) => retrievePublicInvoiceLogoSuccessAction({ payload: image })), catchError((error) => of(retrievePublicInvoiceLogoFailureAction({ payload: error })))))));
161
- retrievePublicInvoicePaymentAttempt$ = createEffect(() => this.actions$
162
- .pipe(ofType(retrievePublicInvoicePaymentAttemptAction), exhaustMap(({ payload }) => this.paymentAttemptService.getPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, payload.paymentAttemptId)
163
- .pipe(map((paymentAttempt) => retrievePublicInvoicePaymentAttemptSuccessAction({ payload: paymentAttempt })), catchError((error) => of(retrievePublicInvoicePaymentAttemptFailureAction({ payload: error })))))));
164
- retrievePublicInvoiceSwishQRCode$ = createEffect(() => this.actions$
165
- .pipe(ofType(retrievePublicInvoiceSwishQRCodeAction), exhaustMap(({ payload }) => this.paymentAttemptService.getPublicInvoiceSwishQRCode(payload.invoiceId, payload.token, payload.paymentAttemptId)
166
- .pipe(map((swishQRCode) => retrieveInvoiceSwishQRCodeSuccessAction({ payload: swishQRCode })), catchError((error) => of(retrieveInvoiceSwishQRCodeFailureAction({ payload: error })))))));
167
- retrieveMemberPaymentOrderPaymentAttempt$ = createEffect(() => this.actions$
168
- .pipe(ofType(retrieveMemberPaymentOrderPaymentAttemptAction), exhaustMap(({ payload }) => this.paymentAttemptService.getMemberPaymentOrderPaymentAttempt(payload.memberId, payload.paymentOrderId, payload.paymentAttemptId)
169
- .pipe(map((paymentAttempt) => retrieveMemberPaymentOrderPaymentAttemptSuccessAction({ payload: paymentAttempt })), catchError((error) => of(retrieveMemberPaymentOrderPaymentAttemptFailureAction({ payload: error })))))));
170
- retrievePublicPaymentOrder$ = createEffect(() => this.actions$
171
- .pipe(ofType(retrievePublicPaymentOrderAction), exhaustMap(({ payload }) => this.paymentOrderService.getPublicPaymentOrder(payload.paymentOrderId, payload.token)
172
- .pipe(map((paymentOrder) => retrievePublicPaymentOrderSuccessAction({ payload: paymentOrder })), catchError((error) => of(retrievePublicPaymentOrderFailureAction({ payload: error })))))));
173
- retrievePublicPaymentOrderLogo$ = createEffect(() => this.actions$
174
- .pipe(ofType(retrievePublicPaymentOrderLogoAction), exhaustMap(({ payload }) => this.paymentOrderService.getPublicPaymentOrderLogo(payload.paymentOrderId, payload.token)
175
- .pipe(map((image) => retrievePublicPaymentOrderLogoSuccessAction({ payload: image })), catchError((error) => of(retrievePublicPaymentOrderLogoFailureAction({ payload: error })))))));
176
- retrievePublicPaymentOrderPaymentAttempt$ = createEffect(() => this.actions$
177
- .pipe(ofType(retrievePublicPaymentOrderPaymentAttemptAction), exhaustMap(({ payload }) => this.paymentAttemptService.getPublicPaymentOrderPaymentAttempt(payload.paymentOrderId, payload.token, payload.paymentAttemptId)
178
- .pipe(map((paymentAttempt) => retrievePublicPaymentOrderPaymentAttemptSuccessAction({ payload: paymentAttempt })), catchError((error) => of(retrievePublicPaymentOrderPaymentAttemptFailureAction({ payload: error })))))));
179
- retrievePublicPaymentOrderSwishQRCode$ = createEffect(() => this.actions$
180
- .pipe(ofType(retrievePublicPaymentOrderSwishQRCodeAction), exhaustMap(({ payload }) => this.paymentAttemptService.getPublicPaymentOrderSwishQRCode(payload.paymentOrderId, payload.token, payload.paymentAttemptId)
181
- .pipe(map((swishQRCode) => retrievePaymentOrderSwishQRCodeSuccessAction({ payload: swishQRCode })), catchError((error) => of(retrievePaymentOrderSwishQRCodeFailureAction({ payload: error })))))));
182
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: InvoiceEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
183
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: InvoiceEffects });
117
+ results.forEach((result) => {
118
+ if (result.paymentOrders) {
119
+ paymentOrderMap.set(result.id, result.paymentOrders);
120
+ }
121
+ });
122
+ return of(listMemberPaymentOrdersSuccessAction({ payload: paymentOrderMap }));
123
+ })))));
124
+ this.retrievePaymentOrder$ = createEffect(() => this.actions$
125
+ .pipe(ofType(retrievePaymentOrderAction), exhaustMap(({ payload }) => this.paymentOrderService.getMemberPaymentOrder(payload.memberId, payload.paymentOrderId)
126
+ .pipe(map((paymentOrder) => retrievePaymentOrderSuccessAction({ payload: paymentOrder })), catchError((error) => of(retrievePaymentOrderFailureAction({ payload: error })))))));
127
+ this.deletePaymentOrder$ = createEffect(() => this.actions$
128
+ .pipe(ofType(deletePaymentOrderAction), exhaustMap(({ payload }) => this.paymentOrderService.deleteMemberPaymentOrder(payload.memberId, payload.paymentOrderId)
129
+ .pipe(map((value) => {
130
+ if (value) {
131
+ return deletePaymentOrderSuccessAction();
132
+ }
133
+ else {
134
+ return deletePaymentOrderFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
135
+ }
136
+ }), catchError((error) => of(deletePaymentOrderFailureAction({ payload: error })))))));
137
+ this.deletePublicPaymentOrder$ = createEffect(() => this.actions$
138
+ .pipe(ofType(deletePublicPaymentOrderAction), exhaustMap(({ payload }) => this.paymentOrderService.deletePublicPaymentOrder(payload.token, payload.paymentOrderId)
139
+ .pipe(map((value) => {
140
+ if (value) {
141
+ return deletePublicPaymentOrderSuccessAction();
142
+ }
143
+ else {
144
+ return deletePublicPaymentOrderFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
145
+ }
146
+ }), catchError((error) => of(deletePublicPaymentOrderFailureAction({ payload: error })))))));
147
+ this.retrieveMemberInvoicePaymentAttempt$ = createEffect(() => this.actions$
148
+ .pipe(ofType(retrieveMemberInvoicePaymentAttemptAction), exhaustMap(({ payload }) => this.paymentAttemptService.getMemberInvoicePaymentAttempt(payload.memberId, payload.invoiceId, payload.paymentAttemptId)
149
+ .pipe(map((paymentAttempt) => retrieveMemberInvoicePaymentAttemptSuccessAction({ payload: paymentAttempt })), catchError((error) => of(retrieveMemberInvoicePaymentAttemptFailureAction({ payload: error })))))));
150
+ this.retrieveMemberInvoiceSwishQRCode$ = createEffect(() => this.actions$
151
+ .pipe(ofType(retrieveMemberInvoiceSwishQRCodeAction), exhaustMap(({ payload }) => this.paymentAttemptService.getMemberInvoiceSwishQRCode(payload.memberId, payload.invoiceId, payload.paymentAttemptId)
152
+ .pipe(map((swishQRCode) => retrieveInvoiceSwishQRCodeSuccessAction({ payload: swishQRCode })), catchError((error) => of(retrieveInvoiceSwishQRCodeFailureAction({ payload: error })))))));
153
+ this.retrieveMemberPaymentOrderSwishQRCode$ = createEffect(() => this.actions$
154
+ .pipe(ofType(retrieveMemberPaymentOrderSwishQRCodeAction), exhaustMap(({ payload }) => this.paymentAttemptService.getMemberPaymentOrderSwishQRCode(payload.memberId, payload.paymentOrderId, payload.paymentAttemptId)
155
+ .pipe(map((swishQRCode) => retrievePaymentOrderSwishQRCodeSuccessAction({ payload: swishQRCode })), catchError((error) => of(retrievePaymentOrderSwishQRCodeFailureAction({ payload: error })))))));
156
+ this.retrievePublicInvoice$ = createEffect(() => this.actions$
157
+ .pipe(ofType(retrievePublicInvoiceAction), exhaustMap(({ payload }) => this.invoiceService.getPublicInvoice(payload.invoiceId, payload.token)
158
+ .pipe(map((invoice) => retrievePublicInvoiceSuccessAction({ payload: invoice })), catchError((error) => of(retrievePublicInvoiceFailureAction({ payload: error })))))));
159
+ this.retrievePublicInvoiceLogo$ = createEffect(() => this.actions$
160
+ .pipe(ofType(retrievePublicInvoiceLogoAction), exhaustMap(({ payload }) => this.invoiceService.getPublicInvoiceLogo(payload.invoiceId, payload.token)
161
+ .pipe(map((image) => retrievePublicInvoiceLogoSuccessAction({ payload: image })), catchError((error) => of(retrievePublicInvoiceLogoFailureAction({ payload: error })))))));
162
+ this.retrievePublicInvoicePaymentAttempt$ = createEffect(() => this.actions$
163
+ .pipe(ofType(retrievePublicInvoicePaymentAttemptAction), exhaustMap(({ payload }) => this.paymentAttemptService.getPublicInvoicePaymentAttempt(payload.invoiceId, payload.token, payload.paymentAttemptId)
164
+ .pipe(map((paymentAttempt) => retrievePublicInvoicePaymentAttemptSuccessAction({ payload: paymentAttempt })), catchError((error) => of(retrievePublicInvoicePaymentAttemptFailureAction({ payload: error })))))));
165
+ this.retrievePublicInvoiceSwishQRCode$ = createEffect(() => this.actions$
166
+ .pipe(ofType(retrievePublicInvoiceSwishQRCodeAction), exhaustMap(({ payload }) => this.paymentAttemptService.getPublicInvoiceSwishQRCode(payload.invoiceId, payload.token, payload.paymentAttemptId)
167
+ .pipe(map((swishQRCode) => retrieveInvoiceSwishQRCodeSuccessAction({ payload: swishQRCode })), catchError((error) => of(retrieveInvoiceSwishQRCodeFailureAction({ payload: error })))))));
168
+ this.retrieveMemberPaymentOrderPaymentAttempt$ = createEffect(() => this.actions$
169
+ .pipe(ofType(retrieveMemberPaymentOrderPaymentAttemptAction), exhaustMap(({ payload }) => this.paymentAttemptService.getMemberPaymentOrderPaymentAttempt(payload.memberId, payload.paymentOrderId, payload.paymentAttemptId)
170
+ .pipe(map((paymentAttempt) => retrieveMemberPaymentOrderPaymentAttemptSuccessAction({ payload: paymentAttempt })), catchError((error) => of(retrieveMemberPaymentOrderPaymentAttemptFailureAction({ payload: error })))))));
171
+ this.retrievePublicPaymentOrder$ = createEffect(() => this.actions$
172
+ .pipe(ofType(retrievePublicPaymentOrderAction), exhaustMap(({ payload }) => this.paymentOrderService.getPublicPaymentOrder(payload.paymentOrderId, payload.token)
173
+ .pipe(map((paymentOrder) => retrievePublicPaymentOrderSuccessAction({ payload: paymentOrder })), catchError((error) => of(retrievePublicPaymentOrderFailureAction({ payload: error })))))));
174
+ this.retrievePublicPaymentOrderLogo$ = createEffect(() => this.actions$
175
+ .pipe(ofType(retrievePublicPaymentOrderLogoAction), exhaustMap(({ payload }) => this.paymentOrderService.getPublicPaymentOrderLogo(payload.paymentOrderId, payload.token)
176
+ .pipe(map((image) => retrievePublicPaymentOrderLogoSuccessAction({ payload: image })), catchError((error) => of(retrievePublicPaymentOrderLogoFailureAction({ payload: error })))))));
177
+ this.retrievePublicPaymentOrderPaymentAttempt$ = createEffect(() => this.actions$
178
+ .pipe(ofType(retrievePublicPaymentOrderPaymentAttemptAction), exhaustMap(({ payload }) => this.paymentAttemptService.getPublicPaymentOrderPaymentAttempt(payload.paymentOrderId, payload.token, payload.paymentAttemptId)
179
+ .pipe(map((paymentAttempt) => retrievePublicPaymentOrderPaymentAttemptSuccessAction({ payload: paymentAttempt })), catchError((error) => of(retrievePublicPaymentOrderPaymentAttemptFailureAction({ payload: error })))))));
180
+ this.retrievePublicPaymentOrderSwishQRCode$ = createEffect(() => this.actions$
181
+ .pipe(ofType(retrievePublicPaymentOrderSwishQRCodeAction), exhaustMap(({ payload }) => this.paymentAttemptService.getPublicPaymentOrderSwishQRCode(payload.paymentOrderId, payload.token, payload.paymentAttemptId)
182
+ .pipe(map((swishQRCode) => retrievePaymentOrderSwishQRCodeSuccessAction({ payload: swishQRCode })), catchError((error) => of(retrievePaymentOrderSwishQRCodeFailureAction({ payload: error })))))));
183
+ }
184
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InvoiceEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
185
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InvoiceEffects }); }
184
186
  }
185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: InvoiceEffects, decorators: [{
187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InvoiceEffects, decorators: [{
186
188
  type: Injectable
187
189
  }] });
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zdG9yZS9lZmZlY3RzL2ludm9pY2UuZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFDTCw4Q0FBOEMsRUFDOUMsOENBQThDLEVBQzlDLDZDQUE2QyxFQUM3Qyw2Q0FBNkMsRUFDN0Msd0NBQXdDLEVBQ3hDLHdDQUF3QyxFQUN4Qyx1Q0FBdUMsRUFDdkMsNENBQTRDLEVBQzVDLDZDQUE2QyxFQUM3Qyw2Q0FBNkMsRUFDN0MsdUNBQXVDLEVBQ3ZDLDRDQUE0QyxFQUM1Qyw4Q0FBOEMsRUFDOUMsbURBQW1ELEVBQ25ELHdDQUF3QyxFQUN4QyxvREFBb0QsRUFDcEQsb0RBQW9ELEVBQ3BELHdDQUF3QyxFQUN4Qyw4Q0FBOEMsRUFDOUMsbURBQW1ELEVBQ25ELHlDQUF5QyxFQUN6Qyw4Q0FBOEMsRUFDOUMsbUNBQW1DLEVBQ25DLCtDQUErQyxFQUMvQywrQ0FBK0MsRUFDL0MsbUNBQW1DLEVBQ25DLHlDQUF5QyxFQUN6Qyw4Q0FBOEMsRUFDOUMsc0NBQXNDLEVBQ3RDLHNDQUFzQyxFQUN0QyxxQ0FBcUMsRUFDckMsMENBQTBDLEVBQzFDLDJDQUEyQyxFQUMzQywyQ0FBMkMsRUFDM0MscUNBQXFDLEVBQ3JDLDBDQUEwQyxFQUMxQyxnQ0FBZ0MsRUFDaEMsaUNBQWlDLEVBQ2pDLGlDQUFpQyxFQUNqQyxnQ0FBZ0MsRUFDaEMsd0JBQXdCLEVBQ3hCLCtCQUErQixFQUMvQiwrQkFBK0IsRUFDL0IsOEJBQThCLEVBQzlCLHFDQUFxQyxFQUNyQyxxQ0FBcUMsRUFDckMsd0JBQXdCLEVBQ3hCLCtCQUErQixFQUMvQiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLG9DQUFvQyxFQUNwQyxvQ0FBb0MsRUFDcEMsdUNBQXVDLEVBQ3ZDLHVDQUF1QyxFQUN2QywyQkFBMkIsRUFDM0Isa0NBQWtDLEVBQ2xDLHlDQUF5QyxFQUN6QyxnREFBZ0QsRUFDaEQsZ0RBQWdELEVBQ2hELGtDQUFrQyxFQUNsQyxzQ0FBc0MsRUFDdEMsOENBQThDLEVBQzlDLHFEQUFxRCxFQUNyRCxxREFBcUQsRUFDckQsMkNBQTJDLEVBQzNDLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsaUNBQWlDLEVBQ2pDLDRDQUE0QyxFQUM1Qyw0Q0FBNEMsRUFDNUMsMkJBQTJCLEVBQzNCLGtDQUFrQyxFQUNsQywrQkFBK0IsRUFDL0Isc0NBQXNDLEVBQ3RDLHNDQUFzQyxFQUN0Qyx5Q0FBeUMsRUFDekMsZ0RBQWdELEVBQ2hELGdEQUFnRCxFQUNoRCxrQ0FBa0MsRUFDbEMsc0NBQXNDLEVBQ3RDLGdDQUFnQyxFQUNoQyx1Q0FBdUMsRUFDdkMsb0NBQW9DLEVBQ3BDLDJDQUEyQyxFQUMzQywyQ0FBMkMsRUFDM0MsOENBQThDLEVBQzlDLHFEQUFxRCxFQUNyRCxxREFBcUQsRUFDckQsdUNBQXVDLEVBQ3ZDLDJDQUEyQyxFQUM1QyxNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFVakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBSXpELE1BQU0sT0FBTyxjQUFjO0lBQ2pCLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRCxxQkFBcUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUU5RCx3Q0FBd0MsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDeEUsSUFBSSxDQUNILE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxFQUNyRCxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFbkIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlDQUFpQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRTtRQUNwRyxJQUFJLEVBQUUsZUFBZTtRQUNyQixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7UUFDeEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlO1FBQ3hDLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQztTQUNELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDLEVBQ2xILFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDL0csQ0FDRixDQUNGLENBQ0YsQ0FBQztJQUVGLGtDQUFrQyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUNsRSxJQUFJLENBQ0gsTUFBTSxDQUFDLHVDQUF1QyxDQUFDLEVBQy9DLFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVqQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUNBQWlDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBQyxDQUFDO1NBQ3ZILElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDLEVBQzVHLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDekcsQ0FDSixDQUNGLENBQ0YsQ0FBQztJQUVGLGtDQUFrQyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUNsRSxJQUFJLENBQ0gsTUFBTSxDQUFDLDhDQUE4QyxDQUFDLEVBQ3RELFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVuQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUNBQWlDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQyxDQUFDO1NBQ3pILElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDLEVBQzVHLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDekcsQ0FDRixDQUNGLENBQ0YsQ0FBQztJQUVGLDZCQUE2QixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUM3RCxJQUFJLENBQ0gsTUFBTSxDQUFDLHlDQUF5QyxDQUFDLEVBQ2pELFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVuQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUNBQWlDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLGVBQWUsRUFBQyxDQUFDO1NBQ2pLLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDLEVBQ3ZHLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDcEcsQ0FDRixDQUNGLENBQ0YsQ0FBQztJQUVGLGdDQUFnQyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUNoRSxJQUFJLENBQ0gsTUFBTSxDQUFDLHFDQUFxQyxDQUFDLEVBQzdDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVqQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUNBQWlDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLGVBQWUsRUFBQyxDQUFDO1NBQzVKLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDLEVBQzFHLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdkcsQ0FDSixDQUNGLENBQ0YsQ0FBQztJQUVGLHVDQUF1QyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUN2RSxJQUFJLENBQ0gsTUFBTSxDQUFDLDRDQUE0QyxDQUFDLEVBQ3BELFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVqQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsc0NBQXNDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQztTQUN6SCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFLENBQUMsNkNBQTZDLENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUNqSCxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsNkNBQTZDLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQzlHLENBQ0osQ0FDRixDQUNGLENBQUM7SUFFRiw4Q0FBOEMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDOUUsSUFBSSxDQUNILE1BQU0sQ0FBQyxtREFBbUQsQ0FBQyxFQUMzRCxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFakIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUM7U0FDN0gsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGNBQThCLEVBQUUsRUFBRSxDQUFDLG9EQUFvRCxDQUFDLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUMsRUFDeEgsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLG9EQUFvRCxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUNySCxDQUNGLENBQ0YsQ0FDRixDQUFBO0lBRUQseUNBQXlDLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQ3pFLElBQUksQ0FDSCxNQUFNLENBQUMsOENBQThDLENBQUMsRUFDdEQsVUFBVSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBRWpCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxzQ0FBc0MsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUM7U0FDdkosSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGNBQThCLEVBQUUsRUFBRSxDQUFDLCtDQUErQyxDQUFDLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUMsRUFDbkgsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLCtDQUErQyxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUNoSCxDQUNGLENBQ0YsQ0FDRixDQUFBO0lBRUQscUNBQXFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQ3JFLElBQUksQ0FDSCxNQUFNLENBQUMsMENBQTBDLENBQUMsRUFDbEQsVUFBVSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBRWpCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxzQ0FBc0MsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUM7U0FDaEosSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGNBQThCLEVBQUUsRUFBRSxDQUFDLDJDQUEyQyxDQUFDLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUMsRUFDL0csVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLDJDQUEyQyxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUM1RyxDQUNKLENBQ0YsQ0FDRixDQUFDO0lBRUYsMkJBQTJCLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQzNELElBQUksQ0FDSCxNQUFNLENBQUMsZ0NBQWdDLENBQUMsRUFDeEMsVUFBVSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBRWpCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQ0FBaUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUM7U0FDdkgsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGNBQThCLEVBQUUsRUFBRSxDQUFDLGlDQUFpQyxDQUFDLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUMsRUFDckcsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUNsRyxDQUNKLENBQ0YsQ0FDRixDQUFDO0lBRUYsc0NBQXNDLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQ3RFLElBQUksQ0FDSCxNQUFNLENBQUMsNkNBQTZDLENBQUMsRUFDckQsVUFBVSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBRW5CLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQ0FBaUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUU7UUFDbkcsSUFBSSxFQUFFLGVBQWU7UUFDckIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlO1FBQ3hDLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTtRQUN4QyxNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUMsQ0FBQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFLENBQUMsOENBQThDLENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUNsSCxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsOENBQThDLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQy9HLENBQ0YsQ0FDRixDQUNGLENBQUM7SUFFRixrQ0FBa0MsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDbEUsSUFBSSxDQUNILE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxFQUMvQyxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFakIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlDQUFpQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQztTQUNwSCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFLENBQUMsd0NBQXdDLENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUM1RyxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsd0NBQXdDLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pHLENBQ0osQ0FDRixDQUNGLENBQUM7SUFFRix5Q0FBeUMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDekUsSUFBSSxDQUNILE1BQU0sQ0FBQyw4Q0FBOEMsQ0FBQyxFQUN0RCxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFakIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlDQUFpQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDO1NBQ3RJLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDLEVBQzVHLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDekcsQ0FDRixDQUNGLENBQ0YsQ0FBQztJQUVGLG9DQUFvQyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUNwRSxJQUFJLENBQ0gsTUFBTSxDQUFDLHlDQUF5QyxDQUFDLEVBQ2pELFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVqQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUNBQWlDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFO1FBQ25HLElBQUksRUFBRSxZQUFZO1FBQ2xCLFlBQVksRUFBRSxPQUFPLENBQUMsZUFBZTtRQUNyQyxNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUM7U0FDRCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFLENBQUMsbUNBQW1DLENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUN2RyxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsbUNBQW1DLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3BHLENBQ0YsQ0FDRixDQUNGLENBQUM7SUFFRixnQ0FBZ0MsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDaEUsSUFBSSxDQUNILE1BQU0sQ0FBQyxxQ0FBcUMsQ0FBQyxFQUM3QyxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFakIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlDQUFpQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtRQUNuRyxJQUFJLEVBQUUsT0FBTztRQUNiLFlBQVksRUFBRSxPQUFPLENBQUMsZUFBZTtLQUN0QyxDQUFDO1NBQ0MsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGNBQThCLEVBQUUsRUFBRSxDQUFDLHNDQUFzQyxDQUFDLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUMsRUFDMUcsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLHNDQUFzQyxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUN2RyxDQUNKLENBQ0YsQ0FDRixDQUFDO0lBRUYsdUNBQXVDLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQ3ZFLElBQUksQ0FDSCxNQUFNLENBQUMsNENBQTRDLENBQUMsRUFDcEQsVUFBVSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBRWpCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxzQ0FBc0MsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDO1NBQ3RILElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDLEVBQ2pILFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDOUcsQ0FDSixDQUNGLENBQ0YsQ0FBQztJQUVGLDhDQUE4QyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUM5RSxJQUFJLENBQ0gsTUFBTSxDQUFDLG1EQUFtRCxDQUFDLEVBQzNELFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVqQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsc0NBQXNDLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQztTQUMxSCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFLENBQUMsd0NBQXdDLENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUM1RyxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsd0NBQXdDLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pHLENBQ0YsQ0FDRixDQUNGLENBQUM7SUFFRix5Q0FBeUMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDekUsSUFBSSxDQUNILE1BQU0sQ0FBQyw4Q0FBOEMsQ0FBQyxFQUN0RCxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFakIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUNwSixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFLENBQUMsK0NBQStDLENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUNuSCxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsbUNBQW1DLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3BHLENBQ0YsQ0FDRixDQUNGLENBQUM7SUFFRixxQ0FBcUMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDckUsSUFBSSxDQUNILE1BQU0sQ0FBQywwQ0FBMEMsQ0FBQyxFQUNsRCxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFakIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUM3SSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFLENBQUMsMkNBQTJDLENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUMvRyxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsMkNBQTJDLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQzVHLENBQ0osQ0FDRixDQUNGLENBQUM7SUFFRiwyQkFBMkIsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDM0QsSUFBSSxDQUNILE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUN4QyxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFakIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlDQUFpQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQztTQUNwSCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFLENBQUMsaUNBQWlDLENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUNyRyxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsaUNBQWlDLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2xHLENBQ0osQ0FDRixDQUNGLENBQUM7SUFFRixtQkFBbUIsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDbkQsSUFBSSxDQUNILE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxFQUNoQyxRQUFRLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBNkIsRUFBRSxFQUFFLENBQ2pELFFBQVEsQ0FDTixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7U0FDdEMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQXlDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFDeEYsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FDMUQsQ0FDSixDQUNGLENBQUMsSUFBSSxDQUNKLFFBQVEsQ0FBQyxDQUFDLE9BSVIsRUFBRSxFQUFFO1FBQ0osTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXNDLENBQUM7UUFDakUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQyxFQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBMEIsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBRUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3pCLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNwQixVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxDQUFDLCtCQUErQixDQUFDLEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FDSCxDQUNGLENBQ0YsQ0FDRixDQUFDO0lBRUYsc0JBQXNCLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQ3RELElBQUksQ0FDSCxNQUFNLENBQUMsMkJBQTJCLENBQUMsRUFDbkMsVUFBVSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBRWpCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQzVFLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxPQUFzQixFQUFFLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDLEVBQ3ZGLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkcsQ0FDSixDQUNGLENBQ0YsQ0FBQztJQUVGLHdCQUF3QixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUN4RCxJQUFJLENBQ0gsTUFBTSxDQUFDLDZCQUE2QixDQUFDLEVBQ3JDLFFBQVEsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUE2QixFQUFFLEVBQUUsQ0FDakQsUUFBUSxDQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO1NBQ2hELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxhQUF1QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQ2hHLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQzFELENBQ0osQ0FDRixDQUFDLElBQUksQ0FDSixRQUFRLENBQUMsQ0FBQyxPQUE4RixFQUFFLEVBQUU7UUFDMUcsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBMEIsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUNuRyxDQUFDO1FBRUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3pCLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN6QixlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxDQUFDLG9DQUFvQyxDQUFDLEVBQUMsT0FBTyxFQUFFLGVBQWUsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDLENBQUMsQ0FDSCxDQUNGLENBQ0YsQ0FDRixDQUFDO0lBRUYscUJBQXFCLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQ3JELElBQUksQ0FDSCxNQUFNLENBQUMsMEJBQTBCLENBQUMsRUFDbEMsVUFBVSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBRWpCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUM7U0FDM0YsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFlBQTBCLEVBQUUsRUFBRSxDQUFDLGlDQUFpQyxDQUFDLEVBQUMsT0FBTyxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUMsRUFDL0YsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUNsRyxDQUNKLENBQ0YsQ0FDRixDQUFDO0lBRUYsbUJBQW1CLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQ25ELElBQUksQ0FDSCxNQUFNLENBQUMsd0JBQXdCLENBQUMsRUFDaEMsVUFBVSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBRWpCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUM7U0FDOUYsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3JCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixPQUFPLCtCQUErQixFQUFFLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLCtCQUErQixDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksaUJBQWlCLENBQUMsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7UUFDMUYsQ0FBQztJQUNILENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDaEcsQ0FDSixDQUNGLENBQ0YsQ0FBQztJQUVGLHlCQUF5QixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUN6RCxJQUFJLENBQ0gsTUFBTSxDQUFDLDhCQUE4QixDQUFDLEVBQ3RDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUFxRCxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQ25LLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUNyQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxxQ0FBcUMsRUFBRSxDQUFDO1FBQ2pELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxxQ0FBcUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLGlCQUFpQixDQUFDLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7SUFDSCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMscUNBQXFDLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RHLENBQ0YsQ0FDRixDQUNGLENBQUM7SUFFRixvQ0FBb0MsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDcEUsSUFBSSxDQUNILE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxFQUNqRCxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFakIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7U0FDM0gsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGNBQThCLEVBQUUsRUFBRSxDQUFDLGdEQUFnRCxDQUFDLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUMsRUFDcEgsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLGdEQUFnRCxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUNqSCxDQUNKLENBQ0YsQ0FDRixDQUFDO0lBRUYsaUNBQWlDLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQ2pFLElBQUksQ0FDSCxNQUFNLENBQUMsc0NBQXNDLENBQUMsRUFDOUMsVUFBVSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBRWpCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1NBQ3hILElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxXQUF3QixFQUFFLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDLEVBQ2xHLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDeEcsQ0FDSixDQUNGLENBQ0YsQ0FBQztJQUVGLHNDQUFzQyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUN0RSxJQUFJLENBQ0gsTUFBTSxDQUFDLDJDQUEyQyxDQUFDLEVBQ25ELFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVqQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztTQUNsSSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsV0FBd0IsRUFBRSxFQUFFLENBQUMsNENBQTRDLENBQUMsRUFBQyxPQUFPLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQyxFQUN2RyxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsNENBQTRDLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQzdHLENBQ0osQ0FDRixDQUNGLENBQUM7SUFFRixzQkFBc0IsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDdEQsSUFBSSxDQUNILE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxFQUNuQyxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFakIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUM7U0FDekUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLE9BQXNCLEVBQUUsRUFBRSxDQUFDLGtDQUFrQyxDQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFDdkYsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLGtDQUFrQyxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUNuRyxDQUNKLENBQ0YsQ0FDRixDQUFDO0lBRUYsMEJBQTBCLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQzFELElBQUksQ0FDSCxNQUFNLENBQUMsK0JBQStCLENBQUMsRUFDdkMsVUFBVSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBRWpCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO1NBQzdFLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLEVBQ25GLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdkcsQ0FDSixDQUNGLENBQ0YsQ0FBQztJQUVGLG9DQUFvQyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUNwRSxJQUFJLENBQ0gsTUFBTSxDQUFDLHlDQUF5QyxDQUFDLEVBQ2pELFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVqQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsOEJBQThCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztTQUN4SCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFLENBQUMsZ0RBQWdELENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUNwSCxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsZ0RBQWdELENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2pILENBQ0osQ0FDRixDQUNGLENBQUM7SUFFRixpQ0FBaUMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDakUsSUFBSSxDQUNILE1BQU0sQ0FBQyxzQ0FBc0MsQ0FBQyxFQUM5QyxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFakIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7U0FDckgsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFdBQXdCLEVBQUUsRUFBRSxDQUFDLHVDQUF1QyxDQUFDLEVBQUMsT0FBTyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUMsRUFDbEcsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLHVDQUF1QyxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUN4RyxDQUNKLENBQ0YsQ0FDRixDQUFDO0lBR0YseUNBQXlDLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQ3pFLElBQUksQ0FDSCxNQUFNLENBQUMsOENBQThDLENBQUMsRUFDdEQsVUFBVSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBRWpCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQ0FBbUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1NBQ3JJLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FBQyxxREFBcUQsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDLEVBQ3pILFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxxREFBcUQsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEgsQ0FDSixDQUNGLENBQ0YsQ0FBQztJQUVGLDJCQUEyQixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUMzRCxJQUFJLENBQ0gsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLEVBQ3hDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVqQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ3hGLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxZQUEwQixFQUFFLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDLEVBQ3JHLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDeEcsQ0FDSixDQUNGLENBQ0YsQ0FBQztJQUVGLCtCQUErQixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUMvRCxJQUFJLENBQ0gsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLEVBQzVDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVqQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO1NBQzVGLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FBQywyQ0FBMkMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLEVBQ3hGLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQywyQ0FBMkMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDNUcsQ0FDSixDQUNGLENBQ0YsQ0FBQztJQUVGLHlDQUF5QyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUN6RSxJQUFJLENBQ0gsTUFBTSxDQUFDLDhDQUE4QyxDQUFDLEVBQ3RELFVBQVUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUVqQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsbUNBQW1DLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztTQUNsSSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFLENBQUMscURBQXFELENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUN6SCxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMscURBQXFELENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RILENBQ0osQ0FDRixDQUNGLENBQUM7SUFFRixzQ0FBc0MsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDdEUsSUFBSSxDQUNILE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxFQUNuRCxVQUFVLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFFakIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7U0FDL0gsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFdBQXdCLEVBQUUsRUFBRSxDQUFDLDRDQUE0QyxDQUFDLEVBQUMsT0FBTyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUMsRUFDdkcsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLDRDQUE0QyxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUM3RyxDQUNKLENBQ0YsQ0FDRixDQUFDO3VHQTdsQlMsY0FBYzsyR0FBZCxjQUFjOzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgSW52b2ljZVNlcnZpY2UsIFBheW1lbnRBdHRlbXB0U2VydmljZSwgUGF5bWVudE9yZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUZyaXRpZHNrb3J0ZXRJbnZvaWNlUGF5bWVudEZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZUZyaXRpZHNrb3J0ZXRJbnZvaWNlUGF5bWVudFN1Y2Nlc3NBY3Rpb24sXG4gIGNyZWF0ZUZyaXRpZHNrb3J0ZXRNZW1iZXJJbnZvaWNlUGF5bWVudEFjdGlvbixcbiAgY3JlYXRlRnJpdGlkc2tvcnRldFB1YmxpY0ludm9pY2VQYXltZW50QWN0aW9uLFxuICBjcmVhdGVNb25kaWRvSW52b2ljZVBheW1lbnRGYWlsdXJlQWN0aW9uLFxuICBjcmVhdGVNb25kaWRvSW52b2ljZVBheW1lbnRTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVNb25kaWRvTWVtYmVySW52b2ljZVBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZU1vbmRpZG9NZW1iZXJQYXltZW50T3JkZXJQYXltZW50QWN0aW9uLFxuICBjcmVhdGVNb25kaWRvUGF5bWVudE9yZGVyUGF5bWVudEZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZU1vbmRpZG9QYXltZW50T3JkZXJQYXltZW50U3VjY2Vzc0FjdGlvbixcbiAgY3JlYXRlTW9uZGlkb1B1YmxpY0ludm9pY2VQYXltZW50QWN0aW9uLFxuICBjcmVhdGVNb25kaWRvUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEFjdGlvbixcbiAgY3JlYXRlUGluZ0NyZWRpdENhcmRNZW1iZXJJbnZvaWNlUGF5bWVudEFjdGlvbixcbiAgY3JlYXRlUGluZ0NyZWRpdENhcmRNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QWN0aW9uLFxuICBjcmVhdGVQaW5nQ3JlZGl0Q2FyZFBheW1lbnRGYWlsdXJlQWN0aW9uLFxuICBjcmVhdGVQaW5nQ3JlZGl0Q2FyZFBheW1lbnRPcmRlclBheW1lbnRGYWlsdXJlQWN0aW9uLFxuICBjcmVhdGVQaW5nQ3JlZGl0Q2FyZFBheW1lbnRPcmRlclBheW1lbnRTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVQaW5nQ3JlZGl0Q2FyZFBheW1lbnRTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVQaW5nQ3JlZGl0Q2FyZFB1YmxpY0ludm9pY2VQYXltZW50QWN0aW9uLFxuICBjcmVhdGVQaW5nQ3JlZGl0Q2FyZFB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZVBpbmdTd2lzaE1lbWJlckludm9pY2VQYXltZW50QWN0aW9uLFxuICBjcmVhdGVQaW5nU3dpc2hNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QWN0aW9uLFxuICBjcmVhdGVQaW5nU3dpc2hQYXltZW50RmFpbHVyZUFjdGlvbixcbiAgY3JlYXRlUGluZ1N3aXNoUGF5bWVudE9yZGVyUGF5bWVudEZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVBpbmdTd2lzaFBheW1lbnRPcmRlclBheW1lbnRTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVQaW5nU3dpc2hQYXltZW50U3VjY2Vzc0FjdGlvbixcbiAgY3JlYXRlUGluZ1N3aXNoUHVibGljSW52b2ljZVBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZVBpbmdTd2lzaFB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZVN3aXNoSW52b2ljZVBheW1lbnRGYWlsdXJlQWN0aW9uLFxuICBjcmVhdGVTd2lzaEludm9pY2VQYXltZW50U3VjY2Vzc0FjdGlvbixcbiAgY3JlYXRlU3dpc2hNZW1iZXJJbnZvaWNlUGF5bWVudEFjdGlvbixcbiAgY3JlYXRlU3dpc2hNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QWN0aW9uLFxuICBjcmVhdGVTd2lzaFBheW1lbnRPcmRlclBheW1lbnRGYWlsdXJlQWN0aW9uLFxuICBjcmVhdGVTd2lzaFBheW1lbnRPcmRlclBheW1lbnRTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVTd2lzaFB1YmxpY0ludm9pY2VQYXltZW50QWN0aW9uLFxuICBjcmVhdGVTd2lzaFB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZVppbXBsZXJNZW1iZXJQYXltZW50QWN0aW9uLFxuICBjcmVhdGVaaW1wbGVyUGF5bWVudEZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVppbXBsZXJQYXltZW50U3VjY2Vzc0FjdGlvbixcbiAgY3JlYXRlWmltcGxlclB1YmxpY1BheW1lbnRBY3Rpb24sXG4gIGRlbGV0ZVBheW1lbnRPcmRlckFjdGlvbixcbiAgZGVsZXRlUGF5bWVudE9yZGVyRmFpbHVyZUFjdGlvbixcbiAgZGVsZXRlUGF5bWVudE9yZGVyU3VjY2Vzc0FjdGlvbixcbiAgZGVsZXRlUHVibGljUGF5bWVudE9yZGVyQWN0aW9uLFxuICBkZWxldGVQdWJsaWNQYXltZW50T3JkZXJGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVQdWJsaWNQYXltZW50T3JkZXJTdWNjZXNzQWN0aW9uLFxuICBsaXN0TWVtYmVySW52b2ljZXNBY3Rpb24sXG4gIGxpc3RNZW1iZXJJbnZvaWNlc0ZhaWx1cmVBY3Rpb24sXG4gIGxpc3RNZW1iZXJJbnZvaWNlc1N1Y2Nlc3NBY3Rpb24sXG4gIGxpc3RNZW1iZXJQYXltZW50T3JkZXJzQWN0aW9uLFxuICBsaXN0TWVtYmVyUGF5bWVudE9yZGVyc0ZhaWx1cmVBY3Rpb24sXG4gIGxpc3RNZW1iZXJQYXltZW50T3JkZXJzU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVJbnZvaWNlU3dpc2hRUkNvZGVGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZUludm9pY2VTd2lzaFFSQ29kZVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVySW52b2ljZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJJbnZvaWNlRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJJbnZvaWNlUGF5bWVudEF0dGVtcHRBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVySW52b2ljZVBheW1lbnRBdHRlbXB0RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJJbnZvaWNlUGF5bWVudEF0dGVtcHRTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckludm9pY2VTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckludm9pY2VTd2lzaFFSQ29kZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdEFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdEZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHRTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlclBheW1lbnRPcmRlclN3aXNoUVJDb2RlQWN0aW9uLFxuICByZXRyaWV2ZVBheW1lbnRPcmRlckFjdGlvbixcbiAgcmV0cmlldmVQYXltZW50T3JkZXJGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVBheW1lbnRPcmRlclN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlUGF5bWVudE9yZGVyU3dpc2hRUkNvZGVGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVBheW1lbnRPcmRlclN3aXNoUVJDb2RlU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNJbnZvaWNlQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2VGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2VMb2dvQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2VMb2dvRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNJbnZvaWNlTG9nb1N1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0QWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2VQYXltZW50QXR0ZW1wdEZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0U3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNJbnZvaWNlU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNJbnZvaWNlU3dpc2hRUkNvZGVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlckZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyTG9nb0FjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJMb2dvRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJMb2dvU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdEFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdEZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHRTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlclN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyU3dpc2hRUkNvZGVBY3Rpb25cbn0gZnJvbSAnLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBmb3JrSm9pbiwgbWVyZ2VNYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDbHViSW1hZ2UsXG4gIENvbGxlY3Rpb24sXG4gIE1lbWJlckludm9pY2UsXG4gIFBheW1lbnRBdHRlbXB0LFxuICBQYXltZW50T3JkZXIsXG4gIFNlYXJjaE1lbWJlckludm9pY2UsXG4gIFN3aXNoUXJDb2RlXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSW52b2ljZUVmZmVjdHMge1xuICBwcml2YXRlIGFjdGlvbnMkID0gaW5qZWN0KEFjdGlvbnMpO1xuICBwcml2YXRlIGludm9pY2VTZXJ2aWNlID0gaW5qZWN0KEludm9pY2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBwYXltZW50T3JkZXJTZXJ2aWNlID0gaW5qZWN0KFBheW1lbnRPcmRlclNlcnZpY2UpO1xuICBwcml2YXRlIHBheW1lbnRBdHRlbXB0U2VydmljZSA9IGluamVjdChQYXltZW50QXR0ZW1wdFNlcnZpY2UpO1xuXG4gIGNyZWF0ZU1lbWJlckludm9pY2VGcml0aWRza29ydGV0UGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZUZyaXRpZHNrb3J0ZXRNZW1iZXJJbnZvaWNlUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgcGF5bG9hZDogeyBpbnZvaWNlSWQ6IHN0cmluZywgbWVtYmVySWQ6IHN0cmluZywgY2hpbGRQZXJzb25hbElkOiBzdHJpbmcsIGFkdWx0UGVyc29uYWxJZDogc3RyaW5nIH1cbiAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZU1lbWJlckludm9pY2VQYXltZW50QXR0ZW1wdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmludm9pY2VJZCwge1xuICAgICAgICAgIHR5cGU6ICdmcml0aWRza29ydGV0JyxcbiAgICAgICAgICBjaGlsZFBlcnNvbmFsSWQ6IHBheWxvYWQuY2hpbGRQZXJzb25hbElkLFxuICAgICAgICAgIGFkdWx0UGVyc29uYWxJZDogcGF5bG9hZC5hZHVsdFBlcnNvbmFsSWQsXG4gICAgICAgICAgcHVibGljOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlRnJpdGlkc2tvcnRldEludm9pY2VQYXltZW50U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudEF0dGVtcHR9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVGcml0aWRza29ydGV0SW52b2ljZVBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVNZW1iZXJJbnZvaWNlTW9uZGlkb1BheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVNb25kaWRvTWVtYmVySW52b2ljZVBheW1lbnRBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBpbnZvaWNlSWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZU1lbWJlckludm9pY2VQYXltZW50QXR0ZW1wdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmludm9pY2VJZCwge3R5cGU6ICdtb25kaWRvJ30pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlTW9uZGlkb0ludm9pY2VQYXltZW50U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudEF0dGVtcHR9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZU1vbmRpZG9JbnZvaWNlUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlTWVtYmVyUGluZ0NyZWRpdENhcmRQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlUGluZ0NyZWRpdENhcmRNZW1iZXJJbnZvaWNlUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgcGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBpbnZvaWNlSWQ6IHN0cmluZyB9XG4gICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVNZW1iZXJJbnZvaWNlUGF5bWVudEF0dGVtcHQocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5pbnZvaWNlSWQsIHt0eXBlOiAncGluZ19jYXJkJ30pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVQaW5nQ3JlZGl0Q2FyZFBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVBpbmdDcmVkaXRDYXJkUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNyZWF0ZU1lbWJlclBpbmdTd2lzaFBheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVQaW5nU3dpc2hNZW1iZXJJbnZvaWNlUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgcGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBpbnZvaWNlSWQ6IHN0cmluZywgdGVsZXBob25lTnVtYmVyOiBzdHJpbmcgfVxuICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlTWVtYmVySW52b2ljZVBheW1lbnRBdHRlbXB0KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuaW52b2ljZUlkLCB7dHlwZTogJ3Bpbmdfc3dpc2gnLCBwaG9uZV9udW1iZXI6IHBheWxvYWQudGVsZXBob25lTnVtYmVyfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVBpbmdTd2lzaFBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVBpbmdTd2lzaFBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVNZW1iZXJJbnZvaWNlU3dpc2hQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlU3dpc2hNZW1iZXJJbnZvaWNlUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nLCB0ZWxlcGhvbmVOdW1iZXI6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZU1lbWJlckludm9pY2VQYXltZW50QXR0ZW1wdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmludm9pY2VJZCwge3R5cGU6ICdzd2lzaCcsIHBob25lX251bWJlcjogcGF5bG9hZC50ZWxlcGhvbmVOdW1iZXJ9KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVN3aXNoSW52b2ljZVBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlU3dpc2hJbnZvaWNlUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlTWVtYmVyUGF5bWVudE9yZGVyTW9uZGlkb1BheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVNb25kaWRvTWVtYmVyUGF5bWVudE9yZGVyUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIHBheW1lbnRPcmRlcklkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLnBheW1lbnRPcmRlcklkLCAnbW9uZGlkbycpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlTW9uZGlkb1BheW1lbnRPcmRlclBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlTW9uZGlkb1BheW1lbnRPcmRlclBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNyZWF0ZU1lbWJlclBpbmdDcmVkaXRDYXJkUGF5bWVudE9yZGVyUGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZVBpbmdDcmVkaXRDYXJkTWVtYmVyUGF5bWVudE9yZGVyUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIHBheW1lbnRPcmRlcklkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLnBheW1lbnRPcmRlcklkLCAncGluZ19jYXJkJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVBpbmdDcmVkaXRDYXJkUGF5bWVudE9yZGVyUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlUGluZ0NyZWRpdENhcmRQYXltZW50T3JkZXJQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcblxuICBjcmVhdGVNZW1iZXJQaW5nU3dpc2hQYXltZW50T3JkZXJQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlUGluZ1N3aXNoTWVtYmVyUGF5bWVudE9yZGVyUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIHBheW1lbnRPcmRlcklkOiBzdHJpbmcsIHRlbGVwaG9uZU51bWJlcjogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlTWVtYmVyUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHQocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5wYXltZW50T3JkZXJJZCwgJ3Bpbmdfc3dpc2gnLCBwYXlsb2FkLnRlbGVwaG9uZU51bWJlcilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVBpbmdTd2lzaFBheW1lbnRPcmRlclBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVBpbmdTd2lzaFBheW1lbnRPcmRlclBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxuXG4gIGNyZWF0ZU1lbWJlclBheW1lbnRPcmRlclN3aXNoUGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZVN3aXNoTWVtYmVyUGF5bWVudE9yZGVyUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIHBheW1lbnRPcmRlcklkOiBzdHJpbmcsIHRlbGVwaG9uZU51bWJlcjogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlTWVtYmVyUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHQocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5wYXltZW50T3JkZXJJZCwgJ3N3aXNoJywgcGF5bG9hZC50ZWxlcGhvbmVOdW1iZXIpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlU3dpc2hQYXltZW50T3JkZXJQYXltZW50U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudEF0dGVtcHR9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVN3aXNoUGF5bWVudE9yZGVyUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlTWVtYmVyWmltcGxlclBheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVaaW1wbGVyTWVtYmVyUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlTWVtYmVySW52b2ljZVBheW1lbnRBdHRlbXB0KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuaW52b2ljZUlkLCB7dHlwZTogJ3ppbXBsZXInfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVaaW1wbGVyUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVaaW1wbGVyUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlUHVibGljSW52b2ljZUZyaXRpZHNrb3J0UGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZUZyaXRpZHNrb3J0ZXRQdWJsaWNJbnZvaWNlUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgcGF5bG9hZDogeyB0b2tlbjogc3RyaW5nLCBpbnZvaWNlSWQ6IHN0cmluZywgY2hpbGRQZXJzb25hbElkOiBzdHJpbmcsIGFkdWx0UGVyc29uYWxJZDogc3RyaW5nfVxuICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlUHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0KHBheWxvYWQuaW52b2ljZUlkLCBwYXlsb2FkLnRva2VuLCB7XG4gICAgICAgIHR5cGU6ICdmcml0aWRza29ydGV0JyxcbiAgICAgICAgYWR1bHRQZXJzb25hbElkOiBwYXlsb2FkLmFkdWx0UGVyc29uYWxJZCxcbiAgICAgICAgY2hpbGRQZXJzb25hbElkOiBwYXlsb2FkLmNoaWxkUGVyc29uYWxJZCxcbiAgICAgICAgcHVibGljOiB0cnVlXG4gICAgICB9KS5waXBlKFxuICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVGcml0aWRza29ydGV0SW52b2ljZVBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZUZyaXRpZHNrb3J0ZXRJbnZvaWNlUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNyZWF0ZVB1YmxpY0ludm9pY2VNb25kaWRvUGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZU1vbmRpZG9QdWJsaWNJbnZvaWNlUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlUHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0KHBheWxvYWQuaW52b2ljZUlkLCBwYXlsb2FkLnRva2VuLCB7dHlwZTogJ21vbmRpZG8nfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVNb25kaWRvSW52b2ljZVBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlTW9uZGlkb0ludm9pY2VQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVQdWJsaWNJbnZvaWNlUGluZ0NyZWRpdENhcmRQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlUGluZ0NyZWRpdENhcmRQdWJsaWNJbnZvaWNlUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlUHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0KHBheWxvYWQuaW52b2ljZUlkLCBwYXlsb2FkLnRva2VuLCB7dHlwZTogJ3BpbmdfY2FyZCcsIHB1YmxpYzogdHJ1ZX0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVQaW5nQ3JlZGl0Q2FyZFBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVBpbmdDcmVkaXRDYXJkUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNyZWF0ZVB1YmxpY0ludm9pY2VQaW5nU3dpc2hQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlUGluZ1N3aXNoUHVibGljSW52b2ljZVBheW1lbnRBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0b2tlbjogc3RyaW5nLCBpbnZvaWNlSWQ6IHN0cmluZywgdGVsZXBob25lTnVtYmVyOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVQdWJsaWNJbnZvaWNlUGF5bWVudEF0dGVtcHQocGF5bG9hZC5pbnZvaWNlSWQsIHBheWxvYWQudG9rZW4sIHtcbiAgICAgICAgICB0eXBlOiAncGluZ19zd2lzaCcsXG4gICAgICAgICAgcGhvbmVfbnVtYmVyOiBwYXlsb2FkLnRlbGVwaG9uZU51bWJlcixcbiAgICAgICAgICBwdWJsaWM6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVBpbmdTd2lzaFBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVBpbmdTd2lzaFBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVQdWJsaWNJbnZvaWNlU3dpc2hQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlU3dpc2hQdWJsaWNJbnZvaWNlUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nLCB0ZWxlcGhvbmVOdW1iZXI6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZVB1YmxpY0ludm9pY2VQYXltZW50QXR0ZW1wdChwYXlsb2FkLmludm9pY2VJZCwgcGF5bG9hZC50b2tlbiwge1xuICAgICAgICAgIHR5cGU6ICdzd2lzaCcsXG4gICAgICAgICAgcGhvbmVfbnVtYmVyOiBwYXlsb2FkLnRlbGVwaG9uZU51bWJlclxuICAgICAgICB9KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVN3aXNoSW52b2ljZVBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlU3dpc2hJbnZvaWNlUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlUHVibGljUGF5bWVudE9yZGVyTW9uZGlkb1BheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVNb25kaWRvUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIHBheW1lbnRPcmRlcklkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVQdWJsaWNQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdChwYXlsb2FkLnBheW1lbnRPcmRlcklkLCBwYXlsb2FkLnRva2VuLCAnbW9uZGlkbycpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlTW9uZGlkb1BheW1lbnRPcmRlclBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlTW9uZGlkb1BheW1lbnRPcmRlclBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNyZWF0ZVB1YmxpY1BheW1lbnRPcmRlclBpbmdDcmVkaXRDYXJkUGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZVBpbmdDcmVkaXRDYXJkUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIHBheW1lbnRPcmRlcklkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVQdWJsaWNQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdChwYXlsb2FkLnBheW1lbnRPcmRlcklkLCBwYXlsb2FkLnRva2VuLCAncGluZ19jYXJkJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVBpbmdDcmVkaXRDYXJkUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlUGluZ0NyZWRpdENhcmRQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlUHVibGljUGF5bWVudE9yZGVyUGluZ1N3aXNoUGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZVBpbmdTd2lzaFB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0b2tlbjogc3RyaW5nLCBwYXltZW50T3JkZXJJZDogc3RyaW5nLCB0ZWxlcGhvbmVOdW1iZXI6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZVB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0KHBheWxvYWQucGF5bWVudE9yZGVySWQsIHBheWxvYWQudG9rZW4sICdwaW5nX3N3aXNoJywgcGF5bG9hZC50ZWxlcGhvbmVOdW1iZXIpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVQaW5nU3dpc2hQYXltZW50T3JkZXJQYXltZW50U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudEF0dGVtcHR9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVQaW5nU3dpc2hQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlUHVibGljUGF5bWVudE9yZGVyU3dpc2hQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlU3dpc2hQdWJsaWNQYXltZW50T3JkZXJQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZywgdGVsZXBob25lTnVtYmVyOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVQdWJsaWNQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdChwYXlsb2FkLnBheW1lbnRPcmRlcklkLCBwYXlsb2FkLnRva2VuLCAnc3dpc2gnLCBwYXlsb2FkLnRlbGVwaG9uZU51bWJlcilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVTd2lzaFBheW1lbnRPcmRlclBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlU3dpc2hQYXltZW50T3JkZXJQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVQdWJsaWNaaW1wbGVyUGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZVppbXBsZXJQdWJsaWNQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVQdWJsaWNJbnZvaWNlUGF5bWVudEF0dGVtcHQocGF5bG9hZC5pbnZvaWNlSWQsIHBheWxvYWQudG9rZW4sIHt0eXBlOiAnemltcGxlcid9KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVppbXBsZXJQYXltZW50U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudEF0dGVtcHR9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVppbXBsZXJQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsaXN0TWVtYmVySW52b2ljZXMkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShsaXN0TWVtYmVySW52b2ljZXNBY3Rpb24pLFxuICAgICAgbWVyZ2VNYXAoKHtwYXlsb2FkfTogeyBwYXlsb2FkOiBBcnJheTxzdHJpbmc+IH0pID0+XG4gICAgICAgIGZvcmtKb2luKFxuICAgICAgICAgIHBheWxvYWQubWFwKChpZDogc3RyaW5nKSA9PlxuICAgICAgICAgICAgdGhpcy5pbnZvaWNlU2VydmljZS5nZXRNZW1iZXJJbnZvaWNlcyhpZClcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChpbnZvaWNlczogQ29sbGVjdGlvbjxTZWFyY2hNZW1iZXJJbnZvaWNlPikgPT4gKHtpZCwgaW52b2ljZXM6IGludm9pY2VzLnRvQXJyYXkoKX0pKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHtpZCwgZXJyb3J9KSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKChyZXN1bHRzOiBBcnJheTx7XG4gICAgICAgICAgICBpZDogc3RyaW5nLFxuICAgICAgICAgICAgaW52b2ljZXM/OiBBcnJheTxTZWFyY2hNZW1iZXJJbnZvaWNlPixcbiAgICAgICAgICAgIGVycm9yPzogSHR0cEVycm9yUmVzcG9uc2VcbiAgICAgICAgICB9PikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW52b2ljZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTxTZWFyY2hNZW1iZXJJbnZvaWNlPj4oKTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiByZXN1bHQuZXJyb3IpO1xuICAgICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKGxpc3RNZW1iZXJJbnZvaWNlc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yc1swXS5lcnJvciBhcyBIdHRwRXJyb3JSZXNwb25zZX0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pbnZvaWNlcykge1xuICAgICAgICAgICAgICAgIGludm9pY2VNYXAuc2V0KHJlc3VsdC5pZCwgcmVzdWx0Lmludm9pY2VzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBvZihsaXN0TWVtYmVySW52b2ljZXNTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBpbnZvaWNlTWFwfSkpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVNZW1iZXJJbnZvaWNlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVNZW1iZXJJbnZvaWNlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmludm9pY2VTZXJ2aWNlLmdldE1lbWJlckludm9pY2UocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5pbnZvaWNlSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGludm9pY2U6IE1lbWJlckludm9pY2UpID0+IHJldHJpZXZlTWVtYmVySW52b2ljZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGludm9pY2V9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlTWVtYmVySW52b2ljZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbGlzdE1lbWJlclBheW1lbnRPcmRlcnMkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShsaXN0TWVtYmVyUGF5bWVudE9yZGVyc0FjdGlvbiksXG4gICAgICBtZXJnZU1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IEFycmF5PHN0cmluZz4gfSkgPT5cbiAgICAgICAgZm9ya0pvaW4oXG4gICAgICAgICAgcGF5bG9hZC5tYXAoKGlkOiBzdHJpbmcpID0+XG4gICAgICAgICAgICB0aGlzLnBheW1lbnRPcmRlclNlcnZpY2UuZ2V0TWVtYmVyUGF5bWVudE9yZGVycyhpZClcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChwYXltZW50T3JkZXJzOiBDb2xsZWN0aW9uPFBheW1lbnRPcmRlcj4pID0+ICh7aWQsIHBheW1lbnRPcmRlcnM6IHBheW1lbnRPcmRlcnMudG9BcnJheSgpfSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2Yoe2lkLCBlcnJvcn0pKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKHJlc3VsdHM6IEFycmF5PHsgaWQ6IHN0cmluZywgcGF5bWVudE9yZGVycz86IEFycmF5PFBheW1lbnRPcmRlcj4sIGVycm9yPzogSHR0cEVycm9yUmVzcG9uc2UgfT4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBheW1lbnRPcmRlck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTxQYXltZW50T3JkZXI+PigpO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gb2YobGlzdE1lbWJlclBheW1lbnRPcmRlcnNGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcnNbMF0uZXJyb3IgYXMgSHR0cEVycm9yUmVzcG9uc2V9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQucGF5bWVudE9yZGVycykge1xuICAgICAgICAgICAgICAgIHBheW1lbnRPcmRlck1hcC5zZXQocmVzdWx0LmlkLCByZXN1bHQucGF5bWVudE9yZGVycyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gb2YobGlzdE1lbWJlclBheW1lbnRPcmRlcnNTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50T3JkZXJNYXB9KSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVBheW1lbnRPcmRlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUGF5bWVudE9yZGVyQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudE9yZGVyU2VydmljZS5nZXRNZW1iZXJQYXltZW50T3JkZXIocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5wYXltZW50T3JkZXJJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocGF5bWVudE9yZGVyOiBQYXltZW50T3JkZXIpID0+IHJldHJpZXZlUGF5bWVudE9yZGVyU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudE9yZGVyfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVBheW1lbnRPcmRlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZGVsZXRlUGF5bWVudE9yZGVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoZGVsZXRlUGF5bWVudE9yZGVyQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudE9yZGVyU2VydmljZS5kZWxldGVNZW1iZXJQYXltZW50T3JkZXIocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5wYXltZW50T3JkZXJJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVBheW1lbnRPcmRlclN1Y2Nlc3NBY3Rpb24oKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlUGF5bWVudE9yZGVyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtzdGF0dXM6IDQwMH0pfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihkZWxldGVQYXltZW50T3JkZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGRlbGV0ZVB1YmxpY1BheW1lbnRPcmRlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGRlbGV0ZVB1YmxpY1BheW1lbnRPcmRlckFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtwYXlsb2FkOiB7dG9rZW46IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZ319KSA9PiB0aGlzLnBheW1lbnRPcmRlclNlcnZpY2UuZGVsZXRlUHVibGljUGF5bWVudE9yZGVyKHBheWxvYWQudG9rZW4sIHBheWxvYWQucGF5bWVudE9yZGVySWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlUHVibGljUGF5bWVudE9yZGVyU3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVB1YmxpY1BheW1lbnRPcmRlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVsZXRlUHVibGljUGF5bWVudE9yZGVyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVNZW1iZXJJbnZvaWNlUGF5bWVudEF0dGVtcHQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZU1lbWJlckludm9pY2VQYXltZW50QXR0ZW1wdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nLCBwYXltZW50QXR0ZW1wdElkOiBudW1iZXIgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5nZXRNZW1iZXJJbnZvaWNlUGF5bWVudEF0dGVtcHQocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5pbnZvaWNlSWQsIHBheWxvYWQucGF5bWVudEF0dGVtcHRJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiByZXRyaWV2ZU1lbWJlckludm9pY2VQYXltZW50QXR0ZW1wdFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZU1lbWJlckludm9pY2VQYXltZW50QXR0ZW1wdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVNZW1iZXJJbnZvaWNlU3dpc2hRUkNvZGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZU1lbWJlckludm9pY2VTd2lzaFFSQ29kZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nLCBwYXltZW50QXR0ZW1wdElkOiBudW1iZXIgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5nZXRNZW1iZXJJbnZvaWNlU3dpc2hRUkNvZGUocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5pbnZvaWNlSWQsIHBheWxvYWQucGF5bWVudEF0dGVtcHRJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoc3dpc2hRUkNvZGU6IFN3aXNoUXJDb2RlKSA9PiByZXRyaWV2ZUludm9pY2VTd2lzaFFSQ29kZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHN3aXNoUVJDb2RlfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZUludm9pY2VTd2lzaFFSQ29kZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVNZW1iZXJQYXltZW50T3JkZXJTd2lzaFFSQ29kZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlTWVtYmVyUGF5bWVudE9yZGVyU3dpc2hRUkNvZGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBwYXltZW50T3JkZXJJZDogc3RyaW5nLCBwYXltZW50QXR0ZW1wdElkOiBudW1iZXIgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5nZXRNZW1iZXJQYXltZW50T3JkZXJTd2lzaFFSQ29kZShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLnBheW1lbnRPcmRlcklkLCBwYXlsb2FkLnBheW1lbnRBdHRlbXB0SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN3aXNoUVJDb2RlOiBTd2lzaFFyQ29kZSkgPT4gcmV0cmlldmVQYXltZW50T3JkZXJTd2lzaFFSQ29kZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHN3aXNoUVJDb2RlfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVBheW1lbnRPcmRlclN3aXNoUVJDb2RlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2UkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY0ludm9pY2VBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0b2tlbjogc3RyaW5nLCBpbnZvaWNlSWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuaW52b2ljZVNlcnZpY2UuZ2V0UHVibGljSW52b2ljZShwYXlsb2FkLmludm9pY2VJZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoaW52b2ljZTogTWVtYmVySW52b2ljZSkgPT4gcmV0cmlldmVQdWJsaWNJbnZvaWNlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogaW52b2ljZX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVQdWJsaWNJbnZvaWNlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2VMb2dvJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNJbnZvaWNlTG9nb0FjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5pbnZvaWNlU2VydmljZS5nZXRQdWJsaWNJbnZvaWNlTG9nbyhwYXlsb2FkLmludm9pY2VJZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoaW1hZ2U6IENsdWJJbWFnZSkgPT4gcmV0cmlldmVQdWJsaWNJbnZvaWNlTG9nb1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGltYWdlfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVB1YmxpY0ludm9pY2VMb2dvRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2VQYXltZW50QXR0ZW1wdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcsIHBheW1lbnRBdHRlbXB0SWQ6IG51bWJlciB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmdldFB1YmxpY0ludm9pY2VQYXltZW50QXR0ZW1wdChwYXlsb2FkLmludm9pY2VJZCwgcGF5bG9hZC50b2tlbiwgcGF5bG9hZC5wYXltZW50QXR0ZW1wdElkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IHJldHJpZXZlUHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudEF0dGVtcHR9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2VTd2lzaFFSQ29kZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljSW52b2ljZVN3aXNoUVJDb2RlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcsIHBheW1lbnRBdHRlbXB0SWQ6IG51bWJlciB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmdldFB1YmxpY0ludm9pY2VTd2lzaFFSQ29kZShwYXlsb2FkLmludm9pY2VJZCwgcGF5bG9hZC50b2tlbiwgcGF5bG9hZC5wYXltZW50QXR0ZW1wdElkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChzd2lzaFFSQ29kZTogU3dpc2hRckNvZGUpID0+IHJldHJpZXZlSW52b2ljZVN3aXNoUVJDb2RlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogc3dpc2hRUkNvZGV9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlSW52b2ljZVN3aXNoUVJDb2RlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuXG4gIHJldHJpZXZlTWVtYmVyUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZU1lbWJlclBheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZywgcGF5bWVudEF0dGVtcHRJZDogbnVtYmVyIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuZ2V0TWVtYmVyUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHQocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5wYXltZW50T3JkZXJJZCwgcGF5bG9hZC5wYXltZW50QXR0ZW1wdElkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IHJldHJpZXZlTWVtYmVyUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXIkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlckFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIHBheW1lbnRPcmRlcklkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRPcmRlclNlcnZpY2UuZ2V0UHVibGljUGF5bWVudE9yZGVyKHBheWxvYWQucGF5bWVudE9yZGVySWQsIHBheWxvYWQudG9rZW4pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBheW1lbnRPcmRlcjogUGF5bWVudE9yZGVyKSA9PiByZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlclN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRPcmRlcn0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyTG9nbyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyTG9nb0FjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIHBheW1lbnRPcmRlcklkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRPcmRlclNlcnZpY2UuZ2V0UHVibGljUGF5bWVudE9yZGVyTG9nbyhwYXlsb2FkLnBheW1lbnRPcmRlcklkLCBwYXlsb2FkLnRva2VuKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChpbWFnZTogQ2x1YkltYWdlKSA9PiByZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlckxvZ29TdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBpbWFnZX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJMb2dvRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIHBheW1lbnRPcmRlcklkOiBzdHJpbmcsIHBheW1lbnRBdHRlbXB0SWQ6IG51bWJlciB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmdldFB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0KHBheWxvYWQucGF5bWVudE9yZGVySWQsIHBheWxvYWQudG9rZW4sIHBheWxvYWQucGF5bWVudEF0dGVtcHRJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiByZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudEF0dGVtcHR9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyU3dpc2hRUkNvZGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlclN3aXNoUVJDb2RlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZywgcGF5bWVudEF0dGVtcHRJZDogbnVtYmVyIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuZ2V0UHVibGljUGF5bWVudE9yZGVyU3dpc2hRUkNvZGUocGF5bG9hZC5wYXltZW50T3JkZXJJZCwgcGF5bG9hZC50b2tlbiwgcGF5bG9hZC5wYXltZW50QXR0ZW1wdElkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChzd2lzaFFSQ29kZTogU3dpc2hRckNvZGUpID0+IHJldHJpZXZlUGF5bWVudE9yZGVyU3dpc2hRUkNvZGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBzd2lzaFFSQ29kZX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVQYXltZW50T3JkZXJTd2lzaFFSQ29kZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG59XG4iXX0=
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zdG9yZS9lZmZlY3RzL2ludm9pY2UuZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFDTCw4Q0FBOEMsRUFDOUMsOENBQThDLEVBQzlDLDZDQUE2QyxFQUM3Qyw2Q0FBNkMsRUFDN0Msd0NBQXdDLEVBQ3hDLHdDQUF3QyxFQUN4Qyx1Q0FBdUMsRUFDdkMsNENBQTRDLEVBQzVDLDZDQUE2QyxFQUM3Qyw2Q0FBNkMsRUFDN0MsdUNBQXVDLEVBQ3ZDLDRDQUE0QyxFQUM1Qyw4Q0FBOEMsRUFDOUMsbURBQW1ELEVBQ25ELHdDQUF3QyxFQUN4QyxvREFBb0QsRUFDcEQsb0RBQW9ELEVBQ3BELHdDQUF3QyxFQUN4Qyw4Q0FBOEMsRUFDOUMsbURBQW1ELEVBQ25ELHlDQUF5QyxFQUN6Qyw4Q0FBOEMsRUFDOUMsbUNBQW1DLEVBQ25DLCtDQUErQyxFQUMvQywrQ0FBK0MsRUFDL0MsbUNBQW1DLEVBQ25DLHlDQUF5QyxFQUN6Qyw4Q0FBOEMsRUFDOUMsc0NBQXNDLEVBQ3RDLHNDQUFzQyxFQUN0QyxxQ0FBcUMsRUFDckMsMENBQTBDLEVBQzFDLDJDQUEyQyxFQUMzQywyQ0FBMkMsRUFDM0MscUNBQXFDLEVBQ3JDLDBDQUEwQyxFQUMxQyxnQ0FBZ0MsRUFDaEMsaUNBQWlDLEVBQ2pDLGlDQUFpQyxFQUNqQyxnQ0FBZ0MsRUFDaEMsd0JBQXdCLEVBQ3hC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Q0FDRixDQUFDO0tBQ0g7K0dBOWxCWSxjQUFjO21IQUFkLGNBQWM7OzRGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbnMsIGNyZWF0ZUVmZmVjdCwgb2ZUeXBlIH0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBJbnZvaWNlU2VydmljZSwgUGF5bWVudEF0dGVtcHRTZXJ2aWNlLCBQYXltZW50T3JkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlRnJpdGlkc2tvcnRldEludm9pY2VQYXltZW50RmFpbHVyZUFjdGlvbixcbiAgY3JlYXRlRnJpdGlkc2tvcnRldEludm9pY2VQYXltZW50U3VjY2Vzc0FjdGlvbixcbiAgY3JlYXRlRnJpdGlkc2tvcnRldE1lbWJlckludm9pY2VQYXltZW50QWN0aW9uLFxuICBjcmVhdGVGcml0aWRza29ydGV0UHVibGljSW52b2ljZVBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZU1vbmRpZG9JbnZvaWNlUGF5bWVudEZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZU1vbmRpZG9JbnZvaWNlUGF5bWVudFN1Y2Nlc3NBY3Rpb24sXG4gIGNyZWF0ZU1vbmRpZG9NZW1iZXJJbnZvaWNlUGF5bWVudEFjdGlvbixcbiAgY3JlYXRlTW9uZGlkb01lbWJlclBheW1lbnRPcmRlclBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZU1vbmRpZG9QYXltZW50T3JkZXJQYXltZW50RmFpbHVyZUFjdGlvbixcbiAgY3JlYXRlTW9uZGlkb1BheW1lbnRPcmRlclBheW1lbnRTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVNb25kaWRvUHVibGljSW52b2ljZVBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZU1vbmRpZG9QdWJsaWNQYXltZW50T3JkZXJQYXltZW50QWN0aW9uLFxuICBjcmVhdGVQaW5nQ3JlZGl0Q2FyZE1lbWJlckludm9pY2VQYXltZW50QWN0aW9uLFxuICBjcmVhdGVQaW5nQ3JlZGl0Q2FyZE1lbWJlclBheW1lbnRPcmRlclBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZVBpbmdDcmVkaXRDYXJkUGF5bWVudEZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVBpbmdDcmVkaXRDYXJkUGF5bWVudE9yZGVyUGF5bWVudEZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVBpbmdDcmVkaXRDYXJkUGF5bWVudE9yZGVyUGF5bWVudFN1Y2Nlc3NBY3Rpb24sXG4gIGNyZWF0ZVBpbmdDcmVkaXRDYXJkUGF5bWVudFN1Y2Nlc3NBY3Rpb24sXG4gIGNyZWF0ZVBpbmdDcmVkaXRDYXJkUHVibGljSW52b2ljZVBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZVBpbmdDcmVkaXRDYXJkUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEFjdGlvbixcbiAgY3JlYXRlUGluZ1N3aXNoTWVtYmVySW52b2ljZVBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZVBpbmdTd2lzaE1lbWJlclBheW1lbnRPcmRlclBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZVBpbmdTd2lzaFBheW1lbnRGYWlsdXJlQWN0aW9uLFxuICBjcmVhdGVQaW5nU3dpc2hQYXltZW50T3JkZXJQYXltZW50RmFpbHVyZUFjdGlvbixcbiAgY3JlYXRlUGluZ1N3aXNoUGF5bWVudE9yZGVyUGF5bWVudFN1Y2Nlc3NBY3Rpb24sXG4gIGNyZWF0ZVBpbmdTd2lzaFBheW1lbnRTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVQaW5nU3dpc2hQdWJsaWNJbnZvaWNlUGF5bWVudEFjdGlvbixcbiAgY3JlYXRlUGluZ1N3aXNoUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEFjdGlvbixcbiAgY3JlYXRlU3dpc2hJbnZvaWNlUGF5bWVudEZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVN3aXNoSW52b2ljZVBheW1lbnRTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVTd2lzaE1lbWJlckludm9pY2VQYXltZW50QWN0aW9uLFxuICBjcmVhdGVTd2lzaE1lbWJlclBheW1lbnRPcmRlclBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZVN3aXNoUGF5bWVudE9yZGVyUGF5bWVudEZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVN3aXNoUGF5bWVudE9yZGVyUGF5bWVudFN1Y2Nlc3NBY3Rpb24sXG4gIGNyZWF0ZVN3aXNoUHVibGljSW52b2ljZVBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZVN3aXNoUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEFjdGlvbixcbiAgY3JlYXRlWmltcGxlck1lbWJlclBheW1lbnRBY3Rpb24sXG4gIGNyZWF0ZVppbXBsZXJQYXltZW50RmFpbHVyZUFjdGlvbixcbiAgY3JlYXRlWmltcGxlclBheW1lbnRTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVaaW1wbGVyUHVibGljUGF5bWVudEFjdGlvbixcbiAgZGVsZXRlUGF5bWVudE9yZGVyQWN0aW9uLFxuICBkZWxldGVQYXltZW50T3JkZXJGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVQYXltZW50T3JkZXJTdWNjZXNzQWN0aW9uLFxuICBkZWxldGVQdWJsaWNQYXltZW50T3JkZXJBY3Rpb24sXG4gIGRlbGV0ZVB1YmxpY1BheW1lbnRPcmRlckZhaWx1cmVBY3Rpb24sXG4gIGRlbGV0ZVB1YmxpY1BheW1lbnRPcmRlclN1Y2Nlc3NBY3Rpb24sXG4gIGxpc3RNZW1iZXJJbnZvaWNlc0FjdGlvbixcbiAgbGlzdE1lbWJlckludm9pY2VzRmFpbHVyZUFjdGlvbixcbiAgbGlzdE1lbWJlckludm9pY2VzU3VjY2Vzc0FjdGlvbixcbiAgbGlzdE1lbWJlclBheW1lbnRPcmRlcnNBY3Rpb24sXG4gIGxpc3RNZW1iZXJQYXltZW50T3JkZXJzRmFpbHVyZUFjdGlvbixcbiAgbGlzdE1lbWJlclBheW1lbnRPcmRlcnNTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZUludm9pY2VTd2lzaFFSQ29kZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlSW52b2ljZVN3aXNoUVJDb2RlU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJJbnZvaWNlQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckludm9pY2VGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckludm9pY2VQYXltZW50QXR0ZW1wdEFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJJbnZvaWNlUGF5bWVudEF0dGVtcHRGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckludm9pY2VQYXltZW50QXR0ZW1wdFN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVySW52b2ljZVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVySW52b2ljZVN3aXNoUVJDb2RlQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlclBheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0QWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlclBheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdFN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyUGF5bWVudE9yZGVyU3dpc2hRUkNvZGVBY3Rpb24sXG4gIHJldHJpZXZlUGF5bWVudE9yZGVyQWN0aW9uLFxuICByZXRyaWV2ZVBheW1lbnRPcmRlckZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUGF5bWVudE9yZGVyU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVQYXltZW50T3JkZXJTd2lzaFFSQ29kZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUGF5bWVudE9yZGVyU3dpc2hRUkNvZGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2VBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljSW52b2ljZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljSW52b2ljZUxvZ29BY3Rpb24sXG4gIHJldHJpZXZlUHVibGljSW52b2ljZUxvZ29GYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2VMb2dvU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNJbnZvaWNlUGF5bWVudEF0dGVtcHRBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNJbnZvaWNlUGF5bWVudEF0dGVtcHRTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2VTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0ludm9pY2VTd2lzaFFSQ29kZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJMb2dvQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlckxvZ29GYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlckxvZ29TdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0QWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdFN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJTd2lzaFFSQ29kZUFjdGlvblxufSBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCB7IGV4aGF1c3RNYXAsIGZvcmtKb2luLCBtZXJnZU1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENsdWJJbWFnZSxcbiAgQ29sbGVjdGlvbixcbiAgTWVtYmVySW52b2ljZSxcbiAgUGF5bWVudEF0dGVtcHQsXG4gIFBheW1lbnRPcmRlcixcbiAgU2VhcmNoTWVtYmVySW52b2ljZSxcbiAgU3dpc2hRckNvZGVcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJbnZvaWNlRWZmZWN0cyB7XG4gIHByaXZhdGUgYWN0aW9ucyQgPSBpbmplY3QoQWN0aW9ucyk7XG4gIHByaXZhdGUgaW52b2ljZVNlcnZpY2UgPSBpbmplY3QoSW52b2ljZVNlcnZpY2UpO1xuICBwcml2YXRlIHBheW1lbnRPcmRlclNlcnZpY2UgPSBpbmplY3QoUGF5bWVudE9yZGVyU2VydmljZSk7XG4gIHByaXZhdGUgcGF5bWVudEF0dGVtcHRTZXJ2aWNlID0gaW5qZWN0KFBheW1lbnRBdHRlbXB0U2VydmljZSk7XG5cbiAgY3JlYXRlTWVtYmVySW52b2ljZUZyaXRpZHNrb3J0ZXRQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlRnJpdGlkc2tvcnRldE1lbWJlckludm9pY2VQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICBwYXlsb2FkOiB7IGludm9pY2VJZDogc3RyaW5nLCBtZW1iZXJJZDogc3RyaW5nLCBjaGlsZFBlcnNvbmFsSWQ6IHN0cmluZywgYWR1bHRQZXJzb25hbElkOiBzdHJpbmcgfVxuICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlTWVtYmVySW52b2ljZVBheW1lbnRBdHRlbXB0KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuaW52b2ljZUlkLCB7XG4gICAgICAgICAgdHlwZTogJ2ZyaXRpZHNrb3J0ZXQnLFxuICAgICAgICAgIGNoaWxkUGVyc29uYWxJZDogcGF5bG9hZC5jaGlsZFBlcnNvbmFsSWQsXG4gICAgICAgICAgYWR1bHRQZXJzb25hbElkOiBwYXlsb2FkLmFkdWx0UGVyc29uYWxJZCxcbiAgICAgICAgICBwdWJsaWM6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVGcml0aWRza29ydGV0SW52b2ljZVBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZUZyaXRpZHNrb3J0ZXRJbnZvaWNlUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNyZWF0ZU1lbWJlckludm9pY2VNb25kaWRvUGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZU1vbmRpZG9NZW1iZXJJbnZvaWNlUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlTWVtYmVySW52b2ljZVBheW1lbnRBdHRlbXB0KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuaW52b2ljZUlkLCB7dHlwZTogJ21vbmRpZG8nfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVNb25kaWRvSW52b2ljZVBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlTW9uZGlkb0ludm9pY2VQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVNZW1iZXJQaW5nQ3JlZGl0Q2FyZFBheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVQaW5nQ3JlZGl0Q2FyZE1lbWJlckludm9pY2VQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nIH1cbiAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZU1lbWJlckludm9pY2VQYXltZW50QXR0ZW1wdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmludm9pY2VJZCwge3R5cGU6ICdwaW5nX2NhcmQnfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVBpbmdDcmVkaXRDYXJkUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlUGluZ0NyZWRpdENhcmRQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlTWVtYmVyUGluZ1N3aXNoUGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZVBpbmdTd2lzaE1lbWJlckludm9pY2VQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nLCB0ZWxlcGhvbmVOdW1iZXI6IHN0cmluZyB9XG4gICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVNZW1iZXJJbnZvaWNlUGF5bWVudEF0dGVtcHQocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5pbnZvaWNlSWQsIHt0eXBlOiAncGluZ19zd2lzaCcsIHBob25lX251bWJlcjogcGF5bG9hZC50ZWxlcGhvbmVOdW1iZXJ9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlUGluZ1N3aXNoUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlUGluZ1N3aXNoUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNyZWF0ZU1lbWJlckludm9pY2VTd2lzaFBheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVTd2lzaE1lbWJlckludm9pY2VQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcsIHRlbGVwaG9uZU51bWJlcjogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlTWVtYmVySW52b2ljZVBheW1lbnRBdHRlbXB0KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuaW52b2ljZUlkLCB7dHlwZTogJ3N3aXNoJywgcGhvbmVfbnVtYmVyOiBwYXlsb2FkLnRlbGVwaG9uZU51bWJlcn0pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlU3dpc2hJbnZvaWNlUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVTd2lzaEludm9pY2VQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVNZW1iZXJQYXltZW50T3JkZXJNb25kaWRvUGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZU1vbmRpZG9NZW1iZXJQYXltZW50T3JkZXJQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZU1lbWJlclBheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQucGF5bWVudE9yZGVySWQsICdtb25kaWRvJylcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVNb25kaWRvUGF5bWVudE9yZGVyUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVNb25kaWRvUGF5bWVudE9yZGVyUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlTWVtYmVyUGluZ0NyZWRpdENhcmRQYXltZW50T3JkZXJQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlUGluZ0NyZWRpdENhcmRNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZU1lbWJlclBheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQucGF5bWVudE9yZGVySWQsICdwaW5nX2NhcmQnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlUGluZ0NyZWRpdENhcmRQYXltZW50T3JkZXJQYXltZW50U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudEF0dGVtcHR9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVQaW5nQ3JlZGl0Q2FyZFBheW1lbnRPcmRlclBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxuXG4gIGNyZWF0ZU1lbWJlclBpbmdTd2lzaFBheW1lbnRPcmRlclBheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVQaW5nU3dpc2hNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZywgdGVsZXBob25lTnVtYmVyOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLnBheW1lbnRPcmRlcklkLCAncGluZ19zd2lzaCcsIHBheWxvYWQudGVsZXBob25lTnVtYmVyKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlUGluZ1N3aXNoUGF5bWVudE9yZGVyUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlUGluZ1N3aXNoUGF5bWVudE9yZGVyUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG5cbiAgY3JlYXRlTWVtYmVyUGF5bWVudE9yZGVyU3dpc2hQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlU3dpc2hNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZywgdGVsZXBob25lTnVtYmVyOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLnBheW1lbnRPcmRlcklkLCAnc3dpc2gnLCBwYXlsb2FkLnRlbGVwaG9uZU51bWJlcilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVTd2lzaFBheW1lbnRPcmRlclBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlU3dpc2hQYXltZW50T3JkZXJQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVNZW1iZXJaaW1wbGVyUGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZVppbXBsZXJNZW1iZXJQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVNZW1iZXJJbnZvaWNlUGF5bWVudEF0dGVtcHQocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5pbnZvaWNlSWQsIHt0eXBlOiAnemltcGxlcid9KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVppbXBsZXJQYXltZW50U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudEF0dGVtcHR9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVppbXBsZXJQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVQdWJsaWNJbnZvaWNlRnJpdGlkc2tvcnRQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlRnJpdGlkc2tvcnRldFB1YmxpY0ludm9pY2VQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nLCBjaGlsZFBlcnNvbmFsSWQ6IHN0cmluZywgYWR1bHRQZXJzb25hbElkOiBzdHJpbmd9XG4gICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVQdWJsaWNJbnZvaWNlUGF5bWVudEF0dGVtcHQocGF5bG9hZC5pbnZvaWNlSWQsIHBheWxvYWQudG9rZW4sIHtcbiAgICAgICAgdHlwZTogJ2ZyaXRpZHNrb3J0ZXQnLFxuICAgICAgICBhZHVsdFBlcnNvbmFsSWQ6IHBheWxvYWQuYWR1bHRQZXJzb25hbElkLFxuICAgICAgICBjaGlsZFBlcnNvbmFsSWQ6IHBheWxvYWQuY2hpbGRQZXJzb25hbElkLFxuICAgICAgICBwdWJsaWM6IHRydWVcbiAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZUZyaXRpZHNrb3J0ZXRJbnZvaWNlUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlRnJpdGlkc2tvcnRldEludm9pY2VQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlUHVibGljSW52b2ljZU1vbmRpZG9QYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlTW9uZGlkb1B1YmxpY0ludm9pY2VQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVQdWJsaWNJbnZvaWNlUGF5bWVudEF0dGVtcHQocGF5bG9hZC5pbnZvaWNlSWQsIHBheWxvYWQudG9rZW4sIHt0eXBlOiAnbW9uZGlkbyd9KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZU1vbmRpZG9JbnZvaWNlUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVNb25kaWRvSW52b2ljZVBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNyZWF0ZVB1YmxpY0ludm9pY2VQaW5nQ3JlZGl0Q2FyZFBheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVQaW5nQ3JlZGl0Q2FyZFB1YmxpY0ludm9pY2VQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5jcmVhdGVQdWJsaWNJbnZvaWNlUGF5bWVudEF0dGVtcHQocGF5bG9hZC5pbnZvaWNlSWQsIHBheWxvYWQudG9rZW4sIHt0eXBlOiAncGluZ19jYXJkJywgcHVibGljOiB0cnVlfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVBpbmdDcmVkaXRDYXJkUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlUGluZ0NyZWRpdENhcmRQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlUHVibGljSW52b2ljZVBpbmdTd2lzaFBheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVQaW5nU3dpc2hQdWJsaWNJbnZvaWNlUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nLCB0ZWxlcGhvbmVOdW1iZXI6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZVB1YmxpY0ludm9pY2VQYXltZW50QXR0ZW1wdChwYXlsb2FkLmludm9pY2VJZCwgcGF5bG9hZC50b2tlbiwge1xuICAgICAgICAgIHR5cGU6ICdwaW5nX3N3aXNoJyxcbiAgICAgICAgICBwaG9uZV9udW1iZXI6IHBheWxvYWQudGVsZXBob25lTnVtYmVyLFxuICAgICAgICAgIHB1YmxpYzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlUGluZ1N3aXNoUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlUGluZ1N3aXNoUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNyZWF0ZVB1YmxpY0ludm9pY2VTd2lzaFBheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVTd2lzaFB1YmxpY0ludm9pY2VQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcsIHRlbGVwaG9uZU51bWJlcjogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlUHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0KHBheWxvYWQuaW52b2ljZUlkLCBwYXlsb2FkLnRva2VuLCB7XG4gICAgICAgICAgdHlwZTogJ3N3aXNoJyxcbiAgICAgICAgICBwaG9uZV9udW1iZXI6IHBheWxvYWQudGVsZXBob25lTnVtYmVyXG4gICAgICAgIH0pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlU3dpc2hJbnZvaWNlUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVTd2lzaEludm9pY2VQYXltZW50RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVQdWJsaWNQYXltZW50T3JkZXJNb25kaWRvUGF5bWVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZU1vbmRpZG9QdWJsaWNQYXltZW50T3JkZXJQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZVB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0KHBheWxvYWQucGF5bWVudE9yZGVySWQsIHBheWxvYWQudG9rZW4sICdtb25kaWRvJylcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocGF5bWVudEF0dGVtcHQ6IFBheW1lbnRBdHRlbXB0KSA9PiBjcmVhdGVNb25kaWRvUGF5bWVudE9yZGVyUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVNb25kaWRvUGF5bWVudE9yZGVyUGF5bWVudEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlUHVibGljUGF5bWVudE9yZGVyUGluZ0NyZWRpdENhcmRQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlUGluZ0NyZWRpdENhcmRQdWJsaWNQYXltZW50T3JkZXJQYXltZW50QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZVB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0KHBheWxvYWQucGF5bWVudE9yZGVySWQsIHBheWxvYWQudG9rZW4sICdwaW5nX2NhcmQnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlUGluZ0NyZWRpdENhcmRQYXltZW50U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudEF0dGVtcHR9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVQaW5nQ3JlZGl0Q2FyZFBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVQdWJsaWNQYXltZW50T3JkZXJQaW5nU3dpc2hQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlUGluZ1N3aXNoUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIHBheW1lbnRPcmRlcklkOiBzdHJpbmcsIHRlbGVwaG9uZU51bWJlcjogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuY3JlYXRlUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHQocGF5bG9hZC5wYXltZW50T3JkZXJJZCwgcGF5bG9hZC50b2tlbiwgJ3Bpbmdfc3dpc2gnLCBwYXlsb2FkLnRlbGVwaG9uZU51bWJlcilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVBpbmdTd2lzaFBheW1lbnRPcmRlclBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVBpbmdTd2lzaFBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVQdWJsaWNQYXltZW50T3JkZXJTd2lzaFBheW1lbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVTd2lzaFB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0b2tlbjogc3RyaW5nLCBwYXltZW50T3JkZXJJZDogc3RyaW5nLCB0ZWxlcGhvbmVOdW1iZXI6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZVB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0KHBheWxvYWQucGF5bWVudE9yZGVySWQsIHBheWxvYWQudG9rZW4sICdzd2lzaCcsIHBheWxvYWQudGVsZXBob25lTnVtYmVyKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IGNyZWF0ZVN3aXNoUGF5bWVudE9yZGVyUGF5bWVudFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVTd2lzaFBheW1lbnRPcmRlclBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNyZWF0ZVB1YmxpY1ppbXBsZXJQYXltZW50JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlWmltcGxlclB1YmxpY1BheW1lbnRBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0b2tlbjogc3RyaW5nLCBpbnZvaWNlSWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmNyZWF0ZVB1YmxpY0ludm9pY2VQYXltZW50QXR0ZW1wdChwYXlsb2FkLmludm9pY2VJZCwgcGF5bG9hZC50b2tlbiwge3R5cGU6ICd6aW1wbGVyJ30pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gY3JlYXRlWmltcGxlclBheW1lbnRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlWmltcGxlclBheW1lbnRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxpc3RNZW1iZXJJbnZvaWNlcyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxpc3RNZW1iZXJJbnZvaWNlc0FjdGlvbiksXG4gICAgICBtZXJnZU1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IEFycmF5PHN0cmluZz4gfSkgPT5cbiAgICAgICAgZm9ya0pvaW4oXG4gICAgICAgICAgcGF5bG9hZC5tYXAoKGlkOiBzdHJpbmcpID0+XG4gICAgICAgICAgICB0aGlzLmludm9pY2VTZXJ2aWNlLmdldE1lbWJlckludm9pY2VzKGlkKVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGludm9pY2VzOiBDb2xsZWN0aW9uPFNlYXJjaE1lbWJlckludm9pY2U+KSA9PiAoe2lkLCBpbnZvaWNlczogaW52b2ljZXMudG9BcnJheSgpfSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2Yoe2lkLCBlcnJvcn0pKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKHJlc3VsdHM6IEFycmF5PHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmcsXG4gICAgICAgICAgICBpbnZvaWNlcz86IEFycmF5PFNlYXJjaE1lbWJlckludm9pY2U+LFxuICAgICAgICAgICAgZXJyb3I/OiBIdHRwRXJyb3JSZXNwb25zZVxuICAgICAgICAgIH0+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnZvaWNlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEFycmF5PFNlYXJjaE1lbWJlckludm9pY2U+PigpO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gb2YobGlzdE1lbWJlckludm9pY2VzRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3JzWzBdLmVycm9yIGFzIEh0dHBFcnJvclJlc3BvbnNlfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzdWx0Lmludm9pY2VzKSB7XG4gICAgICAgICAgICAgICAgaW52b2ljZU1hcC5zZXQocmVzdWx0LmlkLCByZXN1bHQuaW52b2ljZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG9mKGxpc3RNZW1iZXJJbnZvaWNlc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGludm9pY2VNYXB9KSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlckludm9pY2UkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZU1lbWJlckludm9pY2VBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBpbnZvaWNlSWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuaW52b2ljZVNlcnZpY2UuZ2V0TWVtYmVySW52b2ljZShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmludm9pY2VJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoaW52b2ljZTogTWVtYmVySW52b2ljZSkgPT4gcmV0cmlldmVNZW1iZXJJbnZvaWNlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogaW52b2ljZX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVNZW1iZXJJbnZvaWNlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsaXN0TWVtYmVyUGF5bWVudE9yZGVycyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxpc3RNZW1iZXJQYXltZW50T3JkZXJzQWN0aW9uKSxcbiAgICAgIG1lcmdlTWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogQXJyYXk8c3RyaW5nPiB9KSA9PlxuICAgICAgICBmb3JrSm9pbihcbiAgICAgICAgICBwYXlsb2FkLm1hcCgoaWQ6IHN0cmluZykgPT5cbiAgICAgICAgICAgIHRoaXMucGF5bWVudE9yZGVyU2VydmljZS5nZXRNZW1iZXJQYXltZW50T3JkZXJzKGlkKVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHBheW1lbnRPcmRlcnM6IENvbGxlY3Rpb248UGF5bWVudE9yZGVyPikgPT4gKHtpZCwgcGF5bWVudE9yZGVyczogcGF5bWVudE9yZGVycy50b0FycmF5KCl9KSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih7aWQsIGVycm9yfSkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICBtZXJnZU1hcCgocmVzdWx0czogQXJyYXk8eyBpZDogc3RyaW5nLCBwYXltZW50T3JkZXJzPzogQXJyYXk8UGF5bWVudE9yZGVyPiwgZXJyb3I/OiBIdHRwRXJyb3JSZXNwb25zZSB9PikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bWVudE9yZGVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIEFycmF5PFBheW1lbnRPcmRlcj4+KCk7XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSByZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0LmVycm9yKTtcbiAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZihsaXN0TWVtYmVyUGF5bWVudE9yZGVyc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yc1swXS5lcnJvciBhcyBIdHRwRXJyb3JSZXNwb25zZX0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5wYXltZW50T3JkZXJzKSB7XG4gICAgICAgICAgICAgICAgcGF5bWVudE9yZGVyTWFwLnNldChyZXN1bHQuaWQsIHJlc3VsdC5wYXltZW50T3JkZXJzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBvZihsaXN0TWVtYmVyUGF5bWVudE9yZGVyc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRPcmRlck1hcH0pKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUGF5bWVudE9yZGVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQYXltZW50T3JkZXJBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBwYXltZW50T3JkZXJJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50T3JkZXJTZXJ2aWNlLmdldE1lbWJlclBheW1lbnRPcmRlcihwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLnBheW1lbnRPcmRlcklkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXltZW50T3JkZXI6IFBheW1lbnRPcmRlcikgPT4gcmV0cmlldmVQYXltZW50T3JkZXJTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50T3JkZXJ9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUGF5bWVudE9yZGVyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWxldGVQYXltZW50T3JkZXIkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShkZWxldGVQYXltZW50T3JkZXJBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBwYXltZW50T3JkZXJJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50T3JkZXJTZXJ2aWNlLmRlbGV0ZU1lbWJlclBheW1lbnRPcmRlcihwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLnBheW1lbnRPcmRlcklkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlUGF5bWVudE9yZGVyU3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVQYXltZW50T3JkZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGRlbGV0ZVBheW1lbnRPcmRlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZGVsZXRlUHVibGljUGF5bWVudE9yZGVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoZGVsZXRlUHVibGljUGF5bWVudE9yZGVyQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge3BheWxvYWQ6IHt0b2tlbjogc3RyaW5nLCBwYXltZW50T3JkZXJJZDogc3RyaW5nfX0pID0+IHRoaXMucGF5bWVudE9yZGVyU2VydmljZS5kZWxldGVQdWJsaWNQYXltZW50T3JkZXIocGF5bG9hZC50b2tlbiwgcGF5bG9hZC5wYXltZW50T3JkZXJJZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZWxldGVQdWJsaWNQYXltZW50T3JkZXJTdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlUHVibGljUGF5bWVudE9yZGVyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtzdGF0dXM6IDQwMH0pfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihkZWxldGVQdWJsaWNQYXltZW50T3JkZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlckludm9pY2VQYXltZW50QXR0ZW1wdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlTWVtYmVySW52b2ljZVBheW1lbnRBdHRlbXB0QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcsIHBheW1lbnRBdHRlbXB0SWQ6IG51bWJlciB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmdldE1lbWJlckludm9pY2VQYXltZW50QXR0ZW1wdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmludm9pY2VJZCwgcGF5bG9hZC5wYXltZW50QXR0ZW1wdElkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IHJldHJpZXZlTWVtYmVySW52b2ljZVBheW1lbnRBdHRlbXB0U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudEF0dGVtcHR9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlTWVtYmVySW52b2ljZVBheW1lbnRBdHRlbXB0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlckludm9pY2VTd2lzaFFSQ29kZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlTWVtYmVySW52b2ljZVN3aXNoUVJDb2RlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcsIHBheW1lbnRBdHRlbXB0SWQ6IG51bWJlciB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmdldE1lbWJlckludm9pY2VTd2lzaFFSQ29kZShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmludm9pY2VJZCwgcGF5bG9hZC5wYXltZW50QXR0ZW1wdElkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChzd2lzaFFSQ29kZTogU3dpc2hRckNvZGUpID0+IHJldHJpZXZlSW52b2ljZVN3aXNoUVJDb2RlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogc3dpc2hRUkNvZGV9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlSW52b2ljZVN3aXNoUVJDb2RlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlclBheW1lbnRPcmRlclN3aXNoUVJDb2RlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVNZW1iZXJQYXltZW50T3JkZXJTd2lzaFFSQ29kZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIHBheW1lbnRPcmRlcklkOiBzdHJpbmcsIHBheW1lbnRBdHRlbXB0SWQ6IG51bWJlciB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudEF0dGVtcHRTZXJ2aWNlLmdldE1lbWJlclBheW1lbnRPcmRlclN3aXNoUVJDb2RlKHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQucGF5bWVudE9yZGVySWQsIHBheWxvYWQucGF5bWVudEF0dGVtcHRJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoc3dpc2hRUkNvZGU6IFN3aXNoUXJDb2RlKSA9PiByZXRyaWV2ZVBheW1lbnRPcmRlclN3aXNoUVJDb2RlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogc3dpc2hRUkNvZGV9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUGF5bWVudE9yZGVyU3dpc2hRUkNvZGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljSW52b2ljZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljSW52b2ljZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRva2VuOiBzdHJpbmcsIGludm9pY2VJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5pbnZvaWNlU2VydmljZS5nZXRQdWJsaWNJbnZvaWNlKHBheWxvYWQuaW52b2ljZUlkLCBwYXlsb2FkLnRva2VuKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChpbnZvaWNlOiBNZW1iZXJJbnZvaWNlKSA9PiByZXRyaWV2ZVB1YmxpY0ludm9pY2VTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBpbnZvaWNlfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVB1YmxpY0ludm9pY2VGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljSW52b2ljZUxvZ28kID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY0ludm9pY2VMb2dvQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgaW52b2ljZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmludm9pY2VTZXJ2aWNlLmdldFB1YmxpY0ludm9pY2VMb2dvKHBheWxvYWQuaW52b2ljZUlkLCBwYXlsb2FkLnRva2VuKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChpbWFnZTogQ2x1YkltYWdlKSA9PiByZXRyaWV2ZVB1YmxpY0ludm9pY2VMb2dvU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogaW1hZ2V9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljSW52b2ljZUxvZ29GYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNJbnZvaWNlUGF5bWVudEF0dGVtcHRBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0b2tlbjogc3RyaW5nLCBpbnZvaWNlSWQ6IHN0cmluZywgcGF5bWVudEF0dGVtcHRJZDogbnVtYmVyIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuZ2V0UHVibGljSW52b2ljZVBheW1lbnRBdHRlbXB0KHBheWxvYWQuaW52b2ljZUlkLCBwYXlsb2FkLnRva2VuLCBwYXlsb2FkLnBheW1lbnRBdHRlbXB0SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gcmV0cmlldmVQdWJsaWNJbnZvaWNlUGF5bWVudEF0dGVtcHRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVQdWJsaWNJbnZvaWNlUGF5bWVudEF0dGVtcHRGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljSW52b2ljZVN3aXNoUVJDb2RlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNJbnZvaWNlU3dpc2hRUkNvZGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0b2tlbjogc3RyaW5nLCBpbnZvaWNlSWQ6IHN0cmluZywgcGF5bWVudEF0dGVtcHRJZDogbnVtYmVyIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuZ2V0UHVibGljSW52b2ljZVN3aXNoUVJDb2RlKHBheWxvYWQuaW52b2ljZUlkLCBwYXlsb2FkLnRva2VuLCBwYXlsb2FkLnBheW1lbnRBdHRlbXB0SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN3aXNoUVJDb2RlOiBTd2lzaFFyQ29kZSkgPT4gcmV0cmlldmVJbnZvaWNlU3dpc2hRUkNvZGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBzd2lzaFFSQ29kZX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVJbnZvaWNlU3dpc2hRUkNvZGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG5cbiAgcmV0cmlldmVNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlTWVtYmVyUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHRBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBwYXltZW50T3JkZXJJZDogc3RyaW5nLCBwYXltZW50QXR0ZW1wdElkOiBudW1iZXIgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5nZXRNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLnBheW1lbnRPcmRlcklkLCBwYXlsb2FkLnBheW1lbnRBdHRlbXB0SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBheW1lbnRBdHRlbXB0OiBQYXltZW50QXR0ZW1wdCkgPT4gcmV0cmlldmVNZW1iZXJQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHBheW1lbnRBdHRlbXB0fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZU1lbWJlclBheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudE9yZGVyU2VydmljZS5nZXRQdWJsaWNQYXltZW50T3JkZXIocGF5bG9hZC5wYXltZW50T3JkZXJJZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocGF5bWVudE9yZGVyOiBQYXltZW50T3JkZXIpID0+IHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bWVudE9yZGVyfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJMb2dvJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJMb2dvQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMucGF5bWVudE9yZGVyU2VydmljZS5nZXRQdWJsaWNQYXltZW50T3JkZXJMb2dvKHBheWxvYWQucGF5bWVudE9yZGVySWQsIHBheWxvYWQudG9rZW4pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGltYWdlOiBDbHViSW1hZ2UpID0+IHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyTG9nb1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGltYWdlfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlckxvZ29GYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY1BheW1lbnRPcmRlclBheW1lbnRBdHRlbXB0QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdG9rZW46IHN0cmluZywgcGF5bWVudE9yZGVySWQ6IHN0cmluZywgcGF5bWVudEF0dGVtcHRJZDogbnVtYmVyIH1cbiAgICAgICAgfSkgPT4gdGhpcy5wYXltZW50QXR0ZW1wdFNlcnZpY2UuZ2V0UHVibGljUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHQocGF5bG9hZC5wYXltZW50T3JkZXJJZCwgcGF5bG9hZC50b2tlbiwgcGF5bG9hZC5wYXltZW50QXR0ZW1wdElkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXltZW50QXR0ZW1wdDogUGF5bWVudEF0dGVtcHQpID0+IHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyUGF5bWVudEF0dGVtcHRTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXltZW50QXR0ZW1wdH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJQYXltZW50QXR0ZW1wdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVQdWJsaWNQYXltZW50T3JkZXJTd2lzaFFSQ29kZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljUGF5bWVudE9yZGVyU3dpc2hRUkNvZGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0b2tlbjogc3RyaW5nLCBwYXltZW50T3JkZXJJZDogc3RyaW5nLCBwYXltZW50QXR0ZW1wdElkOiBudW1iZXIgfVxuICAgICAgICB9KSA9PiB0aGlzLnBheW1lbnRBdHRlbXB0U2VydmljZS5nZXRQdWJsaWNQYXltZW50T3JkZXJTd2lzaFFSQ29kZShwYXlsb2FkLnBheW1lbnRPcmRlcklkLCBwYXlsb2FkLnRva2VuLCBwYXlsb2FkLnBheW1lbnRBdHRlbXB0SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN3aXNoUVJDb2RlOiBTd2lzaFFyQ29kZSkgPT4gcmV0cmlldmVQYXltZW50T3JkZXJTd2lzaFFSQ29kZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHN3aXNoUVJDb2RlfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVBheW1lbnRPcmRlclN3aXNoUVJDb2RlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcbn1cbiJdfQ==