@sabstravtech/obtservices 0.0.22050309 → 0.0.26051001

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 (170) hide show
  1. package/angular/components/basket-panel.d.ts +1 -0
  2. package/angular/fetchers.d.ts +7 -0
  3. package/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +7 -0
  4. package/angular/lib/vendor/fetchers/get-companies.fetcher.d.ts +7 -0
  5. package/angular/lib/vendor/fetchers/get-company.fetcher.d.ts +7 -0
  6. package/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +7 -0
  7. package/angular/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +7 -0
  8. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +5 -3
  9. package/angular/lib/vendor/services/logon.service.d.ts +2 -1
  10. package/angular/lib/vendor/services/search.service.d.ts +4 -3
  11. package/angular/lib/vendor/services/ticket-queue.service.d.ts +6 -0
  12. package/angular/lib/vendor/services/user.service.d.ts +7 -3
  13. package/angular/lib/vendor/types/graphql.angular.types.d.ts +354 -90
  14. package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
  15. package/angular/sabstravtech-obtservices-angular.d.ts +0 -1
  16. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  17. package/angular/services.d.ts +1 -0
  18. package/angular/updaters.d.ts +1 -0
  19. package/base/fetchers.d.ts +7 -0
  20. package/base/interfaces.d.ts +2 -0
  21. package/base/lib/vendor/classes/base-enterprise.d.ts +5 -1
  22. package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
  23. package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
  24. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +6 -4
  25. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +5 -3
  26. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +5 -4
  27. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +18 -13
  28. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +6 -5
  29. package/base/lib/vendor/classes/helpers.d.ts +6 -1
  30. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +8 -4
  31. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +23 -9
  32. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +4 -3
  33. package/base/lib/vendor/classes/management-info-and-valid.d.ts +7 -2
  34. package/base/lib/vendor/classes/modal-types.enum.d.ts +2 -0
  35. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +4 -3
  36. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +10 -7
  37. package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
  38. package/base/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +1 -1
  39. package/base/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +20 -0
  40. package/base/lib/vendor/fetchers/get-companies.fetcher.d.ts +21 -0
  41. package/base/lib/vendor/fetchers/get-company.fetcher.d.ts +20 -0
  42. package/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +21 -0
  43. package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
  44. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +2 -0
  45. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +4 -2
  46. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +10 -6
  47. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +2 -0
  48. package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +11 -5
  49. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +3 -1
  50. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +7 -2
  51. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +11 -5
  52. package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +2 -0
  53. package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +2 -0
  54. package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +6 -2
  55. package/base/lib/vendor/interfaces/Isearch.service.d.ts +4 -2
  56. package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
  57. package/base/lib/vendor/interfaces/Iuser.service.d.ts +3 -1
  58. package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
  59. package/base/lib/vendor/interfaces/fast-track-filters.interface.d.ts +4 -0
  60. package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
  61. package/base/lib/vendor/interfaces/summary-interface.d.ts +4 -0
  62. package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
  63. package/base/lib/vendor/models/traveller.object.d.ts +1 -1
  64. package/base/lib/vendor/services/enterprise-basket.service.d.ts +28 -10
  65. package/base/lib/vendor/services/logon.service.d.ts +5 -1
  66. package/base/lib/vendor/services/requires-reason.service.d.ts +20 -0
  67. package/base/lib/vendor/services/search.service.d.ts +30 -25
  68. package/base/lib/vendor/services/url.service.d.ts +2 -0
  69. package/base/lib/vendor/services/user.service.d.ts +21 -5
  70. package/base/lib/vendor/services/webtoken.service.d.ts +5 -0
  71. package/base/lib/vendor/types/graphql.types.d.ts +326 -89
  72. package/base/lib/vendor/types/types.d.ts +44 -17
  73. package/base/lib/vendor/updaters/create-guest-updater.d.ts +19 -0
  74. package/base/sabstravtech-obtservices-base.d.ts +1 -1
  75. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  76. package/base/services.d.ts +1 -0
  77. package/base/updaters.d.ts +1 -0
  78. package/bundles/sabstravtech-obtservices-angular.umd.js +466 -180
  79. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  80. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  81. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  82. package/bundles/sabstravtech-obtservices-base.umd.js +4435 -1004
  83. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  84. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  85. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  86. package/esm2015/angular/components/basket-panel.js +16 -7
  87. package/esm2015/angular/fetchers.js +8 -1
  88. package/esm2015/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.js +25 -0
  89. package/esm2015/angular/lib/vendor/fetchers/get-companies.fetcher.js +25 -0
  90. package/esm2015/angular/lib/vendor/fetchers/get-company.fetcher.js +25 -0
  91. package/esm2015/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +25 -0
  92. package/esm2015/angular/lib/vendor/fetchers/get-user-guests.fetcher.js +25 -0
  93. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +11 -5
  94. package/esm2015/angular/lib/vendor/services/http-call.service.js +6 -2
  95. package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
  96. package/esm2015/angular/lib/vendor/services/search.service.js +28 -25
  97. package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +23 -0
  98. package/esm2015/angular/lib/vendor/services/user.service.js +21 -9
  99. package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
  100. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +353 -72
  101. package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
  102. package/esm2015/angular/obtservices.module.js +3 -1
  103. package/esm2015/angular/sabstravtech-obtservices-angular.js +1 -2
  104. package/esm2015/angular/services.js +2 -1
  105. package/esm2015/angular/updaters.js +2 -1
  106. package/esm2015/base/fetchers.js +8 -1
  107. package/esm2015/base/interfaces.js +3 -1
  108. package/esm2015/base/lib/vendor/classes/base-enterprise.js +8 -2
  109. package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +17 -1
  110. package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -6
  111. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +98 -11
  112. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +146 -68
  113. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +140 -37
  114. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +111 -23
  115. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +218 -40
  116. package/esm2015/base/lib/vendor/classes/helpers.js +24 -4
  117. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +191 -48
  118. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +271 -27
  119. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +59 -11
  120. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +13 -9
  121. package/esm2015/base/lib/vendor/classes/modal-types.enum.js +3 -1
  122. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +63 -11
  123. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +183 -23
  124. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +42 -4
  125. package/esm2015/base/lib/vendor/fetchers/fast-track-quote.fetcher.js +2 -2
  126. package/esm2015/base/lib/vendor/fetchers/get-cancellation-info.fetcher.js +10 -0
  127. package/esm2015/base/lib/vendor/fetchers/get-companies.fetcher.js +11 -0
  128. package/esm2015/base/lib/vendor/fetchers/get-company.fetcher.js +11 -0
  129. package/esm2015/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +11 -0
  130. package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
  131. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  132. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  133. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  134. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  135. package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
  136. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  137. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -1
  138. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  139. package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
  140. package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
  141. package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
  142. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  143. package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
  144. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  145. package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
  146. package/esm2015/base/lib/vendor/interfaces/fast-track-filters.interface.js +2 -0
  147. package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
  148. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  149. package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
  150. package/esm2015/base/lib/vendor/models/traveller.object.js +1 -1
  151. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +154 -45
  152. package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +16 -12
  153. package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
  154. package/esm2015/base/lib/vendor/services/logon.service.js +37 -3
  155. package/esm2015/base/lib/vendor/services/requires-reason.service.js +53 -0
  156. package/esm2015/base/lib/vendor/services/search.service.js +82 -101
  157. package/esm2015/base/lib/vendor/services/url.service.js +3 -1
  158. package/esm2015/base/lib/vendor/services/user.service.js +64 -9
  159. package/esm2015/base/lib/vendor/services/webtoken.service.js +16 -5
  160. package/esm2015/base/lib/vendor/types/graphql.types.js +15 -2
  161. package/esm2015/base/lib/vendor/types/types.js +1679 -21
  162. package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
  163. package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
  164. package/esm2015/base/services.js +2 -1
  165. package/esm2015/base/updaters.js +2 -1
  166. package/fesm2015/sabstravtech-obtservices-angular.js +570 -148
  167. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  168. package/fesm2015/sabstravtech-obtservices-base.js +3725 -466
  169. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  170. package/package.json +1 -1
