@sabstravtech/obtservices 0.0.22042501 → 0.0.22051001

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 (165) hide show
  1. package/angular/fetchers.d.ts +8 -0
  2. package/angular/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +7 -0
  3. package/angular/lib/vendor/fetchers/get-all-airlines.fetcher.d.ts +7 -0
  4. package/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +7 -0
  5. package/angular/lib/vendor/fetchers/get-car-hire-providers.fetcher.d.ts +7 -0
  6. package/angular/lib/vendor/fetchers/get-hotel-chains.fetcher.d.ts +7 -0
  7. package/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +7 -0
  8. package/angular/lib/vendor/fetchers/get-rail-providers.fetcher.d.ts +7 -0
  9. package/angular/lib/vendor/fetchers/send-offline-notification.fetcher.d.ts +7 -0
  10. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -3
  11. package/angular/lib/vendor/services/search.service.d.ts +10 -3
  12. package/angular/lib/vendor/services/ticket-queue.service.d.ts +6 -0
  13. package/angular/lib/vendor/services/user.service.d.ts +5 -3
  14. package/angular/lib/vendor/types/graphql.angular.types.d.ts +438 -16
  15. package/angular/lib/vendor/updaters/edit-user.updater.d.ts +6 -0
  16. package/angular/lib/vendor/updaters/set-user-language-updater.d.ts +6 -0
  17. package/angular/sabstravtech-obtservices-angular.d.ts +16 -13
  18. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  19. package/angular/services.d.ts +1 -0
  20. package/base/fetchers.d.ts +10 -0
  21. package/base/interfaces.d.ts +2 -0
  22. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +2 -1
  23. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +1 -0
  24. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +8 -2
  25. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +57 -0
  26. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +2 -1
  27. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +3 -1
  28. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +27 -7
  29. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +1 -0
  30. package/base/lib/vendor/classes/management-info-and-valid.d.ts +6 -1
  31. package/base/lib/vendor/classes/modal-types.enum.d.ts +2 -0
  32. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +1 -0
  33. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +3 -2
  34. package/base/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +23 -0
  35. package/base/lib/vendor/fetchers/get-all-airlines.fetcher.d.ts +20 -0
  36. package/base/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +20 -0
  37. package/base/lib/vendor/fetchers/get-car-hire-providers.fetcher.d.ts +20 -0
  38. package/base/lib/vendor/fetchers/get-hotel-chains.fetcher.d.ts +20 -0
  39. package/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +21 -0
  40. package/base/lib/vendor/fetchers/get-rail-providers.fetcher.d.ts +20 -0
  41. package/base/lib/vendor/fetchers/send-offline-notification.fetcher.d.ts +21 -0
  42. package/base/lib/vendor/fetchers/user-fetcher.d.ts +2 -3
  43. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
  44. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +1 -0
  45. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +6 -3
  46. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +2 -0
  47. package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +26 -0
  48. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +1 -0
  49. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +2 -0
  50. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +11 -3
  51. package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
  52. package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
  53. package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +1 -0
  54. package/base/lib/vendor/interfaces/Isearch.service.d.ts +7 -1
  55. package/base/lib/vendor/interfaces/Iuser.service.d.ts +2 -1
  56. package/base/lib/vendor/interfaces/eurostar-search-arg.interface.d.ts +2 -0
  57. package/base/lib/vendor/interfaces/fast-track-filters.interface.d.ts +4 -0
  58. package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
  59. package/base/lib/vendor/interfaces/summary-interface.d.ts +2 -0
  60. package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
  61. package/base/lib/vendor/models/traveller.object.d.ts +1 -0
  62. package/base/lib/vendor/services/enterprise-basket.service.d.ts +13 -6
  63. package/base/lib/vendor/services/requires-reason.service.d.ts +20 -0
  64. package/base/lib/vendor/services/search.service.d.ts +30 -5
  65. package/base/lib/vendor/services/user.service.d.ts +12 -5
  66. package/base/lib/vendor/services/webtoken.service.d.ts +1 -0
  67. package/base/lib/vendor/types/graphql.types.d.ts +398 -16
  68. package/base/lib/vendor/types/types.d.ts +53 -16
  69. package/base/lib/vendor/updaters/edit-user-updater.d.ts +19 -0
  70. package/base/lib/vendor/updaters/set-user-language-updater.d.ts +19 -0
  71. package/base/sabstravtech-obtservices-base.d.ts +5 -5
  72. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  73. package/base/services.d.ts +1 -0
  74. package/base/updaters.d.ts +2 -0
  75. package/bundles/sabstravtech-obtservices-angular.umd.js +499 -91
  76. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  77. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  78. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  79. package/bundles/sabstravtech-obtservices-base.umd.js +3204 -176
  80. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  81. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  82. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  83. package/esm2015/angular/fetchers.js +9 -1
  84. package/esm2015/angular/lib/vendor/fetchers/fast-track-quote.fetcher.js +25 -0
  85. package/esm2015/angular/lib/vendor/fetchers/get-all-airlines.fetcher.js +25 -0
  86. package/esm2015/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.js +25 -0
  87. package/esm2015/angular/lib/vendor/fetchers/get-car-hire-providers.fetcher.js +25 -0
  88. package/esm2015/angular/lib/vendor/fetchers/get-hotel-chains.fetcher.js +25 -0
  89. package/esm2015/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +25 -0
  90. package/esm2015/angular/lib/vendor/fetchers/get-rail-providers.fetcher.js +25 -0
  91. package/esm2015/angular/lib/vendor/fetchers/send-offline-notification.fetcher.js +25 -0
  92. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +8 -5
  93. package/esm2015/angular/lib/vendor/services/http-call.service.js +6 -2
  94. package/esm2015/angular/lib/vendor/services/search.service.js +58 -37
  95. package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +23 -0
  96. package/esm2015/angular/lib/vendor/services/user.service.js +12 -6
  97. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +583 -5
  98. package/esm2015/angular/lib/vendor/updaters/edit-user.updater.js +22 -0
  99. package/esm2015/angular/lib/vendor/updaters/set-user-language-updater.js +22 -0
  100. package/esm2015/angular/obtservices.module.js +3 -1
  101. package/esm2015/angular/sabstravtech-obtservices-angular.js +17 -14
  102. package/esm2015/angular/services.js +2 -1
  103. package/esm2015/base/fetchers.js +11 -1
  104. package/esm2015/base/interfaces.js +3 -1
  105. package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +4 -1
  106. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +37 -5
  107. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +46 -16
  108. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +77 -10
  109. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +296 -0
  110. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +44 -5
  111. package/esm2015/base/lib/vendor/classes/helpers.js +6 -2
  112. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +58 -19
  113. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +214 -25
  114. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +22 -6
  115. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +1 -1
  116. package/esm2015/base/lib/vendor/classes/modal-types.enum.js +3 -1
  117. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +27 -7
  118. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +62 -13
  119. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +2 -2
  120. package/esm2015/base/lib/vendor/fetchers/fast-track-quote.fetcher.js +11 -0
  121. package/esm2015/base/lib/vendor/fetchers/get-all-airlines.fetcher.js +11 -0
  122. package/esm2015/base/lib/vendor/fetchers/get-cancellation-info.fetcher.js +10 -0
  123. package/esm2015/base/lib/vendor/fetchers/get-car-hire-providers.fetcher.js +11 -0
  124. package/esm2015/base/lib/vendor/fetchers/get-hotel-chains.fetcher.js +11 -0
  125. package/esm2015/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +11 -0
  126. package/esm2015/base/lib/vendor/fetchers/get-rail-providers.fetcher.js +11 -0
  127. package/esm2015/base/lib/vendor/fetchers/send-offline-notification.fetcher.js +11 -0
  128. package/esm2015/base/lib/vendor/fetchers/user-fetcher.js +1 -1
  129. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  130. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  131. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  132. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  133. package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +2 -0
  134. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  135. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
  136. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  137. package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
  138. package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
  139. package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
  140. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  141. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  142. package/esm2015/base/lib/vendor/interfaces/eurostar-search-arg.interface.js +1 -1
  143. package/esm2015/base/lib/vendor/interfaces/fast-track-filters.interface.js +2 -0
  144. package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
  145. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  146. package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
  147. package/esm2015/base/lib/vendor/models/traveller.object.js +3 -2
  148. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +63 -17
  149. package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +16 -12
  150. package/esm2015/base/lib/vendor/services/requires-reason.service.js +49 -0
  151. package/esm2015/base/lib/vendor/services/search.service.js +166 -20
  152. package/esm2015/base/lib/vendor/services/user.service.js +44 -6
  153. package/esm2015/base/lib/vendor/services/webtoken.service.js +9 -5
  154. package/esm2015/base/lib/vendor/types/graphql.types.js +9 -1
  155. package/esm2015/base/lib/vendor/types/types.js +1704 -1
  156. package/esm2015/base/lib/vendor/updaters/edit-user-updater.js +11 -0
  157. package/esm2015/base/lib/vendor/updaters/set-user-language-updater.js +11 -0
  158. package/esm2015/base/sabstravtech-obtservices-base.js +6 -5
  159. package/esm2015/base/services.js +2 -1
  160. package/esm2015/base/updaters.js +3 -1
  161. package/fesm2015/sabstravtech-obtservices-angular.js +790 -19
  162. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  163. package/fesm2015/sabstravtech-obtservices-base.js +3041 -169
  164. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  165. package/package.json +1 -1
@@ -237,6 +237,9 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
237
237
  if ((_a = tt === null || tt === void 0 ? void 0 : tt.railstation) === null || _a === void 0 ? void 0 : _a.id) {
238
238
  this._travellingTo = tt.railstation.id;
239
239
  }
240
+ else if (tt === null || tt === void 0 ? void 0 : tt.id) {
241
+ this._travellingTo = tt.id;
242
+ }
240
243
  this._isValid();
241
244
  }
242
245
  get travellingFrom() {
@@ -249,6 +252,9 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
249
252
  if ((_a = tt === null || tt === void 0 ? void 0 : tt.railstation) === null || _a === void 0 ? void 0 : _a.id) {
250
253
  this._travellingFrom = tt.railstation.id;
251
254
  }
255
+ else if (tt === null || tt === void 0 ? void 0 : tt.id) {
256
+ this._travellingFrom = tt.id;
257
+ }
252
258
  this._isValid();
253
259
  }
254
260
  get chosenRailClass() {
@@ -563,7 +569,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
563
569
  inboundCheapest: inPrices.cheapestTickets,
564
570
  cheapestClassTicket: inPrices.cheapestClassTicket,
565
571
  cheapestClassTicketReturn: outPrices.outboundClassTicket,
566
- cheapestClassTicketDual: inPrices.outboundClassTicket,
572
+ cheapestClassTicketDual: inPrices.outboundClassTicket
567
573
  });
568
574
  return Object.assign(Object.assign({}, railResult), { outbound, return: inbound });
569
575
  });
@@ -655,7 +661,8 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
655
661
  if (isStandardClassSingle) {
656
662
  const inboundPrice = min(prices1.cheapestClassTicket.inboundStandardClassFare, dualSingleStandardJourneys, journey);
657
663
  const outboundTotalPrice = prices1.cheapestClassTicket.standardClassFare.price;
658
- if (outboundTotalPrice > prices1.outboundClassTicket.standardClassFare.price) {
664
+ if (outboundTotalPrice >
665
+ prices1.outboundClassTicket.standardClassFare.price) {
659
666
  prices1.cheapestClassTicket.standardClassFare =
660
667
  prices1.outboundClassTicket.standardClassFare;
661
668
  // prices1.cheapestClassTicket.inboundStandardClassFare = {
@@ -664,7 +671,8 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
664
671
  // fare: null
665
672
  // };
666
673
  }
667
- else if (inboundPrice.price > prices1.cheapestClassTicket.inboundStandardClassFare.price) {
674
+ else if (inboundPrice.price >
675
+ prices1.cheapestClassTicket.inboundStandardClassFare.price) {
668
676
  prices1.cheapestClassTicket.inboundStandardClassFare =
669
677
  inboundPrice;
670
678
  }
@@ -683,7 +691,8 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
683
691
  // fare: null
684
692
  // };
685
693
  }
686
- else if (inboundPrice.price > prices1.cheapestClassTicket.inboundFirstClassFare.price) {
694
+ else if (inboundPrice.price >
695
+ prices1.cheapestClassTicket.inboundFirstClassFare.price) {
687
696
  prices1.cheapestClassTicket.inboundFirstClassFare = inboundPrice;
688
697
  }
689
698
  }
@@ -1026,14 +1035,16 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1026
1035
  fareIdentifiers: [outboundFare.identifiers.fareIdentifier],
1027
1036
  journeyIdentifier: outboundFare.identifiers.journeyIdentifier,
1028
1037
  isDualSingleReturn: true,
1029
- journeyLegs: this.removedScheduledPlatformFromCallingPoints(outbound.journeyLegs)
1038
+ journeyLegs: this.removedScheduledPlatformFromCallingPoints(outbound.journeyLegs),
1039
+ eTicket: !!outboundFare.eTicketAvailable
1030
1040
  },
1031
1041
  // ticketQueueList,
1032
1042
  return: {
1033
1043
  fareIdentifiers: [inboundFare.identifiers.fareIdentifier],
1034
1044
  journeyIdentifier: inboundFare.identifiers.journeyIdentifier,
1035
1045
  isDualSingleReturn: true,
1036
- journeyLegs: this.removedScheduledPlatformFromCallingPoints(inbound.journeyLegs)
1046
+ journeyLegs: this.removedScheduledPlatformFromCallingPoints(inbound.journeyLegs),
1047
+ eTicket: !!inboundFare.eTicketAvailable
1037
1048
  },
1038
1049
  termsAndCond: termsAndConditions
1039
1050
  },
@@ -1053,7 +1064,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1053
1064
  if (outTicketExtras) {
1054
1065
  basketItem.detail.outbound.ticketExtras = outTicketExtras;
1055
1066
  }
1056
- return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers);
1067
+ return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, outboundFare.requiresReason || inboundFare.requiresReason);
1057
1068
  }
1058
1069
  return Promise.resolve();
1059
1070
  });
@@ -1374,6 +1385,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1374
1385
  },
1375
1386
  transactionIdentifier: railFare.identifiers.transactionIdentifier,
1376
1387
  outbound: {
1388
+ eTicket: !!railFare.eTicketAvailable,
1377
1389
  fareIdentifiers: [railFare.identifiers.fareIdentifier],
1378
1390
  journeyIdentifier: railFare.identifiers.journeyIdentifier,
1379
1391
  journeyLegs: this.removedScheduledPlatformFromCallingPoints(railJourneyOption.journeyLegs)
@@ -1393,7 +1405,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1393
1405
  if (outTicketExtras) {
1394
1406
  basketItem.detail.outbound.ticketExtras = outTicketExtras;
1395
1407
  }
1396
- return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers);
1408
+ return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, railFare.requiresReason);
1397
1409
  }
1398
1410
  return Promise.resolve();
1399
1411
  });
@@ -1462,12 +1474,14 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1462
1474
  },
1463
1475
  transactionIdentifier: outboundFare.identifiers.transactionIdentifier,
1464
1476
  outbound: {
1477
+ eTicket: !!outboundFare.eTicketAvailable,
1465
1478
  fareIdentifiers: [outboundFare.identifiers.fareIdentifier],
1466
1479
  journeyIdentifier: outboundFare.identifiers.journeyIdentifier,
1467
1480
  journeyLegs: this.removedScheduledPlatformFromCallingPoints(outbound.journeyLegs)
1468
1481
  },
1469
1482
  // ticketQueueList,
1470
1483
  return: {
1484
+ eTicket: !!inboundFare.eTicketAvailable,
1471
1485
  fareIdentifiers: [inboundFare.identifiers.fareIdentifier],
1472
1486
  journeyIdentifier: inboundFare.identifiers.journeyIdentifier,
1473
1487
  journeyLegs: this.removedScheduledPlatformFromCallingPoints(inbound.journeyLegs)
@@ -1481,13 +1495,13 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1481
1495
  co2PerItem: outbound.co2PerItem,
1482
1496
  co2PerPassenger: outbound.co2PerPassenger,
1483
1497
  outboundDate: outbound.arriveDateTime,
1484
- inboundDate: inbound.arriveDateTime,
1498
+ inboundDate: inbound.arriveDateTime
1485
1499
  };
1486
1500
  // if ticketExtras exists add the object to basketItem
1487
1501
  if (ticketExtras) {
1488
1502
  basketItem.detail.outbound.ticketExtras = ticketExtras;
1489
1503
  }
1490
- return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers);
1504
+ return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, outboundFare.requiresReason || inboundFare.requiresReason);
1491
1505
  }
1492
1506
  return Promise.resolve(false);
1493
1507
  });
@@ -1503,14 +1517,14 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1503
1517
  return railLegs;
1504
1518
  }
1505
1519
  createTicketExtrasObject(railTicketExtra) {
1506
- let price = this.noOfChildren * (railTicketExtra === null || railTicketExtra === void 0 ? void 0 : railTicketExtra.childAmount) +
1520
+ const price = this.noOfChildren * (railTicketExtra === null || railTicketExtra === void 0 ? void 0 : railTicketExtra.childAmount) +
1507
1521
  this.noOfAdults * railTicketExtra.adultAmount;
1508
1522
  return [
1509
1523
  {
1510
1524
  type: railTicketExtra.identifiers.type,
1511
1525
  location: railTicketExtra.identifiers.location,
1512
1526
  date: railTicketExtra.identifiers.date,
1513
- price: price
1527
+ price
1514
1528
  }
1515
1529
  ];
1516
1530
  }
@@ -1676,8 +1690,43 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1676
1690
  return this.searchService.saveFavouriteSearch(searchInfo);
1677
1691
  }
1678
1692
  }
1693
+ applyFavourite(fav) {
1694
+ return __awaiter(this, void 0, void 0, function* () {
1695
+ this.noOfAdults = fav.adults;
1696
+ this.noOfChildren = fav.children;
1697
+ this.chosenSearchType = fav.journeyType;
1698
+ switch (fav.class) {
1699
+ case "First":
1700
+ this.chosenRailClass = RailClass.First;
1701
+ break;
1702
+ case "Any":
1703
+ this.chosenRailClass = RailClass.All;
1704
+ break;
1705
+ case "Standard":
1706
+ this.chosenRailClass = RailClass.Standard;
1707
+ break;
1708
+ }
1709
+ this.getRailStationFetcher.fetchList({ id: fav.departureLocationId }).subscribe(a => {
1710
+ this.travellingFrom = a;
1711
+ });
1712
+ this.getRailStationFetcher.fetchList({ id: fav.arrivalLocationId }).subscribe(a => {
1713
+ this.travellingTo = a;
1714
+ });
1715
+ if (fav.viaLocationId) {
1716
+ this.getRailStationFetcher.fetchList({ id: fav.viaLocationId }).subscribe(a => {
1717
+ this.viaLocation = a;
1718
+ });
1719
+ this.via = true;
1720
+ }
1721
+ else {
1722
+ this.viaLocation = null;
1723
+ this.via = false;
1724
+ }
1725
+ // this.
1726
+ });
1727
+ }
1679
1728
  }
1680
1729
  RailEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_rail';
1681
1730
  RailEnterpriseSearch.STORAGE_SESSION_RESULTS = 'rail_results';
1682
1731
  RailEnterpriseSearch.PASSING_POINT = 'Passing';
1683
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFpbC1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9yYWlsLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBR0wsYUFBYSxFQUNiLHFCQUFxQixFQWNyQixhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBRUwsU0FBUyxFQUtULFdBQVcsRUFFWCxxQkFBcUIsRUFPdEIsTUFBTSx3QkFBd0IsQ0FBQztBQW1DaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXZCLE1BQU0sQ0FBTixJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIsNkNBQXVCLENBQUE7SUFDdkIsOENBQXdCLENBQUE7QUFDMUIsQ0FBQyxFQUhXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFHN0I7QUFFRCxNQUFNLENBQU4sSUFBWSxtQkFHWDtBQUhELFdBQVksbUJBQW1CO0lBQzdCLHdDQUFpQixDQUFBO0lB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QUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDaEUsQ0FBQztZQUVGLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FDOUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakQsQ0FBQztZQUNGLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FDOUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEQsQ0FBQztZQUNGLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FDOUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakQsQ0FBQztZQUNGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEQsQ0FBQztZQUNGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMs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dEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsZUFBZTtnQkFDckIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWTthQUN2QztZQUVEO2dCQUNFLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLEtBQUssRUFBRSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsY0FBYzthQUMvQjtZQUNEO2dCQUNFLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLEtBQUssRUFBRSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsY0FBYzthQUMvQjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsTUFBTSxvQkFBb0IsR0FBeUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWhGLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRTtnQkFDbkIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxJQUFJO2dCQUM3QixVQUFVLEVBQUUsb0JBQW9CO2FBQ2pDLENBQUE7WUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDOztBQW40RWUsMkNBQXNCLEdBQUcsYUFBYSxDQUFDO0FBQ3ZDLDRDQUF1QixHQUFHLGNBQWMsQ0FBQztBQUN6QyxrQ0FBYSxHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgb2YsIE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQge1xyXG4gIENoZWFwZXN0UmFpbENsYXNzUHJpY2VzLFxyXG4gIENoZWFwZXN0UmFpbFByaWNlcyxcclxuICBMb2NhdGlvblR5cGVzLFxyXG4gIG1heFRyYXZlbGxlcldlbGxiZWluZyxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE9CVFJhaWxGYXJlLFxyXG4gIE9CVFJhaWxGYXJlVHlwZXMsXHJcbiAgT0JUUmFpbEludGVybmFsRmFyZSxcclxuICBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uLFxyXG4gIE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICBPQlRSYWlsUXVvdGVSZXN1bHQsXHJcbiAgT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgUmFpbFdlbGxiZWluZ09iamVjdEludGVyZmFjZSxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgUmVjdXJzaXZlUGFydGlhbCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxyXG4gIFdlbGxiZWluZ0VudW1cclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFza2V0SXRlbSxcclxuICBSYWlsQ2xhc3MsXHJcbiAgUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyxcclxuICBTZXJ2aWNlVHlwZSxcclxuICBSYWlsVGlja2V0RXh0cmEsXHJcbiAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLFxyXG4gIFJhaWxKb3VybmV5RmFyZSxcclxuICBSYWlsU3RhdGlvbixcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgUmFpbEFjY291bnQsXHJcbiAgUmFpbFRpY2tldFF1ZXVlLFxyXG4gIFJhaWxKb3VybmV5TGVnXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVJhaWxRdW90ZUZldGNoZXIsXHJcbiAgUmFpbFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9yYWlsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXIsXHJcbiAgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLXN0YXRpb24uZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBSYWlsRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcclxuICBSYWlsVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXJhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmltcG9ydCB7IElSYWlsQWlycG9ydEV4cHJlc3NTdGF0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1haXJwb3J0LWV4cHJlc3Mtc3RhdGlvbnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBY2NvdW50c0xpc3QsXHJcbiAgUmFpbEJhc2tldEl0ZW0sXHJcbiAgVGlja2V0RXh0cmFzLFxyXG4gIFRpY2tldFF1ZXVlTGlzdFxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1iYXNrZXQtaXRlbS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBSYWlsUmVjZW50U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1yZWNlbnQtc2VhcmNoLWFyZ3MuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUmFpbFF1b3RlUmVzdWx0LCBSYWlsUXVvdGVSZXN1bHRBcnJheSB9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBSYWlsUnVsZUVuaXR5LFxyXG4gIFJhaWxSdWxlRW5pdHlLZXlzLFxyXG4gIFJhaWxTdW1tYXJ5XHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdW1tYXJ5LWludGVyZmFjZSc7XHJcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi91c2VyLWZhdm91cml0ZS5lbnVtJztcclxuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGFsLW9wZW5lci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4vbW9kYWwtdHlwZXMuZW51bSc7XHJcbmltcG9ydCB7IElSYWlsU2VsZWN0ZWRUaWNrZXQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtc2VsZWN0ZWQtdGlja2V0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJhaWxEaXJlY3Rpb24gfSBmcm9tICcuL3JhaWwtZGlyZWN0aW9uLmVudW0nO1xyXG5pbXBvcnQgeyBSYWlsSW5kZXhUb1RpY2tldCB9IGZyb20gJy4vcmFpbC1pbmRleC10by10aWNrZXQnO1xyXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5cclxuZXhwb3J0IGVudW0gUmFpbFNlYXJjaENyaXRlcmlhIHtcclxuICBEZXBhcnQgPSAnRGVwYXJ0IEFmdGVyJyxcclxuICBBcnJpdmUgPSAnQXJyaXZlIEJlZm9yZSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUmFpbEpvdXJuZXlGYXJlVHlwZSB7IC8vIG1heSBuZWVkIHRvIGJlIGV4cGFuZGVkIGZvciBkdWFsL3NwbGl0XHJcbiAgUmV0dXJuID0gJ1JldHVybicsXHJcbiAgU2luZ2xlID0gJ1NpbmdsZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJhaWxFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgUSBleHRlbmRzIFJhaWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gICAgR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBSYWlsVGVtcFBhcmFtcyxcclxuICAgIFJhaWxRdW90ZVJlc3VsdEFycmF5LFxyXG4gICAgT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBSYWlsRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUaWNrZXQ6IElSYWlsU2VsZWN0ZWRUaWNrZXQ7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJbmJvdW5kVGlja2V0OiBJUmFpbFNlbGVjdGVkVGlja2V0O1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkU3VtbWFyeTogUmFpbFJ1bGVFbml0eTtcclxuICBwcml2YXRlIF9zZWxlY3RlZEluYm91bmRTdW1tYXJ5OiBSYWlsUnVsZUVuaXR5O1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkU2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcztcclxuICBwcml2YXRlIGFsdGVybmF0aXZlV2VsbGJlaW5nOiBSYWlsV2VsbGJlaW5nT2JqZWN0SW50ZXJmYWNlO1xyXG5cclxuICBnZXQgc2VsZWN0ZWRTZWN0aW9uKCk6IE9CVFJhaWxGYXJlVHlwZXMge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkU2VjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZFRpY2tldCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFRpY2tldDtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3RlZFRpY2tldChzZWxlY3RlZFRpY2tldDoge1xyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb247XHJcbiAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmU7XHJcbiAgfSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRUaWNrZXQgPSBzZWxlY3RlZFRpY2tldDtcclxuICAgIGlmICghdGhpcy5fc2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5ID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5ID0gdGhpcy5fZmluZFN1bW1hcnkoXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUaWNrZXQuam91cm5leSxcclxuICAgICAgICB0aGlzLnN1bW1hcnkub3V0Ym91bmQgfHwgW11cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZEluYm91bmRUaWNrZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IHNlbGVjdGVkSW5ib3VuZFRpY2tldChzZWxlY3RlZFRpY2tldDogSVJhaWxTZWxlY3RlZFRpY2tldCkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0ID0gc2VsZWN0ZWRUaWNrZXQ7XHJcbiAgICBpZiAoIXRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFN1bW1hcnkgPSBudWxsO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRTdW1tYXJ5ID0gdGhpcy5zdW1tYXJ5LnJldHVybi5maW5kKFxyXG4gICAgICAgICh2YWx1ZTogUmFpbFJ1bGVFbml0eSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmpvdXJuZXlIYXNoID09PSB0aGlzLl9zZWxlY3RlZFRpY2tldC5qb3VybmV5LmpvdXJuZXlIYXNoO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9yYWlsJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmFpbF9yZXN1bHRzJztcclxuICBzdGF0aWMgcmVhZG9ubHkgUEFTU0lOR19QT0lOVCA9ICdQYXNzaW5nJztcclxuICBwcml2YXRlIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gUmFpbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBwdWJsaWMgc2VhcmNoVHlwZXMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdSZXR1cm4nLCB2YWx1ZTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkgfSxcclxuICAgIHsgZGlzcGxheTogJ09uZS1XYXknLCB2YWx1ZTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXkgfVxyXG4gICAgLy8geyBkaXNwbGF5OiAnT3BlbiBSZXR1cm4nLCB2YWx1ZTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5IH0sXHJcbiAgICAvLyB7IGRpc3BsYXk6ICdEdWFsIFNpbmdsZXMnLCB2YWx1ZTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlLkR1YWxTaW5nbGVKb3VybmV5IH0sXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGNsYXNzVHlwZXMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdBbnknLCB2YWx1ZTogUmFpbENsYXNzLkFsbCB9LFxyXG4gICAgeyBkaXNwbGF5OiAnU3RhbmRhcmQnLCB2YWx1ZTogUmFpbENsYXNzLlN0YW5kYXJkIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGaXJzdCcsIHZhbHVlOiBSYWlsQ2xhc3MuRmlyc3QgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBhaXJwb3J0RXhwcmVzc1N0YXRpb25zOiBJUmFpbEFpcnBvcnRFeHByZXNzU3RhdGlvbnNbXSA9IFtcclxuICAgIHsgY29kZTogJ0hQMS0zJywgbmFtZTogJ0hlYXRocm93IFQxLTMgLSBQYWRkaW5ndG9uJyB9LFxyXG4gICAgeyBjb2RlOiAnSFA0JywgbmFtZTogJ0hlYXRocm93IFQ0IC0gUGFkZGluZ3RvbicgfSxcclxuICAgIHsgY29kZTogJ0hQNScsIG5hbWU6ICdIZWF0aHJvdyBUNSAtIFBhZGRpbmd0b24nIH0sXHJcbiAgICB7IGNvZGU6ICdQSDEtMycsIG5hbWU6ICdQYWRkaW5ndG9uIC0gSGVhdGhyb3cgVDEtMycgfSxcclxuICAgIHsgY29kZTogJ1BINCcsIG5hbWU6ICdQYWRkaW5ndG9uIC0gSGVhdGhyb3cgVDQnIH0sXHJcbiAgICB7IGNvZGU6ICdQSDUnLCBuYW1lOiAnUGFkZGluZ3RvbiAtIEhlYXRocm93IFQ1JyB9LFxyXG4gICAgeyBjb2RlOiAnR1YnLCBuYW1lOiAnR2F0d2ljayAtIFZpY3RvcmlhJyB9LFxyXG4gICAgeyBjb2RlOiAnVkcnLCBuYW1lOiAnVmljdG9yaWEgLSBHYXR3aWNrJyB9LFxyXG4gICAgeyBjb2RlOiAnU0wnLCBuYW1lOiAnU3RhbnN0ZWQgLSBMaXZlcnBvb2wgU3RyZWV0JyB9LFxyXG4gICAgeyBjb2RlOiAnTFMnLCBuYW1lOiAnTGl2ZXJwb29sIFN0cmVldCAtIFN0YW5zdGVkJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFpcnBvcnRFeHByZXNzU3RhdGlvbnNDb2Rlczoge1xyXG4gICAgW2tleTogc3RyaW5nXTogeyBkZXA6IHN0cmluZzsgYXJyOiBzdHJpbmcgfTtcclxuICB9ID0ge1xyXG4gICAgJ0hQMS0zJzogeyBkZXA6ICdIWFgnLCBhcnI6ICdQQUQnIH0sXHJcbiAgICAnUEgxLTMnOiB7IGRlcDogJ1BBRCcsIGFycjogJ0hYWCcgfSxcclxuICAgIEhQNDogeyBkZXA6ICdIQUYnLCBhcnI6ICdQQUQnIH0sXHJcbiAgICBQSDQ6IHsgZGVwOiAnUEFEJywgYXJyOiAnSEFGJyB9LFxyXG4gICAgSFA1OiB7IGRlcDogJ0hXVicsIGFycjogJ1BBRCcgfSxcclxuICAgIFBINTogeyBkZXA6ICdQQUQnLCBhcnI6ICdIV1YnIH0sXHJcbiAgICBHVjogeyBkZXA6ICdHVFcnLCBhcnI6ICdWSUMnIH0sXHJcbiAgICBWRzogeyBkZXA6ICdWSUMnLCBhcnI6ICdHVFcnIH0sXHJcbiAgICBTTDogeyBkZXA6ICdTU0QnLCBhcnI6ICdMU1QnIH0sXHJcbiAgICBMUzogeyBkZXA6ICdMU1QnLCBhcnI6ICdTU0QnIH1cclxuICB9O1xyXG5cclxuICBwdWJsaWMgcmFpbENyaXRlcmlhID0gW1JhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQsIFJhaWxTZWFyY2hDcml0ZXJpYS5BcnJpdmVdO1xyXG5cclxuICBwdWJsaWMgdHJhdmVsQ2FyZHMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdZb3VuZyBwZXJzb25zIHJhaWxjYXJkJywgdmFsdWU6ICdZTkcnIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdEaXNhYmlsaXR5IHJhaWxjYXJkJywgdmFsdWU6ICdESVMnIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGYW1pbHkgcmFpbGNhcmQnLCB2YWx1ZTogJ0ZBTScgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZvcmNlcyByYWlsY2FyZCcsIHZhbHVlOiAnSE1GJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnVHJhdmVsIGFnZW5jeSBkaXNjb3VudCcsIHZhbHVlOiAnVEFEJyB9XHJcbiAgXTtcclxuXHJcbiAgLy8gWU5HOiBcIllvdW5nIHBlcnNvbnMgcmFpbGNhcmRcIixcclxuICAvLyBESVM6IFwiRGlzYWJpbGl0eSByYWlsY2FyZFwiLFxyXG4gIC8vIEZBTTogXCJGYW1pbHkgcmFpbGNhcmRcIixcclxuICAvLyBITUY6IFwiRm9yY2VzIHJhaWxjYXJkXCIsXHJcbiAgLy8gVEFEOiBcIlRyYXZlbCBhZ2VuY3kgZGlzY291bnRcIlxyXG4gIHB1YmxpYyByZW1vdmVQYXNzaW5nUG9pbnRzRnJvbVJlc3VsdHMgPSB0cnVlO1xyXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLlJhaWw7XHJcblxyXG4gIHByaXZhdGUgX2Jvb2tSYWlsRnJvbUxpdmUgPSBmYWxzZTtcclxuICBwdWJsaWMgY2hlYXBlc3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcclxuICAgIG91dGJvdW5kQ2hlYXBlc3Q6IENoZWFwZXN0UmFpbFByaWNlcztcclxuICAgIGluYm91bmRDaGVhcGVzdDogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcyxcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXREdWFsOiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlc1xyXG5cclxuICB9Pih7XHJcbiAgICBvdXRib3VuZENoZWFwZXN0OiB7XHJcbiAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgIH0sXHJcbiAgICBpbmJvdW5kQ2hlYXBlc3Q6IHtcclxuICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfSxcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IHtcclxuICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgZmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICB9LFxyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldFJldHVybjoge1xyXG4gICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgIH0sXHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDoge1xyXG4gICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgZ2V0IGJvb2tSYWlsRnJvbUxpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYm9va1JhaWxGcm9tTGl2ZTtcclxuICB9XHJcblxyXG4gIHNldCBib29rUmFpbEZyb21MaXZlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9ib29rUmFpbEZyb21MaXZlID0gdmFsdWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBtaW5PdXRib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHVibGljIG1pbkluYm91bmREYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG4gIHB1YmxpYyBtYXhEYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgLy8gRU5ULTE1NTcgLSBtYXggRXZvbHZpIHNlYXJjaCBkYXRlIGlzIDYgbW9udGhzIGluIGZ1dHVyZVxyXG4gICAgeWVhcjogbW9tZW50KCkuYWRkKCdtb250aCcsIDYpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikubW9udGgoKSxcclxuICAgIGRheTogbW9tZW50KCkuYWRkKCdtb250aCcsIDYpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXlbXTtcclxuICAvLyBwcml2YXRlIF9jaG9zZW5UaWNrZXRHcm91cDogUmFpbFRpY2tldEdyb3VwO1xyXG4gIHByaXZhdGUgX3ZpYUxvY2F0aW9uOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdHJhdmVsbGluZ0Zyb206IHN0cmluZztcclxuICBwcml2YXRlIF90cmF2ZWxsaW5nVG86IHN0cmluZztcclxuICBwcm90ZWN0ZWQgX29yaWdpbmFsVXNlclNlYXJjaDogUmFpbFRlbXBQYXJhbXM7XHJcbiAgcHVibGljIHN1bW1hcnk6IFJhaWxTdW1tYXJ5ID0ge307XHJcblxyXG4gIGdldCBvcGVuUmV0dXJuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09XHJcbiAgICAgIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldCBvcGVuUmV0dXJuKG5ld1ZhbDogYm9vbGVhbikge1xyXG4gICAgaWYgKG5ld1ZhbCkge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9XHJcbiAgICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leTtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5TZWFyY2hUeXBlKCk6IFJhaWxTZWFyY2hKb3VybmV5VHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZShuZXdUeXBlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gbmV3VHlwZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBub09mQWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm5vT2ZBZHVsdHM7XHJcbiAgfVxyXG5cclxuICBzZXQgbm9PZkFkdWx0cyhhZHVsdHM6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm5vT2ZBZHVsdHMgPSBhZHVsdHM7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbm9PZkNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm5vT2ZDaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHNldCBub09mQ2hpbGRyZW4oY2hpbGRyZW46IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYXZlbGxpbmdUbygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmF2ZWxsaW5nVG87XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhdmVsbGluZ1RvKHR0OiBhbnkpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50cmF2ZWxsaW5nVG8gPSB0dDtcclxuXHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSAnJztcclxuICAgIGlmICh0dD8ucmFpbHN0YXRpb24/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHR0LnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nRnJvbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmF2ZWxsaW5nRnJvbTtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nRnJvbSh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20gPSB0dDtcclxuICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9IHR0LnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5SYWlsQ2xhc3MoKTogUmFpbENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuUmFpbENsYXNzKG5ld0NsYXNzOiBSYWlsQ2xhc3MpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyA9IG5ld0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaENsYXNzKCk6IFJhaWxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblNlYXJjaENsYXNzKGNsYXNzUjogUmFpbENsYXNzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBjbGFzc1I7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZXh0cmFUaW1lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5leHRyYVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZXh0cmFUaW1lKGV4dHJhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZXh0cmFUaW1lID0gZXh0cmE7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWE7XHJcbiAgfVxyXG5cclxuICBzZXQgdmlhKHZpYTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYSA9IHZpYTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2aWFMb2NhdGlvbigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCB2aWFMb2NhdGlvbih2aWFMb2NhdGlvbjogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb24gPSB2aWFMb2NhdGlvbjtcclxuXHJcbiAgICB0aGlzLl92aWFMb2NhdGlvbiA9ICcnO1xyXG4gICAgaWYgKHZpYUxvY2F0aW9uPy5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdmlhTG9jYXRpb24gPSB2aWFMb2NhdGlvbi5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgb3V0Qm91bmREYXRlVGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRCb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcwNzAwJztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbkluYm91bmREYXRlID0ge1xyXG4gICAgICB5ZWFyOiBuZXdEYXRlVGltZS55ZWFyKCksXHJcbiAgICAgIG1vbnRoOiBuZXdEYXRlVGltZS5tb250aCgpICsgMSxcclxuICAgICAgZGF5OiBuZXdEYXRlVGltZS5kYXRlKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgJiZcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgJiZcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lLmlzQWZ0ZXIodGhpcy5pbkJvdW5kRGF0ZVRpbWUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSB0aGlzLmluQm91bmREYXRlVGltZVxyXG4gICAgICAgIC5zZXQoJ2RhdGUnLCBuZXdEYXRlVGltZS5kYXRlKCkpXHJcbiAgICAgICAgLnNldCgnbW9udGgnLCBuZXdEYXRlVGltZS5tb250aCgpKVxyXG4gICAgICAgIC5zZXQoJ3llYXInLCBuZXdEYXRlVGltZS55ZWFyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBvdXRib3VuZENyaXRlcmlhKCk6IFJhaWxTZWFyY2hDcml0ZXJpYSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRDcml0ZXJpYShuZXdDcml0OiBSYWlsU2VhcmNoQ3JpdGVyaWEpIHtcclxuICAgIC8vIGNvbnNvbGUud2FybihgKysrIFNldHRpbmcgTmV3IENyaXRlcmlhOiAke25ld0NyaXR9ICsrK2ApO1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWEgPSBuZXdDcml0O1xyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpbkJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluQm91bmREYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBpbkJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9yZXR1cm5fdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcxNjAwJztcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBvdXRib3VuZF9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgb3V0Ym91bmRfdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCByZXR1cm5fZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgcmV0dXJuX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCByZXR1cm5Dcml0ZXJpYSgpOiBSYWlsU2VhcmNoQ3JpdGVyaWEge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5Dcml0ZXJpYShuZXdDcml0OiBSYWlsU2VhcmNoQ3JpdGVyaWEpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYSA9IG5ld0NyaXQ7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FybmV0VGlja2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYXJuZXRUaWNrZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgY2FybmV0VGlja2V0KG5ld0Nhcm5ldDogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhcm5ldFRpY2tldCA9IG5ld0Nhcm5ldDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkaXNhYmxlQXV0b0Rpc2NvdW50cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGlzYWJsZUF1dG9EaXNjb3VudHM7XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzYWJsZUF1dG9EaXNjb3VudHMobmV3RGlzOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGlzYWJsZUF1dG9EaXNjb3VudHMgPSBuZXdEaXM7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcHJpb3JpdGlzZUJ5UHJpY2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByaW9yaXRpc2VCeVByaWNlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHByaW9yaXRpc2VCeVByaWNlKG5ld1ByaW9yaXR5OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJpb3JpdGlzZUJ5UHJpY2UgPSBuZXdQcmlvcml0eTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBhcHBseVJhaWxjYXJkcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYXBwbHlSYWlsY2FyZHM7XHJcbiAgfVxyXG5cclxuICBzZXQgYXBwbHlSYWlsY2FyZHMoYXBDYXJkczogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFwcGx5UmFpbGNhcmRzID0gYXBDYXJkcztcclxuICB9XHJcblxyXG4gIGdldCByYWlsQ2FyZHMoKTogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJhaWxDYXJkcztcclxuICB9XHJcblxyXG4gIHNldCByYWlsQ2FyZHModmFsdWU6IFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yYWlsQ2FyZHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCk6IFZhbHVlRGlzcGxheVtdIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg0OClcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpOiB7IGNvZGU6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFpcnBvcnRFeHByZXNzU3RhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0RXhwcmVzc1N0YXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgYWlycG9ydEV4cHJlc3NTdGF0aW9uKHN0YXRpb246IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IHN0YXRpb247XHJcbiAgICB0aGlzLl9zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25zKCk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBaXJwb3J0RXhwcmVzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcztcclxuICB9XHJcblxyXG4gIHNldCBpc0FpcnBvcnRFeHByZXNzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9uSWRzKHN0YXRpb25JZHM6IHtcclxuICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHN0cmluZztcclxuICAgIGFycml2YWxMb2NhdGlvbklkOiBzdHJpbmc7XHJcbiAgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBkZXBhcnR1cmVMb2NhdGlvbklkLCBhcnJpdmFsTG9jYXRpb25JZCB9ID0gc3RhdGlvbklkcztcclxuICAgIGlmIChkZXBhcnR1cmVMb2NhdGlvbklkICYmIGFycml2YWxMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gZGVwYXJ0dXJlTG9jYXRpb25JZDtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gYXJyaXZhbExvY2F0aW9uSWQ7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbmRTdW1tYXJ5KFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBzdW1tYXJ5OiBSYWlsUnVsZUVuaXR5W11cclxuICApIHtcclxuICAgIHJldHVybiBzdW1tYXJ5LmZpbmQoKHZhbHVlOiBSYWlsUnVsZUVuaXR5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBSYWlsZmV0Y2hlcjogQmFzZVJhaWxRdW90ZUZldGNoZXI8UT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycyk7XHJcblxyXG4gICAgY29uc3QgZGF0YToge1xyXG4gICAgICBxdWVyeToge307XHJcbiAgICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IFJhaWxUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgcXVlcnk6IHt9LFxyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBSYWlsVGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBSYWlsVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VSYWlsUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm5vT2ZBZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMoXHJcbiAgICByYXdSZXN1bHRzOiBSYWlsUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IHNldEZhcmVzID0gKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZmFyZSxcclxuICAgICAgICB0eXBlOiBmYXJlPy50eXBlPy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc29ydEZhcmVzID0gKFxyXG4gICAgICBqb3VybmV5czogUmVjdXJzaXZlUGFydGlhbDxSYWlsSm91cm5leU9wdGlvbj5bXVxyXG4gICAgKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdID0+IHtcclxuICAgICAgY29uc3QgdG9SZXR1cm4gPSB0aGlzLmhlbHBlcnNcclxuICAgICAgICAuY2xvbmUoam91cm5leXMpXHJcbiAgICAgICAgLnNvcnQoKGZpcnN0OiBSYWlsSm91cm5leU9wdGlvbiwgc2Vjb25kOiBSYWlsSm91cm5leU9wdGlvbik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaXJzdFRpbWUgPSBtb21lbnQoZmlyc3QuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgY29uc3Qgc2Vjb25kVGltZSA9IG1vbWVudChzZWNvbmQuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgaWYgKGZpcnN0VGltZS5pc0JlZm9yZShzZWNvbmRUaW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlyc3RUaW1lLmlzQWZ0ZXIoc2Vjb25kVGltZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5tYXAoKGpvdXJuZXk6IFJhaWxKb3VybmV5T3B0aW9uKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzb3J0ID0gKFxyXG4gICAgICAgICAgICBmaXJzdDogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICAgKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnByaWNlIC0gc2Vjb25kLnByaWNlO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkdWFsU2luZ2xlSm91cm5leXMgPSAoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IFtdKVxyXG4gICAgICAgICAgICAuc29ydChzb3J0KVxyXG4gICAgICAgICAgICAubWFwKHNldEZhcmVzKTtcclxuICAgICAgICAgIGNvbnN0IG9wZW5SZXR1cm5Kb3VybmV5cyA9IChqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leXMgPSAoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3Qgc2luZ2xlSm91cm5leXMgPSAoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5cy5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBzaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgc2luZ2xlSm91cm5leXMubWFwKHNldEZhcmVzKTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0b1JldHVybjEgPSB7XHJcbiAgICAgICAgICAgIC4uLmpvdXJuZXksXHJcbiAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShcclxuICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICAgWyd0eXBlJywgWyd0ZXJtcy50aWNrZXRUeXBlQ29kZScsICdwcmljZSddXVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgICAgIFsndHlwZScsIFsndGVybXMudGlja2V0VHlwZUNvZGUnLCAncHJpY2UnXV1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSBhcyBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0b1JldHVybjE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0b1JldHVybjtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJhd1Jlc3VsdHMubWFwKChyYWlsUmVzdWx0OiBSYWlsUXVvdGVSZXN1bHQpOiBPQlRSYWlsUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLnN1bW1hcnkgPSByYWlsUmVzdWx0LnN1bW1hcnk7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kSW50ZXJuYWwgPSBzb3J0RmFyZXMocmFpbFJlc3VsdC5vdXRib3VuZCB8fCBbXSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmRJbnRlcm5hbCA9IHNvcnRGYXJlcyhyYWlsUmVzdWx0LnJldHVybiB8fCBbXSk7XHJcblxyXG4gICAgICBjb25zdCBpbmRleFRvVGlja2V0cyA9IHRoaXMubWFrZUZhcmVOYW1lcyhbXHJcbiAgICAgICAgb3V0Ym91bmRJbnRlcm5hbCB8fCBbXSxcclxuICAgICAgICBpbmJvdW5kSW50ZXJuYWwgfHwgW11cclxuICAgICAgXSk7XHJcblxyXG4gICAgICBjb25zdCBjb252ZXJ0RmFyZXMgPSAoXHJcbiAgICAgICAgZmFyZXM6IE9CVFJhaWxJbnRlcm5hbEZhcmUsXHJcbiAgICAgICAgdGlja2V0VHlwZTogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICAgICApOiBPQlRSYWlsRmFyZSA9PiB7XHJcbiAgICAgICAgY29uc3QgcnRpID0gaW5kZXhUb1RpY2tldHNbdGlja2V0VHlwZV07XHJcbiAgICAgICAgY29uc3QgdGlja2V0VHlwZXMgPSBydGkuZ2V0VGlja2V0VHlwZXMoKTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGlja2V0VHlwZXMpLnJlZHVjZShcclxuICAgICAgICAgIChjdXJyZW50OiBPQlRSYWlsRmFyZSwgW3R5cGUsIGNvdW50XTogW3N0cmluZywgbnVtYmVyXSkgPT4ge1xyXG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdID0gcnRpXHJcbiAgICAgICAgICAgICAgLndvcmtvdXRJbmRleGVzKHR5cGUpXHJcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGRzOiBzdHJpbmdbXSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdChmYXJlcywgZmllbGRzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge31cclxuICAgICAgICApO1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjb252ZXRSYWlsSk91cm5leSA9IChcclxuICAgICAgICBqb3VybmV5OiBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3JldHVybkpvdXJuZXlGYXJlcydcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBjb252ZXJ0RmFyZXMoXHJcbiAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJ1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3NpbmdsZUpvdXJuZXlGYXJlcydcclxuICAgICAgICAgIClcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgb3V0Ym91bmQgPSBvdXRib3VuZEludGVybmFsLm1hcChjb252ZXRSYWlsSk91cm5leSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmQgPSBpbmJvdW5kSW50ZXJuYWwubWFwKGNvbnZldFJhaWxKT3VybmV5KTtcclxuXHJcbiAgICAgIGNvbnN0IG91dFByaWNlcyA9IHRoaXMudXBkYXRlUHJpY2VzKFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czoge1xyXG4gICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xyXG4gICAgICAgICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiB7XHJcbiAgICAgICAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGluUHJpY2VzID0gdGhpcy51cGRhdGVQcmljZXMoXHJcbiAgICAgICAgaW5ib3VuZCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjaGVhcGVzdFRpY2tldHM6IHtcclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IG91dFByaWNlcy5jaGVhcGVzdENsYXNzVGlja2V0LFxyXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogb3V0UHJpY2VzLmNoZWFwZXN0Q2xhc3NUaWNrZXRcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmNoZWFwZXN0Lm5leHQoe1xyXG4gICAgICAgIG91dGJvdW5kQ2hlYXBlc3Q6IG91dFByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgaW5ib3VuZENoZWFwZXN0OiBpblByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogaW5QcmljZXMuY2hlYXBlc3RDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiBvdXRQcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDogaW5QcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldCxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4ucmFpbFJlc3VsdCxcclxuICAgICAgICBvdXRib3VuZCxcclxuICAgICAgICByZXR1cm46IGluYm91bmRcclxuICAgICAgfSBhcyBPQlRSYWlsUXVvdGVSZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUZhcmVOYW1lcyhcclxuICAgIGpvdXJuZXlzOiBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uW11bXVxyXG4gICk6IFJlY29yZDxPQlRSYWlsRmFyZVR5cGVzLCBSYWlsSW5kZXhUb1RpY2tldD4ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ3JldHVybkpvdXJuZXlGYXJlcycsXHJcbiAgICAgICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJyxcclxuICAgICAgJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnLFxyXG4gICAgICAnc2luZ2xlSm91cm5leUZhcmVzJ1xyXG4gICAgXS5yZWR1Y2UoXHJcbiAgICAgIChcclxuICAgICAgICBhY2N1bTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PixcclxuICAgICAgICBuZXh0OiBPQlRSYWlsRmFyZVR5cGVzXHJcbiAgICAgICk6IFJlY29yZDxPQlRSYWlsRmFyZVR5cGVzLCBSYWlsSW5kZXhUb1RpY2tldD4gPT4ge1xyXG4gICAgICAgIGFjY3VtW25leHRdID0gdGhpcy5fbWFrZUZhcmVOYW1lcyhqb3VybmV5cywgbmV4dCk7XHJcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiBuZXcgUmFpbEluZGV4VG9UaWNrZXQoKSxcclxuICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBuZXcgUmFpbEluZGV4VG9UaWNrZXQoKSxcclxuICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiBuZXcgUmFpbEluZGV4VG9UaWNrZXQoKSxcclxuICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tYWtlRmFyZU5hbWVzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb25bXVtdLFxyXG4gICAgZmllbGQ6IE9CVFJhaWxGYXJlVHlwZXNcclxuICApOiBSYWlsSW5kZXhUb1RpY2tldCB7XHJcbiAgICByZXR1cm4gXy5mbGF0dGVuKGpvdXJuZXlzIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgIChcclxuICAgICAgICByaXQ6IFJhaWxJbmRleFRvVGlja2V0LFxyXG4gICAgICAgIGpvdXJuZXk6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb25cclxuICAgICAgKTogUmFpbEluZGV4VG9UaWNrZXQgPT4ge1xyXG4gICAgICAgIGlmICgham91cm5leSkge1xyXG4gICAgICAgICAgcmV0dXJuIHJpdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoam91cm5leVtmaWVsZF0gfHwge30pLmZvckVhY2goXHJcbiAgICAgICAgICAoW3RpY2tldE5hbWUsIHN1YmZhcmVzXTogW1xyXG4gICAgICAgICAgICBzdHJpbmcsXHJcbiAgICAgICAgICAgIFJlY29yZDxzdHJpbmcsIE9CVFJhaWxKb3VybmV5RmFyZVtdPlxyXG4gICAgICAgICAgXSkgPT4ge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhzdWJmYXJlcykuZm9yRWFjaChcclxuICAgICAgICAgICAgICAoW3RpY2tldFR5cGUsIGZhcmVzXTogW3N0cmluZywgT0JUUmFpbEpvdXJuZXlGYXJlW11dKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByaXQuYWRkRmFyZXModGlja2V0TmFtZSwgdGlja2V0VHlwZSwgZmFyZXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJpdC5uZXh0Sm91cm5leSgpO1xyXG4gICAgICAgIHJldHVybiByaXQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpXHJcbiAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIHVwZGF0ZVByaWNlcyhcclxuICAgIGpvdXJuZXlzOiBPQlRSYWlsSm91cm5leU9wdGlvbltdLFxyXG4gICAgcHJpY2VzOiB7XHJcbiAgICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICB9LFxyXG4gICAgaXNSZXR1cm46IGJvb2xlYW5cclxuICApOiB7XHJcbiAgICBjaGVhcGVzdFRpY2tldHM6IENoZWFwZXN0UmFpbFByaWNlcztcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgb3V0Ym91bmRDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgfSB7XHJcbiAgICBjb25zdCBtaW4gPSAoXHJcbiAgICAgIGN1cnJlbnQ6IHtcclxuICAgICAgICBwcmljZTogbnVtYmVyO1xyXG4gICAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgICAgIGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZTtcclxuICAgICAgfSxcclxuICAgICAgZmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdLFxyXG4gICAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICAgKToge1xyXG4gICAgICBwcmljZTogbnVtYmVyO1xyXG4gICAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbjtcclxuICAgICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlO1xyXG4gICAgfSA9PiB7XHJcbiAgICAgIGlmICghZmFyZXMgfHwgZmFyZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmV4dCA9IGZhcmVzWzBdLnByaWNlO1xyXG4gICAgICByZXR1cm4gY3VycmVudC5wcmljZSA+IDAgJiYgY3VycmVudC5wcmljZSA8IG5leHRcclxuICAgICAgICA/IGN1cnJlbnRcclxuICAgICAgICA6IHsgcHJpY2U6IG5leHQsIGpvdXJuZXksIGZhcmU6IGZhcmVzWzBdIH07XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBqb3VybmV5cy5yZWR1Y2UoXHJcbiAgICAgIChcclxuICAgICAgICBwcmljZXMxOiB7XHJcbiAgICAgICAgICBjaGVhcGVzdFRpY2tldHM6IENoZWFwZXN0UmFpbFByaWNlcztcclxuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICAgICApOiB7XHJcbiAgICAgICAgY2hlYXBlc3RUaWNrZXRzOiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICAgIH0gPT4ge1xyXG4gICAgICAgIGNvbnN0IHNvcnQgPSAoXHJcbiAgICAgICAgICBmaXJzdDogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgICAgICAgc2Vjb25kOiBPQlRSYWlsSm91cm5leUZhcmVcclxuICAgICAgICApOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZpcnN0LnByaWNlIC0gc2Vjb25kLnByaWNlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZHVhbFNpbmdsZVN0YW5kYXJkSm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcylcclxuICAgICAgICApLmZpbHRlcihcclxuICAgICAgICAgIChqb3VybmV5MSkgPT4gam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGR1YWxTaW5nbGVGaXJzdEpvdXJuZXlzID0gXy5mbGF0dGVuKFxyXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgb3BlblJldHVyblN0YW5kYXJkSm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcylcclxuICAgICAgICApLmZpbHRlcihcclxuICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PlxyXG4gICAgICAgICAgICBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLlN0YW5kYXJkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBvcGVuUmV0dXJuRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+XHJcbiAgICAgICAgICAgIGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuRmlyc3RcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJldHVyblN0YW5kYXJkSm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+XHJcbiAgICAgICAgICAgIGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuU3RhbmRhcmRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJldHVybkZpcnN0Sm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+XHJcbiAgICAgICAgICAgIGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuRmlyc3RcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHNpbmdsZVN0YW5kYXJkSm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkuc2luZ2xlSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+XHJcbiAgICAgICAgICAgIGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuU3RhbmRhcmRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHNpbmdsZUZpcnN0Sm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkuc2luZ2xlSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+XHJcbiAgICAgICAgICAgIGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuRmlyc3RcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBub0R1YWxTdGFuZGFyZDogT0JUUmFpbEpvdXJuZXlGYXJlW10gPSBbXHJcbiAgICAgICAgICAuLi5vcGVuUmV0dXJuU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgIC4uLnJldHVyblN0YW5kYXJkSm91cm5leXMsXHJcbiAgICAgICAgICAuLi5zaW5nbGVTdGFuZGFyZEpvdXJuZXlzXHJcbiAgICAgICAgXTtcclxuICAgICAgICBjb25zdCBhbGxTdGFuZGFyZDogT0JUUmFpbEpvdXJuZXlGYXJlW10gPSBbXHJcbiAgICAgICAgICAuLi5kdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgIC4uLm5vRHVhbFN0YW5kYXJkXHJcbiAgICAgICAgXS5zb3J0KHNvcnQpO1xyXG4gICAgICAgIGNvbnN0IG5vRHVhbEZpcnN0OiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLm9wZW5SZXR1cm5GaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ucmV0dXJuRmlyc3RKb3VybmV5cyxcclxuICAgICAgICAgIC4uLnNpbmdsZUZpcnN0Sm91cm5leXNcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IGFsbEZpcnN0OiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLmR1YWxTaW5nbGVGaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ubm9EdWFsRmlyc3RcclxuICAgICAgICBdLnNvcnQoc29ydCk7XHJcbiAgICAgICAgaWYgKCFpc1JldHVybikge1xyXG4gICAgICAgICAgbm9EdWFsU3RhbmRhcmQuc29ydChzb3J0KTtcclxuICAgICAgICAgIGFsbEZpcnN0LnNvcnQoc29ydCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5kdWFsU2luZ2xlSm91cm5leUZhcmVzID0gbWluKFxyXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdFRpY2tldHMuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgIF8uZmxhdHRlbihPYmplY3QudmFsdWVzKGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcykpLmZpbHRlcihcclxuICAgICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+ICEham91cm5leTFcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgKTtcclxuICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5vcGVuUmV0dXJuSm91cm5leUZhcmVzID0gbWluKFxyXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdFRpY2tldHMub3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgIF8uZmxhdHRlbihPYmplY3QudmFsdWVzKGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcykpLmZpbHRlcihcclxuICAgICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+ICEham91cm5leTFcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcHJpY2VzMS5jaGVhcGVzdFRpY2tldHMucmV0dXJuSm91cm5leUZhcmVzID0gbWluKFxyXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdFRpY2tldHMucmV0dXJuSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpKS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiAhIWpvdXJuZXkxXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgam91cm5leVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGlzUmV0dXJuKSB7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlLFxyXG4gICAgICAgICAgICBhbGxTdGFuZGFyZCxcclxuICAgICAgICAgICAgam91cm5leVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIGFsbEZpcnN0LFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgbm9EdWFsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBpc1N0YW5kYXJkQ2xhc3NTaW5nbGUgPVxyXG4gICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmU/LmZhcmVcclxuICAgICAgICAgICAgICA/LnNpbmdsZU9yUmV0dXJuID09PSBSYWlsSm91cm5leUZhcmVUeXBlLlNpbmdsZTtcclxuICAgICAgICAgIGlmIChpc1N0YW5kYXJkQ2xhc3NTaW5nbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5ib3VuZFByaWNlID0gbWluKFxyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZVN0YW5kYXJkSm91cm5leXMsXHJcbiAgICAgICAgICAgICAgam91cm5leVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBvdXRib3VuZFRvdGFsUHJpY2UgPVxyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZS5wcmljZTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIG91dGJvdW5kVG90YWxQcmljZSA+IHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZS5wcmljZVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlO1xyXG4gICAgICAgICAgICAgIC8vIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPSB7XHJcbiAgICAgICAgICAgICAgLy8gICBwcmljZTogMCxcclxuICAgICAgICAgICAgICAvLyAgIGpvdXJuZXk6IG51bGwsXHJcbiAgICAgICAgICAgICAgLy8gICBmYXJlOiBudWxsXHJcbiAgICAgICAgICAgICAgLy8gfTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmJvdW5kUHJpY2UucHJpY2UgPiBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSA9XHJcbiAgICAgICAgICAgICAgICBpbmJvdW5kUHJpY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBpc0ZpcnN0Q2xhc3NTaW5nbGUgPVxyXG4gICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmU/LmZhcmU/LnNpbmdsZU9yUmV0dXJuID09PVxyXG4gICAgICAgICAgICBSYWlsSm91cm5leUZhcmVUeXBlLlNpbmdsZTtcclxuICAgICAgICAgIGlmIChpc0ZpcnN0Q2xhc3NTaW5nbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5ib3VuZFByaWNlID0gbWluKFxyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAgICAgam91cm5leVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbFByaWNlID1cclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUucHJpY2U7XHJcbiAgICAgICAgICAgIGlmICh0b3RhbFByaWNlID4gcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlLnByaWNlKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlID1cclxuICAgICAgICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZTtcclxuICAgICAgICAgICAgICAvLyBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlID0ge1xyXG4gICAgICAgICAgICAgIC8vICAgcHJpY2U6IDAsXHJcbiAgICAgICAgICAgICAgLy8gICBqb3VybmV5OiBudWxsLFxyXG4gICAgICAgICAgICAgIC8vICAgZmFyZTogbnVsbFxyXG4gICAgICAgICAgICAgIC8vIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgaW5ib3VuZFByaWNlLnByaWNlID4gcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZS5wcmljZSkge1xyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUgPSBpbmJvdW5kUHJpY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIGFsbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIGFsbEZpcnN0LFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlLFxyXG4gICAgICAgICAgICBub0R1YWxTdGFuZGFyZCxcclxuICAgICAgICAgICAgam91cm5leVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICBub0R1YWxGaXJzdCxcclxuICAgICAgICAgICAgam91cm5leVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByaWNlczE7XHJcbiAgICAgIH0sXHJcbiAgICAgIHByaWNlc1xyXG4gICAgKTtcclxuICB9XHJcbiAgYXN5bmMgc2VsZWN0VGlja2V0KFxyXG4gICAgZGlyZWN0aW9uOiBSYWlsRGlyZWN0aW9uLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXMsXHJcbiAgICB3ZWxsYmVpbmc6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCFyYWlsRmFyZS5zZWxlY3RhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2ggJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoID09PSByYWlsRmFyZS5mYXJlSGFzaFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZWxlY3RlZFRpY2tldCA9IHRoaXMuc2VsZWN0ZWRUaWNrZXQ7XHJcbiAgICB0aGlzLmFsdGVybmF0aXZlV2VsbGJlaW5nID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3QoXHJcbiAgICAgIFVzZXJGYXZvcnVyaXRlLkFsdGVybmF0aXZlUmFpbEl0aW5lcmFyeUVuYWJsZWRcclxuICAgICk7XHJcbiAgICBpZiAoc2VsZWN0ZWRUaWNrZXQgJiYgIXdlbGxiZWluZyAmJiB0aGlzLmFsdGVybmF0aXZlV2VsbGJlaW5nKSB7XHJcbiAgICAgIGNvbnN0IG91dDogT0JUUmFpbEpvdXJuZXlPcHRpb24gPSBzZWxlY3RlZFRpY2tldC5qb3VybmV5O1xyXG4gICAgICBjb25zdCBpbkI6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0gam91cm5leTtcclxuXHJcbiAgICAgIGNvbnN0IHRpbWVEaWZmSW5Ib3VycyA9IG1vbWVudChvdXQuYXJyaXZlRGF0ZVRpbWUpLmRpZmYoXHJcbiAgICAgICAgbW9tZW50KG91dC5kZXBhcnREYXRlVGltZSksXHJcbiAgICAgICAgJ2hvdXJzJyxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHRpbWVEaWZmSW5Ib3Vyc0luID0gbW9tZW50KGluQi5hcnJpdmVEYXRlVGltZSkuZGlmZihcclxuICAgICAgICBtb21lbnQoaW5CLmRlcGFydERhdGVUaW1lKSxcclxuICAgICAgICAnaG91cnMnLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgZGF5RGlmZmVybmNlID0gbW9tZW50KGluQi5kZXBhcnREYXRlVGltZSkuZGlmZihcclxuICAgICAgICBtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSxcclxuICAgICAgICAnZGF5J1xyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgdG9BZGQgPSBhd2FpdCB0aGlzLmNoZWNrQWx0ZXJuYXRpdmVIb3VycyhcclxuICAgICAgICB0aW1lRGlmZkluSG91cnMgKyB0aW1lRGlmZkluSG91cnNJbixcclxuICAgICAgICBkYXlEaWZmZXJuY2VcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRvQWRkKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUaWNrZXQoXHJcbiAgICAgICAgICBkaXJlY3Rpb24sXHJcbiAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgcmFpbEZhcmUsXHJcbiAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgIHNlY3Rpb24sXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zID0gdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcbiAgICAgIHN3aXRjaCAoc2VjdGlvbikge1xyXG4gICAgICAgIGNhc2UgJ3NpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBvdXRib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5IH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcyA/IHRpY2tldEV4dHJhcyA6IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdyZXR1cm5Kb3VybmV5RmFyZXMnOlxyXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xyXG4gICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFRpY2tldCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0aWNrZXRFeHRyYXM6IFJhaWxUaWNrZXRFeHRyYVtdID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICAgIHsgY2VudGVyZWQ6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICAgeyBvdXRib3VuZFJhaWxKb3VybmV5T3B0aW9uOiB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBzZWxlY3RlZFRpY2tldC5qb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgPyB0aWNrZXRFeHRyYXNcclxuICAgICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRSZXR1cm5Kb3VybmV5VG9CYXNrZXQoXHJcbiAgICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxyXG4gICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLFxyXG4gICAgICAgICAgICAgIHJhaWxGYXJlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRpY2tldEV4dHJhcyk7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRUaWNrZXQuam91cm5leS50aWNrZXRFeHRyYXMgPSB0aWNrZXRFeHRyYXNcclxuICAgICAgICAgICAgICAgID8gdGlja2V0RXh0cmFzXHJcbiAgICAgICAgICAgICAgICA6IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkRHVhbFNpbmdsZVRvQmFza2V0KFxyXG4gICAgICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leSxcclxuICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZSxcclxuICAgICAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnOlxyXG4gICAgICAgICAgaWYgKGpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBjb25zdCB0aWNrZXRFeHRyYXM6IFJhaWxUaWNrZXRFeHRyYVtdID1cclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHsgY2VudGVyZWQ6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgIHsgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogam91cm5leSB9XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGlja2V0RXh0cmFzKTtcclxuICAgICAgICAgICAgam91cm5leS50aWNrZXRFeHRyYXMgPSB0aWNrZXRFeHRyYXMgPyB0aWNrZXRFeHRyYXMgOiBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF3YWl0IHRoaXMuYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIHJhaWxGYXJlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgY29uc3QgdGVtcDogT0JUUmFpbEZhcmVUeXBlcyA9IHNlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGNoZWNrQWx0ZXJuYXRpdmVIb3VycyhcclxuICAgIGhvdXJEaWZmZXJlbmNlOiBudW1iZXIsXHJcbiAgICBkYXlEaWZmZXJlbmNlOiBudW1iZXJcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIC8vICEgRU5ULTE0ODEgLSBDaGVjayBpZiB3ZSBhcmUgc2VhcmNoaW5nIHJldHVybiByYWlsIC0gYW5kIGFsdGVybmF0aXZlIHdlbGxiZWluZyBpcyBlbmFibGVkXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF07XHJcbiAgICBjb25zdCBjaGVjayA9XHJcbiAgICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuZW5hYmxlICYmXHJcbiAgICAgIE51bWJlcih0aGlzLmFsdGVybmF0aXZlV2VsbGJlaW5nLmhvdXJzKSA+IDAgJiZcclxuICAgICAgcGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5ICYmXHJcbiAgICAgIGhvdXJEaWZmZXJlbmNlID49IE51bWJlcih0aGlzLmFsdGVybmF0aXZlV2VsbGJlaW5nLmhvdXJzKSAmJlxyXG4gICAgICBkYXlEaWZmZXJlbmNlID09PSAwICYmXHJcbiAgICAgIHRoaXMubm9PZkFkdWx0cyArIHRoaXMubm9PZkNoaWxkcmVuIDw9IG1heFRyYXZlbGxlcldlbGxiZWluZztcclxuICAgIGlmIChjaGVjaykge1xyXG4gICAgICBjb25zdCB2YWwgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgIE1vZGFsVHlwZXMuQWx0ZXJuYXRpdmVSYWlsTW9kYWxDb21wb25lbnRcclxuICAgICAgKTtcclxuICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtQWx0ZXJuYXRpdmVSYWlsQW5kSG90ZWxTZWFyY2goKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGVyZm9ybUFsdGVybmF0aXZlUmFpbEFuZEhvdGVsU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgLy8gYWx0ZXIgdGhlIHNlYXJjaCBwYXJhbXNcclxuICAgIC8vIHRoZSBjYWxsIHRoZSBzZWFyY2ggZnVuY3Rpb25cclxuXHJcbiAgICBjb25zb2xlLmxvZygnKysrIENyZWF0aW5nIHRoZSBBbHRlcm5hdGl2ZSBTZWFyY2ggUGFyYW1zICsrKycpO1xyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zSG90ZWwgPVxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuSG90ZWxdO1xyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zUmFpbCA9XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5SYWlsXTtcclxuICAgIHNlYXJjaFBhcmFtc0hvdGVsLmNob3NlbiA9IHRydWU7XHJcbiAgICBzZWFyY2hQYXJhbXNSYWlsLmNob3NlbiA9IHRydWU7XHJcbiAgICBzZWFyY2hQYXJhbXNIb3RlbC5wcmlvcml0eSA9IHNlYXJjaFBhcmFtc1JhaWwucHJpb3JpdHk7XHJcbiAgICBjb25zdCBob3RlbFBhcmFtcyA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF07XHJcbiAgICBjb25zdCByYWlsUGFyYW1zID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdO1xyXG4gICAgLy8gRmlyc3Qgb2YgYWxsIC0gYWx0ZXIgdGhlIHJhaWwgaW5ib3VuZCBkYXRlIC0gYWRkIGEgZGF5XHJcbiAgICByYWlsUGFyYW1zLmluQm91bmREYXRlVGltZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tcclxuICAgICAgU2VydmljZVR5cGUuUmFpbFxyXG4gICAgXS5pbkJvdW5kRGF0ZVRpbWUuYWRkKDEsICdkYXknKTtcclxuXHJcbiAgICAvLyBub3cgY3JlYXRlIHRoZSBob3RlbCBzZWFyY2ggcGFyYW1zXHJcbiAgICBob3RlbFBhcmFtcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9IExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uO1xyXG4gICAgaG90ZWxQYXJhbXMubG9jYXRpb24gPSByYWlsUGFyYW1zLnRyYXZlbGxpbmdUbztcclxuICAgIGhvdGVsUGFyYW1zLnRyYWluc1N0YXRpb24gPSByYWlsUGFyYW1zLnRyYXZlbGxpbmdUby5yYWlsc3RhdGlvbjtcclxuICAgIGhvdGVsUGFyYW1zLmNoZWNraW5fZGF0ZSA9IHJhaWxQYXJhbXMub3V0Qm91bmREYXRlVGltZTtcclxuICAgIGhvdGVsUGFyYW1zLmNoZWNrb3V0X2RhdGUgPSByYWlsUGFyYW1zLmluQm91bmREYXRlVGltZTtcclxuICAgIGhvdGVsUGFyYW1zLm5vX29mX29jY3VwYW50cyA9XHJcbiAgICAgIHJhaWxQYXJhbXMubm9PZkFkdWx0cyArIHJhaWxQYXJhbXMubm9PZkNoaWxkcmVuO1xyXG4gICAgaG90ZWxQYXJhbXMubm9fb2Zfcm9vbXMgPSAxO1xyXG4gICAgaG90ZWxQYXJhbXMuZGlzdGFuY2UgPSAxMDtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcyhXZWxsYmVpbmdFbnVtLldFTExCRUlORyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZWxlY3RUaWNrZXROb0FkZChcclxuICAgIGRpcmVjdGlvbjogUmFpbERpcmVjdGlvbixcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICAgIHNvdXJjZUlkOiBzdHJpbmcsXHJcbiAgICBzZWN0aW9uOiBPQlRSYWlsRmFyZVR5cGVzXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXJhaWxGYXJlLnNlbGVjdGFibGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKCcrKysgUmFpbCBmYXJlIGlzIG5vdCBzZWxlY3RhYmxlICsrKycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXNPdXRUaWNrZXRTZWxlY3RlZCA9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LmpvdXJuZXlIYXNoID09PSBqb3VybmV5LmpvdXJuZXlIYXNoICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaCA9PT0gcmFpbEZhcmUuZmFyZUhhc2g7XHJcbiAgICBjb25zdCBpc0luVGlja2V0U2VsZWN0ZWQgPVxyXG4gICAgICBkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uSW5ib3VuZFxyXG4gICAgICAgID8gdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmJvdW5kVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2ggPT09XHJcbiAgICAgICAgICAgIGpvdXJuZXkuam91cm5leUhhc2ggJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmJvdW5kVGlja2V0LmZhcmUuZmFyZUhhc2ggPT09IHJhaWxGYXJlLmZhcmVIYXNoXHJcbiAgICAgICAgOiBmYWxzZTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGlzT3V0VGlja2V0U2VsZWN0ZWQgfHxcclxuICAgICAgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5JbmJvdW5kICYmIGlzSW5UaWNrZXRTZWxlY3RlZClcclxuICAgICkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgJysrKyBKb3VybmV5IGFuZCBmYXJlIGFyZSBhbHJlYWR5IHNlbGVjdGVkIC0gYnJlYWtpbmcgb3V0ICsrKydcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0ID0gbnVsbDtcclxuICAgICAgaWYgKGlzT3V0VGlja2V0U2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgKHRoaXMuX3NlbGVjdGVkU2VjdGlvbiAmJiB0aGlzLl9zZWxlY3RlZFNlY3Rpb24gIT09IHNlY3Rpb24pIHx8XHJcbiAgICAgICh0aGlzLl9zZWxlY3RlZFNlY3Rpb24gPT09ICdyZXR1cm5Kb3VybmV5RmFyZXMnICYmXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldD8uZmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllciAhPT1cclxuICAgICAgICAgIHJhaWxGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3NlbGVjdGVkU2VjdGlvbiA9IHNlY3Rpb247XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMgPSB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuICAgIHN3aXRjaCAoc2VjdGlvbikge1xyXG4gICAgICBjYXNlICdzaW5nbGVKb3VybmV5RmFyZXMnOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmV0dXJuSm91cm5leUZhcmVzJzpcclxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xyXG4gICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmJvdW5kVGlja2V0ID0ge1xyXG4gICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnOlxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFRpY2tldCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3BlblJldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc3QgdGVtcDogT0JUUmFpbEZhcmVUeXBlcyA9IHNlY3Rpb247XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBhZGQgdG8gYmFza2V0IGZvciBnbzIvc2Npb25cclxuICAgKiBAcGFyYW0gc291cmNlSWRcclxuICAgKiBAcGFyYW0gc2VhcmNoUXVlcnlcclxuICAgKiBAcGFyYW0gam91cm5leVxyXG4gICAqIEBwYXJhbSByYWlsRmFyZVxyXG4gICAqIEBwYXJhbSBpbmJvdW5kUmFpbEZhcmVcclxuICAgKiBAcGFyYW0gaW5ib3VuZEpvdXJuZXlcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGFzeW5jIGFkZFRvQmFza2V0KFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyxcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICAgIGluYm91bmRSYWlsRmFyZT86IE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICAgIGluYm91bmRKb3VybmV5PzogT0JUUmFpbEpvdXJuZXlPcHRpb25cclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChzZWFyY2hRdWVyeS5jaG9zZW5TZWFyY2hUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuU2luZ2xlSm91cm5leSkge1xyXG4gICAgICAvLyBUT0RPXHJcbiAgICAgIGF3YWl0IHRoaXMuYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgcmFpbEZhcmVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIG5vdyBjaGVjayBpZiB3ZSBoYXZlIGNob3NlbiBkdWFsIHNpbmdsZXMgb3IgcmV0dXJuc1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uID09PSAnb3BlblJldHVybkpvdXJuZXlGYXJlcycpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmFkZE9wZW5SZXR1cm5Ub0Jhc2tldChcclxuICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKHJhaWxGYXJlLnNpbmdsZU9yUmV0dXJuID09PSAnUmV0dXJuJykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgaW5ib3VuZEpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZSxcclxuICAgICAgICAgIGluYm91bmRSYWlsRmFyZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gISAtIER1YWwgU2luZ2xlc1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkRHVhbFNpbmdsZVRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBpbmJvdW5kSm91cm5leSxcclxuICAgICAgICAgIHJhaWxGYXJlLFxyXG4gICAgICAgICAgaW5ib3VuZFJhaWxGYXJlXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZE9wZW5SZXR1cm5Ub0Jhc2tldChcclxuICAgIHNvdXJjZUlkOiBzdHJpbmcsXHJcbiAgICBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMsXHJcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmVcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgc291cmNlSWQsXHJcbiAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICBqb3VybmV5LFxyXG4gICAgICByYWlsRmFyZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZER1YWxTaW5nbGVUb0Jhc2tldChcclxuICAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gICAgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgb3V0Ym91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgaW5ib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBvdXRib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICAgIGluYm91bmRGYXJlOiBPQlRSYWlsSm91cm5leUZhcmVcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJhaWxRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoc2VhcmNoUXVlcnkpO1xyXG5cclxuICAgIGxldCBpblRpY2tldEV4dHJhczogVGlja2V0RXh0cmFzW107XHJcbiAgICBsZXQgb3V0VGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuXHJcbiAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGNyZWF0ZSBUaWNrZXRFeHRyYXNPYmplY3QgYW5kIGFkZGVkIGl0IHRvIHRoZSBiYXNrZXRcclxuICAgIGlmIChpbmJvdW5kPy50aWNrZXRFeHRyYXM/Lmxlbmd0aCkge1xyXG4gICAgICBpblRpY2tldEV4dHJhcyA9IHRoaXMuY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KGluYm91bmQudGlja2V0RXh0cmFzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3V0Ym91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIG91dFRpY2tldEV4dHJhcyA9IHRoaXMuY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KG91dGJvdW5kLnRpY2tldEV4dHJhc1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChcclxuICAgICAgb3V0Ym91bmRGYXJlLFxyXG4gICAgICBvdXRib3VuZCxcclxuICAgICAgaW5ib3VuZFxyXG4gICAgKTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qgb3V0Ym91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKG91dGJvdW5kKTtcclxuICAgICAgY29uc3QgaW5ib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24oaW5ib3VuZCk7XHJcblxyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChvdXRib3VuZC50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFjY291bnRzTGlzdDogKG91dGJvdW5kLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Ym91bmQuZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBvdXRib3VuZEZhcmUucHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IG91dGJvdW5kRmFyZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IG91dGJvdW5kRmFyZS5wcmljZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IG91dGJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGlud2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGluYm91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogaW5ib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IGluYm91bmQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBpbmJvdW5kLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaW5ib3VuZEZhcmUucHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IGluYm91bmRGYXJlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBpbmJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLnRyYW5zYWN0aW9uSWRlbnRpZmllcixcclxuICAgICAgICAgIG91dGJvdW5kOiB7XHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW291dGJvdW5kRmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcl0sXHJcbiAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOiBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGlzRHVhbFNpbmdsZVJldHVybjogdHJ1ZSxcclxuICAgICAgICAgICAgam91cm5leUxlZ3M6IHRoaXMucmVtb3ZlZFNjaGVkdWxlZFBsYXRmb3JtRnJvbUNhbGxpbmdQb2ludHMob3V0Ym91bmQuam91cm5leUxlZ3MpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxyXG4gICAgICAgICAgcmV0dXJuOiB7XHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW2luYm91bmRGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IGluYm91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBpc0R1YWxTaW5nbGVSZXR1cm46IHRydWUsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKGluYm91bmQuam91cm5leUxlZ3MpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogTnVtYmVyKFxyXG4gICAgICAgICAgTnVtYmVyKG91dGJvdW5kRmFyZS5wcmljZSArIGluYm91bmRGYXJlLnByaWNlKS50b0ZpeGVkKDIpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9O1xyXG4gICAgICAvLyBpZiBpblRpY2tldEV4dHJhcyBvciBvdXRUaWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgICAgaWYgKGluVGlja2V0RXh0cmFzKSB7XHJcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwucmV0dXJuLnRpY2tldEV4dHJhcyA9IGluVGlja2V0RXh0cmFzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvdXRUaWNrZXRFeHRyYXMpIHtcclxuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZC50aWNrZXRFeHRyYXMgPSBvdXRUaWNrZXRFeHRyYXM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBmaW5kQ2hlYXBlc3RUaWNrZXQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VSYWlsUXVlcnkoKSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25zKCkge1xyXG4gICAgY29uc3QgcGFyc2VkU3RhdGlvbiA9XHJcbiAgICAgIHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uc0NvZGVzW3RoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uXTtcclxuICAgIGNvbnNvbGUubG9nKCctLS0gUGFyc2VkIFN0YXRpb24gaXMgOicsIHBhcnNlZFN0YXRpb24pO1xyXG4gICAgaWYgKHBhcnNlZFN0YXRpb24pIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSBwYXJzZWRTdGF0aW9uLmRlcDtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gcGFyc2VkU3RhdGlvbi5hcnI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xyXG4gICAgaWYgKCF0aGlzLmRvQ2hlY2tzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgY29uc3Qgbm93ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl90cmF2ZWxsaW5nRnJvbSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBGcm9tIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ1RvKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBFbnRlciBhIFRvIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZVRpbWU/LmlzQmVmb3JlKG5vdykpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnRGVwYXJ0dXJlIERhdGUvVGltZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNob3NlblNlYXJjaFR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5KSB7XHJcbiAgICAgIC8vIGNoZWNrIGZvciByZXR1cm4gc3BlY2lmaWMgdmFsaWRhdGlvbnMgaW4gaGVyZVxyXG5cclxuICAgICAgaWYgKHRoaXMuaW5Cb3VuZERhdGVUaW1lPy5pc1NhbWVPckJlZm9yZSh0aGlzLm91dEJvdW5kRGF0ZVRpbWUpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdSZXR1cm4gRGF0ZS9UaW1lIG11c3QgYmUgYWZ0ZXIgRGVwYXJ0dXJlIERhdGUvVGltZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmlhKSB7XHJcbiAgICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLnZpYUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGVudGVyIGEgdmlhIGxvY2F0aW9uLicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5ub09mQWR1bHRzICsgdGhpcy50ZW1wUGFyYW1zLm5vT2ZDaGlsZHJlbiA8IDEpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAxIHRyYXZlbGxlcicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGhpcy50ZW1wUGFyYW1zKTtcclxuICAgICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gT2JqZWN0LmZyZWV6ZShcclxuICAgICAgICB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy50ZW1wUGFyYW1zKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKHRoaXMuUmFpbGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeTogUmFpbFJlY2VudFNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5SYWlsLFxyXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcclxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5vdXRCb3VuZERhdGVUaW1lLmZvcm1hdCgpLFxyXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycylcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkocXVlcnk6IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyk6IFJhaWxSZWNlbnRTZWFyY2hBcmdze1xyXG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IFJhaWxSZWNlbnRTZWFyY2hBcmdzID0gcXVlcnk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNBaXJwb3J0RXhwcmVzcykge1xyXG4gICAgICBzZWFyY2hRdWVyeS5pc0FpcnBvcnRFeHByZXNzID0gdGhpcy5pc0FpcnBvcnRFeHByZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbikge1xyXG4gICAgICBzZWFyY2hRdWVyeS5haXJwb3J0RXhwcmVzc1N0YXRpb24gPSB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50cmF2ZWxsaW5nRnJvbSkge1xyXG4gICAgICBzZWFyY2hRdWVyeS50cmF2ZWxsaW5nRnJvbSA9IHRoaXMudHJhdmVsbGluZ0Zyb207XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudHJhdmVsbGluZ1RvKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LnRyYXZlbGxpbmdUbyA9IHRoaXMudHJhdmVsbGluZ1RvO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpYUxvY2F0aW9uKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LnZpYUxvY2F0aW9uID0gdGhpcy52aWFMb2NhdGlvbjtcclxuICAgIH1cclxuICAgIHNlYXJjaFF1ZXJ5Lm91dGJvdW5kU3RhdGlvbkNvZGUgPVxyXG4gICAgdGhpcy50cmF2ZWxsaW5nRnJvbT8ucmFpbHN0YXRpb24/LnN0YXRpb25Db2RlO1xyXG5cclxuICAgIHNlYXJjaFF1ZXJ5LmluYm91bmRTdGF0aW9uQ29kZSA9XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdUbz8ucmFpbHN0YXRpb24/LnN0YXRpb25Db2RlO1xyXG5cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGU7XHJcbiAgICB0aGlzLmNob3NlblNlYXJjaENsYXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2xhc3M7XHJcbiAgICB0aGlzLmV4dHJhVGltZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmV4dHJhVGltZVRvQ2hhbmdlO1xyXG4gICAgdGhpcy5pc0FpcnBvcnRFeHByZXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuaXNBaXJwb3J0RXhwcmVzcztcclxuICAgIHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xyXG5cclxuICAgIC8vIGdldCBvdXRCb3VuZERhdGVUaW1lLCBpbkJvdW5kRGF0ZVRpbWUgYW5kIG91dGJvdW5kQ3JpdGVyaWEgLHJldHVybkNyaXRlcmlhXHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgID8gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUpXHJcbiAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lKTtcclxuICAgIHRoaXMub3V0Ym91bmRDcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGUgPT09XHJcbiAgICAgIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgICAgID8gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lKVxyXG4gICAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxEYXRlVGltZSk7XHJcblxyXG4gICAgICB0aGlzLnJldHVybkNyaXRlcmlhID0gdGhpcy5nZXRDcml0ZXJpYShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsRGF0ZVRpbWVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGx5UmFpbGNhcmRzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3M/LnJhaWxDYXJkUXVhbGlmaWVycz8ubGVuZ3RoXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuYXBwbHlSYWlsY2FyZHMpIHtcclxuICAgICAgdGhpcy5yYWlsQ2FyZHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yYWlsQ2FyZFF1YWxpZmllcnM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF2ZWxsaW5nVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmF2ZWxsaW5nVG87XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhdmVsbGluZ0Zyb207XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYUxvY2F0aW9uKSB7XHJcbiAgICAgIHRoaXMudmlhID0gdHJ1ZTtcclxuICAgICAgdGhpcy52aWFMb2NhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYUxvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIGNvbnN0IHN0YXRpb25JZHMgPSB7XHJcbiAgICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwYXJ0dXJlTG9jYXRpb25JZCxcclxuICAgICAgICBhcnJpdmFsTG9jYXRpb25JZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYXJyaXZhbExvY2F0aW9uSWRcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25JZHMoc3RhdGlvbklkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZSA9PT1cclxuICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vcGVuUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9vdXRib3VuZF9kYXRlICYmIHRoaXMuX291dGJvdW5kX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF9kYXRlLFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmV0dXJuX2RhdGUgJiYgdGhpcy5fcmV0dXJuX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9yZXR1cm5fZGF0ZSxcclxuICAgICAgICB0aGlzLl9yZXR1cm5fdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zKTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzIHtcclxuICAgIGlmICh0aGlzLmlzQWlycG9ydEV4cHJlc3MgJiYgdGhpcy5vcGVuUmV0dXJuKSB7XHJcbiAgICAgIHRoaXMub3BlblJldHVybiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPSB7XHJcbiAgICAgIGNvdW50cnlDb2RlOiAnR0InLFxyXG4gICAgICBqb3VybmV5VHlwZTogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlLFxyXG4gICAgICBhZHVsdHM6IHRlbXBQYXJhbXMubm9PZkFkdWx0cyxcclxuICAgICAgYXJyaXZhbExvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ1RvPy5yYWlsc3RhdGlvbj8uaWQsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgY2hpbGRyZW46IHRlbXBQYXJhbXMubm9PZkNoaWxkcmVuLFxyXG4gICAgICBjbGFzczogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyxcclxuICAgICAgZXh0cmFUaW1lVG9DaGFuZ2U6IHRlbXBQYXJhbXMuZXh0cmFUaW1lLFxyXG4gICAgICBvdXRib3VuZEFycml2YWxEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZShcclxuICAgICAgICB0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZShcclxuICAgICAgICB0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgcmV0dXJuQXJyaXZhbERhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICksXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICksXHJcbiAgICAgIHZpYUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudmlhTG9jYXRpb24/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgcmFpbENhcmRRdWFsaWZpZXJzOiB0ZW1wUGFyYW1zLnJhaWxDYXJkcz8ubWFwKFxyXG4gICAgICAgIChyYWlsQ2FyZDogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiByYWlsQ2FyZC5jb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPT09IDApIHtcclxuICAgICAgcXVlcnkuY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl92aWFMb2NhdGlvbiA9PT0gJycpIHtcclxuICAgICAgcXVlcnkudmlhTG9jYXRpb25JZCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWEpIHtcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0OlxyXG4gICAgICAgIHF1ZXJ5Lm91dGJvdW5kQXJyaXZhbERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlOlxyXG4gICAgICAgIHF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIGArKysgVW5rbm93biBDcml0ZXJpYTogJHt0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmRDcml0ZXJpYX0gKysrYFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhKSB7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydDpcclxuICAgICAgICBxdWVyeS5yZXR1cm5BcnJpdmFsRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hDcml0ZXJpYS5BcnJpdmU6XHJcbiAgICAgICAgcXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIGArKysgVW5rbm93biBDcml0ZXJpYTogJHt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWF9ICsrK2BcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlKSB7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk6XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5OlxyXG4gICAgICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBxdWVyeS5yZXR1cm5BcnJpdmFsRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0ZW1wUGFyYW1zLmlzQWlycG9ydEV4cHJlc3MpIHtcclxuICAgICAgcXVlcnkuYXJyaXZhbExvY2F0aW9uSWQgPSB0aGlzLl90cmF2ZWxsaW5nVG87XHJcbiAgICAgIHF1ZXJ5LmRlcGFydHVyZUxvY2F0aW9uSWQgPSB0aGlzLl90cmF2ZWxsaW5nRnJvbTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3JpdGVyaWEoXHJcbiAgICBkZXBhcnR1cmVEYXRlVGltZTogc3RyaW5nLFxyXG4gICAgYXJyaXZhbERhdGVUaW1lOiBzdHJpbmdcclxuICApOiBSYWlsU2VhcmNoQ3JpdGVyaWEge1xyXG4gICAgaWYgKGRlcGFydHVyZURhdGVUaW1lKSB7XHJcbiAgICAgIHJldHVybiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChhcnJpdmFsRGF0ZVRpbWUpIHtcclxuICAgICAgcmV0dXJuIFJhaWxTZWFyY2hDcml0ZXJpYS5BcnJpdmU7XHJcbiAgICB9XHJcbiAgICB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoXHJcbiAgICBwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogdm9pZCB7fVxyXG5cclxuICBnZXRSYWlsU3RhdGlvbihcclxuICAgIGNvZGU6IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8UmFpbFN0YXRpb24+IHtcclxuICAgIGlmIChjb2RlLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3QoeyBjb2RlIH0pLnBpcGUoXHJcbiAgICAgICAgdGFwKCgpID0+IGlzTG9hZGluZz8ubmV4dChmYWxzZSkpLFxyXG4gICAgICAgIHRha2UoMSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWRSYWlsSm91cm5leUZhcmUoKTogUmFpbEpvdXJuZXlGYXJlIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbjogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBhbnlbXSB7XHJcbiAgICBsZXQgbGVnczogYW55W10gPSBbXTtcclxuICAgIGlmIChyYWlsSm91cm5leU9wdGlvbj8uam91cm5leUxlZ3MubGVuZ3RoKSB7XHJcbiAgICAgIGxlZ3MgPSByYWlsSm91cm5leU9wdGlvbi5qb3VybmV5TGVncy5tYXAoKHNlZ21lbnQpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgb3BlcmF0b3I6IHNlZ21lbnQub3BlcmF0b3IsXHJcbiAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogc2VnbWVudC5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBzZWdtZW50LmRlcGFydCxcclxuICAgICAgICAgIGFycml2YWxEYXRlVGltZTogc2VnbWVudC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogc2VnbWVudC5hcnJpdmVcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZWdzO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICB0ZW1wUGFyYW1zOiBSYWlsVGVtcFBhcmFtcyxcclxuICAgIHJhaWxKb3VybmV5T3B0aW9uOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIHJhaWxGYXJlOiBSYWlsSm91cm5leUZhcmVcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJhaWxRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGVtcFBhcmFtcyk7XHJcbiAgICBsZXQgb3V0VGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxyXG4gICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uPy50aWNrZXRFeHRyYXM/Lmxlbmd0aCkge1xyXG4gICAgICBvdXRUaWNrZXRFeHRyYXMgPSB0aGlzLmNyZWF0ZVRpY2tldEV4dHJhc09iamVjdChcclxuICAgICAgICByYWlsSm91cm5leU9wdGlvbi50aWNrZXRFeHRyYXNbMF1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAocmFpbEpvdXJuZXlPcHRpb24udW5zZWxsYWJsZSkge1xyXG4gICAgLy8gICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIC8vIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoXHJcbiAgICAgIHJhaWxGYXJlLFxyXG4gICAgICByYWlsSm91cm5leU9wdGlvblxyXG4gICAgKTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3QgbGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbik7XHJcbiAgICAgIC8vIGNvbnN0IHRpY2tldFF1ZXVlTGlzdCA9IHNlbGVjdGVkUmFpbEpvdXJuZXlGYXJlLnRpY2tldFF1ZXVlTGlzdC5tYXAoXHJcbiAgICAgIC8vICAgKHRpY2tldFF1ZXVlTGlzdDEpID0+IHtcclxuICAgICAgLy8gICAgIHJldHVybiB7XHJcbiAgICAgIC8vICAgICAgIGlkOiB0aWNrZXRRdWV1ZUxpc3QxLmlkLFxyXG4gICAgICAvLyAgICAgICBuYW1lOiB0aWNrZXRRdWV1ZUxpc3QxLm5hbWUsXHJcbiAgICAgIC8vICAgICAgIHR5cGU6IHRpY2tldFF1ZXVlTGlzdDEudHlwZVxyXG4gICAgICAvLyAgICAgfTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vICk7XHJcblxyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdDogKHJhaWxKb3VybmV5T3B0aW9uLnRpY2tldFF1ZXVlTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbFRpY2tldFF1ZXVlKTogVGlja2V0UXVldWVMaXN0ID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgYWNjb3VudHNMaXN0OiAocmFpbEpvdXJuZXlPcHRpb24uYWNjb3VudHNMaXN0IHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgIChpdGVtOiBSYWlsQWNjb3VudCk6IEFjY291bnRzTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHJhaWxKb3VybmV5T3B0aW9uLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHJhaWxKb3VybmV5T3B0aW9uLnRvLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogcmFpbEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiByYWlsSm91cm5leU9wdGlvbi5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IHJhaWxGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiByYWlsRmFyZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IHJhaWxGYXJlLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgbGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogcmFpbEZhcmUuaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbcmFpbEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogcmFpbEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKHJhaWxKb3VybmV5T3B0aW9uLmpvdXJuZXlMZWdzKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgICAvLyB0aWNrZXRRdWV1ZUxpc3RcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogcmFpbEZhcmUucHJpY2UsXHJcbiAgICAgICAgY3VycmVuY3k6IHJhaWxGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IHJhaWxKb3VybmV5T3B0aW9uLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiByYWlsSm91cm5leU9wdGlvbi5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiByYWlsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBhZGQgdGhlIG9iamVjdCB0byBiYXNrZXRJdGVtXHJcbiAgICAgIGlmIChvdXRUaWNrZXRFeHRyYXMpIHtcclxuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZC50aWNrZXRFeHRyYXMgPSBvdXRUaWNrZXRFeHRyYXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVyc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICB0ZW1wUGFyYW1zOiBSYWlsVGVtcFBhcmFtcyxcclxuICAgIG91dGJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIGluYm91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgb3V0Ym91bmRGYXJlOiBSYWlsSm91cm5leUZhcmUsXHJcbiAgICBpbmJvdW5kRmFyZTogUmFpbEpvdXJuZXlGYXJlXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAvLyBpZiAob3V0Ym91bmQudW5zZWxsYWJsZSkge1xyXG4gICAgLy8gICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIC8vIH1cclxuICAgIGNvbnN0IHJhaWxRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGVtcFBhcmFtcyk7XHJcblxyXG4gICAgbGV0IHRpY2tldEV4dHJhczogVGlja2V0RXh0cmFzW107XHJcblxyXG4gICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBjcmVhdGUgVGlja2V0RXh0cmFzT2JqZWN0IGFuZCBhZGRlZCBpdCB0byB0aGUgYmFza2V0XHJcblxyXG4gICAgaWYgKG91dGJvdW5kPy50aWNrZXRFeHRyYXM/Lmxlbmd0aCkge1xyXG4gICAgICB0aWNrZXRFeHRyYXMgPSB0aGlzLmNyZWF0ZVRpY2tldEV4dHJhc09iamVjdChvdXRib3VuZC50aWNrZXRFeHRyYXNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoXHJcbiAgICAgIG91dGJvdW5kRmFyZSxcclxuICAgICAgb3V0Ym91bmQsXHJcbiAgICAgIGluYm91bmRcclxuICAgICk7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihvdXRib3VuZCk7XHJcbiAgICAgIGNvbnN0IGluYm91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKGluYm91bmQpO1xyXG5cclxuICAgICAgY29uc3QgYmFza2V0SXRlbTogUmFpbEJhc2tldEl0ZW0gPSB7XHJcbiAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgc2VydmljZTogc2VydmljZUlkLFxyXG4gICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgdGlja2V0UXVldWVMaXN0OiAob3V0Ym91bmQudGlja2V0UXVldWVMaXN0IHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgIChpdGVtOiBSYWlsVGlja2V0UXVldWUpOiBUaWNrZXRRdWV1ZUxpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBhY2NvdW50c0xpc3Q6IChvdXRib3VuZC5hY2NvdW50c0xpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxBY2NvdW50KTogQWNjb3VudHNMaXN0ID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogb3V0Ym91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogb3V0Ym91bmQudG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBvdXRib3VuZC5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IG91dGJvdW5kLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Ym91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBvdXRib3VuZEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBvdXRib3VuZEZhcmUucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBvdXRib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBpbmJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IGluYm91bmQudG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogaW5ib3VuZC5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGluYm91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBpbmJvdW5kRmFyZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogaW5ib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhvdXRib3VuZC5qb3VybmV5TGVncylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAvLyB0aWNrZXRRdWV1ZUxpc3QsXHJcbiAgICAgICAgICByZXR1cm46IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKGluYm91bmQuam91cm5leUxlZ3MpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogb3V0Ym91bmRGYXJlLnByaWNlLFxyXG4gICAgICAgIGN1cnJlbmN5OiBvdXRib3VuZEZhcmUuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiByYWlsUXVlcnksXHJcbiAgICAgICAgY28yUGVySXRlbTogb3V0Ym91bmQuY28yUGVySXRlbSxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IG91dGJvdW5kLmNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBvdXRib3VuZERhdGU6IG91dGJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgIGluYm91bmREYXRlOiBpbmJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICBcclxuICAgICAgfTtcclxuICAgICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBhZGQgdGhlIG9iamVjdCB0byBiYXNrZXRJdGVtXHJcbiAgICAgIGlmICh0aWNrZXRFeHRyYXMpIHtcclxuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZC50aWNrZXRFeHRyYXMgPSB0aWNrZXRFeHRyYXM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKHJhaWxMZWdzOiBSYWlsSm91cm5leUxlZ1tdKTogUmFpbEpvdXJuZXlMZWdbXSB7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYWlsTGVncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBsZWcgPSByYWlsTGVnc1tpXTtcclxuXHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVnLmNhbGxpbmdQb2ludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBjYWxsaW5nUG9pbnRzID0gbGVnLmNhbGxpbmdQb2ludHNbal07XHJcbiAgICAgICAgZGVsZXRlIGNhbGxpbmdQb2ludHMuc2NoZWR1bGVkUGxhdGZvcm07XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJhaWxMZWdzO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KHJhaWxUaWNrZXRFeHRyYTogUmFpbFRpY2tldEV4dHJhKTogVGlja2V0RXh0cmFzW10ge1xyXG4gICAgbGV0IHByaWNlID1cclxuICAgICAgdGhpcy5ub09mQ2hpbGRyZW4gKiByYWlsVGlja2V0RXh0cmE/LmNoaWxkQW1vdW50ICtcclxuICAgICAgdGhpcy5ub09mQWR1bHRzICogcmFpbFRpY2tldEV4dHJhLmFkdWx0QW1vdW50O1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6IHJhaWxUaWNrZXRFeHRyYS5pZGVudGlmaWVycy50eXBlLFxyXG4gICAgICAgIGxvY2F0aW9uOiByYWlsVGlja2V0RXh0cmEuaWRlbnRpZmllcnMubG9jYXRpb24sXHJcbiAgICAgICAgZGF0ZTogcmFpbFRpY2tldEV4dHJhLmlkZW50aWZpZXJzLmRhdGUsXHJcbiAgICAgICAgcHJpY2U6IHByaWNlXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVUaW1lRGlmZmVyZW5jZUluTWlucyhyYWlsSm91cm5leTogUmFpbEpvdXJuZXlPcHRpb24pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVyc1xyXG4gICAgICAuZ2V0VGltZURpZmZlcmVuY2UocmFpbEpvdXJuZXkuYXJyaXZlRGF0ZVRpbWUsIHJhaWxKb3VybmV5LmRlcGFydERhdGVUaW1lKVxyXG4gICAgICAudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGRldGVybWluZSBpZiBhIHRpY2tldCBpcyBhbiBlVGlja2V0XHJcbiAgICogQHBhcmFtIHRpY2tldCAtIHRoZSB0aWNrZXQgd2Ugd2FudCB0byB0byBjaGVja1xyXG4gICAqIEByZXR1cm5zIC0gYm9vbGVhblxyXG4gICAqL1xyXG4gIHRpY2tldElzQW5FVGlja2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZm91bmRFVGlja2V0OiBSYWlsSm91cm5leU9wdGlvbiA9IG51bGw7XHJcblxyXG4gICAgLy8gZm91bmRFVGlja2V0ID0gdGlja2V0LnRpY2tldFF1ZXVlTGlzdC5maW5kKChxdWV1ZUxpc3RJdGVtKSA9PiB7XHJcbiAgICAvLyAgIHJldHVybiBxdWV1ZUxpc3RJdGVtLnR5cGUgPT09ICdlVGlja2V0JztcclxuICAgIC8vIH0pO1xyXG5cclxuICAgIHJldHVybiBmb3VuZEVUaWNrZXQgPyB0cnVlIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBseUZpbHRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBfYXBwbHlGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChcclxuICAgICAgdHlwZTogUmFpbFJ1bGVFbml0eUtleXMsXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMuX2ZpbmRTdW1tYXJ5KGpvdXJuZXksIHRoaXMuc3VtbWFyeS5yZXR1cm4pO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5XHJcbiAgICAgICAgPyAoZ3JvdXBlZEZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBlZEZhcmVzLm1hcCgoZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFmYXJlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuaGVscGVycy5hZGRSYWlsQWN0aW9uUnVsZXMoeyAuLi5mYXJlIH0sIFtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5W3R5cGVdW3RoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaF1cclxuICAgICAgICAgICAgICAgICAgICA/LnJ1bGVEYXRhV2hlblNlbGVjdGVkV2l0aFtmYXJlLmZhcmVIYXNoXSxcclxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVxyXG4gICAgICAgICAgICAgICAgICAgID8gc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXT8ucnVsZURhdGFXaGVuU2VsZWN0ZWRBbG9uZVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFyZS5mYXJlSGFzaCA9PT0gdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogISF0aGlzLl9zZWxlY3RlZFN1bW1hcnlbdHlwZV1bXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaFxyXG4gICAgICAgICAgICAgICAgXT8uYWxsb3dlZFdpdGg/LmluY2x1ZGVzKGZhcmUuZmFyZUhhc2gpXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiAoZ3JvdXBlZEZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBlZEZhcmVzLm1hcCgoZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFmYXJlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuaGVscGVycy5hZGRSYWlsQWN0aW9uUnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgIHsgLi4uZmFyZSB9LFxyXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgPyBbc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5ydWxlRGF0YVdoZW5TZWxlY3RlZEFsb25lXVxyXG4gICAgICAgICAgICAgICAgICAgIDogW11cclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzZXRSdWxlcyA9IChcclxuICAgICAgdHlwZTogUmFpbFJ1bGVFbml0eUtleXMsXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgICBkaXJlY3Rpb246ICdvdXRib3VuZCcgfCAncmV0dXJuJ1xyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZ3JvdXBlZEZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSk6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0+IHtcclxuICAgICAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5fZmluZFN1bW1hcnkoam91cm5leSwgdGhpcy5zdW1tYXJ5W2RpcmVjdGlvbl0pO1xyXG4gICAgICAgIHJldHVybiBncm91cGVkRmFyZXMubWFwKFxyXG4gICAgICAgICAgKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZmFyZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlbHBlcnMuYWRkUmFpbEFjdGlvblJ1bGVzKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC4uLmZhcmUsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxyXG4gICAgICAgICAgICAgICAgICBmYXJlLmZhcmVIYXNoID09PSB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2hcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHN1bW1hcnlcclxuICAgICAgICAgICAgICAgID8gW3N1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0ucnVsZURhdGFXaGVuU2VsZWN0ZWRBbG9uZV1cclxuICAgICAgICAgICAgICAgIDogW11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICB0aGlzLmhlbHBlcnNcclxuICAgICAgICAuY2xvbmUodGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2N1bTogT0JUUmFpbFF1b3RlUmVzdWx0W10sXHJcbiAgICAgICAgICAgIG5leHQ6IE9CVFJhaWxRdW90ZVJlc3VsdFxyXG4gICAgICAgICAgKTogT0JUUmFpbFF1b3RlUmVzdWx0W10gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0ge1xyXG4gICAgICAgICAgICAgIC4uLm5leHQsXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmQ6IChuZXh0Lm91dGJvdW5kIHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBPQlRSYWlsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmFpbERpcmVjdGlvbi5PdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybkpvdXJuZXlGYXJlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJhaWxEaXJlY3Rpb24uT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSYWlsRGlyZWN0aW9uLk91dGJvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICB9IGFzIE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuOiAobmV4dC5yZXR1cm4gfHwgW10pLm1hcChcclxuICAgICAgICAgICAgICAgIChqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbik6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5qb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoJ3JldHVybkpvdXJuZXlGYXJlcycsIGpvdXJuZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnLCBqb3VybmV5KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkuc2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoJ3NpbmdsZUpvdXJuZXlGYXJlcycsIGpvdXJuZXksICdyZXR1cm4nKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdvcGVuUmV0dXJuSm91cm5leUZhcmVzJywgam91cm5leSwgJ3JldHVybicpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYWNjdW0ucHVzaCh0ZW1wKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFRlcm1zQW5kQ29uZChcclxuICAgIG91dGJvdW5kRmFyZTogUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgb3V0Ym91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgaW5ib3VuZD86IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENsYXNzJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVDbGFzc1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENvbmRpdGlvbnMgRGVzY3JpcHRpb24nLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudGlja2V0VHlwZUNvbmRpdGlvbnNEZXNjcmlwdGlvblxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZhbGlkIFJldHVybiBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnZhbGlkUmV0dXJuUnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIE5hbWUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudGlja2V0VHlwZU5hbWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDaGFuZ2UgUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5jaGFuZ2VSdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUHJlIEJvb2tpbmcgUmVxdWlyZW1lbnQnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMucHJlQm9va2luZ1JlcXVpcmVtZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmFpbGNhcmQgRGlzY291bnQnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMucmFpbGNhcmREaXNjb3VudFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENvZGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudGlja2V0VHlwZUNvZGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDaGlsZCBEaXNjb3VudCcsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5jaGlsZERpc2NvdW50XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVmFsaWQgT3V0IFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudmFsaWRPdXRSdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3RhcnQgRGF0ZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRW5kIERhdGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0pvdXJuZXkgQnJlYWsgUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5qb3VybmV5QnJlYWtSdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmVmdW5kIENhbmNlbGxhdGlvbiBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnJlZnVuZENhbmNlbGxhdGlvblJ1bGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdKb3VybmV5IFR5cGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuam91cm5leVR5cGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUb2QgQXZhaWxhYmxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRvZEF2YWlsYWJsZVxyXG4gICAgICB9LFxyXG5cclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdSZXR1cm4gU3RhcnQgRGF0ZScsXHJcbiAgICAgICAgdmFsdWU6IGluYm91bmQ/LmRlcGFydERhdGVUaW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmV0dXJuIEVuZCBEYXRlJyxcclxuICAgICAgICB2YWx1ZTogaW5ib3VuZD8uYXJyaXZlRGF0ZVRpbWVcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PntcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRoaXMudGVtcFBhcmFtcyk7XHJcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBSYWlsUmVjZW50U2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xyXG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXHJcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLlJhaWwsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
1732
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFpbC1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9yYWlsLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBR0wsYUFBYSxFQUNiLHFCQUFxQixFQWNyQixhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBRUwsU0FBUyxFQUtULFdBQVcsRUFFWCxxQkFBcUIsRUFPdEIsTUFBTSx3QkFBd0IsQ0FBQztBQW1DaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXZCLE1BQU0sQ0FBTixJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIsNkNBQXVCLENBQUE7SUFDdkIsOENBQXdCLENBQUE7QUFDMUIsQ0FBQyxFQUhXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFHN0I7QUFFRCxNQUFNLENBQU4sSUFBWSxtQkFHWDtBQUhELFdBQVksbUJBQW1CO0lBQzdCLHdDQUFpQixDQUFBO0lBQ2pCLHdDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFIVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBRzlCO0FBRUQsTUFBTSxPQUFPLG9CQUlYLFNBQVEsb0JBSVA7SUFpaUJELFlBQ1UsV0FBb0MsRUFDcEMscUJBQXVELEVBQy9ELE9BQTJCLEVBQ25CLGFBQStDLEVBQ3ZELGNBQWtDLEVBQzFCLGFBQStDLEVBQy9DLFdBQWlDLEVBQ2pDLFlBQW9DO1FBRTVDLEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFUdkIsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ3BDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBa0M7UUFFdkQsa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBRS9DLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQUMvQyxnQkFBVyxHQUFYLFdBQVcsQ0FBc0I7UUFDakMsaUJBQVksR0FBWixZQUFZLENBQXdCO1FBaGZwQyx1QkFBa0IsR0FBRyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQztRQUNsRSw0QkFBdUIsR0FDL0Isb0JBQW9CLENBQUMsdUJBQXVCLENBQUM7UUFFeEMsZ0JBQVcsR0FBRztZQUNuQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLGFBQWEsRUFBRTtZQUNqRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLGFBQWEsRUFBRTtZQUNsRSw4RUFBOEU7WUFDOUUsK0VBQStFO1NBQ2hGLENBQUM7UUFFSyxlQUFVLEdBQUc7WUFDbEIsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3hDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRTtZQUNsRCxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUU7U0FDN0MsQ0FBQztRQUVLLDJCQUFzQixHQUFrQztZQUM3RCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQ3JELEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDakQsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUNqRCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQ3JELEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDakQsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUNqRCxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQzFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDMUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSw2QkFBNkIsRUFBRTtZQUNuRCxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLDZCQUE2QixFQUFFO1NBQ3BELENBQUM7UUFFSyxnQ0FBMkIsR0FFOUI7WUFDRixPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDbkMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ25DLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUMvQixHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDL0IsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQy9CLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUMvQixFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDOUIsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQzlCLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUM5QixFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7U0FDL0IsQ0FBQztRQUVLLGlCQUFZLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEUsZ0JBQVcsR0FBRztZQUNuQixFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ25ELEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDaEQsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtZQUM1QyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzVDLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDcEQsQ0FBQztRQUVGLGlDQUFpQztRQUNqQyw4QkFBOEI7UUFDOUIsMEJBQTBCO1FBQzFCLDBCQUEwQjtRQUMxQixnQ0FBZ0M7UUFDekIsbUNBQThCLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLFNBQUksR0FBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQztRQUVwQyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDM0IsYUFBUSxHQUFHLElBQUksZUFBZSxDQU1sQztZQUNELGdCQUFnQixFQUFFO2dCQUNoQixzQkFBc0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUMvRCxzQkFBc0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUMvRCxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUMzRCxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQzVEO1lBQ0QsZUFBZSxFQUFFO2dCQUNmLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQy9ELHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQy9ELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzNELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7YUFDNUQ7WUFDRCxtQkFBbUIsRUFBRTtnQkFDbkIsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDMUQsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ3ZELHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ2pFLHFCQUFxQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7YUFDL0Q7WUFDRCx5QkFBeUIsRUFBRTtnQkFDekIsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDMUQsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ3ZELHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ2pFLHFCQUFxQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7YUFDL0Q7WUFDRCx1QkFBdUIsRUFBRTtnQkFDdkIsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDMUQsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ3ZELHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ2pFLHFCQUFxQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7YUFDL0Q7U0FDRixDQUFDLENBQUM7UUFTSSxvQkFBZSxHQUFrQjtZQUN0QyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFO1lBQ3JCLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO1lBQzNCLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUU7U0FDckIsQ0FBQztRQUNLLG1CQUFjLEdBQWtCO1lBQ3JDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUU7WUFDckIsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7WUFDM0IsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRTtTQUNyQixDQUFDO1FBQ0ssWUFBTyxHQUFrQjtZQUM5QiwwREFBMEQ7WUFDMUQsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ3JDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUN2QyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7U0FDckMsQ0FBQztRQU9LLFlBQU8sR0FBZ0IsRUFBRSxDQUFDO1FBOExqQywrQ0FBK0M7UUFDdkMsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBV3JDLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBVTlCLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQVduQyxpQkFBWSxHQUFXLElBQUksQ0FBQztRQWlKbEMsTUFBTSxJQUFJLEdBSU4sY0FBYyxDQUFDLGNBQWMsQ0FDL0Isb0JBQW9CLENBQUMsc0JBQXNCLENBQzVDLElBQUk7WUFDSCxLQUFLLEVBQUUsRUFBRTtZQUNULFVBQVUsRUFBRSxFQUFvQjtZQUNoQyxrQkFBa0IsRUFBRSxFQUFvQjtTQUN6QyxDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFFbkQsSUFBSSxhQUFhLENBQUMsOEJBQThCLEVBQUUsRUFBRTtZQUNsRCxhQUFhLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUMxQyxDQUFDLFVBQXVCLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBQzdCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQ3JELFVBQVUsRUFDVixXQUFXLENBQUMsSUFBSSxDQUNqQixDQUFDO2dCQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDL0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixDQUFDLENBQ0YsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFsa0JELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsY0FHbEI7UUFDQyxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLE9BQU87U0FDUjthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQzVCLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxxQkFBcUIsQ0FBQyxjQUFtQztRQUMzRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsY0FBYyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixPQUFPO1NBQ1I7YUFBTTtZQUNMLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3JELENBQUMsS0FBb0IsRUFBVyxFQUFFO2dCQUNoQyxPQUFPLEtBQUssQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ3hFLENBQUMsQ0FDRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBOEdELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLEtBQWM7UUFDakMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBeUJELElBQUksVUFBVTtRQUNaLE9BQU8sQ0FDTCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQjtZQUNoQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FDeEMsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFlO1FBQzVCLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0I7Z0JBQzlCLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDO1NBQzNDO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLGFBQWEsQ0FBQztTQUN4RTtRQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLE9BQThCO1FBQ2pELElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsTUFBYztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxRQUFnQjtRQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxFQUFPOztRQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsVUFBSSxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsV0FBVywwQ0FBRSxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztTQUN4QzthQUNJLElBQUksRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLEVBQUUsRUFBQztZQUNkLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQTtTQUMzQjtRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLEVBQU87O1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixVQUFJLEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxXQUFXLDBDQUFFLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1NBQzFDO2FBQ0ksSUFBSSxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsRUFBRSxFQUFDO1lBQ2QsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFBO1NBQzdCO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLGVBQWUsQ0FBQyxRQUFtQjtRQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLGlCQUFpQixDQUFDLE1BQWlCO1FBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsS0FBYztRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLEdBQUcsQ0FBQyxHQUFZO1FBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFdBQWdCOztRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFFMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsVUFBSSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsV0FBVywwQ0FBRSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztTQUNoRDtRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLFdBQTBCO1FBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO1FBQy9DLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUNaO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRztZQUNwQixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRTtZQUN4QixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7WUFDOUIsR0FBRyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUU7U0FDeEIsQ0FBQztRQUVGLElBQ0UsSUFBSSxDQUFDLGdCQUFnQjtZQUNyQixJQUFJLENBQUMsZUFBZTtZQUNwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDbkQ7WUFDQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlO2lCQUN4QyxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDL0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2pDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxPQUEyQjtRQUM5Qyw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7UUFFM0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsV0FBMEI7UUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDO1FBQzlDLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFLRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQW9CO1FBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFHRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUlELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsS0FBb0I7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUdELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLE9BQTJCO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksWUFBWSxDQUFDLFNBQWtCO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxvQkFBb0IsQ0FBQyxNQUFlO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDO1FBQzlDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLGlCQUFpQixDQUFDLFdBQW9CO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO1FBQ2hELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLE9BQWdCO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsS0FBbUM7UUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsSUFBSSxDQUFDLFVBQVU7WUFDYixJQUFJLENBQUMsVUFBVTtnQkFDZixLQUFLLENBQUMsRUFBRSxDQUFDO3FCQUNOLElBQUksQ0FBQyxDQUFDLENBQUM7cUJBQ1AsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQWEsRUFBRSxFQUFFO29CQUN4QixPQUFPO3dCQUNMLEtBQUssRUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7NkJBQ2xCLFFBQVEsRUFBRTs2QkFDVixRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQzs0QkFDbkIsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQzt3QkFDaEQsT0FBTyxFQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzs2QkFDbEIsUUFBUSxFQUFFOzZCQUNWLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDOzRCQUNuQixHQUFHOzRCQUNILENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7cUJBQ2pELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxxQkFBcUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLHFCQUFxQixDQUFDLE9BQWU7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUM7UUFDaEQsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELDJCQUEyQixDQUFDLFVBRzNCO1FBQ0MsTUFBTSxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLEdBQUcsVUFBVSxDQUFDO1FBQzlELElBQUksbUJBQW1CLElBQUksaUJBQWlCLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztZQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLGlCQUFpQixDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFTyxZQUFZLENBQ2xCLE9BQTZCLEVBQzdCLE9BQXdCO1FBRXhCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQW9CLEVBQVcsRUFBRTtZQUNwRCxPQUFPLEtBQUssQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFnQztRQUNoRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUErQ1MsY0FBYyxDQUN0QixVQUFnQztRQUVoQyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQXdCLEVBQXNCLEVBQUU7O1lBQ2hFLHVDQUNLLElBQUksS0FDUCxJQUFJLFFBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksMENBQUUsV0FBVyxJQUM3QixRQUFRLEVBQUUsS0FBSyxFQUNmLFVBQVUsRUFBRSxJQUFJLElBQ2hCO1FBQ0osQ0FBQyxDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsQ0FDaEIsUUFBK0MsRUFDZixFQUFFO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPO2lCQUMxQixLQUFLLENBQUMsUUFBUSxDQUFDO2lCQUNmLElBQUksQ0FBQyxDQUFDLEtBQXdCLEVBQUUsTUFBeUIsRUFBVSxFQUFFO2dCQUNwRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ2xDLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ1g7Z0JBQ0QsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUNqQyxPQUFPLENBQUMsQ0FBQztpQkFDVjtnQkFDRCxPQUFPLENBQUMsQ0FBQztZQUNYLENBQUMsQ0FBQztpQkFDRCxHQUFHLENBQUMsQ0FBQyxPQUEwQixFQUFnQyxFQUFFO2dCQUNoRSxNQUFNLElBQUksR0FBRyxDQUNYLEtBQXlCLEVBQ3pCLE1BQTBCLEVBQ2xCLEVBQUU7b0JBQ1YsT0FBTyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQztnQkFFRixNQUFNLGtCQUFrQixHQUFHLENBQUMsT0FBTyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQztxQkFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQztxQkFDVixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDO3FCQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDO3FCQUNWLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDO3FCQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDO3FCQUNWLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDO3FCQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDO3FCQUNWLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFakIsTUFBTSxzQkFBc0IsR0FDMUIsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLHNCQUFzQixHQUMxQixrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25DLE1BQU0sa0JBQWtCLEdBQ3RCLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sa0JBQWtCLEdBQ3RCLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRS9CLE1BQU0sU0FBUyxHQUFHLGdDQUNiLE9BQU8sS0FDVixzQkFBc0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUNyRCxzQkFBc0IsRUFDdEIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUM1QyxFQUNELHNCQUFzQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQ3JELHNCQUFzQixFQUN0QixDQUFDLE1BQU0sRUFBRSxDQUFDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQzVDLEVBQ0Qsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FDakQsa0JBQWtCLEVBQ2xCLENBQUMsTUFBTSxFQUFFLENBQUMsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FDNUMsRUFDRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUNqRCxrQkFBa0IsRUFDbEIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUM1QyxHQUM4QixDQUFDO2dCQUVsQyxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztZQUNMLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztRQUVGLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQTJCLEVBQXNCLEVBQUU7WUFDeEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7WUFDOUQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUM7WUFFM0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDeEMsZ0JBQWdCLElBQUksRUFBRTtnQkFDdEIsZUFBZSxJQUFJLEVBQUU7YUFDdEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxZQUFZLEdBQUcsQ0FDbkIsS0FBMEIsRUFDMUIsVUFBNEIsRUFDZixFQUFFO2dCQUNmLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUN2QyxDQUFDLE9BQW9CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFtQixFQUFFLEVBQUU7b0JBQ3hELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHO3lCQUNoQixjQUFjLENBQUMsSUFBSSxDQUFDO3lCQUNwQixHQUFHLENBQUMsQ0FBQyxNQUFnQixFQUFzQixFQUFFO3dCQUM1QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDckQsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQztZQUNGLE1BQU0saUJBQWlCLEdBQUcsQ0FDeEIsT0FBcUMsRUFDZixFQUFFO2dCQUN4Qix1Q0FDSyxPQUFPLEtBQ1Ysa0JBQWtCLEVBQUUsWUFBWSxDQUM5QixPQUFPLENBQUMsa0JBQWtCLEVBQzFCLG9CQUFvQixDQUNyQixFQUNELHNCQUFzQixFQUFFLFlBQVksQ0FDbEMsT0FBTyxDQUFDLHNCQUFzQixFQUM5Qix3QkFBd0IsQ0FDekIsRUFDRCxzQkFBc0IsRUFBRSxZQUFZLENBQ2xDLE9BQU8sQ0FBQyxzQkFBc0IsRUFDOUIsd0JBQXdCLENBQ3pCLEVBQ0Qsa0JBQWtCLEVBQUUsWUFBWSxDQUM5QixPQUFPLENBQUMsa0JBQWtCLEVBQzFCLG9CQUFvQixDQUNyQixJQUNEO1lBQ0osQ0FBQyxDQUFDO1lBRUYsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekQsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBRXZELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQ2pDLFFBQVEsRUFDUjtnQkFDRSxlQUFlLEVBQUU7b0JBQ2Ysc0JBQXNCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDL0Qsc0JBQXNCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDL0Qsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDM0Qsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtpQkFDNUQ7Z0JBQ0QsbUJBQW1CLEVBQUU7b0JBQ25CLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQzFELGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUN2RCx3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUNqRSxxQkFBcUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2lCQUMvRDtnQkFDRCxtQkFBbUIsRUFBRTtvQkFDbkIsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDMUQsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQ3ZELHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQ2pFLHFCQUFxQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7aUJBQy9EO2FBQ0YsRUFDRCxLQUFLLENBQ04sQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQ2hDLE9BQU8sRUFDUDtnQkFDRSxlQUFlLEVBQUU7b0JBQ2Ysc0JBQXNCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDL0Qsc0JBQXNCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDL0Qsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDM0Qsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtpQkFDNUQ7Z0JBQ0QsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLG1CQUFtQjtnQkFDbEQsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLG1CQUFtQjthQUNuRCxFQUVELElBQUksQ0FDTCxDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxlQUFlO2dCQUMzQyxlQUFlLEVBQUUsUUFBUSxDQUFDLGVBQWU7Z0JBQ3pDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxtQkFBbUI7Z0JBQ2pELHlCQUF5QixFQUFFLFNBQVMsQ0FBQyxtQkFBbUI7Z0JBQ3hELHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxtQkFBbUI7YUFDdEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxnQ0FDRixVQUFVLEtBQ2IsUUFBUSxFQUNSLE1BQU0sRUFBRSxPQUFPLEdBQ00sQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQ25CLFFBQTBDO1FBRTFDLE9BQU87WUFDTCxvQkFBb0I7WUFDcEIsd0JBQXdCO1lBQ3hCLHdCQUF3QjtZQUN4QixvQkFBb0I7U0FDckIsQ0FBQyxNQUFNLENBQ04sQ0FDRSxLQUFrRCxFQUNsRCxJQUFzQixFQUN1QixFQUFFO1lBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFDRDtZQUNFLGtCQUFrQixFQUFFLElBQUksaUJBQWlCLEVBQUU7WUFDM0Msc0JBQXNCLEVBQUUsSUFBSSxpQkFBaUIsRUFBRTtZQUMvQyxzQkFBc0IsRUFBRSxJQUFJLGlCQUFpQixFQUFFO1lBQy9DLGtCQUFrQixFQUFFLElBQUksaUJBQWlCLEVBQUU7U0FDNUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWMsQ0FDcEIsUUFBMEMsRUFDMUMsS0FBdUI7UUFFdkIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ3JDLENBQ0UsR0FBc0IsRUFDdEIsT0FBcUMsRUFDbEIsRUFBRTtZQUNyQixJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNaLE9BQU8sR0FBRyxDQUFDO2FBQ1o7WUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQzFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUdyQixFQUFFLEVBQUU7Z0JBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQzlCLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFpQyxFQUFFLEVBQUU7b0JBQ3RELEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDLENBQ0YsQ0FBQztZQUNGLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRCxJQUFJLGlCQUFpQixFQUFFLENBQ3hCLENBQUM7SUFDSixDQUFDO0lBQ08sWUFBWSxDQUNsQixRQUFnQyxFQUNoQyxNQUlDLEVBQ0QsUUFBaUI7UUFNakIsTUFBTSxHQUFHLEdBQUcsQ0FDVixPQUlDLEVBQ0QsS0FBMkIsRUFDM0IsT0FBNkIsRUFLN0IsRUFBRTtZQUNGLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ2hDLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1lBQ0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM1QixPQUFPLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSTtnQkFDOUMsQ0FBQyxDQUFDLE9BQU87Z0JBQ1QsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLENBQUMsQ0FBQztRQUVGLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FDcEIsQ0FDRSxPQUlDLEVBQ0QsT0FBNkIsRUFLN0IsRUFBRTs7WUFDRixNQUFNLElBQUksR0FBRyxDQUNYLEtBQXlCLEVBQ3pCLE1BQTBCLEVBQ2xCLEVBQUU7Z0JBQ1YsT0FBTyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEMsQ0FBQyxDQUFDO1lBQ0YsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUM5QyxDQUFDLE1BQU0sQ0FDTixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDaEUsQ0FBQztZQUVGLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FDOUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakQsQ0FBQztZQUNGLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FDOUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEQsQ0FBQztZQUNGLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FDOUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakQsQ0FBQztZQUNGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEQsQ0FBQztZQUNGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakQsQ0FBQztZQUNGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEQsQ0FBQztZQUNGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakQsQ0FBQztZQUVGLE1BQU0sY0FBYyxHQUF5QjtnQkFDM0MsR0FBRywwQkFBMEI7Z0JBQzdCLEdBQUcsc0JBQXNCO2dCQUN6QixHQUFHLHNCQUFzQjthQUMxQixDQUFDO1lBQ0YsTUFBTSxXQUFXLEdBQXlCO2dCQUN4QyxHQUFHLDBCQUEwQjtnQkFDN0IsR0FBRyxjQUFjO2FBQ2xCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2IsTUFBTSxXQUFXLEdBQXlCO2dCQUN4QyxHQUFHLHVCQUF1QjtnQkFDMUIsR0FBRyxtQkFBbUI7Z0JBQ3RCLEdBQUcsbUJBQW1CO2FBQ3ZCLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBeUI7Z0JBQ3JDLEdBQUcsdUJBQXVCO2dCQUMxQixHQUFHLFdBQVc7YUFDZixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQjtZQUVELE9BQU8sQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUNsRCxPQUFPLENBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUM5QyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzdELENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0MsRUFDRCxPQUFPLENBQ1IsQ0FBQztZQUNGLE9BQU8sQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUNsRCxPQUFPLENBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUM5QyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzdELENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0MsRUFDRCxPQUFPLENBQ1IsQ0FBQztZQUVGLE9BQU8sQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUM5QyxPQUFPLENBQUMsZUFBZSxDQUFDLGtCQUFrQixFQUMxQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ3pELENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0MsRUFDRCxPQUFPLENBQ1IsQ0FBQztZQUNGLElBQUksUUFBUSxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsR0FBRyxHQUFHLENBQ3hELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFDcEQsV0FBVyxFQUNYLE9BQU8sQ0FDUixDQUFDO2dCQUNGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQ3JELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFDakQsUUFBUSxFQUNSLE9BQU8sQ0FDUixDQUFDO2dCQUVGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsR0FBRyxHQUFHLENBQ3hELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFDcEQsY0FBYyxFQUNkLE9BQU8sQ0FDUixDQUFDO2dCQUNGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQ3JELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFDakQsV0FBVyxFQUNYLE9BQU8sQ0FDUixDQUFDO2dCQUNGLE1BQU0scUJBQXFCLEdBQ3pCLGFBQUEsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQiwwQ0FBRSxJQUFJLDBDQUMvQyxjQUFjLE1BQUssbUJBQW1CLENBQUMsTUFBTSxDQUFDO2dCQUNwRCxJQUFJLHFCQUFxQixFQUFFO29CQUN6QixNQUFNLFlBQVksR0FBRyxHQUFHLENBQ3RCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFDcEQsMEJBQTBCLEVBQzFCLE9BQU8sQ0FDUixDQUFDO29CQUNGLE1BQU0sa0JBQWtCLEdBQ3RCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7b0JBQ3RELElBQ0Usa0JBQWtCO3dCQUNsQixPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUNuRDt3QkFDQSxPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCOzRCQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7d0JBQ2hELDJEQUEyRDt3QkFDM0QsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsS0FBSztxQkFDTjt5QkFBTSxJQUNMLFlBQVksQ0FBQyxLQUFLO3dCQUNsQixPQUFPLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUMxRDt3QkFDQSxPQUFPLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCOzRCQUNsRCxZQUFZLENBQUM7cUJBQ2hCO2lCQUNGO2dCQUVELE1BQU0sa0JBQWtCLEdBQ3RCLGFBQUEsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsMENBQUUsSUFBSSwwQ0FBRSxjQUFjO29CQUNoRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7Z0JBQzdCLElBQUksa0JBQWtCLEVBQUU7b0JBQ3RCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FDdEIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixFQUNqRCx1QkFBdUIsRUFDdkIsT0FBTyxDQUNSLENBQUM7b0JBQ0YsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7b0JBQ3BFLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO3dCQUNqRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsY0FBYzs0QkFDeEMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQzt3QkFDN0Msd0RBQXdEO3dCQUN4RCxjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixLQUFLO3FCQUNOO3lCQUFNLElBQ0wsWUFBWSxDQUFDLEtBQUs7d0JBQ2xCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQ3ZEO3dCQUNBLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsR0FBRyxZQUFZLENBQUM7cUJBQ2xFO2lCQUNGO2FBQ0Y7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FDakQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUM3QyxXQUFXLEVBQ1gsT0FBTyxDQUNSLENBQUM7Z0JBQ0YsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsR0FBRyxHQUFHLENBQzlDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQzFDLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztnQkFFRixPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUNqRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQzdDLGNBQWMsRUFDZCxPQUFPLENBQ1IsQ0FBQztnQkFDRixPQUFPLENBQUMsbUJBQW1CLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FDOUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFDMUMsV0FBVyxFQUNYLE9BQU8sQ0FDUixDQUFDO2FBQ0g7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLEVBQ0QsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0ssWUFBWSxDQUNoQixTQUF3QixFQUN4QixPQUE2QixFQUM3QixRQUE0QixFQUM1QixRQUFnQixFQUNoQixPQUF5QixFQUN6QixZQUFxQixLQUFLOzs7WUFFMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hCLE9BQU87YUFDUjtZQUNELElBQ0UsSUFBSSxDQUFDLGNBQWM7Z0JBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsV0FBVztnQkFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLEVBQ3ZEO2dCQUNBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU87YUFDUjtZQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQ2hFLGNBQWMsQ0FBQywrQkFBK0IsQ0FDL0MsQ0FBQztZQUNGLElBQUksY0FBYyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDN0QsTUFBTSxHQUFHLEdBQXlCLGNBQWMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pELE1BQU0sR0FBRyxHQUF5QixPQUFPLENBQUM7Z0JBRTFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUMxQixPQUFPLEVBQ1AsSUFBSSxDQUNMLENBQUM7Z0JBQ0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FDdkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFDMUIsT0FBTyxFQUNQLElBQUksQ0FDTCxDQUFDO2dCQUNGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUNsRCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUMxQixLQUFLLENBQ04sQ0FBQztnQkFFRixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FDNUMsZUFBZSxHQUFHLGlCQUFpQixFQUNuQyxZQUFZLENBQ2IsQ0FBQztnQkFDRixJQUFJLEtBQUssRUFBRTtvQkFDVCxJQUFJLENBQUMsWUFBWSxDQUNmLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFFBQVEsRUFDUixPQUFPLEVBQ1AsSUFBSSxDQUNMLENBQUM7aUJBQ0g7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLFdBQVcsR0FBbUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUM1RCxRQUFRLE9BQU8sRUFBRTtvQkFDZixLQUFLLG9CQUFvQjt3QkFDdkIsSUFBSSxPQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLDBDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7NEJBQ3JDLE1BQU0sWUFBWSxHQUNoQixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMxQixVQUFVLENBQUMsMEJBQTBCLEVBQ3JDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNsQixFQUFFLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxDQUN2QyxDQUFDOzRCQUNKLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt5QkFDekQ7d0JBQ0QsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQ2pDLFFBQVEsRUFDUixXQUFXLEVBQ1gsT0FBTyxFQUNQLFFBQVEsQ0FDVCxDQUFDO3dCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3dCQUUzQixNQUFNO29CQUNSLEtBQUssb0JBQW9CO3dCQUN2QixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFOzRCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHO2dDQUNwQixPQUFPO2dDQUNQLElBQUksRUFBRSxRQUFROzZCQUNmLENBQUM7eUJBQ0g7NkJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFOzRCQUM5QixJQUFJLGFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLDBDQUFFLFlBQVksMENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtnQ0FDekQsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzFCLFVBQVUsQ0FBQywwQkFBMEIsRUFDckMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQ2xCLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FDM0QsQ0FBQztnQ0FDSixjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZO29DQUNoRCxDQUFDLENBQUMsWUFBWTtvQ0FDZCxDQUFDLENBQUMsRUFBRSxDQUFDOzZCQUNSOzRCQUNELE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUNqQyxRQUFRLEVBQ1IsV0FBVyxFQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUMzQixPQUFPLEVBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQ3hCLFFBQVEsQ0FDVCxDQUFDOzRCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3lCQUM1Qjt3QkFDRCxNQUFNO29CQUNSLEtBQUssd0JBQXdCO3dCQUMzQixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFOzRCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHO2dDQUNwQixPQUFPO2dDQUNQLElBQUksRUFBRSxRQUFROzZCQUNmLENBQUM7eUJBQ0g7NkJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFOzRCQUM5QixJQUFJLGFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLDBDQUFFLFlBQVksMENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtnQ0FDekQsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzFCLFVBQVUsQ0FBQywwQkFBMEIsRUFDckMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQ2xCLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FDM0QsQ0FBQztnQ0FDSixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUMxQixjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZO29DQUNoRCxDQUFDLENBQUMsWUFBWTtvQ0FDZCxDQUFDLENBQUMsRUFBRSxDQUFDOzZCQUNSOzRCQUNELE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUM5QixRQUFRLEVBQ1IsV0FBVyxFQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUMzQixPQUFPLEVBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQ3hCLFFBQVEsQ0FDVCxDQUFDOzRCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3lCQUM1Qjt3QkFDRCxNQUFNO29CQUNSLEtBQUssd0JBQXdCO3dCQUMzQixJQUFJLE9BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFlBQVksMENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTs0QkFDckMsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzFCLFVBQVUsQ0FBQywwQkFBMEIsRUFDckMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQ2xCLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLENBQ3ZDLENBQUM7NEJBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDMUIsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3lCQUN6RDt3QkFDRCxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FDOUIsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsUUFBUSxDQUNULENBQUM7d0JBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7d0JBQzNCLE1BQU07b0JBQ1I7d0JBQ0UsTUFBTSxJQUFJLEdBQXFCLE9BQU8sQ0FBQztpQkFDMUM7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCOztLQUNGO0lBRUsscUJBQXFCLENBQ3pCLGNBQXNCLEVBQ3RCLGFBQXFCOztZQUVyQiw0RkFBNEY7WUFDNUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELE1BQU0sS0FBSyxHQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO2dCQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxxQkFBcUIsQ0FBQyxhQUFhO2dCQUMvRCxjQUFjLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pELGFBQWEsS0FBSyxDQUFDO2dCQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUkscUJBQXFCLENBQUM7WUFDL0QsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDdEMsVUFBVSxDQUFDLDZCQUE2QixDQUN6QyxDQUFDO2dCQUNGLElBQUksR0FBRyxFQUFFO29CQUNQLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDO29CQUM1QyxPQUFPLEtBQUssQ0FBQztpQkFDZDtxQkFBTTtvQkFDTCxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7UUFDSCxDQUFDO0tBQUE7SUFFRCxvQ0FBb0M7UUFDbEMsMEJBQTBCO1FBQzFCLCtCQUErQjtRQUUvQixPQUFPLENBQUMsR0FBRyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDOUQsTUFBTSxpQkFBaUIsR0FDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sZ0JBQWdCLEdBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDL0IsaUJBQWlCLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztRQUN2RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLHlEQUF5RDtRQUN6RCxVQUFVLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUN0RCxXQUFXLENBQUMsSUFBSSxDQUNqQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhDLHFDQUFxQztRQUNyQyxXQUFXLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUM5RCxXQUFXLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDL0MsV0FBVyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUNoRSxXQUFXLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxXQUFXLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7UUFDdkQsV0FBVyxDQUFDLGVBQWU7WUFDekIsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ2xELFdBQVcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLFdBQVcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRTFCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUssaUJBQWlCLENBQ3JCLFNBQXdCLEVBQ3hCLE9BQTZCLEVBQzdCLFFBQTRCLEVBQzVCLFFBQWdCLEVBQ2hCLE9BQXlCOzs7WUFFekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztnQkFDcEQsT0FBTzthQUNSO1lBRUQsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxDQUFDLGNBQWM7Z0JBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsV0FBVztnQkFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDMUQsTUFBTSxrQkFBa0IsR0FDdEIsU0FBUyxLQUFLLGFBQWEsQ0FBQyxPQUFPO2dCQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQjtvQkFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxXQUFXO3dCQUM1QyxPQUFPLENBQUMsV0FBVztvQkFDckIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLFFBQVE7Z0JBQ2hFLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFFWixJQUNFLG1CQUFtQjtnQkFDbkIsQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxFQUMzRDtnQkFDQSxPQUFPLENBQUMsSUFBSSxDQUNWLDhEQUE4RCxDQUMvRCxDQUFDO2dCQUNGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLElBQUksbUJBQW1CLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUMzQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3BCO2dCQUNELE9BQU87YUFDUjtZQUVELElBQ0UsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLE9BQU8sQ0FBQztnQkFDNUQsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssb0JBQW9CO29CQUM3QyxPQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYzt3QkFDbEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFDeEM7Z0JBQ0EsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7YUFDcEM7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1lBQ2hDLE1BQU0sV0FBVyxHQUFtQixJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDNUQsUUFBUSxPQUFPLEVBQUU7Z0JBQ2YsS0FBSyxvQkFBb0I7b0JBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUc7d0JBQ3BCLE9BQU87d0JBQ1AsSUFBSSxFQUFFLFFBQVE7cUJBQ2YsQ0FBQztvQkFFRixNQUFNO2dCQUNSLEtBQUssb0JBQW9CO29CQUN2QixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFO3dCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHOzRCQUNwQixPQUFPOzRCQUNQLElBQUksRUFBRSxRQUFRO3lCQUNmLENBQUM7cUJBQ0g7eUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUM5QixJQUFJLENBQUMscUJBQXFCLEdBQUc7NEJBQzNCLE9BQU87NEJBQ1AsSUFBSSxFQUFFLFFBQVE7eUJBQ2YsQ0FBQztxQkFDSDtvQkFDRCxNQUFNO2dCQUNSLEtBQUssd0JBQXdCO29CQUMzQixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFO3dCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHOzRCQUNwQixPQUFPOzRCQUNQLElBQUksRUFBRSxRQUFRO3lCQUNmLENBQUM7cUJBQ0g7eUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUM5QixJQUFJLENBQUMscUJBQXFCLEdBQUc7NEJBQzNCLE9BQU87NEJBQ1AsSUFBSSxFQUFFLFFBQVE7eUJBQ2YsQ0FBQztxQkFDSDtvQkFDRCxNQUFNO2dCQUNSLEtBQUssd0JBQXdCO29CQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHO3dCQUNwQixPQUFPO3dCQUNQLElBQUksRUFBRSxRQUFRO3FCQUNmLENBQUM7b0JBQ0YsTUFBTTtnQkFDUjtvQkFDRSxNQUFNLElBQUksR0FBcUIsT0FBTyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOztLQUNwQjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNHLFdBQVcsQ0FDZixRQUFnQixFQUNoQixXQUEyQixFQUMzQixPQUE2QixFQUM3QixRQUE0QixFQUM1QixlQUFvQyxFQUNwQyxjQUFxQzs7WUFFckMsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLEtBQUsscUJBQXFCLENBQUMsYUFBYSxFQUFFO2dCQUN4RSxPQUFPO2dCQUNQLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUNqQyxRQUFRLEVBQ1IsV0FBVyxFQUNYLE9BQU8sRUFDUCxRQUFRLENBQ1QsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLHNEQUFzRDtnQkFFdEQsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLHdCQUF3QixFQUFFO29CQUNyRCxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FDOUIsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsUUFBUSxDQUNULENBQUM7aUJBQ0g7cUJBQU0sSUFBSSxRQUFRLENBQUMsY0FBYyxLQUFLLFFBQVEsRUFBRTtvQkFDL0MsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQ2xDLFFBQVEsRUFDUixXQUFXLEVBQ1gsT0FBTyxFQUNQLGNBQWMsRUFDZCxRQUFRLEVBQ1IsZUFBZSxDQUNoQixDQUFDO2lCQUNIO3FCQUFNO29CQUNMLG1CQUFtQjtvQkFDbkIsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQzlCLFFBQVEsRUFDUixXQUFXLEVBQ1gsT0FBTyxFQUNQLGNBQWMsRUFDZCxRQUFRLEVBQ1IsZUFBZSxDQUNoQixDQUFDO2lCQUNIO2FBQ0Y7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7S0FBQTtJQUVLLHFCQUFxQixDQUN6QixRQUFnQixFQUNoQixXQUEyQixFQUMzQixPQUE2QixFQUM3QixRQUE0Qjs7WUFFNUIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQ2xDLFFBQVEsRUFDUixXQUFXLEVBQ1gsT0FBTyxFQUNQLFFBQVEsQ0FDVCxDQUFDO1FBQ0osQ0FBQztLQUFBO0lBRUsscUJBQXFCLENBQ3pCLFNBQWlCLEVBQ2pCLFdBQTJCLEVBQzNCLFFBQThCLEVBQzlCLE9BQTZCLEVBQzdCLFlBQWdDLEVBQ2hDLFdBQStCOzs7WUFFL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVuRCxJQUFJLGNBQThCLENBQUM7WUFDbkMsSUFBSSxlQUErQixDQUFDO1lBRXBDLDhFQUE4RTtZQUM5RSxVQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLDBDQUFFLE1BQU0sRUFBRTtnQkFDakMsY0FBYyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekU7WUFFRCxVQUFJLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxZQUFZLDBDQUFFLE1BQU0sRUFBRTtnQkFDbEMsZUFBZSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0U7WUFFRCxNQUFNLFNBQVMsR0FDYixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN4QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQzdDLFlBQVksRUFDWixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7WUFDRixJQUFJLE1BQU0sRUFBRTtnQkFDVixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFL0QsTUFBTSxVQUFVLEdBQW1CO29CQUNqQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ2pCLE9BQU8sRUFBRSxTQUFTO29CQUNsQixNQUFNLEVBQUU7d0JBQ04sZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ25ELENBQUMsSUFBcUIsRUFBbUIsRUFBRTs0QkFDekMsT0FBTztnQ0FDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0NBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dDQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTs2QkFDaEIsQ0FBQzt3QkFDSixDQUFDLENBQ0Y7d0JBQ0QsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQzdDLENBQUMsSUFBaUIsRUFBZ0IsRUFBRTs0QkFDbEMsT0FBTztnQ0FDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0NBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXOzZCQUM5QixDQUFDO3dCQUNKLENBQUMsQ0FDRjt3QkFDRCxhQUFhLEVBQUU7NEJBQ2IsZUFBZSxFQUFFLFFBQVEsQ0FBQyxjQUFjOzRCQUN4QyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsRUFBRTs0QkFDL0IsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGNBQWM7NEJBQzFDLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxJQUFJOzRCQUNuQyxlQUFlLEVBQUU7Z0NBQ2Y7b0NBQ0UsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZO29DQUN2QyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsSUFBSTtvQ0FDcEMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO29DQUN6QixJQUFJLEVBQUUsWUFBWTtpQ0FDbkI7NkJBQ0Y7eUJBQ0Y7d0JBQ0QsWUFBWSxFQUFFOzRCQUNaLGVBQWUsRUFBRSxPQUFPLENBQUMsY0FBYzs0QkFDdkMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEVBQUU7NEJBQzlCLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxjQUFjOzRCQUN6QyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsSUFBSTs0QkFDbEMsZUFBZSxFQUFFO2dDQUNmO29DQUNFLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWTtvQ0FDdEMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLElBQUk7b0NBQ25DLElBQUksRUFBRSxXQUFXO2lDQUNsQjs2QkFDRjt5QkFDRjt3QkFDRCxxQkFBcUIsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLHFCQUFxQjt3QkFDckUsUUFBUSxFQUFFOzRCQUNSLGVBQWUsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDOzRCQUMxRCxpQkFBaUIsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLGlCQUFpQjs0QkFDN0Qsa0JBQWtCLEVBQUUsSUFBSTs0QkFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyx5Q0FBeUMsQ0FDekQsUUFBUSxDQUFDLFdBQVcsQ0FDckI7NEJBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCO3lCQUN6Qzt3QkFDRCxtQkFBbUI7d0JBQ25CLE1BQU0sRUFBRTs0QkFDTixlQUFlLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQzs0QkFDekQsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUI7NEJBQzVELGtCQUFrQixFQUFFLElBQUk7NEJBQ3hCLFdBQVcsRUFBRSxJQUFJLENBQUMseUNBQXlDLENBQ3pELE9BQU8sQ0FBQyxXQUFXLENBQ3BCOzRCQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLGdCQUFnQjt5QkFDeEM7d0JBQ0QsWUFBWSxFQUFFLGtCQUFrQjtxQkFDakM7b0JBQ0QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO29CQUN4QixLQUFLLEVBQUUsTUFBTSxDQUNYLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQzFEO29CQUNELFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBd0I7b0JBQy9DLFdBQVcsRUFBRSxTQUFTO29CQUN0QixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7b0JBQy9CLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZTtvQkFDekMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxjQUFjO29CQUNyQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGNBQWM7aUJBQ3BDLENBQUM7Z0JBQ0YsMkVBQTJFO2dCQUMzRSxJQUFJLGNBQWMsRUFBRTtvQkFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztpQkFDeEQ7Z0JBQ0QsSUFBSSxlQUFlLEVBQUU7b0JBQ25CLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUM7aUJBQzNEO2dCQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQ25DLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFDZixZQUFZLENBQUMsY0FBYyxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQzFELENBQUM7YUFDSDtZQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDOztLQUMxQjtJQUVELGtCQUFrQjtRQUNoQixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFUyxVQUFVO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQztZQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRU8sUUFBUTs7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FDaEMsb0JBQW9CLENBQUMsc0JBQXNCLEVBQzNDO1lBQ0UsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7U0FDNUMsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUU3QixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUVyQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7U0FDL0Q7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7U0FDN0Q7UUFFRCxVQUFJLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsUUFBUSxDQUFDLEdBQUcsR0FBRztZQUN4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUMxQiw0Q0FBNEMsQ0FDN0MsQ0FBQztTQUNIO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUsscUJBQXFCLENBQUMsYUFBYSxFQUFFO1lBQ2pFLGdEQUFnRDtZQUVoRCxVQUFJLElBQUksQ0FBQyxlQUFlLDBDQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUc7Z0JBQy9ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQzFCLG9EQUFvRCxDQUNyRCxDQUFDO2FBQ0g7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2FBQzlEO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRTtZQUNqRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDcEU7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNwQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQ2hDLG9CQUFvQixDQUFDLHNCQUFzQixFQUMzQztnQkFDRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzNCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7YUFDNUMsQ0FDRixDQUFDO1lBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN0RSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM3RDthQUFNO1lBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUNsQixLQUErQjtRQUUvQixNQUFNLGlCQUFpQixHQUNyQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0IsT0FBTztZQUNMLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSTtZQUM3QixVQUFVLEVBQUUsaUJBQWlCO1lBQzdCLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQzFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLEtBQStCOztRQUUvQixNQUFNLFdBQVcsR0FBeUIsS0FBSyxDQUFDO1FBRWhELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDdEQ7UUFFRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM5QixXQUFXLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1NBQ2hFO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUNsRDtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixXQUFXLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDOUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQzVDO1FBQ0QsV0FBVyxDQUFDLG1CQUFtQixlQUM3QixJQUFJLENBQUMsY0FBYywwQ0FBRSxXQUFXLDBDQUFFLFdBQVcsQ0FBQztRQUVoRCxXQUFXLENBQUMsa0JBQWtCLGVBQzVCLElBQUksQ0FBQyxZQUFZLDBDQUFFLFdBQVcsMENBQUUsV0FBVyxDQUFDO1FBRTlDLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxZQUEwQjs7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUM7UUFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7UUFDakUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUM7UUFFM0UsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLHlCQUF5QjtZQUN2RSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUM7WUFDM0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQ3RDLFlBQVksQ0FBQyxVQUFVLENBQUMseUJBQXlCLEVBQ2pELFlBQVksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQ2hELENBQUM7UUFFRixJQUNFLFlBQVksQ0FBQyxVQUFVLENBQUMsV0FBVztZQUNuQyxxQkFBcUIsQ0FBQyxhQUFhLEVBQ25DO1lBQ0EsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLHVCQUF1QjtnQkFDcEUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDO2dCQUN6RCxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUUxRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQ3BDLFlBQVksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQy9DLFlBQVksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQzlDLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBQSxZQUFZLENBQUMsVUFBVSwwQ0FBRSxrQkFBa0IsMENBQUUsTUFBTSxFQUN2RSxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDVixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDO1NBQzdEO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUN6RCxJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO1FBRTdELElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztTQUN4RDtRQUVELElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRTtZQUM1QyxNQUFNLFVBQVUsR0FBRztnQkFDakIsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUI7Z0JBQ2hFLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsaUJBQWlCO2FBQzdELENBQUM7WUFDRixJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUNFLFlBQVksQ0FBQyxVQUFVLENBQUMsV0FBVztZQUNuQyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFDdkM7WUFDQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QjtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUM5QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FDdEMsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FDcEIsQ0FBQztZQUNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQ3RDLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxZQUFZLENBQ2xCLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDcEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUEwQjs7UUFDdkMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUN6QjtRQUVELE1BQU0sS0FBSyxHQUE2QjtZQUN0QyxXQUFXLEVBQUUsSUFBSTtZQUNqQixXQUFXLEVBQUUsVUFBVSxDQUFDLGdCQUFnQjtZQUN4QyxNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVU7WUFDN0IsaUJBQWlCLGNBQUUsVUFBVSxDQUFDLFlBQVksMENBQUUsV0FBVywwQ0FBRSxFQUFFO1lBQzNELG1CQUFtQixjQUFFLFVBQVUsQ0FBQyxjQUFjLDBDQUFFLFdBQVcsMENBQUUsRUFBRTtZQUMvRCxRQUFRLEVBQUUsVUFBVSxDQUFDLFlBQVk7WUFDakMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxpQkFBaUI7WUFDbkMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDdkMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FDekQsVUFBVSxDQUFDLGdCQUFnQixDQUM1QjtZQUNELHlCQUF5QixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQzNELFVBQVUsQ0FBQyxnQkFBZ0IsQ0FDNUI7WUFDRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUN2RCxVQUFVLENBQUMsZUFBZSxDQUMzQjtZQUNELHVCQUF1QixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQ3pELFVBQVUsQ0FBQyxlQUFlLENBQzNCO1lBQ0QsYUFBYSxjQUFFLFVBQVUsQ0FBQyxXQUFXLDBDQUFFLFdBQVcsMENBQUUsRUFBRTtZQUN0RCxrQkFBa0IsUUFBRSxVQUFVLENBQUMsU0FBUywwQ0FBRSxHQUFHLENBQzNDLENBQUMsUUFBb0MsRUFBRSxFQUFFO2dCQUN2QyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDdkIsQ0FBQyxDQUNGO1NBQ0YsQ0FBQztRQUVGLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxDQUFDLEVBQUU7WUFDakMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDdkI7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRSxFQUFFO1lBQzVCLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQzVCO1FBRUQsUUFBUSxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7WUFDbkMsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUM1QixLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxNQUFNO1lBQ1IsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUM1QixLQUFLLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO2dCQUN2QyxNQUFNO1lBQ1I7Z0JBQ0UsT0FBTyxDQUFDLElBQUksQ0FDVix5QkFBeUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsTUFBTSxDQUNoRSxDQUFDO1NBQ0w7UUFFRCxRQUFRLFVBQVUsQ0FBQyxjQUFjLEVBQUU7WUFDakMsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUM1QixLQUFLLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxNQUFNO1lBQ1IsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUM1QixLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxNQUFNO1lBQ1I7Z0JBQ0UsT0FBTyxDQUFDLElBQUksQ0FDVix5QkFBeUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLE1BQU0sQ0FDOUQsQ0FBQztTQUNMO1FBRUQsUUFBUSxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7WUFDbkMsS0FBSyxxQkFBcUIsQ0FBQyxhQUFhLENBQUM7WUFDekMsS0FBSyxxQkFBcUIsQ0FBQyxpQkFBaUI7Z0JBQzFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLE1BQU07U0FDVDtRQUVELElBQUksVUFBVSxDQUFDLGdCQUFnQixFQUFFO1lBQy9CLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzdDLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQ2xEO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBMkIsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFdBQVcsQ0FDVCxpQkFBeUIsRUFDekIsZUFBdUI7UUFFdkIsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztTQUNsQzthQUFNLElBQUksZUFBZSxFQUFFO1lBQzFCLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDO1NBQ2xDO1FBQ0Q7WUFDRSxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELDBCQUEwQixDQUN4QixhQUE4QyxJQUN2QyxDQUFDO0lBRVYsY0FBYyxDQUNaLElBQVksRUFDWixTQUFvQztRQUVwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN4RCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNqQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLEVBQUUsRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDRCQUE0QixDQUFDLGlCQUF1QztRQUNsRSxJQUFJLElBQUksR0FBVSxFQUFFLENBQUM7UUFDckIsSUFBSSxpQkFBaUIsYUFBakIsaUJBQWlCLHVCQUFqQixpQkFBaUIsQ0FBRSxXQUFXLENBQUMsTUFBTSxFQUFFO1lBQ3pDLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ25ELE9BQU87b0JBQ0wsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO29CQUMxQixpQkFBaUIsRUFBRSxPQUFPLENBQUMsY0FBYztvQkFDekMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3BDLGVBQWUsRUFBRSxPQUFPLENBQUMsY0FBYztvQkFDdkMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLE1BQU07aUJBQ25DLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUssd0JBQXdCLENBQzVCLFNBQWlCLEVBQ2pCLFVBQTBCLEVBQzFCLGlCQUF1QyxFQUN2QyxRQUE0Qjs7O1lBRTVCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEQsSUFBSSxlQUErQixDQUFDO1lBQ3BDLDhFQUE4RTtZQUM5RSxVQUFJLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLFlBQVksMENBQUUsTUFBTSxFQUFFO2dCQUMzQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUM3QyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQ2xDLENBQUM7YUFDSDtZQUVELHNDQUFzQztZQUN0QyxtQ0FBbUM7WUFDbkMsSUFBSTtZQUNKLE1BQU0sU0FBUyxHQUNiLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDN0MsUUFBUSxFQUNSLGlCQUFpQixDQUNsQixDQUFDO1lBQ0YsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ2xFLHVFQUF1RTtnQkFDdkUsNEJBQTRCO2dCQUM1QixlQUFlO2dCQUNmLGlDQUFpQztnQkFDakMscUNBQXFDO2dCQUNyQyxvQ0FBb0M7Z0JBQ3BDLFNBQVM7Z0JBQ1QsTUFBTTtnQkFDTixLQUFLO2dCQUVMLE1BQU0sVUFBVSxHQUFtQjtvQkFDakMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO29CQUNqQixPQUFPLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRTtvQkFDN0IsTUFBTSxFQUFFO3dCQUNOLGVBQWUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQzVELENBQUMsSUFBcUIsRUFBbUIsRUFBRTs0QkFDekMsT0FBTztnQ0FDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0NBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dDQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTs2QkFDaEIsQ0FBQzt3QkFDSixDQUFDLENBQ0Y7d0JBQ0QsWUFBWSxFQUFFLENBQUMsaUJBQWlCLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDdEQsQ0FBQyxJQUFpQixFQUFnQixFQUFFOzRCQUNsQyxPQUFPO2dDQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQ0FDWCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7NkJBQzlCLENBQUM7d0JBQ0osQ0FBQyxDQUNGO3dCQUNELGFBQWEsRUFBRTs0QkFDYixlQUFlLEVBQUUsaUJBQWlCLENBQUMsY0FBYzs0QkFDakQsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRTs0QkFDeEMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsY0FBYzs0QkFDbkQsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs0QkFDNUMsZUFBZSxFQUFFO2dDQUNmO29DQUNFLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtvQ0FDbkMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLElBQUk7b0NBQ2hDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztvQ0FDckIsSUFBSTtpQ0FDTDs2QkFDRjt5QkFDRjt3QkFDRCxxQkFBcUIsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLHFCQUFxQjt3QkFDakUsUUFBUSxFQUFFOzRCQUNSLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQjs0QkFDcEMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUM7NEJBQ3RELGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsaUJBQWlCOzRCQUN6RCxXQUFXLEVBQUUsSUFBSSxDQUFDLHlDQUF5QyxDQUN6RCxpQkFBaUIsQ0FBQyxXQUFXLENBQzlCO3lCQUNGO3dCQUNELFlBQVksRUFBRSxrQkFBa0I7d0JBQ2hDLGtCQUFrQjtxQkFDbkI7b0JBQ0QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO29CQUN4QixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7b0JBQ3JCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBd0I7b0JBQzNDLFdBQVcsRUFBRSxTQUFTO29CQUN0QixVQUFVLEVBQUUsaUJBQWlCLENBQUMsVUFBVTtvQkFDeEMsZUFBZSxFQUFFLGlCQUFpQixDQUFDLGVBQWU7b0JBQ2xELFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxjQUFjO2lCQUMvQyxDQUFDO2dCQUVGLHNEQUFzRDtnQkFDdEQsSUFBSSxlQUFlLEVBQUU7b0JBQ25CLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUM7aUJBQzNEO2dCQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQ25DLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFDZixRQUFRLENBQUMsY0FBYyxDQUN4QixDQUFDO2FBQ0g7WUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7S0FDMUI7SUFFSyx3QkFBd0IsQ0FDNUIsU0FBaUIsRUFDakIsVUFBMEIsRUFDMUIsUUFBOEIsRUFDOUIsT0FBNkIsRUFDN0IsWUFBZ0MsRUFDaEMsV0FBK0I7OztZQUUvQiw2QkFBNkI7WUFDN0IsbUNBQW1DO1lBQ25DLElBQUk7WUFDSixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRWxELElBQUksWUFBNEIsQ0FBQztZQUVqQyw4RUFBOEU7WUFFOUUsVUFBSSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsWUFBWSwwQ0FBRSxNQUFNLEVBQUU7Z0JBQ2xDLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hFO1lBRUQsTUFBTSxTQUFTLEdBQ2IsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDeEMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM3QyxZQUFZLEVBQ1osUUFBUSxFQUNSLE9BQU8sQ0FDUixDQUFDO1lBQ0YsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRS9ELE1BQU0sVUFBVSxHQUFtQjtvQkFDakMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO29CQUNqQixPQUFPLEVBQUUsU0FBUztvQkFDbEIsTUFBTSxFQUFFO3dCQUNOLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUNuRCxDQUFDLElBQXFCLEVBQW1CLEVBQUU7NEJBQ3pDLE9BQU87Z0NBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dDQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQ0FDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7NkJBQ2hCLENBQUM7d0JBQ0osQ0FBQyxDQUNGO3dCQUNELFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUM3QyxDQUFDLElBQWlCLEVBQWdCLEVBQUU7NEJBQ2xDLE9BQU87Z0NBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dDQUNYLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzs2QkFDOUIsQ0FBQzt3QkFDSixDQUFDLENBQ0Y7d0JBQ0QsYUFBYSxFQUFFOzRCQUNiLGVBQWUsRUFBRSxRQUFRLENBQUMsY0FBYzs0QkFDeEMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLEVBQUU7NEJBQy9CLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxjQUFjOzRCQUMxQyxvQkFBb0IsRUFBRSxRQUFRLENBQUMsSUFBSTs0QkFFbkMsZUFBZSxFQUFFO2dDQUNmO29DQUNFLFlBQVksRUFBRSxZQUFZLENBQUMsWUFBWTtvQ0FDdkMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLElBQUk7b0NBQ3BDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSztvQ0FDekIsSUFBSSxFQUFFLFlBQVk7aUNBQ25COzZCQUNGO3lCQUNGO3dCQUNELFlBQVksRUFBRTs0QkFDWixlQUFlLEVBQUUsT0FBTyxDQUFDLGNBQWM7NEJBQ3ZDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxFQUFFOzRCQUM5QixpQkFBaUIsRUFBRSxPQUFPLENBQUMsY0FBYzs0QkFDekMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLElBQUk7NEJBQ2xDLGVBQWUsRUFBRTtnQ0FDZjtvQ0FDRSxZQUFZLEVBQUUsV0FBVyxDQUFDLFlBQVk7b0NBQ3RDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxJQUFJO29DQUNuQyxJQUFJLEVBQUUsV0FBVztpQ0FDbEI7NkJBQ0Y7eUJBQ0Y7d0JBQ0QscUJBQXFCLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUI7d0JBQ3JFLFFBQVEsRUFBRTs0QkFDUixPQUFPLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0I7NEJBQ3hDLGVBQWUsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDOzRCQUMxRCxpQkFBaUIsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLGlCQUFpQjs0QkFDN0QsV0FBVyxFQUFFLElBQUksQ0FBQyx5Q0FBeUMsQ0FDekQsUUFBUSxDQUFDLFdBQVcsQ0FDckI7eUJBQ0Y7d0JBQ0QsbUJBQW1CO3dCQUNuQixNQUFNLEVBQUU7NEJBQ04sT0FBTyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCOzRCQUN2QyxlQUFlLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQzs0QkFDekQsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUI7NEJBQzVELFdBQVcsRUFBRSxJQUFJLENBQUMseUNBQXlDLENBQ3pELE9BQU8sQ0FBQyxXQUFXLENBQ3BCO3lCQUNGO3dCQUNELFlBQVksRUFBRSxrQkFBa0I7cUJBQ2pDO29CQUNELE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtvQkFDeEIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO29CQUN6QixRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQXdCO29CQUMvQyxXQUFXLEVBQUUsU0FBUztvQkFDdEIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO29CQUMvQixlQUFlLEVBQUUsUUFBUSxDQUFDLGVBQWU7b0JBQ3pDLFlBQVksRUFBRSxRQUFRLENBQUMsY0FBYztvQkFDckMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxjQUFjO2lCQUNwQyxDQUFDO2dCQUNGLHNEQUFzRDtnQkFDdEQsSUFBSSxZQUFZLEVBQUU7b0JBQ2hCLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7aUJBQ3hEO2dCQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQ25DLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFDZixZQUFZLENBQUMsY0FBYyxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQzFELENBQUM7YUFDSDtZQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzs7S0FDL0I7SUFFRCx5Q0FBeUMsQ0FDdkMsUUFBMEI7UUFFMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXhCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDakQsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxhQUFhLENBQUMsaUJBQWlCLENBQUM7YUFDeEM7U0FDRjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxlQUFnQztRQUN2RCxNQUFNLEtBQUssR0FDVCxJQUFJLENBQUMsWUFBWSxJQUFHLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxXQUFXLENBQUE7WUFDaEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQ2hELE9BQU87WUFDTDtnQkFDRSxJQUFJLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUN0QyxRQUFRLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxRQUFRO2dCQUM5QyxJQUFJLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUN0QyxLQUFLO2FBQ047U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELDZCQUE2QixDQUFDLFdBQThCO1FBQzFELE9BQU8sSUFBSSxDQUFDLE9BQU87YUFDaEIsaUJBQWlCLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDO2FBQ3pFLFFBQVEsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCO1FBQ2YsTUFBTSxZQUFZLEdBQXNCLElBQUksQ0FBQztRQUU3QyxrRUFBa0U7UUFDbEUsNkNBQTZDO1FBQzdDLE1BQU07UUFFTixPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDUyxZQUFZO1FBQ3BCLE1BQU0sV0FBVyxHQUFHLENBQ2xCLElBQXVCLEVBQ3ZCLE9BQTZCLEVBQzdCLEVBQUU7WUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQjtnQkFDMUIsQ0FBQyxDQUFDLENBQUMsWUFBa0MsRUFBRSxFQUFFO29CQUNyQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUF3QixFQUFFLEVBQUU7O3dCQUNuRCxJQUFJLENBQUMsSUFBSSxFQUFFOzRCQUNULE9BQU8sSUFBSSxDQUFDO3lCQUNiO3dCQUNELHVDQUNLLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLG1CQUFNLElBQUksR0FBSTtrQ0FDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQywwQ0FDMUQsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFFBQVE7NEJBQzFDLE9BQU87Z0NBQ0wsQ0FBQyxPQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLDBDQUFFLHlCQUF5QixDQUN6RCxDQUFDLENBQUMsSUFBSTt5QkFDVCxDQUFDLEtBQ0YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUM3RCxVQUFVLEVBQUUsQ0FBQyxjQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUNsQywwQ0FBRSxXQUFXLDBDQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFDLElBQ3ZDO29CQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUMsWUFBa0MsRUFBRSxFQUFFO29CQUNyQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUF3QixFQUFFLEVBQUU7d0JBQ25ELElBQUksQ0FBQyxJQUFJLEVBQUU7NEJBQ1QsT0FBTyxJQUFJLENBQUM7eUJBQ2I7d0JBQ0QsdUNBQ0ssSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsbUJBQzNCLElBQUksR0FDVCxPQUFPOzRCQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMseUJBQXlCLENBQUM7NEJBQzFELENBQUMsQ0FBQyxFQUFFLENBQ1AsS0FDRCxRQUFRLEVBQUUsS0FBSyxFQUNmLFVBQVUsRUFBRSxJQUFJLElBQ2hCO29CQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQztRQUNSLENBQUMsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLENBQ2YsSUFBdUIsRUFDdkIsT0FBNkIsRUFDN0IsU0FBZ0MsRUFDaEMsRUFBRTtZQUNGLE9BQU8sQ0FBQyxZQUFrQyxFQUF3QixFQUFFO2dCQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FDckIsQ0FBQyxJQUF3QixFQUFzQixFQUFFO29CQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFO3dCQUNULE9BQU8sSUFBSSxDQUFDO3FCQUNiO29CQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsaUNBRS9CLElBQUksS0FDUCxRQUFRLEVBQ04sSUFBSSxDQUFDLGNBQWM7NEJBQ25CLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUV2RCxPQUFPO3dCQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMseUJBQXlCLENBQUM7d0JBQzFELENBQUMsQ0FBQyxFQUFFLENBQ1AsQ0FBQztnQkFDSixDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLElBQUksQ0FBQyxPQUFPO2FBQ1QsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDdkIsTUFBTSxDQUNMLENBQ0UsS0FBMkIsRUFDM0IsSUFBd0IsRUFDRixFQUFFO1lBQ3hCLE1BQU0sSUFBSSxtQ0FDTCxJQUFJLEtBQ1AsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ2pDLENBQUMsT0FBNkIsRUFBd0IsRUFBRTtvQkFDdEQsT0FBTyxnQ0FDRixPQUFPLEtBQ1Ysc0JBQXNCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQ3BDLFFBQVEsQ0FDTix3QkFBd0IsRUFDeEIsT0FBTyxFQUNQLGFBQWEsQ0FBQyxRQUFRLENBQ3ZCLENBQ0YsRUFDRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDbEMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFDaEMsUUFBUSxDQUNOLG9CQUFvQixFQUNwQixPQUFPLEVBQ1AsYUFBYSxDQUFDLFFBQVEsQ0FDdkIsQ0FDRixFQUNELHNCQUFzQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUN0QyxPQUFPLENBQUMsc0JBQXNCLElBQUksRUFBRSxFQUNwQyxRQUFRLENBQ04sd0JBQXdCLEVBQ3hCLE9BQU8sRUFDUCxhQUFhLENBQUMsUUFBUSxDQUN2QixDQUNGLEdBQ3NCLENBQUM7Z0JBQzVCLENBQUMsQ0FDRixFQUNELE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUM3QixDQUFDLE9BQTZCLEVBQXdCLEVBQUU7b0JBQ3RELHVDQUNLLE9BQU8sS0FDVixrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDbEMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFDaEMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUMzQyxFQUNELHNCQUFzQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUN0QyxPQUFPLENBQUMsc0JBQXNCLElBQUksRUFBRSxFQUNwQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLENBQy9DLEVBRUQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2xDLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQ2hDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQ2xELEVBQ0Qsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQ3BDLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQ3RELElBQ0Q7Z0JBQ0osQ0FBQyxDQUNGLEdBQ0YsQ0FBQztZQUNGLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLEVBQ0QsRUFBRSxDQUNILENBQ0osQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlLENBQ2IsWUFBNkIsRUFDN0IsUUFBOEIsRUFDOUIsT0FBOEI7UUFFOUIsT0FBTztZQUNMO2dCQUNFLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLGVBQWU7YUFDMUM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsb0NBQW9DO2dCQUMxQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQywrQkFBK0I7YUFDMUQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxlQUFlO2FBQzFDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsY0FBYzthQUN6QztZQUNEO2dCQUNFLElBQUksRUFBRSxhQUFhO2dCQUNuQixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVO2FBQ3JDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHlCQUF5QjtnQkFDL0IsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMscUJBQXFCO2FBQ2hEO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCO2FBQzNDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsY0FBYzthQUN6QztZQUNEO2dCQUNFLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLGFBQWE7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxZQUFZO2FBQ3ZDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLEtBQUssRUFBRSxRQUFRLENBQUMsY0FBYzthQUMvQjtZQUNEO2dCQUNFLElBQUksRUFBRSxVQUFVO2dCQUNoQixLQUFLLEVBQUUsUUFBUSxDQUFDLGNBQWM7YUFDL0I7WUFDRDtnQkFDRSxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7YUFDM0M7WUFDRDtnQkFDRSxJQUFJLEVBQUUsMEJBQTBCO2dCQUNoQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxzQkFBc0I7YUFDakQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsY0FBYztnQkFDcEIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVzthQUN0QztZQUNEO2dCQUNFLElBQUksRUFBRSxlQUFlO2dCQUNyQixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxZQUFZO2FBQ3ZDO1lBRUQ7Z0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsS0FBSyxFQUFFLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxjQUFjO2FBQy9CO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsS0FBSyxFQUFFLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxjQUFjO2FBQy9CO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRCxNQUFNLG9CQUFvQixHQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFL0IsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFO2dCQUNuQixXQUFXLEVBQUUsV0FBVyxDQUFDLElBQUk7Z0JBQzdCLFVBQVUsRUFBRSxvQkFBb0I7YUFDakMsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFDSyxjQUFjLENBQUMsR0FBUTs7WUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQTtZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQTtZQUN2QyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUM7Z0JBQ2hCLEtBQUssT0FBTztvQkFDVixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7b0JBQ3ZDLE1BQU07Z0JBQ1IsS0FBSyxLQUFLO29CQUNSLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztvQkFDckMsTUFBTTtnQkFDUixLQUFLLFVBQVU7b0JBQ2IsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO29CQUMxQyxNQUFNO2FBQ1Q7WUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNoRixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQTtZQUN6QixDQUFDLENBQUMsQ0FBQTtZQUNGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsRUFBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzlFLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFBO1lBQ3ZCLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFDO2dCQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDMUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUE7Z0JBQ3RCLENBQUMsQ0FBQyxDQUFBO2dCQUNGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFBO2FBQ2hCO2lCQUVJO2dCQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO2dCQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQTthQUNqQjtZQUNELFFBQVE7UUFDVixDQUFDO0tBQUE7O0FBcjhFZSwyQ0FBc0IsR0FBRyxhQUFhLENBQUM7QUFDdkMsNENBQXVCLEdBQUcsY0FBYyxDQUFDO0FBQ3pDLGtDQUFhLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBvZiwgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7XHJcbiAgQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXMsXHJcbiAgQ2hlYXBlc3RSYWlsUHJpY2VzLFxyXG4gIExvY2F0aW9uVHlwZXMsXHJcbiAgbWF4VHJhdmVsbGVyV2VsbGJlaW5nLFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUUmFpbEZhcmUsXHJcbiAgT0JUUmFpbEZhcmVUeXBlcyxcclxuICBPQlRSYWlsSW50ZXJuYWxGYXJlLFxyXG4gIE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb24sXHJcbiAgT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gIE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gIE9CVFJhaWxRdW90ZVJlc3VsdCxcclxuICBPQlRSYWlsUXVvdGVSZXN1bHRBcnJheSxcclxuICBSYWlsV2VsbGJlaW5nT2JqZWN0SW50ZXJmYWNlLFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBSZWN1cnNpdmVQYXJ0aWFsLFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQsXHJcbiAgV2VsbGJlaW5nRW51bVxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBCYXNrZXRJdGVtLFxyXG4gIFJhaWxDbGFzcyxcclxuICBSYWlsSm91cm5leU9wdGlvbixcclxuICBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcixcclxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIFJhaWxUaWNrZXRFeHRyYSxcclxuICBSYWlsU2VhcmNoSm91cm5leVR5cGUsXHJcbiAgUmFpbEpvdXJuZXlGYXJlLFxyXG4gIFJhaWxTdGF0aW9uLFxyXG4gIEN1cnJlbmN5Q29kZSxcclxuICBSYWlsQWNjb3VudCxcclxuICBSYWlsVGlja2V0UXVldWUsXHJcbiAgUmFpbEpvdXJuZXlMZWdcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBCYXNlUmFpbFF1b3RlRmV0Y2hlcixcclxuICBSYWlsUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3JhaWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcixcclxuICBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtc3RhdGlvbi5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIFJhaWxUZW1wUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcmFpbC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHsgSVJhaWxBaXJwb3J0RXhwcmVzc1N0YXRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLWFpcnBvcnQtZXhwcmVzcy1zdGF0aW9ucy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFjY291bnRzTGlzdCxcclxuICBSYWlsQmFza2V0SXRlbSxcclxuICBUaWNrZXRFeHRyYXMsXHJcbiAgVGlja2V0UXVldWVMaXN0XHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLWJhc2tldC1pdGVtLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJhaWxSZWNlbnRTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLXJlY2VudC1zZWFyY2gtYXJncy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBSYWlsUXVvdGVSZXN1bHQsIFJhaWxRdW90ZVJlc3VsdEFycmF5IH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxSdWxlRW5pdHksXHJcbiAgUmFpbFJ1bGVFbml0eUtleXMsXHJcbiAgUmFpbFN1bW1hcnlcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3N1bW1hcnktaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVXNlckZhdm9ydXJpdGUgfSBmcm9tICcuL3VzZXItZmF2b3VyaXRlLmVudW0nO1xyXG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi9tb2RhbC10eXBlcy5lbnVtJztcclxuaW1wb3J0IHsgSVJhaWxTZWxlY3RlZFRpY2tldCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1zZWxlY3RlZC10aWNrZXQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUmFpbERpcmVjdGlvbiB9IGZyb20gJy4vcmFpbC1kaXJlY3Rpb24uZW51bSc7XHJcbmltcG9ydCB7IFJhaWxJbmRleFRvVGlja2V0IH0gZnJvbSAnLi9yYWlsLWluZGV4LXRvLXRpY2tldCc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcblxyXG5leHBvcnQgZW51bSBSYWlsU2VhcmNoQ3JpdGVyaWEge1xyXG4gIERlcGFydCA9ICdEZXBhcnQgQWZ0ZXInLFxyXG4gIEFycml2ZSA9ICdBcnJpdmUgQmVmb3JlJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSYWlsSm91cm5leUZhcmVUeXBlIHsgLy8gbWF5IG5lZWQgdG8gYmUgZXhwYW5kZWQgZm9yIGR1YWwvc3BsaXRcclxuICBSZXR1cm4gPSAnUmV0dXJuJyxcclxuICBTaW5nbGUgPSAnU2luZ2xlJ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmFpbEVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBRIGV4dGVuZHMgUmFpbFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgICBHUlNfUSBleHRlbmRzIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcclxuICA+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgUmFpbFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgICBPQlRSYWlsUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIFJhaWxFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBwcml2YXRlIF9zZWxlY3RlZFRpY2tldDogSVJhaWxTZWxlY3RlZFRpY2tldDtcclxuICBwcml2YXRlIF9zZWxlY3RlZEluYm91bmRUaWNrZXQ6IElSYWlsU2VsZWN0ZWRUaWNrZXQ7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRTdW1tYXJ5OiBSYWlsUnVsZUVuaXR5O1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkSW5ib3VuZFN1bW1hcnk6IFJhaWxSdWxlRW5pdHk7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRTZWN0aW9uOiBPQlRSYWlsRmFyZVR5cGVzO1xyXG4gIHByaXZhdGUgYWx0ZXJuYXRpdmVXZWxsYmVpbmc6IFJhaWxXZWxsYmVpbmdPYmplY3RJbnRlcmZhY2U7XHJcblxyXG4gIGdldCBzZWxlY3RlZFNlY3Rpb24oKTogT0JUUmFpbEZhcmVUeXBlcyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRTZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkVGlja2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGlja2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IHNlbGVjdGVkVGlja2V0KHNlbGVjdGVkVGlja2V0OiB7XHJcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbjtcclxuICAgIGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZTtcclxuICB9KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRpY2tldCA9IHNlbGVjdGVkVGlja2V0O1xyXG4gICAgaWYgKCF0aGlzLl9zZWxlY3RlZFRpY2tldCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFN1bW1hcnkgPSBudWxsO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFN1bW1hcnkgPSB0aGlzLl9maW5kU3VtbWFyeShcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxyXG4gICAgICAgIHRoaXMuc3VtbWFyeS5vdXRib3VuZCB8fCBbXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkSW5ib3VuZFRpY2tldCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0ZWRJbmJvdW5kVGlja2V0KHNlbGVjdGVkVGlja2V0OiBJUmFpbFNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQgPSBzZWxlY3RlZFRpY2tldDtcclxuICAgIGlmICghdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0KSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeSA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFN1bW1hcnkgPSB0aGlzLnN1bW1hcnkucmV0dXJuLmZpbmQoXHJcbiAgICAgICAgKHZhbHVlOiBSYWlsUnVsZUVuaXR5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUuam91cm5leUhhc2ggPT09IHRoaXMuX3NlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2g7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX3JhaWwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyYWlsX3Jlc3VsdHMnO1xyXG4gIHN0YXRpYyByZWFkb25seSBQQVNTSU5HX1BPSU5UID0gJ1Bhc3NpbmcnO1xyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgUmFpbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ1JldHVybicsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuU2luZ2xlSm91cm5leSB9XHJcbiAgICAvLyB7IGRpc3BsYXk6ICdPcGVuIFJldHVybicsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXkgfSxcclxuICAgIC8vIHsgZGlzcGxheTogJ0R1YWwgU2luZ2xlcycsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuRHVhbFNpbmdsZUpvdXJuZXkgfSxcclxuICBdO1xyXG5cclxuICBwdWJsaWMgY2xhc3NUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBSYWlsQ2xhc3MuQWxsIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdTdGFuZGFyZCcsIHZhbHVlOiBSYWlsQ2xhc3MuU3RhbmRhcmQgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZpcnN0JywgdmFsdWU6IFJhaWxDbGFzcy5GaXJzdCB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFpcnBvcnRFeHByZXNzU3RhdGlvbnM6IElSYWlsQWlycG9ydEV4cHJlc3NTdGF0aW9uc1tdID0gW1xyXG4gICAgeyBjb2RlOiAnSFAxLTMnLCBuYW1lOiAnSGVhdGhyb3cgVDEtMyAtIFBhZGRpbmd0b24nIH0sXHJcbiAgICB7IGNvZGU6ICdIUDQnLCBuYW1lOiAnSGVhdGhyb3cgVDQgLSBQYWRkaW5ndG9uJyB9LFxyXG4gICAgeyBjb2RlOiAnSFA1JywgbmFtZTogJ0hlYXRocm93IFQ1IC0gUGFkZGluZ3RvbicgfSxcclxuICAgIHsgY29kZTogJ1BIMS0zJywgbmFtZTogJ1BhZGRpbmd0b24gLSBIZWF0aHJvdyBUMS0zJyB9LFxyXG4gICAgeyBjb2RlOiAnUEg0JywgbmFtZTogJ1BhZGRpbmd0b24gLSBIZWF0aHJvdyBUNCcgfSxcclxuICAgIHsgY29kZTogJ1BINScsIG5hbWU6ICdQYWRkaW5ndG9uIC0gSGVhdGhyb3cgVDUnIH0sXHJcbiAgICB7IGNvZGU6ICdHVicsIG5hbWU6ICdHYXR3aWNrIC0gVmljdG9yaWEnIH0sXHJcbiAgICB7IGNvZGU6ICdWRycsIG5hbWU6ICdWaWN0b3JpYSAtIEdhdHdpY2snIH0sXHJcbiAgICB7IGNvZGU6ICdTTCcsIG5hbWU6ICdTdGFuc3RlZCAtIExpdmVycG9vbCBTdHJlZXQnIH0sXHJcbiAgICB7IGNvZGU6ICdMUycsIG5hbWU6ICdMaXZlcnBvb2wgU3RyZWV0IC0gU3RhbnN0ZWQnIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgYWlycG9ydEV4cHJlc3NTdGF0aW9uc0NvZGVzOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiB7IGRlcDogc3RyaW5nOyBhcnI6IHN0cmluZyB9O1xyXG4gIH0gPSB7XHJcbiAgICAnSFAxLTMnOiB7IGRlcDogJ0hYWCcsIGFycjogJ1BBRCcgfSxcclxuICAgICdQSDEtMyc6IHsgZGVwOiAnUEFEJywgYXJyOiAnSFhYJyB9LFxyXG4gICAgSFA0OiB7IGRlcDogJ0hBRicsIGFycjogJ1BBRCcgfSxcclxuICAgIFBINDogeyBkZXA6ICdQQUQnLCBhcnI6ICdIQUYnIH0sXHJcbiAgICBIUDU6IHsgZGVwOiAnSFdWJywgYXJyOiAnUEFEJyB9LFxyXG4gICAgUEg1OiB7IGRlcDogJ1BBRCcsIGFycjogJ0hXVicgfSxcclxuICAgIEdWOiB7IGRlcDogJ0dUVycsIGFycjogJ1ZJQycgfSxcclxuICAgIFZHOiB7IGRlcDogJ1ZJQycsIGFycjogJ0dUVycgfSxcclxuICAgIFNMOiB7IGRlcDogJ1NTRCcsIGFycjogJ0xTVCcgfSxcclxuICAgIExTOiB7IGRlcDogJ0xTVCcsIGFycjogJ1NTRCcgfVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyByYWlsQ3JpdGVyaWEgPSBbUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydCwgUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZV07XHJcblxyXG4gIHB1YmxpYyB0cmF2ZWxDYXJkcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ1lvdW5nIHBlcnNvbnMgcmFpbGNhcmQnLCB2YWx1ZTogJ1lORycgfSxcclxuICAgIHsgZGlzcGxheTogJ0Rpc2FiaWxpdHkgcmFpbGNhcmQnLCB2YWx1ZTogJ0RJUycgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZhbWlseSByYWlsY2FyZCcsIHZhbHVlOiAnRkFNJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRm9yY2VzIHJhaWxjYXJkJywgdmFsdWU6ICdITUYnIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdUcmF2ZWwgYWdlbmN5IGRpc2NvdW50JywgdmFsdWU6ICdUQUQnIH1cclxuICBdO1xyXG5cclxuICAvLyBZTkc6IFwiWW91bmcgcGVyc29ucyByYWlsY2FyZFwiLFxyXG4gIC8vIERJUzogXCJEaXNhYmlsaXR5IHJhaWxjYXJkXCIsXHJcbiAgLy8gRkFNOiBcIkZhbWlseSByYWlsY2FyZFwiLFxyXG4gIC8vIEhNRjogXCJGb3JjZXMgcmFpbGNhcmRcIixcclxuICAvLyBUQUQ6IFwiVHJhdmVsIGFnZW5jeSBkaXNjb3VudFwiXHJcbiAgcHVibGljIHJlbW92ZVBhc3NpbmdQb2ludHNGcm9tUmVzdWx0cyA9IHRydWU7XHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuUmFpbDtcclxuXHJcbiAgcHJpdmF0ZSBfYm9va1JhaWxGcm9tTGl2ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjaGVhcGVzdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xyXG4gICAgb3V0Ym91bmRDaGVhcGVzdDogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgaW5ib3VuZENoZWFwZXN0OiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXRSZXR1cm46IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldER1YWw6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gIH0+KHtcclxuICAgIG91dGJvdW5kQ2hlYXBlc3Q6IHtcclxuICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfSxcclxuICAgIGluYm91bmRDaGVhcGVzdDoge1xyXG4gICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICB9LFxyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xyXG4gICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgIH0sXHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiB7XHJcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfSxcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXREdWFsOiB7XHJcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBnZXQgYm9va1JhaWxGcm9tTGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ib29rUmFpbEZyb21MaXZlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJvb2tSYWlsRnJvbUxpdmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Jvb2tSYWlsRnJvbUxpdmUgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHVibGljIG1pbk91dGJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwdWJsaWMgbWluSW5ib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHVibGljIG1heERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICAvLyBFTlQtMTU1NyAtIG1heCBFdm9sdmkgc2VhcmNoIGRhdGUgaXMgNiBtb250aHMgaW4gZnV0dXJlXHJcbiAgICB5ZWFyOiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLmFkZCgnbW9udGgnLCA2KS5tb250aCgpLFxyXG4gICAgZGF5OiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikuZGF0ZSgpXHJcbiAgfTtcclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheVtdO1xyXG4gIC8vIHByaXZhdGUgX2Nob3NlblRpY2tldEdyb3VwOiBSYWlsVGlja2V0R3JvdXA7XHJcbiAgcHJpdmF0ZSBfdmlhTG9jYXRpb246IHN0cmluZztcclxuICBwcml2YXRlIF90cmF2ZWxsaW5nRnJvbTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdUbzogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfb3JpZ2luYWxVc2VyU2VhcmNoOiBSYWlsVGVtcFBhcmFtcztcclxuICBwdWJsaWMgc3VtbWFyeTogUmFpbFN1bW1hcnkgPSB7fTtcclxuXHJcbiAgZ2V0IG9wZW5SZXR1cm4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT1cclxuICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0IG9wZW5SZXR1cm4obmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICBpZiAobmV3VmFsKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID1cclxuICAgICAgICBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5O1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hUeXBlKG5ld1R5cGU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPSBuZXdUeXBlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZBZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBub09mQWR1bHRzKGFkdWx0czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyA9IGFkdWx0cztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBub09mQ2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubm9PZkNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vT2ZDaGlsZHJlbihjaGlsZHJlbjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ1RvKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbztcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nVG8odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbyA9IHR0O1xyXG5cclxuICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gdHQucmFpbHN0YXRpb24uaWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0dD8uaWQpe1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5pZFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nRnJvbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmF2ZWxsaW5nRnJvbTtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nRnJvbSh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20gPSB0dDtcclxuICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9IHR0LnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHQ/LmlkKXtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5pZFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5SYWlsQ2xhc3MoKTogUmFpbENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuUmFpbENsYXNzKG5ld0NsYXNzOiBSYWlsQ2xhc3MpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyA9IG5ld0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaENsYXNzKCk6IFJhaWxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblNlYXJjaENsYXNzKGNsYXNzUjogUmFpbENsYXNzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBjbGFzc1I7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZXh0cmFUaW1lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5leHRyYVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZXh0cmFUaW1lKGV4dHJhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZXh0cmFUaW1lID0gZXh0cmE7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWE7XHJcbiAgfVxyXG5cclxuICBzZXQgdmlhKHZpYTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYSA9IHZpYTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2aWFMb2NhdGlvbigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCB2aWFMb2NhdGlvbih2aWFMb2NhdGlvbjogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb24gPSB2aWFMb2NhdGlvbjtcclxuXHJcbiAgICB0aGlzLl92aWFMb2NhdGlvbiA9ICcnO1xyXG4gICAgaWYgKHZpYUxvY2F0aW9uPy5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdmlhTG9jYXRpb24gPSB2aWFMb2NhdGlvbi5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgb3V0Qm91bmREYXRlVGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRCb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcwNzAwJztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbkluYm91bmREYXRlID0ge1xyXG4gICAgICB5ZWFyOiBuZXdEYXRlVGltZS55ZWFyKCksXHJcbiAgICAgIG1vbnRoOiBuZXdEYXRlVGltZS5tb250aCgpICsgMSxcclxuICAgICAgZGF5OiBuZXdEYXRlVGltZS5kYXRlKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgJiZcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgJiZcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lLmlzQWZ0ZXIodGhpcy5pbkJvdW5kRGF0ZVRpbWUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSB0aGlzLmluQm91bmREYXRlVGltZVxyXG4gICAgICAgIC5zZXQoJ2RhdGUnLCBuZXdEYXRlVGltZS5kYXRlKCkpXHJcbiAgICAgICAgLnNldCgnbW9udGgnLCBuZXdEYXRlVGltZS5tb250aCgpKVxyXG4gICAgICAgIC5zZXQoJ3llYXInLCBuZXdEYXRlVGltZS55ZWFyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBvdXRib3VuZENyaXRlcmlhKCk6IFJhaWxTZWFyY2hDcml0ZXJpYSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRDcml0ZXJpYShuZXdDcml0OiBSYWlsU2VhcmNoQ3JpdGVyaWEpIHtcclxuICAgIC8vIGNvbnNvbGUud2FybihgKysrIFNldHRpbmcgTmV3IENyaXRlcmlhOiAke25ld0NyaXR9ICsrK2ApO1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWEgPSBuZXdDcml0O1xyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpbkJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluQm91bmREYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBpbkJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9yZXR1cm5fdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcxNjAwJztcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBvdXRib3VuZF9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgb3V0Ym91bmRfdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCByZXR1cm5fZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgcmV0dXJuX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCByZXR1cm5Dcml0ZXJpYSgpOiBSYWlsU2VhcmNoQ3JpdGVyaWEge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5Dcml0ZXJpYShuZXdDcml0OiBSYWlsU2VhcmNoQ3JpdGVyaWEpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYSA9IG5ld0NyaXQ7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FybmV0VGlja2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYXJuZXRUaWNrZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgY2FybmV0VGlja2V0KG5ld0Nhcm5ldDogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhcm5ldFRpY2tldCA9IG5ld0Nhcm5ldDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkaXNhYmxlQXV0b0Rpc2NvdW50cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGlzYWJsZUF1dG9EaXNjb3VudHM7XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzYWJsZUF1dG9EaXNjb3VudHMobmV3RGlzOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGlzYWJsZUF1dG9EaXNjb3VudHMgPSBuZXdEaXM7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcHJpb3JpdGlzZUJ5UHJpY2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByaW9yaXRpc2VCeVByaWNlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHByaW9yaXRpc2VCeVByaWNlKG5ld1ByaW9yaXR5OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJpb3JpdGlzZUJ5UHJpY2UgPSBuZXdQcmlvcml0eTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBhcHBseVJhaWxjYXJkcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYXBwbHlSYWlsY2FyZHM7XHJcbiAgfVxyXG5cclxuICBzZXQgYXBwbHlSYWlsY2FyZHMoYXBDYXJkczogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFwcGx5UmFpbGNhcmRzID0gYXBDYXJkcztcclxuICB9XHJcblxyXG4gIGdldCByYWlsQ2FyZHMoKTogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJhaWxDYXJkcztcclxuICB9XHJcblxyXG4gIHNldCByYWlsQ2FyZHModmFsdWU6IFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yYWlsQ2FyZHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCk6IFZhbHVlRGlzcGxheVtdIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg0OClcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpOiB7IGNvZGU6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFpcnBvcnRFeHByZXNzU3RhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0RXhwcmVzc1N0YXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgYWlycG9ydEV4cHJlc3NTdGF0aW9uKHN0YXRpb246IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IHN0YXRpb247XHJcbiAgICB0aGlzLl9zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25zKCk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBaXJwb3J0RXhwcmVzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcztcclxuICB9XHJcblxyXG4gIHNldCBpc0FpcnBvcnRFeHByZXNzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9uSWRzKHN0YXRpb25JZHM6IHtcclxuICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHN0cmluZztcclxuICAgIGFycml2YWxMb2NhdGlvbklkOiBzdHJpbmc7XHJcbiAgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBkZXBhcnR1cmVMb2NhdGlvbklkLCBhcnJpdmFsTG9jYXRpb25JZCB9ID0gc3RhdGlvbklkcztcclxuICAgIGlmIChkZXBhcnR1cmVMb2NhdGlvbklkICYmIGFycml2YWxMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gZGVwYXJ0dXJlTG9jYXRpb25JZDtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gYXJyaXZhbExvY2F0aW9uSWQ7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbmRTdW1tYXJ5KFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBzdW1tYXJ5OiBSYWlsUnVsZUVuaXR5W11cclxuICApIHtcclxuICAgIHJldHVybiBzdW1tYXJ5LmZpbmQoKHZhbHVlOiBSYWlsUnVsZUVuaXR5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBSYWlsZmV0Y2hlcjogQmFzZVJhaWxRdW90ZUZldGNoZXI8UT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycyk7XHJcblxyXG4gICAgY29uc3QgZGF0YToge1xyXG4gICAgICBxdWVyeToge307XHJcbiAgICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IFJhaWxUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgcXVlcnk6IHt9LFxyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBSYWlsVGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBSYWlsVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VSYWlsUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm5vT2ZBZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMoXHJcbiAgICByYXdSZXN1bHRzOiBSYWlsUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IHNldEZhcmVzID0gKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZmFyZSxcclxuICAgICAgICB0eXBlOiBmYXJlPy50eXBlPy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc29ydEZhcmVzID0gKFxyXG4gICAgICBqb3VybmV5czogUmVjdXJzaXZlUGFydGlhbDxSYWlsSm91cm5leU9wdGlvbj5bXVxyXG4gICAgKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdID0+IHtcclxuICAgICAgY29uc3QgdG9SZXR1cm4gPSB0aGlzLmhlbHBlcnNcclxuICAgICAgICAuY2xvbmUoam91cm5leXMpXHJcbiAgICAgICAgLnNvcnQoKGZpcnN0OiBSYWlsSm91cm5leU9wdGlvbiwgc2Vjb25kOiBSYWlsSm91cm5leU9wdGlvbik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaXJzdFRpbWUgPSBtb21lbnQoZmlyc3QuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgY29uc3Qgc2Vjb25kVGltZSA9IG1vbWVudChzZWNvbmQuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgaWYgKGZpcnN0VGltZS5pc0JlZm9yZShzZWNvbmRUaW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlyc3RUaW1lLmlzQWZ0ZXIoc2Vjb25kVGltZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5tYXAoKGpvdXJuZXk6IFJhaWxKb3VybmV5T3B0aW9uKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzb3J0ID0gKFxyXG4gICAgICAgICAgICBmaXJzdDogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICAgKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnByaWNlIC0gc2Vjb25kLnByaWNlO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkdWFsU2luZ2xlSm91cm5leXMgPSAoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IFtdKVxyXG4gICAgICAgICAgICAuc29ydChzb3J0KVxyXG4gICAgICAgICAgICAubWFwKHNldEZhcmVzKTtcclxuICAgICAgICAgIGNvbnN0IG9wZW5SZXR1cm5Kb3VybmV5cyA9IChqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leXMgPSAoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3Qgc2luZ2xlSm91cm5leXMgPSAoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5cy5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBzaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgc2luZ2xlSm91cm5leXMubWFwKHNldEZhcmVzKTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0b1JldHVybjEgPSB7XHJcbiAgICAgICAgICAgIC4uLmpvdXJuZXksXHJcbiAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShcclxuICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICAgWyd0eXBlJywgWyd0ZXJtcy50aWNrZXRUeXBlQ29kZScsICdwcmljZSddXVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgICAgIFsndHlwZScsIFsndGVybXMudGlja2V0VHlwZUNvZGUnLCAncHJpY2UnXV1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSBhcyBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0b1JldHVybjE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0b1JldHVybjtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJhd1Jlc3VsdHMubWFwKChyYWlsUmVzdWx0OiBSYWlsUXVvdGVSZXN1bHQpOiBPQlRSYWlsUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLnN1bW1hcnkgPSByYWlsUmVzdWx0LnN1bW1hcnk7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kSW50ZXJuYWwgPSBzb3J0RmFyZXMocmFpbFJlc3VsdC5vdXRib3VuZCB8fCBbXSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmRJbnRlcm5hbCA9IHNvcnRGYXJlcyhyYWlsUmVzdWx0LnJldHVybiB8fCBbXSk7XHJcblxyXG4gICAgICBjb25zdCBpbmRleFRvVGlja2V0cyA9IHRoaXMubWFrZUZhcmVOYW1lcyhbXHJcbiAgICAgICAgb3V0Ym91bmRJbnRlcm5hbCB8fCBbXSxcclxuICAgICAgICBpbmJvdW5kSW50ZXJuYWwgfHwgW11cclxuICAgICAgXSk7XHJcblxyXG4gICAgICBjb25zdCBjb252ZXJ0RmFyZXMgPSAoXHJcbiAgICAgICAgZmFyZXM6IE9CVFJhaWxJbnRlcm5hbEZhcmUsXHJcbiAgICAgICAgdGlja2V0VHlwZTogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICAgICApOiBPQlRSYWlsRmFyZSA9PiB7XHJcbiAgICAgICAgY29uc3QgcnRpID0gaW5kZXhUb1RpY2tldHNbdGlja2V0VHlwZV07XHJcbiAgICAgICAgY29uc3QgdGlja2V0VHlwZXMgPSBydGkuZ2V0VGlja2V0VHlwZXMoKTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGlja2V0VHlwZXMpLnJlZHVjZShcclxuICAgICAgICAgIChjdXJyZW50OiBPQlRSYWlsRmFyZSwgW3R5cGUsIGNvdW50XTogW3N0cmluZywgbnVtYmVyXSkgPT4ge1xyXG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdID0gcnRpXHJcbiAgICAgICAgICAgICAgLndvcmtvdXRJbmRleGVzKHR5cGUpXHJcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGRzOiBzdHJpbmdbXSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdChmYXJlcywgZmllbGRzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge31cclxuICAgICAgICApO1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjb252ZXRSYWlsSk91cm5leSA9IChcclxuICAgICAgICBqb3VybmV5OiBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3JldHVybkpvdXJuZXlGYXJlcydcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBjb252ZXJ0RmFyZXMoXHJcbiAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJ1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3NpbmdsZUpvdXJuZXlGYXJlcydcclxuICAgICAgICAgIClcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgb3V0Ym91bmQgPSBvdXRib3VuZEludGVybmFsLm1hcChjb252ZXRSYWlsSk91cm5leSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmQgPSBpbmJvdW5kSW50ZXJuYWwubWFwKGNvbnZldFJhaWxKT3VybmV5KTtcclxuXHJcbiAgICAgIGNvbnN0IG91dFByaWNlcyA9IHRoaXMudXBkYXRlUHJpY2VzKFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czoge1xyXG4gICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xyXG4gICAgICAgICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiB7XHJcbiAgICAgICAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGluUHJpY2VzID0gdGhpcy51cGRhdGVQcmljZXMoXHJcbiAgICAgICAgaW5ib3VuZCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjaGVhcGVzdFRpY2tldHM6IHtcclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IG91dFByaWNlcy5jaGVhcGVzdENsYXNzVGlja2V0LFxyXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogb3V0UHJpY2VzLmNoZWFwZXN0Q2xhc3NUaWNrZXRcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmNoZWFwZXN0Lm5leHQoe1xyXG4gICAgICAgIG91dGJvdW5kQ2hlYXBlc3Q6IG91dFByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgaW5ib3VuZENoZWFwZXN0OiBpblByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogaW5QcmljZXMuY2hlYXBlc3RDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiBvdXRQcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDogaW5QcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5yYWlsUmVzdWx0LFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHJldHVybjogaW5ib3VuZFxyXG4gICAgICB9IGFzIE9CVFJhaWxRdW90ZVJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRmFyZU5hbWVzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb25bXVtdXHJcbiAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAncmV0dXJuSm91cm5leUZhcmVzJyxcclxuICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcycsXHJcbiAgICAgICdzaW5nbGVKb3VybmV5RmFyZXMnXHJcbiAgICBdLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIGFjY3VtOiBSZWNvcmQ8T0JUUmFpbEZhcmVUeXBlcywgUmFpbEluZGV4VG9UaWNrZXQ+LFxyXG4gICAgICAgIG5leHQ6IE9CVFJhaWxGYXJlVHlwZXNcclxuICAgICAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiA9PiB7XHJcbiAgICAgICAgYWNjdW1bbmV4dF0gPSB0aGlzLl9tYWtlRmFyZU5hbWVzKGpvdXJuZXlzLCBuZXh0KTtcclxuICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21ha2VGYXJlTmFtZXMoXHJcbiAgICBqb3VybmV5czogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdW10sXHJcbiAgICBmaWVsZDogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICk6IFJhaWxJbmRleFRvVGlja2V0IHtcclxuICAgIHJldHVybiBfLmZsYXR0ZW4oam91cm5leXMgfHwgW10pLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHJpdDogUmFpbEluZGV4VG9UaWNrZXQsXHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvblxyXG4gICAgICApOiBSYWlsSW5kZXhUb1RpY2tldCA9PiB7XHJcbiAgICAgICAgaWYgKCFqb3VybmV5KSB7XHJcbiAgICAgICAgICByZXR1cm4gcml0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3QuZW50cmllcyhqb3VybmV5W2ZpZWxkXSB8fCB7fSkuZm9yRWFjaChcclxuICAgICAgICAgIChbdGlja2V0TmFtZSwgc3ViZmFyZXNdOiBbXHJcbiAgICAgICAgICAgIHN0cmluZyxcclxuICAgICAgICAgICAgUmVjb3JkPHN0cmluZywgT0JUUmFpbEpvdXJuZXlGYXJlW10+XHJcbiAgICAgICAgICBdKSA9PiB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN1YmZhcmVzKS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgIChbdGlja2V0VHlwZSwgZmFyZXNdOiBbc3RyaW5nLCBPQlRSYWlsSm91cm5leUZhcmVbXV0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJpdC5hZGRGYXJlcyh0aWNrZXROYW1lLCB0aWNrZXRUeXBlLCBmYXJlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcml0Lm5leHRKb3VybmV5KCk7XHJcbiAgICAgICAgcmV0dXJuIHJpdDtcclxuICAgICAgfSxcclxuICAgICAgbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgdXBkYXRlUHJpY2VzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxKb3VybmV5T3B0aW9uW10sXHJcbiAgICBwcmljZXM6IHtcclxuICAgICAgY2hlYXBlc3RUaWNrZXRzOiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgIH0sXHJcbiAgICBpc1JldHVybjogYm9vbGVhblxyXG4gICk6IHtcclxuICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICB9IHtcclxuICAgIGNvbnN0IG1pbiA9IChcclxuICAgICAgY3VycmVudDoge1xyXG4gICAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb247XHJcbiAgICAgICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlO1xyXG4gICAgICB9LFxyXG4gICAgICBmYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10sXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICApOiB7XHJcbiAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmU7XHJcbiAgICB9ID0+IHtcclxuICAgICAgaWYgKCFmYXJlcyB8fCBmYXJlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXh0ID0gZmFyZXNbMF0ucHJpY2U7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnByaWNlID4gMCAmJiBjdXJyZW50LnByaWNlIDwgbmV4dFxyXG4gICAgICAgID8gY3VycmVudFxyXG4gICAgICAgIDogeyBwcmljZTogbmV4dCwgam91cm5leSwgZmFyZTogZmFyZXNbMF0gfTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHByaWNlczE6IHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IHtcclxuICAgICAgICBjaGVhcGVzdFRpY2tldHM6IENoZWFwZXN0UmFpbFByaWNlcztcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgfSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc29ydCA9IChcclxuICAgICAgICAgIGZpcnN0OiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmlyc3QucHJpY2UgLSBzZWNvbmQucHJpY2U7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxKSA9PiBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLlN0YW5kYXJkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcylcclxuICAgICAgICApLmZpbHRlcihcclxuICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PlxyXG4gICAgICAgICAgICBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLkZpcnN0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBvcGVuUmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+XHJcbiAgICAgICAgICAgIGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuU3RhbmRhcmRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IG9wZW5SZXR1cm5GaXJzdEpvdXJuZXlzID0gXy5mbGF0dGVuKFxyXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5vRHVhbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLm9wZW5SZXR1cm5TdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ucmV0dXJuU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgIC4uLnNpbmdsZVN0YW5kYXJkSm91cm5leXNcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IGFsbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLmR1YWxTaW5nbGVTdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ubm9EdWFsU3RhbmRhcmRcclxuICAgICAgICBdLnNvcnQoc29ydCk7XHJcbiAgICAgICAgY29uc3Qgbm9EdWFsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4ub3BlblJldHVybkZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5yZXR1cm5GaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4uc2luZ2xlRmlyc3RKb3VybmV5c1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3QgYWxsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4uZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5ub0R1YWxGaXJzdFxyXG4gICAgICAgIF0uc29ydChzb3J0KTtcclxuICAgICAgICBpZiAoIWlzUmV0dXJuKSB7XHJcbiAgICAgICAgICBub0R1YWxTdGFuZGFyZC5zb3J0KHNvcnQpO1xyXG4gICAgICAgICAgYWxsRmlyc3Quc29ydChzb3J0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLmR1YWxTaW5nbGVKb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5kdWFsU2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5vcGVuUmV0dXJuSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcykpLmZpbHRlcihcclxuICAgICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+ICEham91cm5leTFcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaXNSZXR1cm4pIHtcclxuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIGFsbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgbm9EdWFsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICBub0R1YWxGaXJzdCxcclxuICAgICAgICAgICAgam91cm5leVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGlzU3RhbmRhcmRDbGFzc1NpbmdsZSA9XHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZT8uZmFyZVxyXG4gICAgICAgICAgICAgID8uc2luZ2xlT3JSZXR1cm4gPT09IFJhaWxKb3VybmV5RmFyZVR5cGUuU2luZ2xlO1xyXG4gICAgICAgICAgaWYgKGlzU3RhbmRhcmRDbGFzc1NpbmdsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmJvdW5kUHJpY2UgPSBtaW4oXHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgICBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kVG90YWxQcmljZSA9XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmRUb3RhbFByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID1cclxuICAgICAgICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZTtcclxuICAgICAgICAgICAgICAvLyBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlID0ge1xyXG4gICAgICAgICAgICAgIC8vICAgcHJpY2U6IDAsXHJcbiAgICAgICAgICAgICAgLy8gICBqb3VybmV5OiBudWxsLFxyXG4gICAgICAgICAgICAgIC8vICAgZmFyZTogbnVsbFxyXG4gICAgICAgICAgICAgIC8vIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgaW5ib3VuZFByaWNlLnByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgaW5ib3VuZFByaWNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgaXNGaXJzdENsYXNzU2luZ2xlID1cclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlPy5mYXJlPy5zaW5nbGVPclJldHVybiA9PT1cclxuICAgICAgICAgICAgUmFpbEpvdXJuZXlGYXJlVHlwZS5TaW5nbGU7XHJcbiAgICAgICAgICBpZiAoaXNGaXJzdENsYXNzU2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluYm91bmRQcmljZSA9IG1pbihcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICAgIGR1YWxTaW5nbGVGaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxQcmljZSA9IHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZS5wcmljZTtcclxuICAgICAgICAgICAgaWYgKHRvdGFsUHJpY2UgPiBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUucHJpY2UpIHtcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlO1xyXG4gICAgICAgICAgICAgIC8vIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUgPSB7XHJcbiAgICAgICAgICAgICAgLy8gICBwcmljZTogMCxcclxuICAgICAgICAgICAgICAvLyAgIGpvdXJuZXk6IG51bGwsXHJcbiAgICAgICAgICAgICAgLy8gICBmYXJlOiBudWxsXHJcbiAgICAgICAgICAgICAgLy8gfTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBpbmJvdW5kUHJpY2UucHJpY2UgPlxyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IGluYm91bmRQcmljZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbEZpcnN0LFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJpY2VzMTtcclxuICAgICAgfSxcclxuICAgICAgcHJpY2VzXHJcbiAgICApO1xyXG4gIH1cclxuICBhc3luYyBzZWxlY3RUaWNrZXQoXHJcbiAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24sXHJcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcyxcclxuICAgIHdlbGxiZWluZzogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXJhaWxGYXJlLnNlbGVjdGFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2ggPT09IHJhaWxGYXJlLmZhcmVIYXNoXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkVGlja2V0ID0gdGhpcy5zZWxlY3RlZFRpY2tldDtcclxuICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcclxuICAgICAgVXNlckZhdm9ydXJpdGUuQWx0ZXJuYXRpdmVSYWlsSXRpbmVyYXJ5RW5hYmxlZFxyXG4gICAgKTtcclxuICAgIGlmIChzZWxlY3RlZFRpY2tldCAmJiAhd2VsbGJlaW5nICYmIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcpIHtcclxuICAgICAgY29uc3Qgb3V0OiBPQlRSYWlsSm91cm5leU9wdGlvbiA9IHNlbGVjdGVkVGlja2V0LmpvdXJuZXk7XHJcbiAgICAgIGNvbnN0IGluQjogT0JUUmFpbEpvdXJuZXlPcHRpb24gPSBqb3VybmV5O1xyXG5cclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzID0gbW9tZW50KG91dC5hcnJpdmVEYXRlVGltZSkuZGlmZihcclxuICAgICAgICBtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSxcclxuICAgICAgICAnaG91cnMnLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzSW4gPSBtb21lbnQoaW5CLmFycml2ZURhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChpbkIuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdob3VycycsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkYXlEaWZmZXJuY2UgPSBtb21lbnQoaW5CLmRlcGFydERhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChvdXQuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdkYXknXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCB0b0FkZCA9IGF3YWl0IHRoaXMuY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgICAgIHRpbWVEaWZmSW5Ib3VycyArIHRpbWVEaWZmSW5Ib3Vyc0luLFxyXG4gICAgICAgIGRheURpZmZlcm5jZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodG9BZGQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFRpY2tldChcclxuICAgICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZSxcclxuICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgc2VjdGlvbixcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMgPSB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuICAgICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSAnc2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IGpvdXJuZXkgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzID8gdGlja2V0RXh0cmFzIDogW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3JldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkVGlja2V0LmpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzXHJcbiAgICAgICAgICAgICAgICA/IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXksXHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUsXHJcbiAgICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgIHsgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5IH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2codGlja2V0RXh0cmFzKTtcclxuICAgICAgICAgICAgICBzZWxlY3RlZFRpY2tldC5qb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgPyB0aWNrZXRFeHRyYXNcclxuICAgICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxyXG4gICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLFxyXG4gICAgICAgICAgICAgIHJhaWxGYXJlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnb3BlblJldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBvdXRib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5IH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aWNrZXRFeHRyYXMpO1xyXG4gICAgICAgICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcyA/IHRpY2tldEV4dHJhcyA6IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGRPcGVuUmV0dXJuVG9CYXNrZXQoXHJcbiAgICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgaG91ckRpZmZlcmVuY2U6IG51bWJlcixcclxuICAgIGRheURpZmZlcmVuY2U6IG51bWJlclxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gISBFTlQtMTQ4MSAtIENoZWNrIGlmIHdlIGFyZSBzZWFyY2hpbmcgcmV0dXJuIHJhaWwgLSBhbmQgYWx0ZXJuYXRpdmUgd2VsbGJlaW5nIGlzIGVuYWJsZWRcclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXTtcclxuICAgIGNvbnN0IGNoZWNrID1cclxuICAgICAgdGhpcy5hbHRlcm5hdGl2ZVdlbGxiZWluZy5lbmFibGUgJiZcclxuICAgICAgTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpID4gMCAmJlxyXG4gICAgICBwYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkgJiZcclxuICAgICAgaG91ckRpZmZlcmVuY2UgPj0gTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpICYmXHJcbiAgICAgIGRheURpZmZlcmVuY2UgPT09IDAgJiZcclxuICAgICAgdGhpcy5ub09mQWR1bHRzICsgdGhpcy5ub09mQ2hpbGRyZW4gPD0gbWF4VHJhdmVsbGVyV2VsbGJlaW5nO1xyXG4gICAgaWYgKGNoZWNrKSB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgTW9kYWxUeXBlcy5BbHRlcm5hdGl2ZVJhaWxNb2RhbENvbXBvbmVudFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICB0aGlzLnBlcmZvcm1BbHRlcm5hdGl2ZVJhaWxBbmRIb3RlbFNlYXJjaCgpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXJmb3JtQWx0ZXJuYXRpdmVSYWlsQW5kSG90ZWxTZWFyY2goKTogdm9pZCB7XHJcbiAgICAvLyBhbHRlciB0aGUgc2VhcmNoIHBhcmFtc1xyXG4gICAgLy8gdGhlIGNhbGwgdGhlIHNlYXJjaCBmdW5jdGlvblxyXG5cclxuICAgIGNvbnNvbGUubG9nKCcrKysgQ3JlYXRpbmcgdGhlIEFsdGVybmF0aXZlIFNlYXJjaCBQYXJhbXMgKysrJyk7XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNIb3RlbCA9XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF07XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNSYWlsID1cclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdO1xyXG4gICAgc2VhcmNoUGFyYW1zSG90ZWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc1JhaWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc0hvdGVsLnByaW9yaXR5ID0gc2VhcmNoUGFyYW1zUmFpbC5wcmlvcml0eTtcclxuICAgIGNvbnN0IGhvdGVsUGFyYW1zID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXTtcclxuICAgIGNvbnN0IHJhaWxQYXJhbXMgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF07XHJcbiAgICAvLyBGaXJzdCBvZiBhbGwgLSBhbHRlciB0aGUgcmFpbCBpbmJvdW5kIGRhdGUgLSBhZGQgYSBkYXlcclxuICAgIHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1xyXG4gICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICBdLmluQm91bmREYXRlVGltZS5hZGQoMSwgJ2RheScpO1xyXG5cclxuICAgIC8vIG5vdyBjcmVhdGUgdGhlIGhvdGVsIHNlYXJjaCBwYXJhbXNcclxuICAgIGhvdGVsUGFyYW1zLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb247XHJcbiAgICBob3RlbFBhcmFtcy5sb2NhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvO1xyXG4gICAgaG90ZWxQYXJhbXMudHJhaW5zU3RhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvLnJhaWxzdGF0aW9uO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tpbl9kYXRlID0gcmFpbFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tvdXRfZGF0ZSA9IHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMubm9fb2Zfb2NjdXBhbnRzID1cclxuICAgICAgcmFpbFBhcmFtcy5ub09mQWR1bHRzICsgcmFpbFBhcmFtcy5ub09mQ2hpbGRyZW47XHJcbiAgICBob3RlbFBhcmFtcy5ub19vZl9yb29tcyA9IDE7XHJcbiAgICBob3RlbFBhcmFtcy5kaXN0YW5jZSA9IDEwO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKFdlbGxiZWluZ0VudW0uV0VMTEJFSU5HKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGVjdFRpY2tldE5vQWRkKFxyXG4gICAgZGlyZWN0aW9uOiBSYWlsRGlyZWN0aW9uLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXNcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghcmFpbEZhcmUuc2VsZWN0YWJsZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJysrKyBSYWlsIGZhcmUgaXMgbm90IHNlbGVjdGFibGUgKysrJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc091dFRpY2tldFNlbGVjdGVkID1cclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2ggJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoID09PSByYWlsRmFyZS5mYXJlSGFzaDtcclxuICAgIGNvbnN0IGlzSW5UaWNrZXRTZWxlY3RlZCA9XHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5JbmJvdW5kXHJcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT1cclxuICAgICAgICAgICAgam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuZmFyZS5mYXJlSGFzaCA9PT0gcmFpbEZhcmUuZmFyZUhhc2hcclxuICAgICAgICA6IGZhbHNlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgaXNPdXRUaWNrZXRTZWxlY3RlZCB8fFxyXG4gICAgICAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLkluYm91bmQgJiYgaXNJblRpY2tldFNlbGVjdGVkKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnKysrIEpvdXJuZXkgYW5kIGZhcmUgYXJlIGFscmVhZHkgc2VsZWN0ZWQgLSBicmVha2luZyBvdXQgKysrJ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gICAgICBpZiAoaXNPdXRUaWNrZXRTZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5fc2VsZWN0ZWRTZWN0aW9uICYmIHRoaXMuX3NlbGVjdGVkU2VjdGlvbiAhPT0gc2VjdGlvbikgfHxcclxuICAgICAgKHRoaXMuX3NlbGVjdGVkU2VjdGlvbiA9PT0gJ3JldHVybkpvdXJuZXlGYXJlcycgJiZcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0Py5mYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyICE9PVxyXG4gICAgICAgICAgcmFpbEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2VsZWN0ZWRTZWN0aW9uID0gc2VjdGlvbjtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyA9IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ3NpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXR1cm5Kb3VybmV5RmFyZXMnOlxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFRpY2tldCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGFkZCB0byBiYXNrZXQgZm9yIGdvMi9zY2lvblxyXG4gICAqIEBwYXJhbSBzb3VyY2VJZFxyXG4gICAqIEBwYXJhbSBzZWFyY2hRdWVyeVxyXG4gICAqIEBwYXJhbSBqb3VybmV5XHJcbiAgICogQHBhcmFtIHJhaWxGYXJlXHJcbiAgICogQHBhcmFtIGluYm91bmRSYWlsRmFyZVxyXG4gICAqIEBwYXJhbSBpbmJvdW5kSm91cm5leVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkVG9CYXNrZXQoXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZFJhaWxGYXJlPzogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEpvdXJuZXk/OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHNlYXJjaFF1ZXJ5LmNob3NlblNlYXJjaFR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5KSB7XHJcbiAgICAgIC8vIFRPRE9cclxuICAgICAgYXdhaXQgdGhpcy5hZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgam91cm5leSxcclxuICAgICAgICByYWlsRmFyZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gbm93IGNoZWNrIGlmIHdlIGhhdmUgY2hvc2VuIGR1YWwgc2luZ2xlcyBvciByZXR1cm5zXHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gPT09ICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmFpbEZhcmUuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBpbmJvdW5kSm91cm5leSxcclxuICAgICAgICAgIHJhaWxGYXJlLFxyXG4gICAgICAgICAgaW5ib3VuZFJhaWxGYXJlXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAhIC0gRHVhbCBTaW5nbGVzXHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGluYm91bmRKb3VybmV5LFxyXG4gICAgICAgICAgcmFpbEZhcmUsXHJcbiAgICAgICAgICBpbmJvdW5kUmFpbEZhcmVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyxcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgICBzb3VyY2VJZCxcclxuICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgIGpvdXJuZXksXHJcbiAgICAgIHJhaWxGYXJlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkRHVhbFNpbmdsZVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMsXHJcbiAgICBvdXRib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBpbmJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIG91dGJvdW5kRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeShzZWFyY2hRdWVyeSk7XHJcblxyXG4gICAgbGV0IGluVGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuICAgIGxldCBvdXRUaWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xyXG5cclxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxyXG4gICAgaWYgKGluYm91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIGluVGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QoaW5ib3VuZC50aWNrZXRFeHRyYXNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvdXRib3VuZD8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcclxuICAgICAgb3V0VGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3Qob3V0Ym91bmQudGlja2V0RXh0cmFzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgICBvdXRib3VuZEZhcmUsXHJcbiAgICAgIG91dGJvdW5kLFxyXG4gICAgICBpbmJvdW5kXHJcbiAgICApO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ob3V0Ym91bmQpO1xyXG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcclxuXHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xyXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZCxcclxuICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdDogKG91dGJvdW5kLnRpY2tldFF1ZXVlTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbFRpY2tldFF1ZXVlKTogVGlja2V0UXVldWVMaXN0ID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgYWNjb3VudHNMaXN0OiAob3V0Ym91bmQuYWNjb3VudHNMaXN0IHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgIChpdGVtOiBSYWlsQWNjb3VudCk6IEFjY291bnRzTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IG91dGJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IG91dGJvdW5kLnRvLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBvdXRib3VuZC5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IG91dGJvdW5kRmFyZS5wcm92aWRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogb3V0Ym91bmRGYXJlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogb3V0Ym91bmRGYXJlLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogb3V0Ym91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaW53YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpbmJvdW5kLnRvLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogaW5ib3VuZC5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGluYm91bmQuZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBpbmJvdW5kRmFyZS5wcm92aWRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogaW5ib3VuZEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IGluYm91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcixcclxuICAgICAgICAgICAgaXNEdWFsU2luZ2xlUmV0dXJuOiB0cnVlLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBvdXRib3VuZC5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBlVGlja2V0OiAhIW91dGJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxyXG4gICAgICAgICAgcmV0dXJuOiB7XHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW2luYm91bmRGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IGluYm91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBpc0R1YWxTaW5nbGVSZXR1cm46IHRydWUsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIGluYm91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgZVRpY2tldDogISFpbmJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogTnVtYmVyKFxyXG4gICAgICAgICAgTnVtYmVyKG91dGJvdW5kRmFyZS5wcmljZSArIGluYm91bmRGYXJlLnByaWNlKS50b0ZpeGVkKDIpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9O1xyXG4gICAgICAvLyBpZiBpblRpY2tldEV4dHJhcyBvciBvdXRUaWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgICAgaWYgKGluVGlja2V0RXh0cmFzKSB7XHJcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwucmV0dXJuLnRpY2tldEV4dHJhcyA9IGluVGlja2V0RXh0cmFzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvdXRUaWNrZXRFeHRyYXMpIHtcclxuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZC50aWNrZXRFeHRyYXMgPSBvdXRUaWNrZXRFeHRyYXM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIG91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbiB8fCBpbmJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgZmluZENoZWFwZXN0VGlja2V0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlUmFpbFF1ZXJ5KCkpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpIHtcclxuICAgIGNvbnN0IHBhcnNlZFN0YXRpb24gPVxyXG4gICAgICB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbnNDb2Rlc1t0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbl07XHJcbiAgICBjb25zb2xlLmxvZygnLS0tIFBhcnNlZCBTdGF0aW9uIGlzIDonLCBwYXJzZWRTdGF0aW9uKTtcclxuICAgIGlmIChwYXJzZWRTdGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gcGFyc2VkU3RhdGlvbi5kZXA7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHBhcnNlZFN0YXRpb24uYXJyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIEVudGVyIGEgRnJvbSBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdUbykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBUbyBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vdXRCb3VuZERhdGVUaW1lPy5pc0JlZm9yZShub3cpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ0RlcGFydHVyZSBEYXRlL1RpbWUgY2Fubm90IGJlIGluIHRoZSBwYXN0LidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSkge1xyXG4gICAgICAvLyBjaGVjayBmb3IgcmV0dXJuIHNwZWNpZmljIHZhbGlkYXRpb25zIGluIGhlcmVcclxuXHJcbiAgICAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZT8uaXNTYW1lT3JCZWZvcmUodGhpcy5vdXRCb3VuZERhdGVUaW1lKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIERlcGFydHVyZSBEYXRlL1RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpYSkge1xyXG4gICAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbikge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZpYSBsb2NhdGlvbi4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPCAxKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3QgMSB0cmF2ZWxsZXInKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRoaXMudGVtcFBhcmFtcyk7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcclxuICAgICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLlJhaWxmZXRjaGVyLmZldGNoTGlzdChxdWVyeSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXNcclxuICApOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xyXG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnk6IFJhaWxSZWNlbnRTZWFyY2hBcmdzID1cclxuICAgICAgdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuUmFpbCxcclxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMub3V0Qm91bmREYXRlVGltZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFJhaWxSZWNlbnRTZWFyY2hBcmdzIHtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBSYWlsUmVjZW50U2VhcmNoQXJncyA9IHF1ZXJ5O1xyXG5cclxuICAgIGlmICh0aGlzLmlzQWlycG9ydEV4cHJlc3MpIHtcclxuICAgICAgc2VhcmNoUXVlcnkuaXNBaXJwb3J0RXhwcmVzcyA9IHRoaXMuaXNBaXJwb3J0RXhwcmVzcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb24pIHtcclxuICAgICAgc2VhcmNoUXVlcnkuYWlycG9ydEV4cHJlc3NTdGF0aW9uID0gdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ0Zyb20gPSB0aGlzLnRyYXZlbGxpbmdGcm9tO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdUbykge1xyXG4gICAgICBzZWFyY2hRdWVyeS50cmF2ZWxsaW5nVG8gPSB0aGlzLnRyYXZlbGxpbmdUbztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52aWFMb2NhdGlvbikge1xyXG4gICAgICBzZWFyY2hRdWVyeS52aWFMb2NhdGlvbiA9IHRoaXMudmlhTG9jYXRpb247XHJcbiAgICB9XHJcbiAgICBzZWFyY2hRdWVyeS5vdXRib3VuZFN0YXRpb25Db2RlID1cclxuICAgICAgdGhpcy50cmF2ZWxsaW5nRnJvbT8ucmFpbHN0YXRpb24/LnN0YXRpb25Db2RlO1xyXG5cclxuICAgIHNlYXJjaFF1ZXJ5LmluYm91bmRTdGF0aW9uQ29kZSA9XHJcbiAgICAgIHRoaXMudHJhdmVsbGluZ1RvPy5yYWlsc3RhdGlvbj8uc3RhdGlvbkNvZGU7XHJcblxyXG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZTtcclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jbGFzcztcclxuICAgIHRoaXMuZXh0cmFUaW1lID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZXh0cmFUaW1lVG9DaGFuZ2U7XHJcbiAgICB0aGlzLmlzQWlycG9ydEV4cHJlc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pc0FpcnBvcnRFeHByZXNzO1xyXG4gICAgdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5haXJwb3J0RXhwcmVzc1N0YXRpb247XHJcblxyXG4gICAgLy8gZ2V0IG91dEJvdW5kRGF0ZVRpbWUsIGluQm91bmREYXRlVGltZSBhbmQgb3V0Ym91bmRDcml0ZXJpYSAscmV0dXJuQ3JpdGVyaWFcclxuICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWVcclxuICAgICAgPyBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSlcclxuICAgICAgOiBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWUpO1xyXG4gICAgdGhpcy5vdXRib3VuZENyaXRlcmlhID0gdGhpcy5nZXRDcml0ZXJpYShcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZSA9PT1cclxuICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgICAgPyBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUpXHJcbiAgICAgICAgOiBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuQXJyaXZhbERhdGVUaW1lKTtcclxuXHJcbiAgICAgIHRoaXMucmV0dXJuQ3JpdGVyaWEgPSB0aGlzLmdldENyaXRlcmlhKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxEYXRlVGltZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXBwbHlSYWlsY2FyZHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncz8ucmFpbENhcmRRdWFsaWZpZXJzPy5sZW5ndGhcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcbiAgICBpZiAodGhpcy5hcHBseVJhaWxjYXJkcykge1xyXG4gICAgICB0aGlzLnJhaWxDYXJkcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJhaWxDYXJkUXVhbGlmaWVycztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRyYXZlbGxpbmdUbztcclxuICAgIHRoaXMudHJhdmVsbGluZ0Zyb20gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmF2ZWxsaW5nRnJvbTtcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudmlhTG9jYXRpb24pIHtcclxuICAgICAgdGhpcy52aWEgPSB0cnVlO1xyXG4gICAgICB0aGlzLnZpYUxvY2F0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudmlhTG9jYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmlzQWlycG9ydEV4cHJlc3MpIHtcclxuICAgICAgY29uc3Qgc3RhdGlvbklkcyA9IHtcclxuICAgICAgICBkZXBhcnR1cmVMb2NhdGlvbklkOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBhcnR1cmVMb2NhdGlvbklkLFxyXG4gICAgICAgIGFycml2YWxMb2NhdGlvbklkOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5hcnJpdmFsTG9jYXRpb25JZFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNldEFpcnBvcnRFeHByZXNzU3RhdGlvbklkcyhzdGF0aW9uSWRzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmpvdXJuZXlUeXBlID09PVxyXG4gICAgICBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXlcclxuICAgICkge1xyXG4gICAgICB0aGlzLm9wZW5SZXR1cm4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX291dGJvdW5kX2RhdGUgJiYgdGhpcy5fb3V0Ym91bmRfdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUsXHJcbiAgICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVSZXR1cm5EYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yZXR1cm5fZGF0ZSAmJiB0aGlzLl9yZXR1cm5fdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX3JldHVybl9kYXRlLFxyXG4gICAgICAgIHRoaXMuX3JldHVybl90aW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUXVlcnkodGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXMpOiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMge1xyXG4gICAgaWYgKHRoaXMuaXNBaXJwb3J0RXhwcmVzcyAmJiB0aGlzLm9wZW5SZXR1cm4pIHtcclxuICAgICAgdGhpcy5vcGVuUmV0dXJuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcXVlcnk6IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyA9IHtcclxuICAgICAgY291bnRyeUNvZGU6ICdHQicsXHJcbiAgICAgIGpvdXJuZXlUeXBlOiB0ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUsXHJcbiAgICAgIGFkdWx0czogdGVtcFBhcmFtcy5ub09mQWR1bHRzLFxyXG4gICAgICBhcnJpdmFsTG9jYXRpb25JZDogdGVtcFBhcmFtcy50cmF2ZWxsaW5nVG8/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogdGVtcFBhcmFtcy50cmF2ZWxsaW5nRnJvbT8ucmFpbHN0YXRpb24/LmlkLFxyXG4gICAgICBjaGlsZHJlbjogdGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4sXHJcbiAgICAgIGNsYXNzOiB0ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzLFxyXG4gICAgICBleHRyYVRpbWVUb0NoYW5nZTogdGVtcFBhcmFtcy5leHRyYVRpbWUsXHJcbiAgICAgIG91dGJvdW5kQXJyaXZhbERhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZVxyXG4gICAgICApLFxyXG4gICAgICBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZVxyXG4gICAgICApLFxyXG4gICAgICByZXR1cm5BcnJpdmFsRGF0ZVRpbWU6IHRoaXMuaGVscGVycy5mb3JtYXRHcmFwaFFMRGF0ZVRpbWUoXHJcbiAgICAgICAgdGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU6IHRoaXMuaGVscGVycy5mb3JtYXRHcmFwaFFMRGF0ZVRpbWUoXHJcbiAgICAgICAgdGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgdmlhTG9jYXRpb25JZDogdGVtcFBhcmFtcy52aWFMb2NhdGlvbj8ucmFpbHN0YXRpb24/LmlkLFxyXG4gICAgICByYWlsQ2FyZFF1YWxpZmllcnM6IHRlbXBQYXJhbXMucmFpbENhcmRzPy5tYXAoXHJcbiAgICAgICAgKHJhaWxDYXJkOiBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJhaWxDYXJkLmNvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0ZW1wUGFyYW1zLm5vT2ZDaGlsZHJlbiA9PT0gMCkge1xyXG4gICAgICBxdWVyeS5jaGlsZHJlbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3ZpYUxvY2F0aW9uID09PSAnJykge1xyXG4gICAgICBxdWVyeS52aWFMb2NhdGlvbklkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRlbXBQYXJhbXMub3V0Ym91bmRDcml0ZXJpYSkge1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ6XHJcbiAgICAgICAgcXVlcnkub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hDcml0ZXJpYS5BcnJpdmU6XHJcbiAgICAgICAgcXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYCsrKyBVbmtub3duIENyaXRlcmlhOiAke3RoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhfSArKytgXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWEpIHtcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0OlxyXG4gICAgICAgIHF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZTpcclxuICAgICAgICBxdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYCsrKyBVbmtub3duIENyaXRlcmlhOiAke3RoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYX0gKysrYFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUpIHtcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTpcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXk6XHJcbiAgICAgICAgcXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIHF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcykge1xyXG4gICAgICBxdWVyeS5hcnJpdmFsTG9jYXRpb25JZCA9IHRoaXMuX3RyYXZlbGxpbmdUbztcclxuICAgICAgcXVlcnkuZGVwYXJ0dXJlTG9jYXRpb25JZCA9IHRoaXMuX3RyYXZlbGxpbmdGcm9tO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzPihxdWVyeSk7XHJcbiAgfVxyXG5cclxuICBnZXRDcml0ZXJpYShcclxuICAgIGRlcGFydHVyZURhdGVUaW1lOiBzdHJpbmcsXHJcbiAgICBhcnJpdmFsRGF0ZVRpbWU6IHN0cmluZ1xyXG4gICk6IFJhaWxTZWFyY2hDcml0ZXJpYSB7XHJcbiAgICBpZiAoZGVwYXJ0dXJlRGF0ZVRpbWUpIHtcclxuICAgICAgcmV0dXJuIFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKGFycml2YWxEYXRlVGltZSkge1xyXG4gICAgICByZXR1cm4gUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZTtcclxuICAgIH1cclxuICAgIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHt9XHJcblxyXG4gIGdldFJhaWxTdGF0aW9uKFxyXG4gICAgY29kZTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSYWlsU3RhdGlvbj4ge1xyXG4gICAgaWYgKGNvZGUubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyLmZldGNoTGlzdCh7IGNvZGUgfSkucGlwZShcclxuICAgICAgICB0YXAoKCkgPT4gaXNMb2FkaW5nPy5uZXh0KGZhbHNlKSksXHJcbiAgICAgICAgdGFrZSgxKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFJhaWxKb3VybmV5RmFyZSgpOiBSYWlsSm91cm5leUZhcmUge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uOiBPQlRSYWlsSm91cm5leU9wdGlvbik6IGFueVtdIHtcclxuICAgIGxldCBsZWdzOiBhbnlbXSA9IFtdO1xyXG4gICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uPy5qb3VybmV5TGVncy5sZW5ndGgpIHtcclxuICAgICAgbGVncyA9IHJhaWxKb3VybmV5T3B0aW9uLmpvdXJuZXlMZWdzLm1hcCgoc2VnbWVudCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBvcGVyYXRvcjogc2VnbWVudC5vcGVyYXRvcixcclxuICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBzZWdtZW50LmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHNlZ21lbnQuZGVwYXJ0LFxyXG4gICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBzZWdtZW50LmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBzZWdtZW50LmFycml2ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlZ3M7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgcmFpbEpvdXJuZXlPcHRpb246IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSh0ZW1wUGFyYW1zKTtcclxuICAgIGxldCBvdXRUaWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xyXG4gICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBjcmVhdGUgVGlja2V0RXh0cmFzT2JqZWN0IGFuZCBhZGRlZCBpdCB0byB0aGUgYmFza2V0XHJcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIG91dFRpY2tldEV4dHJhcyA9IHRoaXMuY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KFxyXG4gICAgICAgIHJhaWxKb3VybmV5T3B0aW9uLnRpY2tldEV4dHJhc1swXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIChyYWlsSm91cm5leU9wdGlvbi51bnNlbGxhYmxlKSB7XHJcbiAgICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgLy8gfVxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChcclxuICAgICAgcmFpbEZhcmUsXHJcbiAgICAgIHJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICApO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBsZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uKTtcclxuICAgICAgLy8gY29uc3QgdGlja2V0UXVldWVMaXN0ID0gc2VsZWN0ZWRSYWlsSm91cm5leUZhcmUudGlja2V0UXVldWVMaXN0Lm1hcChcclxuICAgICAgLy8gICAodGlja2V0UXVldWVMaXN0MSkgPT4ge1xyXG4gICAgICAvLyAgICAgcmV0dXJuIHtcclxuICAgICAgLy8gICAgICAgaWQ6IHRpY2tldFF1ZXVlTGlzdDEuaWQsXHJcbiAgICAgIC8vICAgICAgIG5hbWU6IHRpY2tldFF1ZXVlTGlzdDEubmFtZSxcclxuICAgICAgLy8gICAgICAgdHlwZTogdGlja2V0UXVldWVMaXN0MS50eXBlXHJcbiAgICAgIC8vICAgICB9O1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gKTtcclxuXHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xyXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgdGlja2V0UXVldWVMaXN0OiAocmFpbEpvdXJuZXlPcHRpb24udGlja2V0UXVldWVMaXN0IHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgIChpdGVtOiBSYWlsVGlja2V0UXVldWUpOiBUaWNrZXRRdWV1ZUxpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBhY2NvdW50c0xpc3Q6IChyYWlsSm91cm5leU9wdGlvbi5hY2NvdW50c0xpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxBY2NvdW50KTogQWNjb3VudHNMaXN0ID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogcmFpbEpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24udG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiByYWlsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHJhaWxKb3VybmV5T3B0aW9uLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogcmFpbEZhcmUucHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHJhaWxGYXJlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogcmFpbEZhcmUucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiByYWlsRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBlVGlja2V0OiAhIXJhaWxGYXJlLmVUaWNrZXRBdmFpbGFibGUsXHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW3JhaWxGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IHJhaWxGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICByYWlsSm91cm5leU9wdGlvbi5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICAgIC8vIHRpY2tldFF1ZXVlTGlzdFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWR1bHRzOiByYWlsUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgIHByaWNlOiByYWlsRmFyZS5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogcmFpbEZhcmUuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiByYWlsUXVlcnksXHJcbiAgICAgICAgY28yUGVySXRlbTogcmFpbEpvdXJuZXlPcHRpb24uY28yUGVySXRlbSxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IHJhaWxKb3VybmV5T3B0aW9uLmNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBvdXRib3VuZERhdGU6IHJhaWxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgICAgaWYgKG91dFRpY2tldEV4dHJhcykge1xyXG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLm91dGJvdW5kLnRpY2tldEV4dHJhcyA9IG91dFRpY2tldEV4dHJhcztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIHJhaWxGYXJlLnJlcXVpcmVzUmVhc29uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRSZXR1cm5Kb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgb3V0Ym91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgaW5ib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBvdXRib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICAgIGluYm91bmRGYXJlOiBPQlRSYWlsSm91cm5leUZhcmVcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIC8vIGlmIChvdXRib3VuZC51bnNlbGxhYmxlKSB7XHJcbiAgICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgLy8gfVxyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSh0ZW1wUGFyYW1zKTtcclxuXHJcbiAgICBsZXQgdGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuXHJcbiAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGNyZWF0ZSBUaWNrZXRFeHRyYXNPYmplY3QgYW5kIGFkZGVkIGl0IHRvIHRoZSBiYXNrZXRcclxuXHJcbiAgICBpZiAob3V0Ym91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRpY2tldEV4dHJhcyA9IHRoaXMuY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KG91dGJvdW5kLnRpY2tldEV4dHJhc1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChcclxuICAgICAgb3V0Ym91bmRGYXJlLFxyXG4gICAgICBvdXRib3VuZCxcclxuICAgICAgaW5ib3VuZFxyXG4gICAgKTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qgb3V0Ym91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKG91dGJvdW5kKTtcclxuICAgICAgY29uc3QgaW5ib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24oaW5ib3VuZCk7XHJcblxyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChvdXRib3VuZC50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFjY291bnRzTGlzdDogKG91dGJvdW5kLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Ym91bmQuZnJvbSxcclxuXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Ym91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBvdXRib3VuZEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBvdXRib3VuZEZhcmUucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBvdXRib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBpbmJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IGluYm91bmQudG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogaW5ib3VuZC5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGluYm91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBpbmJvdW5kRmFyZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogaW5ib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBlVGlja2V0OiAhIW91dGJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlLFxyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBvdXRib3VuZC5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxyXG4gICAgICAgICAgcmV0dXJuOiB7XHJcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhaW5ib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIGluYm91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IHJhaWxRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgcHJpY2U6IG91dGJvdW5kRmFyZS5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9O1xyXG4gICAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgICAgaWYgKHRpY2tldEV4dHJhcykge1xyXG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLm91dGJvdW5kLnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIGJhc2tldEl0ZW0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgb3V0Ym91bmRGYXJlLnJlcXVpcmVzUmVhc29uIHx8IGluYm91bmRGYXJlLnJlcXVpcmVzUmVhc29uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgcmFpbExlZ3M6IFJhaWxKb3VybmV5TGVnW11cclxuICApOiBSYWlsSm91cm5leUxlZ1tdIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFpbExlZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgbGVnID0gcmFpbExlZ3NbaV07XHJcblxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlZy5jYWxsaW5nUG9pbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbGluZ1BvaW50cyA9IGxlZy5jYWxsaW5nUG9pbnRzW2pdO1xyXG4gICAgICAgIGRlbGV0ZSBjYWxsaW5nUG9pbnRzLnNjaGVkdWxlZFBsYXRmb3JtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJhaWxMZWdzO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KHJhaWxUaWNrZXRFeHRyYTogUmFpbFRpY2tldEV4dHJhKTogVGlja2V0RXh0cmFzW10ge1xyXG4gICAgY29uc3QgcHJpY2UgPVxyXG4gICAgICB0aGlzLm5vT2ZDaGlsZHJlbiAqIHJhaWxUaWNrZXRFeHRyYT8uY2hpbGRBbW91bnQgK1xyXG4gICAgICB0aGlzLm5vT2ZBZHVsdHMgKiByYWlsVGlja2V0RXh0cmEuYWR1bHRBbW91bnQ7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogcmFpbFRpY2tldEV4dHJhLmlkZW50aWZpZXJzLnR5cGUsXHJcbiAgICAgICAgbG9jYXRpb246IHJhaWxUaWNrZXRFeHRyYS5pZGVudGlmaWVycy5sb2NhdGlvbixcclxuICAgICAgICBkYXRlOiByYWlsVGlja2V0RXh0cmEuaWRlbnRpZmllcnMuZGF0ZSxcclxuICAgICAgICBwcmljZVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgY2FsY3VsYXRlVGltZURpZmZlcmVuY2VJbk1pbnMocmFpbEpvdXJuZXk6IFJhaWxKb3VybmV5T3B0aW9uKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnNcclxuICAgICAgLmdldFRpbWVEaWZmZXJlbmNlKHJhaWxKb3VybmV5LmFycml2ZURhdGVUaW1lLCByYWlsSm91cm5leS5kZXBhcnREYXRlVGltZSlcclxuICAgICAgLnRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBkZXRlcm1pbmUgaWYgYSB0aWNrZXQgaXMgYW4gZVRpY2tldFxyXG4gICAqIEBwYXJhbSB0aWNrZXQgLSB0aGUgdGlja2V0IHdlIHdhbnQgdG8gdG8gY2hlY2tcclxuICAgKiBAcmV0dXJucyAtIGJvb2xlYW5cclxuICAgKi9cclxuICB0aWNrZXRJc0FuRVRpY2tldCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZvdW5kRVRpY2tldDogUmFpbEpvdXJuZXlPcHRpb24gPSBudWxsO1xyXG5cclxuICAgIC8vIGZvdW5kRVRpY2tldCA9IHRpY2tldC50aWNrZXRRdWV1ZUxpc3QuZmluZCgocXVldWVMaXN0SXRlbSkgPT4ge1xyXG4gICAgLy8gICByZXR1cm4gcXVldWVMaXN0SXRlbS50eXBlID09PSAnZVRpY2tldCc7XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICByZXR1cm4gZm91bmRFVGlja2V0ID8gdHJ1ZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXBwbHlGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgX2FwcGx5RmlsdGVyKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2V0U2VsZWN0ZWQgPSAoXHJcbiAgICAgIHR5cGU6IFJhaWxSdWxlRW5pdHlLZXlzLFxyXG4gICAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLl9maW5kU3VtbWFyeShqb3VybmV5LCB0aGlzLnN1bW1hcnkucmV0dXJuKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkU3VtbWFyeVxyXG4gICAgICAgID8gKGdyb3VwZWRGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRGYXJlcy5tYXAoKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghZmFyZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLmhlbHBlcnMuYWRkUmFpbEFjdGlvblJ1bGVzKHsgLi4uZmFyZSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeVt0eXBlXVt0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgICAgPy5ydWxlRGF0YVdoZW5TZWxlY3RlZFdpdGhbZmFyZS5mYXJlSGFzaF0sXHJcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlcclxuICAgICAgICAgICAgICAgICAgICA/IHN1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0/LnJ1bGVEYXRhV2hlblNlbGVjdGVkQWxvbmVcclxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhcmUuZmFyZUhhc2ggPT09IHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6ICEhdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5W3R5cGVdW1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2hcclxuICAgICAgICAgICAgICAgIF0/LmFsbG93ZWRXaXRoPy5pbmNsdWRlcyhmYXJlLmZhcmVIYXNoKVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDogKGdyb3VwZWRGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRGYXJlcy5tYXAoKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghZmFyZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLmhlbHBlcnMuYWRkUmFpbEFjdGlvblJ1bGVzKFxyXG4gICAgICAgICAgICAgICAgICB7IC4uLmZhcmUgfSxcclxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVxyXG4gICAgICAgICAgICAgICAgICAgID8gW3N1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0ucnVsZURhdGFXaGVuU2VsZWN0ZWRBbG9uZV1cclxuICAgICAgICAgICAgICAgICAgICA6IFtdXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2V0UnVsZXMgPSAoXHJcbiAgICAgIHR5cGU6IFJhaWxSdWxlRW5pdHlLZXlzLFxyXG4gICAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgICAgZGlyZWN0aW9uOiAnb3V0Ym91bmQnIHwgJ3JldHVybidcclxuICAgICkgPT4ge1xyXG4gICAgICByZXR1cm4gKGdyb3VwZWRGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10pOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMuX2ZpbmRTdW1tYXJ5KGpvdXJuZXksIHRoaXMuc3VtbWFyeVtkaXJlY3Rpb25dKTtcclxuICAgICAgICByZXR1cm4gZ3JvdXBlZEZhcmVzLm1hcChcclxuICAgICAgICAgIChmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUpOiBPQlRSYWlsSm91cm5leUZhcmUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWZhcmUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmFkZFJhaWxBY3Rpb25SdWxlcyhcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAuLi5mYXJlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgJiZcclxuICAgICAgICAgICAgICAgICAgZmFyZS5mYXJlSGFzaCA9PT0gdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzdW1tYXJ5XHJcbiAgICAgICAgICAgICAgICA/IFtzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdLnJ1bGVEYXRhV2hlblNlbGVjdGVkQWxvbmVdXHJcbiAgICAgICAgICAgICAgICA6IFtdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgdGhpcy5oZWxwZXJzXHJcbiAgICAgICAgLmNsb25lKHRoaXMuZnVsbFJlc3VsdHMpXHJcbiAgICAgICAgLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgYWNjdW06IE9CVFJhaWxRdW90ZVJlc3VsdFtdLFxyXG4gICAgICAgICAgICBuZXh0OiBPQlRSYWlsUXVvdGVSZXN1bHRcclxuICAgICAgICAgICk6IE9CVFJhaWxRdW90ZVJlc3VsdFtdID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHtcclxuICAgICAgICAgICAgICAuLi5uZXh0LFxyXG4gICAgICAgICAgICAgIG91dGJvdW5kOiAobmV4dC5vdXRib3VuZCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAgICAgKGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uKTogT0JUUmFpbEpvdXJuZXlPcHRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmpvdXJuZXksXHJcbiAgICAgICAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJhaWxEaXJlY3Rpb24uT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSYWlsRGlyZWN0aW9uLk91dGJvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmFpbERpcmVjdGlvbi5PdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgfSBhcyBPQlRSYWlsSm91cm5leU9wdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybjogKG5leHQucmV0dXJuIHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBPQlRSYWlsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKCdyZXR1cm5Kb3VybmV5RmFyZXMnLCBqb3VybmV5KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKCdkdWFsU2luZ2xlSm91cm5leUZhcmVzJywgam91cm5leSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdzaW5nbGVKb3VybmV5RmFyZXMnLCBqb3VybmV5LCAncmV0dXJuJylcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcygnb3BlblJldHVybkpvdXJuZXlGYXJlcycsIGpvdXJuZXksICdyZXR1cm4nKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGFjY3VtLnB1c2godGVtcCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbXVxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtc0FuZENvbmQoXHJcbiAgICBvdXRib3VuZEZhcmU6IFJhaWxKb3VybmV5RmFyZSxcclxuICAgIG91dGJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIGluYm91bmQ/OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDbGFzcycsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy50aWNrZXRUeXBlQ2xhc3NcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDb25kaXRpb25zIERlc2NyaXB0aW9uJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVDb25kaXRpb25zRGVzY3JpcHRpb25cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWYWxpZCBSZXR1cm4gUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy52YWxpZFJldHVyblJ1bGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBOYW1lJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVOYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hhbmdlIFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuY2hhbmdlUnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ByZSBCb29raW5nIFJlcXVpcmVtZW50JyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnByZUJvb2tpbmdSZXF1aXJlbWVudFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JhaWxjYXJkIERpc2NvdW50JyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnJhaWxjYXJkRGlzY291bnRcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDb2RlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVDb2RlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hpbGQgRGlzY291bnQnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuY2hpbGREaXNjb3VudFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZhbGlkIE91dCBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnZhbGlkT3V0UnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N0YXJ0IERhdGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZC5kZXBhcnREYXRlVGltZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0VuZCBEYXRlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmQuYXJyaXZlRGF0ZVRpbWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdKb3VybmV5IEJyZWFrIFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuam91cm5leUJyZWFrUnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JlZnVuZCBDYW5jZWxsYXRpb24gUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5yZWZ1bmRDYW5jZWxsYXRpb25SdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSm91cm5leSBUeXBlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLmpvdXJuZXlUeXBlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG9kIEF2YWlsYWJsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy50b2RBdmFpbGFibGVcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmV0dXJuIFN0YXJ0IERhdGUnLFxyXG4gICAgICAgIHZhbHVlOiBpbmJvdW5kPy5kZXBhcnREYXRlVGltZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JldHVybiBFbmQgRGF0ZScsXHJcbiAgICAgICAgdmFsdWU6IGluYm91bmQ/LmFycml2ZURhdGVUaW1lXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGhpcy50ZW1wUGFyYW1zKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IFJhaWxSZWNlbnRTZWFyY2hBcmdzID1cclxuICAgICAgICB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5SYWlsLFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgdGhpcy5ub09mQWR1bHRzID0gZmF2LmFkdWx0c1xyXG4gICAgdGhpcy5ub09mQ2hpbGRyZW4gPSBmYXYuY2hpbGRyZW5cclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IGZhdi5qb3VybmV5VHlwZVxyXG4gICAgc3dpdGNoIChmYXYuY2xhc3Mpe1xyXG4gICAgICBjYXNlIFwiRmlyc3RcIjpcclxuICAgICAgICB0aGlzLmNob3NlblJhaWxDbGFzcyA9IFJhaWxDbGFzcy5GaXJzdDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkFueVwiOlxyXG4gICAgICAgIHRoaXMuY2hvc2VuUmFpbENsYXNzID0gUmFpbENsYXNzLkFsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlN0YW5kYXJkXCI6XHJcbiAgICAgICAgdGhpcy5jaG9zZW5SYWlsQ2xhc3MgPSBSYWlsQ2xhc3MuU3RhbmRhcmQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3Qoe2lkOiBmYXYuZGVwYXJ0dXJlTG9jYXRpb25JZH0pLnN1YnNjcmliZShhID0+IHtcclxuICAgICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IGFcclxuICAgIH0pXHJcbiAgICB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3Qoe2lkOiBmYXYuYXJyaXZhbExvY2F0aW9uSWR9KS5zdWJzY3JpYmUoYSA9PiB7XHJcbiAgICAgIHRoaXMudHJhdmVsbGluZ1RvID0gYVxyXG4gICAgfSlcclxuICAgIGlmIChmYXYudmlhTG9jYXRpb25JZCl7XHJcbiAgICAgIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyLmZldGNoTGlzdCh7aWQ6IGZhdi52aWFMb2NhdGlvbklkfSkuc3Vic2NyaWJlKGEgPT4ge1xyXG4gICAgICAgIHRoaXMudmlhTG9jYXRpb24gPSBhXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMudmlhID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgICBcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnZpYUxvY2F0aW9uID0gbnVsbFxyXG4gICAgICB0aGlzLnZpYSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLlxyXG4gIH1cclxufVxyXG4iXX0=