@@ -40,7 +40,13 @@ export class BookableBasket {
40
40
  this.basketService.subsribeToBasket(id, {
41
41
  next: (basket) => {
42
42
  this.basket.next(basket);
43
- this.updateBasket(basket);
43
+ // before updating the basket check if there is an expired basket item/s
44
+ if (this.expiredItemInTheBasket()) {
45
+ this.status.next(BookingStatus.Expired);
46
+ }
47
+ else {
48
+ this.updateBasket(basket);
49
+ }
44
50
  },
45
51
  error: (error) => {
46
52
  this.basket.error(error);
@@ -52,6 +58,14 @@ export class BookableBasket {
52
58
  }
53
59
  });
54
60
  }
61
+ expiredItemInTheBasket() {
62
+ this.isUpdating.next(false);
63
+ let expiredItemInTheBasket;
64
+ this.basket.subscribe((basket) => {
65
+ expiredItemInTheBasket = basket.basketItems.some((item) => item.expired);
66
+ });
67
+ return expiredItemInTheBasket;
68
+ }
55
69
  updateBasket(basket) {
56
70
  this.isUpdating.next(false);
57
71
  switch (basket.status) {
@@ -215,16 +229,18 @@ export class BookableBasket {
215
229
  });
216
230
  }
217
231
  _splitTravellers(basketItem) {
218
- return (basketItem.userPassengerTypes || []).reduce((accum, user, index) => {
232
+ return (basketItem.userPassengerTypes.concat(basketItem.guestPassengerTypes) || []).reduce((accum, user, index) => {
233
+ const userPassenger = this._findUser(basketItem.users, Number(user.id));
234
+ const guestPassenger = this._findGuest(basketItem.guests, Number(user.id));
219
235
  switch (user.passengerType) {
220
236
  case PassengerType.Adult:
221
- accum.adults.push(this._findUser(basketItem.users, Number(user.id)));
237
+ accum.adults.push(userPassenger || guestPassenger);
222
238
  break;
223
239
  case PassengerType.Child:
224
- accum.children.push(this._findUser(basketItem.users, Number(user.id)));
240
+ accum.children.push(userPassenger || guestPassenger);
225
241
  break;
226
242
  case PassengerType.Infant:
227
- accum.infants.push(this._findUser(basketItem.users, Number(user.id)));
243
+ accum.infants.push(userPassenger || guestPassenger);
228
244
  break;
229
245
  }
230
246
  return accum;
@@ -235,8 +251,13 @@ export class BookableBasket {
235
251
  return Number(user.id) === id;
236
252
  });
237
253
  }
254
+ _findGuest(users, id) {
255
+ return users.find((user) => {
256
+ return Number(user.id) === id;
257
+ });
258
+ }
238
259
  getId() {
239
260
  return this.id;
240
261
  }
241
262
  }
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2FibGUtYmFza2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2Jvb2thYmxlLWJhc2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUXZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBRUwsWUFBWSxFQUNaLGFBQWEsRUFFYixXQUFXLEVBSVosTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxNQUFNLE9BQU8sY0FBYztJQVd6QixZQUNVLGFBQStDLEVBQy9DLE9BQTJCO1FBRDNCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQUMvQyxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQVpyQyxXQUFNLEdBQW1DLElBQUksZUFBZSxDQUMxRCxhQUFhLENBQUMsT0FBTyxDQUN0QixDQUFDO1FBRUYsV0FBTSxHQUFtQyxJQUFJLGVBQWUsQ0FDMUQsRUFBbUIsQ0FDcEIsQ0FBQztRQUNGLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLGVBQVUsR0FBNkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbkUsT0FBRSxHQUFXLElBQUksQ0FBQztJQUl2QixDQUFDO0lBRUosVUFBVSxDQUFDLEVBQVU7UUFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFnQixFQUFtQixDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLENB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Q0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2tldERldGFpbHMsXHJcbiAgQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvLFxyXG4gIE1pR3JvdXBEZXRhaWxcclxufSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi4vY2xhc3Nlcy9oZWxwZXJzJztcclxuaW1wb3J0IHsgQm9va2luZ1N0YXR1cyB9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNrZXRJdGVtLFxyXG4gIEJhc2tldFN0YXR1cyxcclxuICBQYXNzZW5nZXJUeXBlLFxyXG4gIFBheW1lbnRNZXRob2QsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvLFxyXG4gIFVzZXIsXHJcbiAgVXNlclBhc3NlbmdlclR5cGVcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29rYWJsZUJhc2tldCB7XHJcbiAgc3RhdHVzOiBCZWhhdmlvclN1YmplY3Q8Qm9va2luZ1N0YXR1cz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJvb2tpbmdTdGF0dXM+KFxyXG4gICAgQm9va2luZ1N0YXR1cy5Mb2FkaW5nXHJcbiAgKTtcclxuXHJcbiAgYmFza2V0OiBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldERldGFpbHM+KFxyXG4gICAge30gYXMgQmFza2V0RGV0YWlsc1xyXG4gICk7XHJcbiAgbmVlZHNUb1ZpZXdNaTogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNVcGRhdGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpZDogc3RyaW5nID0gbnVsbDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lc1xyXG4gICkge31cclxuXHJcbiAgbG9hZEJhc2tldChpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlkID0gaWQ7XHJcbiAgICB0aGlzLmJhc2tldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz4oe30gYXMgQmFza2V0RGV0YWlscyk7XHJcbiAgICB0aGlzLnN0YXR1cy5uZXh0KEJvb2tpbmdTdGF0dXMuTG9hZGluZyk7XHJcbiAgICB0aGlzLmlzVXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX2xvYWRCYXNrZXQoaWQpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIExvYWRpbmcsXHJcbiAgMCAgQWRkaW5nSXRlbXMsXHJcbiAgMSAgQWRkaW5nVHJhdmVsbGVycyxcclxuICAyICBBZGRpbmdMZWFkUGFzc2VuZ2VyLFxyXG4gIDMgIEZhaWxlZCxcclxuICA0ICBSZXZhbGlkYXRlLFxyXG4gIDUgIFJldmFsaWRhdGluZ0Vycm9yLFxyXG4gIDYgIFJldmFsaWRhdGluZ0FjY2VwdGVkLFxyXG4gIDcgIENob29zZU1JR3JvdXAsXHJcbiAgOCAgUHJvdmlkZU1pLFxyXG4gIDkgIFNlbmRGb3JBcHByb3ZhbCxcclxuICAxMCBBd2FpdGluZ0FwcHJvdmFsLFxyXG4gIDExIEFwcHJvdmVkXHJcbiAgMTIgUGFydGlhbGx5Qm9va2VkLFxyXG4gIDEzIENvbXBsZXRlXHJcbiAgKi9cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZEJhc2tldChpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmJhc2tldFNlcnZpY2UubG9hZEJhc2tldChpZCk7XHJcblxyXG4gICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnN1YnNyaWJlVG9CYXNrZXQoaWQsIHtcclxuICAgICAgbmV4dDogKGJhc2tldDogQmFza2V0RGV0YWlscykgPT4ge1xyXG4gICAgICAgIHRoaXMuYmFza2V0Lm5leHQoYmFza2V0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJhc2tldChiYXNrZXQpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmJhc2tldC5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5iYXNrZXQuY29tcGxldGUoKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnQmFza2V0IGNvbXBsZXRlZCcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUJhc2tldChiYXNrZXQ6IEJhc2tldERldGFpbHMpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNVcGRhdGluZy5uZXh0KGZhbHNlKTtcclxuICAgIHN3aXRjaCAoYmFza2V0LnN0YXR1cykge1xyXG4gICAgICBjYXNlIEJhc2tldFN0YXR1cy5PcGVuOlxyXG4gICAgICAgIHRoaXMud29ya291dE9wZW5TdGF0ZShiYXNrZXQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEJhc2tldFN0YXR1cy5Bd2FpdGluZ0FwcHJvdmFsOlxyXG4gICAgICAgIHRoaXMuc3RhdHVzLm5leHQoXHJcbiAgICAgICAgICB0aGlzLndvcmtvdXRTdGF0ZShiYXNrZXQsIEJvb2tpbmdTdGF0dXMuQXdhaXRpbmdBcHByb3ZhbClcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEJhc2tldFN0YXR1cy5BcHByb3ZlZDpcclxuICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KHRoaXMud29ya291dEFwcHJvdmVkU3RhdGUoYmFza2V0KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQmFza2V0U3RhdHVzLkJvb2tlZDpcclxuICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KHRoaXMud29ya291dFN0YXRlKGJhc2tldCwgQm9va2luZ1N0YXR1cy5Db21wbGV0ZSkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEJhc2tldFN0YXR1cy5Cb29raW5nRmFpbGVkOlxyXG4gICAgICAgIHRoaXMuc3RhdHVzLm5leHQodGhpcy53b3Jrb3V0U3RhdGUoYmFza2V0LCBCb29raW5nU3RhdHVzLkZhaWxlZCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEJhc2tldFN0YXR1cy5EaXNhcHByb3ZlZDpcclxuICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KEJvb2tpbmdTdGF0dXMuRmFpbGVkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBCYXNrZXRTdGF0dXMuUGFydGlhbGx5Qm9va2VkOlxyXG4gICAgICAgIHRoaXMuc3RhdHVzLm5leHQoQm9va2luZ1N0YXR1cy5GYWlsZWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnN0IHRtcDogbmV2ZXIgPSBiYXNrZXQuc3RhdHVzO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRtcCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbmRCYXNrZXRGb3JBcHByb3ZhbCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2Uuc2VuZEJhc2tldEZvckFwcHJvdmFsKHRoaXMuaWQpO1xyXG4gIH1cclxuXHJcbiAgd29ya291dEFwcHJvdmVkU3RhdGUoYmFza2V0OiBCYXNrZXREZXRhaWxzKTogQm9va2luZ1N0YXR1cyB7XHJcbiAgICBsZXQgc3RhdHVzID0gQm9va2luZ1N0YXR1cy5BcHByb3ZlZEJvb2s7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhIWJhc2tldC5iYXNrZXRJdGVtcy5maW5kKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIGJhc2tldEl0ZW0uYXZhaWxhYmxlUGF5bWVudE1ldGhvZHM/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICFiYXNrZXRJdGVtLnNlbGVjdGVkUGF5bWVudE1ldGhvZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMud29ya291dFN0YXRlKGJhc2tldCwgQm9va2luZ1N0YXR1cy5BcHByb3ZlZFBheW1lbnRPcHRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKGJhc2tldC5zdXBwSW5mbyk7XHJcbiAgICBjb25zdCBoYXZlU3VwcERldGFpbHMgPSBiYXNrZXQuc3VwcEluZm8uZmluZCgoc3VwcCkgPT4gc3VwcC5oYXNEZXRhaWxzKTtcclxuICAgIGNvbnNvbGUubG9nKGhhdmVTdXBwRGV0YWlscyk7XHJcbiAgICBpZiAoaGF2ZVN1cHBEZXRhaWxzKSB7XHJcbiAgICAgIHN0YXR1cyA9IEJvb2tpbmdTdGF0dXMuQXBwcm92ZWRTdXBwbGVtdGFsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMud29ya291dFN0YXRlKGJhc2tldCwgc3RhdHVzKTtcclxuICB9XHJcblxyXG4gIHdvcmtvdXRTdGF0ZShcclxuICAgIGJhc2tldDogQmFza2V0RGV0YWlscyxcclxuICAgIGRlZmF1bHRTdGF0ZTogQm9va2luZ1N0YXR1c1xyXG4gICk6IEJvb2tpbmdTdGF0dXMge1xyXG4gICAgLy8gSXMgdGhlIGJhc2tldCB2YWxpZGF0ZWQuXHJcbiAgICBpZiAoIWJhc2tldC52YWxpZGF0ZWQpIHtcclxuICAgICAgaWYgKHRoaXMuX2hhc0ludmFsaWRQcmljZShiYXNrZXQpKSB7XHJcbiAgICAgICAgcmV0dXJuIEJvb2tpbmdTdGF0dXMuUmV2YWxpZGF0ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gQm9va2luZ1N0YXR1cy5SZXZhbGlkYXRlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmF1bHRTdGF0ZTtcclxuICB9XHJcblxyXG4gIHdvcmtvdXRPcGVuU3RhdGUoYmFza2V0OiBCYXNrZXREZXRhaWxzKTogQm9va2luZ1N0YXR1cyB7XHJcbiAgICAvLyBJZiBhbnkgb2YgdGhlIGJhc2tldEl0ZW1zIGRvbid0IGhhdmUgZW5vdWdoIHRyYXZlbGxlcnMsIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlbS5cclxuICAgIGlmIChiYXNrZXQuYmFza2V0SXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLm5leHQoQm9va2luZ1N0YXR1cy5BZGRpbmdJdGVtcyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9uZWVkc0NvcnJlY3RUcmF2ZWxsZXJzKGJhc2tldCkpIHtcclxuICAgICAgdGhpcy5zdGF0dXMubmV4dChCb29raW5nU3RhdHVzLkFkZGluZ1RyYXZlbGxlcnMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fbmVlZExlYWRQYXNzZW5nZXJzKGJhc2tldCkpIHtcclxuICAgICAgdGhpcy5zdGF0dXMubmV4dChCb29raW5nU3RhdHVzLkFkZGluZ0xlYWRQYXNzZW5nZXIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBJcyB0aGUgYmFza2V0IHZhbGlkYXRlZC5cclxuICAgIGlmICghYmFza2V0LnZhbGlkYXRlZCkge1xyXG4gICAgICBpZiAodGhpcy5faGFzSW52YWxpZFByaWNlKGJhc2tldCkpIHtcclxuICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KEJvb2tpbmdTdGF0dXMuUmV2YWxpZGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdHVzLm5leHQoQm9va2luZ1N0YXR1cy5SZXZhbGlkYXRlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9uZWVkc01pR3JvdXBzKGJhc2tldCkpIHtcclxuICAgICAgdGhpcy5zdGF0dXMubmV4dChCb29raW5nU3RhdHVzLkNob29zZU1JR3JvdXApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGVscGVycy5uZWVkc01pKGJhc2tldCwgdGhpcy5uZWVkc1RvVmlld01pKSkge1xyXG4gICAgICB0aGlzLnN0YXR1cy5uZXh0KEJvb2tpbmdTdGF0dXMuUHJvdmlkZU1pKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RhdHVzLm5leHQoQm9va2luZ1N0YXR1cy5TZW5kRm9yQXBwcm92YWwpO1xyXG4gIH1cclxuXHJcbiAgcmV2YWxpZGF0ZSgpIHtcclxuICAgIHRoaXMuYmFza2V0U2VydmljZS5yZXZhbGlkYXRlKHRoaXMuaWQpO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhdmVsbGVycyhcclxuICAgIGJhc2tldDogQmFza2V0RGV0YWlscyxcclxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXHJcbiAgICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSxcclxuICAgIGluZGV4OiBudW1iZXIgPSAwXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuYmFza2V0U2VydmljZS5hZGRUcmF2ZWxsZXJzKGJhc2tldC5pZCwgYmFza2V0SXRlbSwgdHJhdmVsbGVycywgaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgc2V0TGVhZFBhc3NlbmdlcihcclxuICAgIGJhc2tldDogQmFza2V0RGV0YWlscyxcclxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXHJcbiAgICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXIsXHJcbiAgICBpbmRleDogbnVtYmVyID0gMFxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1VwZGF0aW5nLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmJhc2tldFNlcnZpY2Uuc2V0TGVhZFBhc3NlbmdlcihcclxuICAgICAgYmFza2V0LmlkLFxyXG4gICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICBpbmRleFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldEJhc2tldEl0ZW1NaUdyb3VwKGJhc2tldElkOiBzdHJpbmcsIGdyb3VwRGV0YWlsOiBNaUdyb3VwRGV0YWlsKSB7XHJcbiAgICB0aGlzLmlzVXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuYmFza2V0U2VydmljZS5zZXRCYXNrZXRJdGVtTWlHcm91cChcclxuICAgICAgYmFza2V0SWQsXHJcbiAgICAgIGdyb3VwRGV0YWlsLmJhc2tldEl0ZW0uaWQsXHJcbiAgICAgIGdyb3VwRGV0YWlsLnZhbHVlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2F2ZU1pR3JvdXAobWlHcm91cERldGFpbHNSZXN1bHQ6IE1pR3JvdXBEZXRhaWxbXSkge1xyXG4gICAgdGhpcy5pc1VwZGF0aW5nLm5leHQodHJ1ZSk7XHJcbiAgICBtaUdyb3VwRGV0YWlsc1Jlc3VsdC5mb3JFYWNoKChncm91cERldGFpbHM6IE1pR3JvdXBEZXRhaWwpID0+IHtcclxuICAgICAgdGhpcy5zZXRCYXNrZXRJdGVtTWlHcm91cCh0aGlzLmlkLCBncm91cERldGFpbHMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlTWkocmVzdWx0czogQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvW10pIHtcclxuICAgIHRoaXMubmVlZHNUb1ZpZXdNaSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1VwZGF0aW5nLm5leHQodHJ1ZSk7XHJcbiAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICB0aGlzLmJhc2tldFNlcnZpY2Uuc2F2ZU1pRGF0YSh0aGlzLmlkLCByZXN1bHRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUV4cGlyZWRJdGVtcygpIHtcclxuICAgIHRoaXMuaXNVcGRhdGluZy5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnJlbW92ZUV4cGlyZWRJdGVtcyh0aGlzLmlkKTtcclxuICB9XHJcblxyXG4gIHNldEJhc2tldEl0ZW1QYXltZW50T3B0aW9uKFxyXG4gICAgYmFza2V0SXRlbTogQmFza2V0SXRlbSxcclxuICAgIHBheW1lbnRNZXRob2Q6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc1VwZGF0aW5nLm5leHQodHJ1ZSk7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLnNldEJhc2tldEl0ZW1QYXltZW50T3B0aW9uKFxyXG4gICAgICB0aGlzLmJhc2tldC52YWx1ZSxcclxuICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgcGF5bWVudE1ldGhvZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGJvb2tCYXNrZXQocmVzdWx0czogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNVcGRhdGluZy5uZXh0KHRydWUpO1xyXG4gICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5ib29rQmFza2V0KHRoaXMuaWQsIHJlc3VsdHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmVlZHNNaUdyb3VwcyhiYXNrZXQ6IEJhc2tldERldGFpbHMpIHtcclxuICAgIHJldHVybiAhIWJhc2tldC5iYXNrZXRJdGVtcy5maW5kKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYmFza2V0SXRlbS5taUdyb3Vwc0F2YWlsYWJsZS5sZW5ndGggPiAwICYmICFiYXNrZXRJdGVtLm1pR3JvdXBTZWxlY3RlZFxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZWVkc0NvcnJlY3RUcmF2ZWxsZXJzKGJhc2tldDogQmFza2V0RGV0YWlscyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhYmFza2V0LmJhc2tldEl0ZW1zLmZpbmQoKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgdHJhdmVsbGVycyA9IHRoaXMuX3NwbGl0VHJhdmVsbGVycyhiYXNrZXRJdGVtKTtcclxuICAgICAgaWYgKGJhc2tldEl0ZW0uc2VydmljZS50eXBlID09PSBTZXJ2aWNlVHlwZS5QYXJraW5nKSB7XHJcbiAgICAgICAgcmV0dXJuICEoYmFza2V0SXRlbS5hZHVsdHMgPT09IDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAhKFxyXG4gICAgICAgICAgdHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoID09PSBiYXNrZXRJdGVtLmFkdWx0cyAmJlxyXG4gICAgICAgICAgdHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGggPT09IGJhc2tldEl0ZW0uY2hpbGRyZW4gJiZcclxuICAgICAgICAgIHRyYXZlbGxlcnMuaW5mYW50cy5sZW5ndGggPT09IGJhc2tldEl0ZW0uaW5mYW50c1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFzSW52YWxpZFByaWNlKGJhc2tldDogQmFza2V0RGV0YWlscyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhYmFza2V0LmJhc2tldEl0ZW1zLmZpbmQoKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuICFiYXNrZXRJdGVtLmxhdGVzdFZhbGlkYXRpb25QcmljZURpZmZlcmVuY2UgfHwgYmFza2V0SXRlbS5leHBpcmVkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZWVkTGVhZFBhc3NlbmdlcnMoYmFza2V0OiBCYXNrZXREZXRhaWxzKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISFiYXNrZXQuYmFza2V0SXRlbXMuZmluZCgoYmFza2V0SXRlbTogQmFza2V0SXRlbSkgPT4ge1xyXG4gICAgICByZXR1cm4gIWJhc2tldEl0ZW0ubGVhZFBhc3NlbmdlcjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3BsaXRUcmF2ZWxsZXJzKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiB7XHJcbiAgICBhZHVsdHM6IFVzZXJbXTtcclxuICAgIGNoaWxkcmVuOiBVc2VyW107XHJcbiAgICBpbmZhbnRzOiBVc2VyW107XHJcbiAgfSB7XHJcbiAgICByZXR1cm4gKGJhc2tldEl0ZW0udXNlclBhc3NlbmdlclR5cGVzIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgIChcclxuICAgICAgICBhY2N1bTogeyBhZHVsdHM6IFVzZXJbXTsgY2hpbGRyZW46IFVzZXJbXTsgaW5mYW50czogVXNlcltdIH0sXHJcbiAgICAgICAgdXNlcjogVXNlclBhc3NlbmdlclR5cGUsXHJcbiAgICAgICAgaW5kZXg6IG51bWJlclxyXG4gICAgICApID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHVzZXIucGFzc2VuZ2VyVHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBQYXNzZW5nZXJUeXBlLkFkdWx0OlxyXG4gICAgICAgICAgICBhY2N1bS5hZHVsdHMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLl9maW5kVXNlcihiYXNrZXRJdGVtLnVzZXJzLCBOdW1iZXIodXNlci5pZCkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBQYXNzZW5nZXJUeXBlLkNoaWxkOlxyXG4gICAgICAgICAgICBhY2N1bS5jaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgIHRoaXMuX2ZpbmRVc2VyKGJhc2tldEl0ZW0udXNlcnMsIE51bWJlcih1c2VyLmlkKSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFBhc3NlbmdlclR5cGUuSW5mYW50OlxyXG4gICAgICAgICAgICBhY2N1bS5pbmZhbnRzLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5fZmluZFVzZXIoYmFza2V0SXRlbS51c2VycywgTnVtYmVyKHVzZXIuaWQpKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFkdWx0czogW10sIGNoaWxkcmVuOiBbXSwgaW5mYW50czogW10gfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbmRVc2VyKHVzZXJzOiBVc2VyW10sIGlkOiBudW1iZXIpOiBVc2VyIHtcclxuICAgIHJldHVybiB1c2Vycy5maW5kKCh1c2VyOiBVc2VyKSA9PiB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIodXNlci5pZCkgPT09IGlkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2FibGUtYmFza2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2Jvb2thYmxlLWJhc2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUXZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBRUwsWUFBWSxFQUVaLGFBQWEsRUFFYixXQUFXLEVBS1osTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxNQUFNLE9BQU8sY0FBYztJQVd6QixZQUNVLGFBQStDLEVBQy9DLE9BQTJCO1FBRDNCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQUMvQyxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQVpyQyxXQUFNLEdBQW1DLElBQUksZUFBZSxDQUMxRCxhQUFhLENBQUMsT0FBTyxDQUN0QixDQUFDO1FBRUYsV0FBTSxHQUFtQyxJQUFJLGVBQWUsQ0FDMUQsRUFBbUIsQ0FDcEIsQ0FBQztRQUNGLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLGVBQVUsR0FBNkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbkUsT0FBRSxHQUFXLElBQUksQ0FBQztJQUl2QixDQUFDO0lBRUosVUFBVSxDQUFDLEVBQVU7UUFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFnQixFQUFtQixDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O01BZ0JFO0lBRU0sV0FBVyxDQUFDLEVBQVU7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxFQUFFLENBQUMsTUFBcUIsRUFBRSxFQUFFO2dCQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFekIsd0VBQXdFO2dCQUN4RSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO29CQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3pDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzNCO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDbEMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxzQkFBK0IsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQXFCLEVBQUUsRUFBRTtZQUM1QyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDNUMsQ0FBQyxJQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUNyQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBcUI7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsUUFBUSxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ3JCLEtBQUssWUFBWSxDQUFDLElBQUk7Z0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUNSLEtBQUssWUFBWSxDQUFDLGdCQUFnQjtnQkFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQzFELENBQUM7Z0JBQ0YsTUFBTTtZQUNSLEtBQUssWUFBWSxDQUFDLFFBQVE7Z0JBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNO1lBQ1IsS0FBSyxZQUFZLENBQUMsTUFBTTtnQkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLE1BQU07WUFDUixLQUFLLFlBQVksQ0FBQyxhQUFhO2dCQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDbEUsTUFBTTtZQUNSLEtBQUssWUFBWSxDQUFDLFdBQVc7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtZQUNSLEtBQUssWUFBWSxDQUFDLGVBQWU7Z0JBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtZQUNSO2dCQUNFLE1BQU0sR0FBRyxHQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBQ0QscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQXFCO1FBQ3hDLElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUM7UUFFeEMsSUFDRSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFzQixFQUFXLEVBQUU7O1lBQzVELE9BQU8sQ0FDTCxPQUFBLFVBQVUsQ0FBQyx1QkFBdUIsMENBQUUsTUFBTSxJQUFHLENBQUM7Z0JBQzlDLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUNsQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0Y7WUFDQSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdCLElBQUksZUFBZSxFQUFFO1lBQ25CLE1BQU0sR0FBRyxhQUFhLENBQUMsa0JBQWtCLENBQUM7U0FDM0M7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxZQUFZLENBQ1YsTUFBcUIsRUFDckIsWUFBMkI7UUFFM0IsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNqQyxPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUM7YUFDakM7WUFDRCxPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUM7U0FDakM7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBcUI7UUFDcEMsb0ZBQW9GO1FBQ3BGLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNqRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNwRCxPQUFPO1NBQ1I7UUFDRCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDM0MsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDOUMsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGFBQWEsQ0FDWCxNQUFxQixFQUNyQixVQUFzQixFQUN0QixVQUF1QixFQUN2QixRQUFnQixDQUFDO1FBRWpCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsTUFBcUIsRUFDckIsVUFBc0IsRUFDdEIsVUFBcUIsRUFDckIsUUFBZ0IsQ0FBQztRQUVqQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUNqQyxNQUFNLENBQUMsRUFBRSxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsb0JBQW9CLENBQUMsUUFBZ0IsRUFBRSxXQUEwQjtRQUMvRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUNyQyxRQUFRLEVBQ1IsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQ3pCLFdBQVcsQ0FBQyxLQUFLLENBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLG9CQUFxQztRQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUEyQixFQUFFLEVBQUU7WUFDM0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQW1DO1FBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELDBCQUEwQixDQUN4QixVQUFzQixFQUN0QixhQUFxQjtRQUVyQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUNqQixVQUFVLEVBQ1YsYUFBYSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQW1DO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3hEO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFxQjtRQUMxQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQXNCLEVBQVcsRUFBRTtZQUNuRSxPQUFPLENBQ0wsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUN2RSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsTUFBcUI7UUFDbkQsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFzQixFQUFFLEVBQUU7WUFDMUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JELElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDbkQsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNuQztpQkFBTTtnQkFDTCxPQUFPLENBQUMsQ0FDTixVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsTUFBTTtvQkFDOUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLFFBQVE7b0JBQ2xELFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQ2pELENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQXFCO1FBQzVDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBc0IsRUFBRSxFQUFFO1lBQzFELE9BQU8sQ0FBQyxVQUFVLENBQUMsK0JBQStCLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxNQUFxQjtRQUMvQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQXNCLEVBQUUsRUFBRTtZQUMxRCxPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxVQUFzQjtRQUs3QyxPQUFPLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ3hGLENBQ0UsS0FBaUYsRUFDakYsSUFBdUIsRUFDdkIsS0FBYSxFQUNiLEVBQUU7WUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFHM0UsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUMxQixLQUFLLGFBQWEsQ0FBQyxLQUFLO29CQUN0QixLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZixhQUFhLElBQUksY0FBYyxDQUNoQyxDQUFDO29CQUNGLE1BQU07Z0JBQ1IsS0FBSyxhQUFhLENBQUMsS0FBSztvQkFDdEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2pCLGFBQWEsSUFBSSxjQUFjLENBQ2hDLENBQUM7b0JBQ0YsTUFBTTtnQkFDUixLQUFLLGFBQWEsQ0FBQyxNQUFNO29CQUN2QixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDaEIsYUFBYSxJQUFJLGNBQWMsQ0FDaEMsQ0FBQztvQkFDRixNQUFNO2FBQ1Q7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFDRCxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQzFDLENBQUM7SUFDSixDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQWEsRUFBRSxFQUFVO1FBQ3pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQy9CLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWMsRUFBRSxFQUFVO1FBQzNDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFO1lBQ2hDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2tldERldGFpbHMsXHJcbiAgQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvLFxyXG4gIE1pR3JvdXBEZXRhaWxcclxufSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi4vY2xhc3Nlcy9oZWxwZXJzJztcclxuaW1wb3J0IHsgQm9va2luZ1N0YXR1cyB9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNrZXRJdGVtLFxyXG4gIEJhc2tldFN0YXR1cyxcclxuICBHdWVzdCxcclxuICBQYXNzZW5nZXJUeXBlLFxyXG4gIFBheW1lbnRNZXRob2QsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvLFxyXG4gIFVzZXIsXHJcbiAgVXNlck9yR3Vlc3QsXHJcbiAgVXNlclBhc3NlbmdlclR5cGVcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29rYWJsZUJhc2tldCB7XHJcbiAgc3RhdHVzOiBCZWhhdmlvclN1YmplY3Q8Qm9va2luZ1N0YXR1cz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJvb2tpbmdTdGF0dXM+KFxyXG4gICAgQm9va2luZ1N0YXR1cy5Mb2FkaW5nXHJcbiAgKTtcclxuXHJcbiAgYmFza2V0OiBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldERldGFpbHM+KFxyXG4gICAge30gYXMgQmFza2V0RGV0YWlsc1xyXG4gICk7XHJcbiAgbmVlZHNUb1ZpZXdNaTogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNVcGRhdGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpZDogc3RyaW5nID0gbnVsbDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lc1xyXG4gICkge31cclxuXHJcbiAgbG9hZEJhc2tldChpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlkID0gaWQ7XHJcbiAgICB0aGlzLmJhc2tldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz4oe30gYXMgQmFza2V0RGV0YWlscyk7XHJcbiAgICB0aGlzLnN0YXR1cy5uZXh0KEJvb2tpbmdTdGF0dXMuTG9hZGluZyk7XHJcbiAgICB0aGlzLmlzVXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX2xvYWRCYXNrZXQoaWQpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIExvYWRpbmcsXHJcbiAgMCAgQWRkaW5nSXRlbXMsXHJcbiAgMSAgQWRkaW5nVHJhdmVsbGVycyxcclxuICAyICBBZGRpbmdMZWFkUGFzc2VuZ2VyLFxyXG4gIDMgIEZhaWxlZCxcclxuICA0ICBSZXZhbGlkYXRlLFxyXG4gIDUgIFJldmFsaWRhdGluZ0Vycm9yLFxyXG4gIDYgIFJldmFsaWRhdGluZ0FjY2VwdGVkLFxyXG4gIDcgIENob29zZU1JR3JvdXAsXHJcbiAgOCAgUHJvdmlkZU1pLFxyXG4gIDkgIFNlbmRGb3JBcHByb3ZhbCxcclxuICAxMCBBd2FpdGluZ0FwcHJvdmFsLFxyXG4gIDExIEFwcHJvdmVkXHJcbiAgMTIgUGFydGlhbGx5Qm9va2VkLFxyXG4gIDEzIENvbXBsZXRlXHJcbiAgKi9cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZEJhc2tldChpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmJhc2tldFNlcnZpY2UubG9hZEJhc2tldChpZCk7XHJcblxyXG4gICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnN1YnNyaWJlVG9CYXNrZXQoaWQsIHtcclxuICAgICAgbmV4dDogKGJhc2tldDogQmFza2V0RGV0YWlscykgPT4ge1xyXG4gICAgICAgIHRoaXMuYmFza2V0Lm5leHQoYmFza2V0KTtcclxuXHJcbiAgICAgICAgLy8gYmVmb3JlIHVwZGF0aW5nIHRoZSBiYXNrZXQgY2hlY2sgaWYgdGhlcmUgaXMgYW4gZXhwaXJlZCBiYXNrZXQgaXRlbS9zXHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJlZEl0ZW1JblRoZUJhc2tldCgpKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KEJvb2tpbmdTdGF0dXMuRXhwaXJlZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlQmFza2V0KGJhc2tldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmJhc2tldC5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5iYXNrZXQuY29tcGxldGUoKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnQmFza2V0IGNvbXBsZXRlZCcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV4cGlyZWRJdGVtSW5UaGVCYXNrZXQoKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLmlzVXBkYXRpbmcubmV4dChmYWxzZSk7XHJcbiAgICBsZXQgZXhwaXJlZEl0ZW1JblRoZUJhc2tldDogYm9vbGVhbjtcclxuICAgIHRoaXMuYmFza2V0LnN1YnNjcmliZSgoYmFza2V0OiBCYXNrZXREZXRhaWxzKSA9PiB7XHJcbiAgICAgICAgZXhwaXJlZEl0ZW1JblRoZUJhc2tldCA9IGJhc2tldC5iYXNrZXRJdGVtcy5zb21lKFxyXG4gICAgICAgICAgICAoaXRlbTogQmFza2V0SXRlbSkgPT4gaXRlbS5leHBpcmVkXHJcbiAgICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGV4cGlyZWRJdGVtSW5UaGVCYXNrZXQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVCYXNrZXQoYmFza2V0OiBCYXNrZXREZXRhaWxzKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVXBkYXRpbmcubmV4dChmYWxzZSk7XHJcbiAgICBzd2l0Y2ggKGJhc2tldC5zdGF0dXMpIHtcclxuICAgICAgY2FzZSBCYXNrZXRTdGF0dXMuT3BlbjpcclxuICAgICAgICB0aGlzLndvcmtvdXRPcGVuU3RhdGUoYmFza2V0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBCYXNrZXRTdGF0dXMuQXdhaXRpbmdBcHByb3ZhbDpcclxuICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KFxyXG4gICAgICAgICAgdGhpcy53b3Jrb3V0U3RhdGUoYmFza2V0LCBCb29raW5nU3RhdHVzLkF3YWl0aW5nQXBwcm92YWwpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBCYXNrZXRTdGF0dXMuQXBwcm92ZWQ6XHJcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dCh0aGlzLndvcmtvdXRBcHByb3ZlZFN0YXRlKGJhc2tldCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEJhc2tldFN0YXR1cy5Cb29rZWQ6XHJcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dCh0aGlzLndvcmtvdXRTdGF0ZShiYXNrZXQsIEJvb2tpbmdTdGF0dXMuQ29tcGxldGUpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBCYXNrZXRTdGF0dXMuQm9va2luZ0ZhaWxlZDpcclxuICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KHRoaXMud29ya291dFN0YXRlKGJhc2tldCwgQm9va2luZ1N0YXR1cy5GYWlsZWQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBCYXNrZXRTdGF0dXMuRGlzYXBwcm92ZWQ6XHJcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dChCb29raW5nU3RhdHVzLkZhaWxlZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQmFza2V0U3RhdHVzLlBhcnRpYWxseUJvb2tlZDpcclxuICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KEJvb2tpbmdTdGF0dXMuRmFpbGVkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zdCB0bXA6IG5ldmVyID0gYmFza2V0LnN0YXR1cztcclxuICAgICAgICBjb25zb2xlLmxvZyh0bXApO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZW5kQmFza2V0Rm9yQXBwcm92YWwoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLnNlbmRCYXNrZXRGb3JBcHByb3ZhbCh0aGlzLmlkKTtcclxuICB9XHJcblxyXG4gIHdvcmtvdXRBcHByb3ZlZFN0YXRlKGJhc2tldDogQmFza2V0RGV0YWlscyk6IEJvb2tpbmdTdGF0dXMge1xyXG4gICAgbGV0IHN0YXR1cyA9IEJvb2tpbmdTdGF0dXMuQXBwcm92ZWRCb29rO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgISFiYXNrZXQuYmFza2V0SXRlbXMuZmluZCgoYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBiYXNrZXRJdGVtLmF2YWlsYWJsZVBheW1lbnRNZXRob2RzPy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAhYmFza2V0SXRlbS5zZWxlY3RlZFBheW1lbnRNZXRob2RcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLndvcmtvdXRTdGF0ZShiYXNrZXQsIEJvb2tpbmdTdGF0dXMuQXBwcm92ZWRQYXltZW50T3B0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhiYXNrZXQuc3VwcEluZm8pO1xyXG4gICAgY29uc3QgaGF2ZVN1cHBEZXRhaWxzID0gYmFza2V0LnN1cHBJbmZvLmZpbmQoKHN1cHApID0+IHN1cHAuaGFzRGV0YWlscyk7XHJcbiAgICBjb25zb2xlLmxvZyhoYXZlU3VwcERldGFpbHMpO1xyXG4gICAgaWYgKGhhdmVTdXBwRGV0YWlscykge1xyXG4gICAgICBzdGF0dXMgPSBCb29raW5nU3RhdHVzLkFwcHJvdmVkU3VwcGxlbXRhbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLndvcmtvdXRTdGF0ZShiYXNrZXQsIHN0YXR1cyk7XHJcbiAgfVxyXG5cclxuICB3b3Jrb3V0U3RhdGUoXHJcbiAgICBiYXNrZXQ6IEJhc2tldERldGFpbHMsXHJcbiAgICBkZWZhdWx0U3RhdGU6IEJvb2tpbmdTdGF0dXNcclxuICApOiBCb29raW5nU3RhdHVzIHtcclxuICAgIC8vIElzIHRoZSBiYXNrZXQgdmFsaWRhdGVkLlxyXG4gICAgaWYgKCFiYXNrZXQudmFsaWRhdGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLl9oYXNJbnZhbGlkUHJpY2UoYmFza2V0KSkge1xyXG4gICAgICAgIHJldHVybiBCb29raW5nU3RhdHVzLlJldmFsaWRhdGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIEJvb2tpbmdTdGF0dXMuUmV2YWxpZGF0ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBkZWZhdWx0U3RhdGU7XHJcbiAgfVxyXG5cclxuICB3b3Jrb3V0T3BlblN0YXRlKGJhc2tldDogQmFza2V0RGV0YWlscyk6IEJvb2tpbmdTdGF0dXMge1xyXG4gICAgLy8gSWYgYW55IG9mIHRoZSBiYXNrZXRJdGVtcyBkb24ndCBoYXZlIGVub3VnaCB0cmF2ZWxsZXJzLCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZW0uXHJcbiAgICBpZiAoYmFza2V0LmJhc2tldEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnN0YXR1cy5uZXh0KEJvb2tpbmdTdGF0dXMuQWRkaW5nSXRlbXMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fbmVlZHNDb3JyZWN0VHJhdmVsbGVycyhiYXNrZXQpKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLm5leHQoQm9va2luZ1N0YXR1cy5BZGRpbmdUcmF2ZWxsZXJzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX25lZWRMZWFkUGFzc2VuZ2VycyhiYXNrZXQpKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLm5leHQoQm9va2luZ1N0YXR1cy5BZGRpbmdMZWFkUGFzc2VuZ2VyKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gSXMgdGhlIGJhc2tldCB2YWxpZGF0ZWQuXHJcbiAgICBpZiAoIWJhc2tldC52YWxpZGF0ZWQpIHtcclxuICAgICAgaWYgKHRoaXMuX2hhc0ludmFsaWRQcmljZShiYXNrZXQpKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dChCb29raW5nU3RhdHVzLlJldmFsaWRhdGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN0YXR1cy5uZXh0KEJvb2tpbmdTdGF0dXMuUmV2YWxpZGF0ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fbmVlZHNNaUdyb3VwcyhiYXNrZXQpKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLm5leHQoQm9va2luZ1N0YXR1cy5DaG9vc2VNSUdyb3VwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhlbHBlcnMubmVlZHNNaShiYXNrZXQsIHRoaXMubmVlZHNUb1ZpZXdNaSkpIHtcclxuICAgICAgdGhpcy5zdGF0dXMubmV4dChCb29raW5nU3RhdHVzLlByb3ZpZGVNaSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0YXR1cy5uZXh0KEJvb2tpbmdTdGF0dXMuU2VuZEZvckFwcHJvdmFsKTtcclxuICB9XHJcblxyXG4gIHJldmFsaWRhdGUoKSB7XHJcbiAgICB0aGlzLmJhc2tldFNlcnZpY2UucmV2YWxpZGF0ZSh0aGlzLmlkKTtcclxuICB9XHJcblxyXG4gIGFkZFRyYXZlbGxlcnMoXHJcbiAgICBiYXNrZXQ6IEJhc2tldERldGFpbHMsXHJcbiAgICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLFxyXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10sXHJcbiAgICBpbmRleDogbnVtYmVyID0gMFxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1VwZGF0aW5nLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVHJhdmVsbGVycyhiYXNrZXQuaWQsIGJhc2tldEl0ZW0sIHRyYXZlbGxlcnMsIGluZGV4KTtcclxuICB9XHJcblxyXG4gIHNldExlYWRQYXNzZW5nZXIoXHJcbiAgICBiYXNrZXQ6IEJhc2tldERldGFpbHMsXHJcbiAgICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLFxyXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyLFxyXG4gICAgaW5kZXg6IG51bWJlciA9IDBcclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMuaXNVcGRhdGluZy5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnNldExlYWRQYXNzZW5nZXIoXHJcbiAgICAgIGJhc2tldC5pZCxcclxuICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgaW5kZXhcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXRCYXNrZXRJdGVtTWlHcm91cChiYXNrZXRJZDogc3RyaW5nLCBncm91cERldGFpbDogTWlHcm91cERldGFpbCkge1xyXG4gICAgdGhpcy5pc1VwZGF0aW5nLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmJhc2tldFNlcnZpY2Uuc2V0QmFza2V0SXRlbU1pR3JvdXAoXHJcbiAgICAgIGJhc2tldElkLFxyXG4gICAgICBncm91cERldGFpbC5iYXNrZXRJdGVtLmlkLFxyXG4gICAgICBncm91cERldGFpbC52YWx1ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNhdmVNaUdyb3VwKG1pR3JvdXBEZXRhaWxzUmVzdWx0OiBNaUdyb3VwRGV0YWlsW10pIHtcclxuICAgIHRoaXMuaXNVcGRhdGluZy5uZXh0KHRydWUpO1xyXG4gICAgbWlHcm91cERldGFpbHNSZXN1bHQuZm9yRWFjaCgoZ3JvdXBEZXRhaWxzOiBNaUdyb3VwRGV0YWlsKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0QmFza2V0SXRlbU1pR3JvdXAodGhpcy5pZCwgZ3JvdXBEZXRhaWxzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZU1pKHJlc3VsdHM6IEJhc2tldEl0ZW1NYW5hZ2VtZW50SW5mb1tdKSB7XHJcbiAgICB0aGlzLm5lZWRzVG9WaWV3TWkgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNVcGRhdGluZy5uZXh0KHRydWUpO1xyXG4gICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnNhdmVNaURhdGEodGhpcy5pZCwgcmVzdWx0cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVFeHBpcmVkSXRlbXMoKSB7XHJcbiAgICB0aGlzLmlzVXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuYmFza2V0U2VydmljZS5yZW1vdmVFeHBpcmVkSXRlbXModGhpcy5pZCk7XHJcbiAgfVxyXG5cclxuICBzZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbihcclxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXHJcbiAgICBwYXltZW50TWV0aG9kOiBzdHJpbmdcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNVcGRhdGluZy5uZXh0KHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5zZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbihcclxuICAgICAgdGhpcy5iYXNrZXQudmFsdWUsXHJcbiAgICAgIGJhc2tldEl0ZW0sXHJcbiAgICAgIHBheW1lbnRNZXRob2RcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBib29rQmFza2V0KHJlc3VsdHM6IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb1tdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzVXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIGlmIChyZXN1bHRzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYm9va0Jhc2tldCh0aGlzLmlkLCByZXN1bHRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25lZWRzTWlHcm91cHMoYmFza2V0OiBCYXNrZXREZXRhaWxzKSB7XHJcbiAgICByZXR1cm4gISFiYXNrZXQuYmFza2V0SXRlbXMuZmluZCgoYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGJhc2tldEl0ZW0ubWlHcm91cHNBdmFpbGFibGUubGVuZ3RoID4gMCAmJiAhYmFza2V0SXRlbS5taUdyb3VwU2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmVlZHNDb3JyZWN0VHJhdmVsbGVycyhiYXNrZXQ6IEJhc2tldERldGFpbHMpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIWJhc2tldC5iYXNrZXRJdGVtcy5maW5kKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRyYXZlbGxlcnMgPSB0aGlzLl9zcGxpdFRyYXZlbGxlcnMoYmFza2V0SXRlbSk7XHJcbiAgICAgIGlmIChiYXNrZXRJdGVtLnNlcnZpY2UudHlwZSA9PT0gU2VydmljZVR5cGUuUGFya2luZykge1xyXG4gICAgICAgIHJldHVybiAhKGJhc2tldEl0ZW0uYWR1bHRzID09PSAxKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gIShcclxuICAgICAgICAgIHRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aCA9PT0gYmFza2V0SXRlbS5hZHVsdHMgJiZcclxuICAgICAgICAgIHRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoID09PSBiYXNrZXRJdGVtLmNoaWxkcmVuICYmXHJcbiAgICAgICAgICB0cmF2ZWxsZXJzLmluZmFudHMubGVuZ3RoID09PSBiYXNrZXRJdGVtLmluZmFudHNcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhc0ludmFsaWRQcmljZShiYXNrZXQ6IEJhc2tldERldGFpbHMpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIWJhc2tldC5iYXNrZXRJdGVtcy5maW5kKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XHJcbiAgICAgIHJldHVybiAhYmFza2V0SXRlbS5sYXRlc3RWYWxpZGF0aW9uUHJpY2VEaWZmZXJlbmNlIHx8IGJhc2tldEl0ZW0uZXhwaXJlZDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmVlZExlYWRQYXNzZW5nZXJzKGJhc2tldDogQmFza2V0RGV0YWlscyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhYmFza2V0LmJhc2tldEl0ZW1zLmZpbmQoKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuICFiYXNrZXRJdGVtLmxlYWRQYXNzZW5nZXI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NwbGl0VHJhdmVsbGVycyhiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKToge1xyXG4gICAgYWR1bHRzOiBVc2VyT3JHdWVzdFtdO1xyXG4gICAgY2hpbGRyZW46IFVzZXJPckd1ZXN0W107XHJcbiAgICBpbmZhbnRzOiBVc2VyT3JHdWVzdFtdO1xyXG4gIH0ge1xyXG4gICAgcmV0dXJuIChiYXNrZXRJdGVtLnVzZXJQYXNzZW5nZXJUeXBlcy5jb25jYXQoYmFza2V0SXRlbS5ndWVzdFBhc3NlbmdlclR5cGVzKSB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoXHJcbiAgICAgICAgYWNjdW06IHsgYWR1bHRzOiBVc2VyT3JHdWVzdFtdOyBjaGlsZHJlbjogVXNlck9yR3Vlc3RbXTsgaW5mYW50czogVXNlck9yR3Vlc3RbXSB9LFxyXG4gICAgICAgIHVzZXI6IFVzZXJQYXNzZW5nZXJUeXBlLFxyXG4gICAgICAgIGluZGV4OiBudW1iZXJcclxuICAgICAgKSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXJQYXNzZW5nZXIgPSB0aGlzLl9maW5kVXNlcihiYXNrZXRJdGVtLnVzZXJzLCBOdW1iZXIodXNlci5pZCkpO1xyXG4gICAgICAgIGNvbnN0IGd1ZXN0UGFzc2VuZ2VyID0gdGhpcy5fZmluZEd1ZXN0KGJhc2tldEl0ZW0uZ3Vlc3RzLCBOdW1iZXIodXNlci5pZCkpO1xyXG5cclxuXHJcbiAgICAgICAgc3dpdGNoICh1c2VyLnBhc3NlbmdlclR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgUGFzc2VuZ2VyVHlwZS5BZHVsdDpcclxuICAgICAgICAgICAgYWNjdW0uYWR1bHRzLnB1c2goXHJcbiAgICAgICAgICAgICAgdXNlclBhc3NlbmdlciB8fCBndWVzdFBhc3NlbmdlclxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgUGFzc2VuZ2VyVHlwZS5DaGlsZDpcclxuICAgICAgICAgICAgYWNjdW0uY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICB1c2VyUGFzc2VuZ2VyIHx8IGd1ZXN0UGFzc2VuZ2VyXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBQYXNzZW5nZXJUeXBlLkluZmFudDpcclxuICAgICAgICAgICAgYWNjdW0uaW5mYW50cy5wdXNoKFxyXG4gICAgICAgICAgICAgIHVzZXJQYXNzZW5nZXIgfHwgZ3Vlc3RQYXNzZW5nZXJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgfSxcclxuICAgICAgeyBhZHVsdHM6IFtdLCBjaGlsZHJlbjogW10sIGluZmFudHM6IFtdIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maW5kVXNlcih1c2VyczogVXNlcltdLCBpZDogbnVtYmVyKTogVXNlciB7XHJcbiAgICByZXR1cm4gdXNlcnMuZmluZCgodXNlcjogVXNlcikgPT4ge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKHVzZXIuaWQpID09PSBpZDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmluZEd1ZXN0KHVzZXJzOiBHdWVzdFtdLCBpZDogbnVtYmVyKTogR3Vlc3Qge1xyXG4gICAgcmV0dXJuIHVzZXJzLmZpbmQoKHVzZXI6IEd1ZXN0KSA9PiB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIodXNlci5pZCkgPT09IGlkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==