@sabstravtech/obtservices 0.0.22050309 → 0.0.26051001
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/components/basket-panel.d.ts +1 -0
- package/angular/fetchers.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-companies.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-company.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/enterprise-basket.service.d.ts +5 -3
- package/angular/lib/vendor/services/logon.service.d.ts +2 -1
- package/angular/lib/vendor/services/search.service.d.ts +4 -3
- package/angular/lib/vendor/services/ticket-queue.service.d.ts +6 -0
- package/angular/lib/vendor/services/user.service.d.ts +7 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +354 -90
- package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
- package/angular/sabstravtech-obtservices-angular.d.ts +0 -1
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/angular/services.d.ts +1 -0
- package/angular/updaters.d.ts +1 -0
- package/base/fetchers.d.ts +7 -0
- package/base/interfaces.d.ts +2 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +5 -1
- package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
- package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +6 -4
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +5 -3
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +18 -13
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +6 -5
- package/base/lib/vendor/classes/helpers.d.ts +6 -1
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +8 -4
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +23 -9
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +4 -3
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +7 -2
- package/base/lib/vendor/classes/modal-types.enum.d.ts +2 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +4 -3
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +10 -7
- package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
- package/base/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +1 -1
- package/base/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-companies.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-company.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +4 -2
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +10 -6
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +11 -5
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +3 -1
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +7 -2
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +11 -5
- package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +6 -2
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +4 -2
- package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +3 -1
- package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
- package/base/lib/vendor/interfaces/fast-track-filters.interface.d.ts +4 -0
- package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/summary-interface.d.ts +4 -0
- package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
- package/base/lib/vendor/models/traveller.object.d.ts +1 -1
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +28 -10
- package/base/lib/vendor/services/logon.service.d.ts +5 -1
- package/base/lib/vendor/services/requires-reason.service.d.ts +20 -0
- package/base/lib/vendor/services/search.service.d.ts +30 -25
- package/base/lib/vendor/services/url.service.d.ts +2 -0
- package/base/lib/vendor/services/user.service.d.ts +21 -5
- package/base/lib/vendor/services/webtoken.service.d.ts +5 -0
- package/base/lib/vendor/types/graphql.types.d.ts +326 -89
- package/base/lib/vendor/types/types.d.ts +44 -17
- package/base/lib/vendor/updaters/create-guest-updater.d.ts +19 -0
- package/base/sabstravtech-obtservices-base.d.ts +1 -1
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/base/services.d.ts +1 -0
- package/base/updaters.d.ts +1 -0
- package/bundles/sabstravtech-obtservices-angular.umd.js +466 -180
- package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.js +4435 -1004
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
- package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
- package/esm2015/angular/components/basket-panel.js +16 -7
- package/esm2015/angular/fetchers.js +8 -1
- package/esm2015/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-companies.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-company.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-guests.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +11 -5
- package/esm2015/angular/lib/vendor/services/http-call.service.js +6 -2
- package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
- package/esm2015/angular/lib/vendor/services/search.service.js +28 -25
- package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +23 -0
- package/esm2015/angular/lib/vendor/services/user.service.js +21 -9
- package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +353 -72
- package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
- package/esm2015/angular/obtservices.module.js +3 -1
- package/esm2015/angular/sabstravtech-obtservices-angular.js +1 -2
- package/esm2015/angular/services.js +2 -1
- package/esm2015/angular/updaters.js +2 -1
- package/esm2015/base/fetchers.js +8 -1
- package/esm2015/base/interfaces.js +3 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +8 -2
- package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +17 -1
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -6
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +98 -11
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +146 -68
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +140 -37
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +111 -23
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +218 -40
- package/esm2015/base/lib/vendor/classes/helpers.js +24 -4
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +191 -48
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +271 -27
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +59 -11
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +13 -9
- package/esm2015/base/lib/vendor/classes/modal-types.enum.js +3 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +63 -11
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +183 -23
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +42 -4
- package/esm2015/base/lib/vendor/fetchers/fast-track-quote.fetcher.js +2 -2
- package/esm2015/base/lib/vendor/fetchers/get-cancellation-info.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/get-companies.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-company.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/fast-track-filters.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +1 -1
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +154 -45
- package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +16 -12
- package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/base/lib/vendor/services/logon.service.js +37 -3
- package/esm2015/base/lib/vendor/services/requires-reason.service.js +53 -0
- package/esm2015/base/lib/vendor/services/search.service.js +82 -101
- package/esm2015/base/lib/vendor/services/url.service.js +3 -1
- package/esm2015/base/lib/vendor/services/user.service.js +64 -9
- package/esm2015/base/lib/vendor/services/webtoken.service.js +16 -5
- package/esm2015/base/lib/vendor/types/graphql.types.js +15 -2
- package/esm2015/base/lib/vendor/types/types.js +1679 -21
- package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
- package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
- package/esm2015/base/services.js +2 -1
- package/esm2015/base/updaters.js +2 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +570 -148
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +3725 -466
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,7 @@ import { __awaiter } from "tslib";
|
|
|
2
2
|
import moment from 'moment';
|
|
3
3
|
import { map } from 'rxjs/operators';
|
|
4
4
|
import { BaseEnterpriseSearch } from './base-enterprise';
|
|
5
|
+
import { DifferentInvokdedUserReasons } from '../types/types';
|
|
5
6
|
import { IrlClass, ServiceType, IrlJourneyType } from '../types/graphql.types';
|
|
6
7
|
import { ages } from '../models/traveller.object';
|
|
7
8
|
import { SortMethod } from './eurostar-enterprise-search';
|
|
@@ -20,12 +21,12 @@ export var ClassType;
|
|
|
20
21
|
ClassType["First_Class"] = "1st Class";
|
|
21
22
|
})(ClassType || (ClassType = {}));
|
|
22
23
|
export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
23
|
-
constructor(Irlfetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, searchService) {
|
|
24
|
-
super(storageService, helpers);
|
|
24
|
+
constructor(Irlfetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, searchService, getIrlSupplierStationFetcher) {
|
|
25
|
+
super(storageService, helpers, searchService);
|
|
25
26
|
this.Irlfetcher = Irlfetcher;
|
|
26
27
|
this.irlDiscountCardsFetcher = irlDiscountCardsFetcher;
|
|
27
28
|
this.basketService = basketService;
|
|
28
|
-
this.
|
|
29
|
+
this.getIrlSupplierStationFetcher = getIrlSupplierStationFetcher;
|
|
29
30
|
this.resultsSessionName = IRLEnterpriseSearch.STORAGE_SESSION_RESULTS;
|
|
30
31
|
this.multiResultsSessionName = IRLEnterpriseSearch.STORAGE_SESSION_RESULTS;
|
|
31
32
|
this._sortArray = [
|
|
@@ -82,14 +83,13 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
82
83
|
this._outboundDepartureDateTime = null;
|
|
83
84
|
this._departureLocationId = null;
|
|
84
85
|
this._arrivalLocationId = null;
|
|
85
|
-
this._adults = 0;
|
|
86
86
|
this._children = 0;
|
|
87
87
|
this._cheapestStandard = null;
|
|
88
88
|
this._cheapestFirst = null;
|
|
89
89
|
this._returnDepartureDateTime = null;
|
|
90
90
|
this._ageRange = null;
|
|
91
|
-
this._priceDir =
|
|
92
|
-
this._dateDir =
|
|
91
|
+
this._priceDir = true;
|
|
92
|
+
this._dateDir = true;
|
|
93
93
|
this._irlDiscountCardsArray = [];
|
|
94
94
|
// !date and time is handled differently for LU
|
|
95
95
|
this._outbound_date = null;
|
|
@@ -127,6 +127,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
127
127
|
// searchService.startSearches();
|
|
128
128
|
// }
|
|
129
129
|
this._cheapestResultPrice = this.updateLowestPrice(results);
|
|
130
|
+
this.fullResults = results;
|
|
130
131
|
this.results.next(results || []);
|
|
131
132
|
}
|
|
132
133
|
get outboundJourneyOptions() {
|
|
@@ -228,10 +229,10 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
228
229
|
this._arrivalLocationId = data;
|
|
229
230
|
}
|
|
230
231
|
get adults() {
|
|
231
|
-
return this.
|
|
232
|
+
return this.tempParams.adults;
|
|
232
233
|
}
|
|
233
234
|
set adults(data) {
|
|
234
|
-
this.
|
|
235
|
+
this.tempParams.adults = data;
|
|
235
236
|
}
|
|
236
237
|
get children() {
|
|
237
238
|
return this._children;
|
|
@@ -532,10 +533,16 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
532
533
|
}
|
|
533
534
|
getSearchQuery() {
|
|
534
535
|
// this.travellers = travellers;
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
536
|
+
if (!this.travellers) {
|
|
537
|
+
this.noOfAdults = this.adults;
|
|
538
|
+
this.noOfChildren = this.children;
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
this.noOfAdults = this.travellers.filter((traveller) => traveller.ageType === ages.Adult ||
|
|
542
|
+
traveller.ageType === ages.Youth ||
|
|
543
|
+
traveller.ageType === ages.Senior).length;
|
|
544
|
+
this.noOfChildren = this.travellers.filter((traveller) => traveller.ageType === ages.Child).length;
|
|
545
|
+
}
|
|
539
546
|
if (!this.supplier && this.travellingFrom.name) {
|
|
540
547
|
this.supplier = this.travellingFrom.railstation.supplier;
|
|
541
548
|
this.getIrlDiscountCards().subscribe((data) => {
|
|
@@ -546,7 +553,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
546
553
|
supplier: this.supplier,
|
|
547
554
|
countryCode: 'GB',
|
|
548
555
|
irlDiscountCards: this.discountCard ? this.discountCard.id : null,
|
|
549
|
-
class: this.
|
|
556
|
+
class: this.class,
|
|
550
557
|
outboundDepartureDateTime: this.tempParams.outboundDepartureDateTime,
|
|
551
558
|
departureLocationId: this._travellingFrom,
|
|
552
559
|
arrivalLocationId: this._travellingTo,
|
|
@@ -565,6 +572,56 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
565
572
|
}
|
|
566
573
|
return this.helpers.removeNulls(query);
|
|
567
574
|
}
|
|
575
|
+
updateSearchFromExpiredBasketItem(basketItem) {
|
|
576
|
+
const searchIrlQuery = basketItem.searchQuery;
|
|
577
|
+
this.journeyType = searchIrlQuery.journeyType;
|
|
578
|
+
this.irlClass = searchIrlQuery.class;
|
|
579
|
+
// get outBoundDateTime, inBoundDateTime
|
|
580
|
+
this.outBoundDateTime = moment(searchIrlQuery.outboundDepartureDateTime);
|
|
581
|
+
if (searchIrlQuery.journeyType === IrlJourneyType.ReturnJourney) {
|
|
582
|
+
this.inBoundDateTime = moment(searchIrlQuery.returnDepartureDateTime);
|
|
583
|
+
}
|
|
584
|
+
if (searchIrlQuery.departureLocationId) {
|
|
585
|
+
this.searchService
|
|
586
|
+
.getRailStationById(searchIrlQuery.departureLocationId)
|
|
587
|
+
.subscribe((departureStation) => {
|
|
588
|
+
this.travellingFrom = {
|
|
589
|
+
name: departureStation.name,
|
|
590
|
+
railstation: {
|
|
591
|
+
id: departureStation.id,
|
|
592
|
+
name: departureStation.name,
|
|
593
|
+
nlcCode: departureStation.nlcCode,
|
|
594
|
+
stationCode: departureStation.stationCode,
|
|
595
|
+
trainlineCode: departureStation.trainlineCode,
|
|
596
|
+
trainlineUniqueCode: departureStation.trainlineUniqueCode
|
|
597
|
+
}
|
|
598
|
+
};
|
|
599
|
+
});
|
|
600
|
+
}
|
|
601
|
+
if (searchIrlQuery.arrivalLocationId) {
|
|
602
|
+
this.searchService
|
|
603
|
+
.getRailStationById(searchIrlQuery.arrivalLocationId)
|
|
604
|
+
.subscribe((arrivalStation) => {
|
|
605
|
+
this.travellingTo = {
|
|
606
|
+
name: arrivalStation.name,
|
|
607
|
+
railstation: {
|
|
608
|
+
id: arrivalStation.id,
|
|
609
|
+
name: arrivalStation.name,
|
|
610
|
+
nlcCode: arrivalStation.nlcCode,
|
|
611
|
+
stationCode: arrivalStation.stationCode,
|
|
612
|
+
trainlineCode: arrivalStation.trainlineCode,
|
|
613
|
+
trainlineUniqueCode: arrivalStation.trainlineUniqueCode
|
|
614
|
+
}
|
|
615
|
+
};
|
|
616
|
+
});
|
|
617
|
+
}
|
|
618
|
+
// add Travellers
|
|
619
|
+
if (basketItem.users) {
|
|
620
|
+
basketItem.users.forEach((user) => {
|
|
621
|
+
this.searchService.addTraveller(user);
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
}
|
|
568
625
|
updateFromPreviousSearches(previousItems) { }
|
|
569
626
|
updateCanCombine(tkt) {
|
|
570
627
|
(tkt.identifiers.allowedWith || []).forEach((allowed) => {
|
|
@@ -650,15 +707,22 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
650
707
|
// co2PerPassenger: irlJourneyOption.co2PerPassenger,
|
|
651
708
|
outboundDate: irlJourneyOption.departDateTime
|
|
652
709
|
};
|
|
653
|
-
|
|
710
|
+
const whatHappened = yield this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, false // TODO
|
|
711
|
+
);
|
|
712
|
+
if (whatHappened === DifferentInvokdedUserReasons.research) {
|
|
713
|
+
this.performSearch();
|
|
714
|
+
}
|
|
715
|
+
return whatHappened;
|
|
654
716
|
}
|
|
655
|
-
return
|
|
717
|
+
return DifferentInvokdedUserReasons.cancel;
|
|
656
718
|
});
|
|
657
719
|
}
|
|
658
|
-
addReturnJourneyToBasket(serviceId, irlQuery, inbound, inJourneyOption) {
|
|
720
|
+
addReturnJourneyToBasket(serviceId, irlQuery, inbound, inJourneyOption, outboundTicket, outboundJourney) {
|
|
659
721
|
return __awaiter(this, void 0, void 0, function* () {
|
|
660
|
-
const outbound = this.outboundTicket;
|
|
661
|
-
const outJourneyOption =
|
|
722
|
+
const outbound = outboundTicket ? outboundTicket : this.outboundTicket;
|
|
723
|
+
const outJourneyOption = outboundJourney
|
|
724
|
+
? outboundJourney
|
|
725
|
+
: this.outboundJourneyOptions;
|
|
662
726
|
const intBasket = yield this.basketService.getDefaultBasket();
|
|
663
727
|
const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
|
|
664
728
|
if (basket) {
|
|
@@ -696,7 +760,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
696
760
|
supplierTickets: [
|
|
697
761
|
{
|
|
698
762
|
supplierName: inJourneyOption.providers[0].name,
|
|
699
|
-
ticketDescription:
|
|
763
|
+
ticketDescription: inbound.type,
|
|
700
764
|
legs: inboundLegs
|
|
701
765
|
}
|
|
702
766
|
]
|
|
@@ -712,7 +776,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
712
776
|
termsAndCond: termsAndConditions
|
|
713
777
|
},
|
|
714
778
|
adults: irlQuery.adults,
|
|
715
|
-
price: selectedIrlTicketOption.price,
|
|
779
|
+
price: Number((Number(selectedIrlTicketOption.price) + Number(inbound.price)).toFixed(2)),
|
|
716
780
|
currency: selectedIrlTicketOption.currency,
|
|
717
781
|
searchQuery: irlQuery,
|
|
718
782
|
outboundDate: outJourneyOption.departDateTime
|
|
@@ -720,9 +784,14 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
720
784
|
// co2PerPassenger: outbound.co2PerPassenger
|
|
721
785
|
};
|
|
722
786
|
this.filterSelected();
|
|
723
|
-
|
|
787
|
+
const whatHappened = yield this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, false // TODO
|
|
788
|
+
);
|
|
789
|
+
if (whatHappened === DifferentInvokdedUserReasons.research) {
|
|
790
|
+
this.performSearch();
|
|
791
|
+
}
|
|
792
|
+
return whatHappened;
|
|
724
793
|
}
|
|
725
|
-
return
|
|
794
|
+
return DifferentInvokdedUserReasons.cancel;
|
|
726
795
|
});
|
|
727
796
|
}
|
|
728
797
|
updateLowestPrice(results) {
|
|
@@ -774,8 +843,10 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
774
843
|
* @returns
|
|
775
844
|
* @memberof irl-enterprise-search
|
|
776
845
|
*/
|
|
777
|
-
sortByPrice() {
|
|
778
|
-
|
|
846
|
+
sortByPrice(ignoreDirectionChange = false) {
|
|
847
|
+
if (!ignoreDirectionChange) {
|
|
848
|
+
this.priceDir = !this.priceDir;
|
|
849
|
+
}
|
|
779
850
|
const results = this.filterSelected(this._isFiltered);
|
|
780
851
|
const byPrice = (a, b) => {
|
|
781
852
|
return this.priceDir
|
|
@@ -794,8 +865,10 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
794
865
|
* @returns
|
|
795
866
|
* @memberof irl-enterprise-search
|
|
796
867
|
*/
|
|
797
|
-
sortByDate() {
|
|
798
|
-
|
|
868
|
+
sortByDate(ignoreDirection = false) {
|
|
869
|
+
if (!ignoreDirection) {
|
|
870
|
+
this.dateDir = !this.dateDir;
|
|
871
|
+
}
|
|
799
872
|
const results = this.filterSelected(this._isFiltered);
|
|
800
873
|
const byDate = (a, b) => {
|
|
801
874
|
return this.dateDir
|
|
@@ -878,8 +951,179 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
878
951
|
return this.searchService.saveFavouriteSearch(searchInfo);
|
|
879
952
|
}
|
|
880
953
|
}
|
|
954
|
+
generateFilters(results) {
|
|
955
|
+
// first of all we need to find the min price and the max price
|
|
956
|
+
if (!(results === null || results === void 0 ? void 0 : results.length)) {
|
|
957
|
+
return;
|
|
958
|
+
}
|
|
959
|
+
let priceMax = null;
|
|
960
|
+
let priceMin = null;
|
|
961
|
+
let dateDepMin = null;
|
|
962
|
+
let dateDepMax = null;
|
|
963
|
+
let dateArrMin = null;
|
|
964
|
+
let dateArrMax = null;
|
|
965
|
+
let classObject = {};
|
|
966
|
+
let changesObject = {};
|
|
967
|
+
results.forEach((result) => {
|
|
968
|
+
result.providers[0].ticketOptions.forEach((ticket) => {
|
|
969
|
+
if (!priceMax || priceMax < ticket.price) {
|
|
970
|
+
priceMax = Math.ceil(ticket.price);
|
|
971
|
+
}
|
|
972
|
+
});
|
|
973
|
+
if (!priceMin || priceMin > result.providers[0].cheapestTicket.price) {
|
|
974
|
+
priceMin = Math.floor(result.providers[0].cheapestTicket.price);
|
|
975
|
+
}
|
|
976
|
+
if (!dateDepMin ||
|
|
977
|
+
moment(result.departDateTime).isBefore(moment(dateDepMin))) {
|
|
978
|
+
dateDepMin = Number(moment(result.departDateTime).format('HHmm'));
|
|
979
|
+
}
|
|
980
|
+
if (!dateDepMax ||
|
|
981
|
+
moment(result.departDateTime).isAfter(moment(dateDepMax))) {
|
|
982
|
+
dateDepMax = Number(moment(result.departDateTime).format('HHmm'));
|
|
983
|
+
}
|
|
984
|
+
if (!dateArrMin ||
|
|
985
|
+
moment(result.arriveDateTime).isBefore(moment(dateArrMin))) {
|
|
986
|
+
dateArrMin = Number(moment(result.arriveDateTime).format('HHmm'));
|
|
987
|
+
}
|
|
988
|
+
if (!dateArrMax ||
|
|
989
|
+
moment(result.arriveDateTime).isAfter(moment(dateArrMax))) {
|
|
990
|
+
dateArrMax = Number(moment(result.arriveDateTime).format('HHmm'));
|
|
991
|
+
}
|
|
992
|
+
changesObject[result.segments.length - 1] = {
|
|
993
|
+
key: result.segments.length - 1,
|
|
994
|
+
title: `${result.segments.length - 1} changes`,
|
|
995
|
+
selected: false
|
|
996
|
+
};
|
|
997
|
+
result.providers[0].ticketOptions.forEach((ticket) => {
|
|
998
|
+
if (ticket.class === '1') {
|
|
999
|
+
classObject['First'] = {
|
|
1000
|
+
key: ClassType.Class_1,
|
|
1001
|
+
title: 'First',
|
|
1002
|
+
selected: false
|
|
1003
|
+
};
|
|
1004
|
+
}
|
|
1005
|
+
else if (ticket.class === '2') {
|
|
1006
|
+
classObject['Second'] = {
|
|
1007
|
+
key: ClassType.Class_2,
|
|
1008
|
+
title: 'Second',
|
|
1009
|
+
selected: false
|
|
1010
|
+
};
|
|
1011
|
+
}
|
|
1012
|
+
});
|
|
1013
|
+
});
|
|
1014
|
+
const retObject = {
|
|
1015
|
+
priceMax,
|
|
1016
|
+
priceMin,
|
|
1017
|
+
dateArrMax,
|
|
1018
|
+
dateArrMin,
|
|
1019
|
+
dateDepMax,
|
|
1020
|
+
dateDepMin,
|
|
1021
|
+
classes: Object.values(classObject),
|
|
1022
|
+
changes: Object.values(changesObject)
|
|
1023
|
+
};
|
|
1024
|
+
console.log(retObject);
|
|
1025
|
+
return retObject;
|
|
1026
|
+
}
|
|
1027
|
+
applyFilters(filters, direction = 'O') {
|
|
1028
|
+
const fullResultsCopy = this.helpers.clone(this.fullResults);
|
|
1029
|
+
let dirResults;
|
|
1030
|
+
switch (direction) {
|
|
1031
|
+
case 'O':
|
|
1032
|
+
dirResults = fullResultsCopy[0].outbound;
|
|
1033
|
+
break;
|
|
1034
|
+
case 'I':
|
|
1035
|
+
dirResults = fullResultsCopy[0].return;
|
|
1036
|
+
break;
|
|
1037
|
+
}
|
|
1038
|
+
// now first of all - apply the price filters
|
|
1039
|
+
dirResults = dirResults.filter((result) => {
|
|
1040
|
+
const tickets = result.providers[0].ticketOptions.filter((ticket) => {
|
|
1041
|
+
return (ticket.price >= filters.priceMin && ticket.price <= filters.priceMax);
|
|
1042
|
+
});
|
|
1043
|
+
result.providers[0].ticketOptions = tickets;
|
|
1044
|
+
return tickets.length;
|
|
1045
|
+
});
|
|
1046
|
+
// times
|
|
1047
|
+
// dep
|
|
1048
|
+
dirResults = dirResults.filter((result) => {
|
|
1049
|
+
const depTime = Number(moment(result.departDateTime).format('HHmm'));
|
|
1050
|
+
return depTime >= filters.dateDepMin && depTime <= filters.dateDepMax;
|
|
1051
|
+
});
|
|
1052
|
+
// arr
|
|
1053
|
+
dirResults = dirResults.filter((result) => {
|
|
1054
|
+
const arrTime = Number(moment(result.arriveDateTime).format('HHmm'));
|
|
1055
|
+
return arrTime >= filters.dateArrMin && arrTime <= filters.dateArrMax;
|
|
1056
|
+
});
|
|
1057
|
+
// classes
|
|
1058
|
+
// first of all determine if any are selected
|
|
1059
|
+
const selectedClasses = filters.classes.filter((classF) => {
|
|
1060
|
+
return classF.selected;
|
|
1061
|
+
});
|
|
1062
|
+
if (selectedClasses === null || selectedClasses === void 0 ? void 0 : selectedClasses.length) {
|
|
1063
|
+
dirResults = dirResults.filter((result) => {
|
|
1064
|
+
const newTickets = [];
|
|
1065
|
+
console.log('og tickets:', result.providers[0].ticketOptions);
|
|
1066
|
+
result.providers[0].ticketOptions.forEach((ticket) => {
|
|
1067
|
+
selectedClasses.forEach((classS) => {
|
|
1068
|
+
if (ticket.class === classS.key) {
|
|
1069
|
+
newTickets.push(ticket);
|
|
1070
|
+
}
|
|
1071
|
+
});
|
|
1072
|
+
});
|
|
1073
|
+
console.log(newTickets);
|
|
1074
|
+
result.providers[0].ticketOptions = newTickets;
|
|
1075
|
+
return newTickets.length > 0;
|
|
1076
|
+
});
|
|
1077
|
+
}
|
|
1078
|
+
console.log(dirResults);
|
|
1079
|
+
// finally stops
|
|
1080
|
+
const selectedStops = filters.changes.filter((change) => {
|
|
1081
|
+
return change.selected;
|
|
1082
|
+
});
|
|
1083
|
+
if (selectedStops.length) {
|
|
1084
|
+
dirResults = dirResults.filter((result) => {
|
|
1085
|
+
for (let i = 0; i < selectedStops.length; i++) {
|
|
1086
|
+
if (result.segments.length - 1 === selectedStops[i].key) {
|
|
1087
|
+
return result;
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
});
|
|
1091
|
+
}
|
|
1092
|
+
switch (direction) {
|
|
1093
|
+
case 'O':
|
|
1094
|
+
fullResultsCopy[0].outbound = dirResults;
|
|
1095
|
+
break;
|
|
1096
|
+
case 'I':
|
|
1097
|
+
fullResultsCopy[0].return = dirResults;
|
|
1098
|
+
break;
|
|
1099
|
+
}
|
|
1100
|
+
this.results.next(fullResultsCopy);
|
|
1101
|
+
}
|
|
1102
|
+
applyFavourite(fav) {
|
|
1103
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1104
|
+
this.getIrlSupplierStationFetcher
|
|
1105
|
+
.fetchList({ id: fav.departureLocationId })
|
|
1106
|
+
.subscribe((a) => {
|
|
1107
|
+
this.travellingFrom = a;
|
|
1108
|
+
});
|
|
1109
|
+
this.getIrlSupplierStationFetcher
|
|
1110
|
+
.fetchList({ id: fav.arrivalLocationId })
|
|
1111
|
+
.subscribe((a) => {
|
|
1112
|
+
this.travellingTo = a;
|
|
1113
|
+
});
|
|
1114
|
+
this.adults = fav.adults;
|
|
1115
|
+
this.children = fav.children;
|
|
1116
|
+
this.class = fav.class;
|
|
1117
|
+
this.countryCode = fav.countryCode;
|
|
1118
|
+
this.journeyType =
|
|
1119
|
+
fav.journeyType === 'ReturnJourney'
|
|
1120
|
+
? IrlJourneyType.ReturnJourney
|
|
1121
|
+
: IrlJourneyType.SingleJourney;
|
|
1122
|
+
this.supplier = fav.supplier;
|
|
1123
|
+
});
|
|
1124
|
+
}
|
|
881
1125
|
}
|
|
882
1126
|
IRLEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_irl';
|
|
883
1127
|
IRLEnterpriseSearch.STORAGE_SESSION_RESULTS = 'irl_results';
|
|
884
1128
|
IRLEnterpriseSearch.PASSING_POINT = 'Passing';
|
|
885
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJsLWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVd6RCxPQUFPLEVBR0wsUUFBUSxFQU1SLFdBQVcsRUFDWCxjQUFjLEVBSWYsTUFBTSx3QkFBd0IsQ0FBQztBQWtCaEMsT0FBTyxFQUFhLElBQUksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUcxRCxNQUFNLENBQU4sSUFBWSxZQUlYO0FBSkQsV0FBWSxZQUFZO0lBQ3RCLG1DQUFtQixDQUFBO0lBQ25CLG1DQUFtQixDQUFBO0lBQ25CLGlDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxZQUFZLEtBQVosWUFBWSxRQUl2QjtBQVdELE1BQU0sQ0FBTixJQUFZLFNBTVg7QUFORCxXQUFZLFNBQVM7SUFDbkIsMEJBQWEsQ0FBQTtJQUNiLDBCQUFhLENBQUE7SUFDYixxQ0FBcUM7SUFDckMsdUNBQTBCLENBQUE7SUFDMUIsc0NBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQU5XLFNBQVMsS0FBVCxTQUFTLFFBTXBCO0FBRUQsTUFBTSxPQUFPLG1CQUlYLFNBQVEsb0JBSVA7SUFrY0QsWUFDVSxVQUFrQyxFQUNsQyx1QkFBMkQsRUFDbkUsT0FBMkIsRUFDbkIsYUFBK0MsRUFDdkQsY0FBa0MsRUFDMUIsYUFBK0M7UUFFdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMs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L2pDZSwwQ0FBc0IsR0FBRyxZQUFZLENBQUM7QUFDdEMsMkNBQXVCLEdBQUcsYUFBYSxDQUFDO0FBQ3hDLGlDQUFhLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7XHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBJcmxRdW90ZVJlc3VsdEFycmF5LFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdFxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBCYXNrZXRJdGVtLFxyXG4gIEN1cnJlbmN5Q29kZSxcclxuICBJcmxDbGFzcyxcclxuICBJcmxKb3VybmV5T3B0aW9uLFxyXG4gIElybEpvdXJuZXlPcHRpb25zLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBJcmxUaWNrZXRPcHRpb24sXHJcbiAgU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgSXJsSm91cm5leVR5cGUsXHJcbiAgSXJsU3VwcGxpZXIsXHJcbiAgSXJsVHJhdmVsQ2FyZCxcclxuICBJcmxTZWdtZW50XHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybERpc2NvdW50Q2FyZEZldGNoZXIsXHJcbiAgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9pcmwtZGlzY291bnQtY2FyZC1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlSXJsUXVvdGVGZXRjaGVyLFxyXG4gIElybFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9pcmwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgSVJMRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcclxuICBJcmxUZW1wUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JaXJsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyLCBhZ2VzIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBTb3J0TWV0aG9kIH0gZnJvbSAnLi9ldXJvc3Rhci1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IElJcmxTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pcmwtc2VhcmNoLWFyZy5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGVudW0gU29ydFR5cGVzSXJsIHtcclxuICBDaGVhcGVzdEZpcnN0ID0gJ0MnLFxyXG4gIEVhcmxpZXN0Rmlyc3QgPSAnRScsXHJcbiAgTGF0ZXN0Rmlyc3QgPSAnTCdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTb3J0VHlwZUlybCB7XHJcbiAgLyoqIFRpdGxlIGRpc3BsYXllZCBvbiBkcm9wZG93biAqL1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgLyoqIE1ldGhvZCBuYW1lIHVzZWQgYnkgY29tcG9uZW50IHRvIHNvcnQgcmVzdWx0cyAqL1xyXG4gIG1ldGhvZFJlZjogU29ydE1ldGhvZDtcclxuICAvKiogSWNvbiBkaXNwbGF5ZWQgb24gZHJvcCBkb3duICovXHJcbiAgaWNvbjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBDbGFzc1R5cGUge1xyXG4gIENsYXNzXzEgPSAnMScsXHJcbiAgQ2xhc3NfMiA9ICcyJyxcclxuICAvLyAhIHRoZXNlIDIgc2hvcHVsZCBiZSByZW1vdmVkIGxhdGVyXHJcbiAgU2Vjb25kX0NsYXNzID0gJzJuZCBDbGFzcycsXHJcbiAgRmlyc3RfQ2xhc3MgPSAnMXN0IENsYXNzJ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSVJMRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIFEgZXh0ZW5kcyBJcmxRdW90ZUZldGNoZXJUeXBlLFxyXG4gICAgR0lERl9RIGV4dGVuZHMgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGVcclxuICA+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIElybFRlbXBQYXJhbXMsXHJcbiAgICBJcmxRdW90ZVJlc3VsdEFycmF5LFxyXG4gICAgSXJsUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9pcmwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdpcmxfcmVzdWx0cyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFBBU1NJTkdfUE9JTlQgPSAnUGFzc2luZyc7XHJcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogU29ydFR5cGVJcmxbXSA9IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdQcmljZScsXHJcbiAgICAgIG1ldGhvZFJlZjogU29ydE1ldGhvZC5zb3J0QnlQcmljZSxcclxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1RpbWUnLFxyXG4gICAgICBtZXRob2RSZWY6IFNvcnRNZXRob2Quc29ydEJ5RGF0ZSxcclxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcidcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgc2VhcmNoVHlwZXMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdSZXR1cm4nLCB2YWx1ZTogSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5IH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgY2xhc3NUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBJcmxDbGFzcy5BbGwgfSxcclxuICAgIHsgZGlzcGxheTogJ1N0YW5kYXJkJywgdmFsdWU6IElybENsYXNzLlN0YW5kYXJkIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGaXJzdCcsIHZhbHVlOiBJcmxDbGFzcy5GaXJzdCB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFnZVJhbmdlczoge1xyXG4gICAga2V5OiBhZ2VzO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICB9W10gPSBbXHJcbiAgICB7IGtleTogYWdlcy5DaGlsZCwgdmFsdWU6ICdDaGlsZCAoMC0zKScgfSxcclxuICAgIHsga2V5OiBhZ2VzLkNoaWxkLCB2YWx1ZTogJ0NoaWxkICg0LTUpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuQ2hpbGQsIHZhbHVlOiAnQ2hpbGQgKDYtMTEpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuWW91dGgsIHZhbHVlOiAnWW91dGggKDEyLTE0KScgfSxcclxuICAgIHsga2V5OiBhZ2VzLllvdXRoLCB2YWx1ZTogJ1lvdXRoICgxNS0yNSknIH0sXHJcbiAgICB7IGtleTogYWdlcy5BZHVsdCwgdmFsdWU6ICdBZHVsdCAoMjYtNTkpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuWW91dGgsIHZhbHVlOiAnU2VuaW9yICg2MCspJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHRyYXZlbENhcmRzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnWW91bmcgcGVyc29ucyByYWlsY2FyZCcsIHZhbHVlOiAnWU5HJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRGlzYWJpbGl0eSByYWlsY2FyZCcsIHZhbHVlOiAnRElTJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmFtaWx5IHJhaWxjYXJkJywgdmFsdWU6ICdGQU0nIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGb3JjZXMgcmFpbGNhcmQnLCB2YWx1ZTogJ0hNRicgfSxcclxuICAgIHsgZGlzcGxheTogJ1RyYXZlbCBhZ2VuY3kgZGlzY291bnQnLCB2YWx1ZTogJ1RBRCcgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsO1xyXG4gIHB1YmxpYyBtaW5PdXRib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHVibGljIG1pbkluYm91bmREYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5W107XHJcbiAgcHJpdmF0ZSBfY2FuQ29tYmluZTogYW55O1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdGcm9tOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdHJhdmVsbGluZ1RvOiBzdHJpbmc7XHJcbiAgcHJvdGVjdGVkIF9vcmlnaW5hbFVzZXJTZWFyY2g6IElybFRlbXBQYXJhbXM7XHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRKb3VybmV5T3B0aW9uczogSXJsSm91cm5leU9wdGlvbjtcclxuICBwcml2YXRlIF9pc0ZpbHRlcmVkOiBib29sZWFuO1xyXG4gIGdldCBvdXRib3VuZEpvdXJuZXlPcHRpb25zKCk6IElybEpvdXJuZXlPcHRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kSm91cm5leU9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRKb3VybmV5T3B0aW9ucyhkYXRhOiBJcmxKb3VybmV5T3B0aW9uKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZEpvdXJuZXlPcHRpb25zID0gZGF0YTtcclxuICB9XHJcbiAgX291dGJvdW5kVGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQ7XHJcbiAgZ2V0IG91dGJvdW5kVGlja2V0KCk6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRUaWNrZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRUaWNrZXQoZGF0YTogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZFRpY2tldCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgbm9PZkFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XHJcbiAgfVxyXG5cclxuICBzZXQgbm9PZkFkdWx0cyhhZHVsdHM6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IGFkdWx0cztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBub09mQ2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBzZXQgbm9PZkNoaWxkcmVuKGNoaWxkcmVuOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYXZlbGxpbmdUbygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsTG9jYXRpb25JZDtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nVG8odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFycml2YWxMb2NhdGlvbklkID0gdHQ7XHJcblxyXG4gICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ0Zyb20oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0dXJlTG9jYXRpb25JZDtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nRnJvbSh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0dXJlTG9jYXRpb25JZCA9IHR0O1xyXG4gICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSAnJztcclxuICAgIGlmICh0dD8ucmFpbHN0YXRpb24/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gdHQucmFpbHN0YXRpb24uaWQ7XHJcbiAgICAgIHRoaXMuc3VwcGxpZXIgPSB0dC5yYWlsc3RhdGlvbi5zdXBwbGllcjtcclxuICAgICAgdGhpcy5nZXRJcmxEaXNjb3VudENhcmRzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pcmxEaXNjb3VudENhcmRzQXJyYXkgPSBkYXRhO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdXBwbGllcjogSXJsU3VwcGxpZXIgPSBudWxsO1xyXG4gIGdldCBzdXBwbGllcigpOiBJcmxTdXBwbGllciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3VwcGxpZXI7XHJcbiAgfVxyXG4gIHNldCBzdXBwbGllcihkYXRhOiBJcmxTdXBwbGllcikge1xyXG4gICAgdGhpcy5fc3VwcGxpZXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY291bnRyeUNvZGU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGNvdW50cnlDb2RlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY291bnRyeUNvZGU7XHJcbiAgfVxyXG4gIHNldCBjb3VudHJ5Q29kZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvdW50cnlDb2RlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsYXNzOiBJcmxDbGFzcyA9IElybENsYXNzLkFsbDtcclxuICBnZXQgY2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsYXNzO1xyXG4gIH1cclxuICBzZXQgY2xhc3MoZGF0YTogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMuX2NsYXNzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSBudWxsO1xyXG4gIGdldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzA3MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVwYXJ0dXJlTG9jYXRpb25JZDogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgZGVwYXJ0dXJlTG9jYXRpb25JZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlcGFydHVyZUxvY2F0aW9uSWQ7XHJcbiAgfVxyXG4gIHNldCBkZXBhcnR1cmVMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZGVwYXJ0dXJlTG9jYXRpb25JZCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcnJpdmFsTG9jYXRpb25JZDogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgYXJyaXZhbExvY2F0aW9uSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hcnJpdmFsTG9jYXRpb25JZDtcclxuICB9XHJcbiAgc2V0IGFycml2YWxMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fYXJyaXZhbExvY2F0aW9uSWQgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWR1bHRzOiBudW1iZXIgPSAwO1xyXG4gIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9hZHVsdHM7XHJcbiAgfVxyXG4gIHNldCBhZHVsdHMoZGF0YTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9hZHVsdHMgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hpbGRyZW46IG51bWJlciA9IDA7XHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XHJcbiAgfVxyXG4gIHNldCBjaGlsZHJlbihkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NoaWxkcmVuID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWFwZXN0U3RhbmRhcmQ6IElybFRpY2tldE9wdGlvbiA9IG51bGw7XHJcbiAgZ2V0IGNoZWFwZXN0U3RhbmRhcmQoKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVhcGVzdFN0YW5kYXJkO1xyXG4gIH1cclxuICBwcml2YXRlIF9jaGVhcGVzdEZpcnN0OiBJcmxUaWNrZXRPcHRpb24gPSBudWxsO1xyXG4gIGdldCBjaGVhcGVzdEZpcnN0KCk6IElybFRpY2tldE9wdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hlYXBlc3RGaXJzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybkRlcGFydHVyZURhdGVUaW1lOiBtb21lbnQuTW9tZW50ID0gbnVsbDtcclxuICBnZXQgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCByZXR1cm5EZXBhcnR1cmVEYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX3JldHVybkRlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICAgIHRoaXMuX3JldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fcmV0dXJuX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMTYwMCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWdlUmFuZ2U6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGFnZVJhbmdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWdlUmFuZ2U7XHJcbiAgfVxyXG4gIHNldCBhZ2VSYW5nZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2FnZVJhbmdlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByaWNlRGlyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IHByaWNlRGlyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByaWNlRGlyO1xyXG4gIH1cclxuICBzZXQgcHJpY2VEaXIoZGF0YTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcHJpY2VEaXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGF0ZURpcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBkYXRlRGlyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVEaXI7XHJcbiAgfVxyXG4gIHNldCBkYXRlRGlyKGRhdGE6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2RhdGVEaXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaENsYXNzKCk6IElybENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoQ2xhc3MoY2xhc3NSOiBJcmxDbGFzcykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNsYXNzID0gY2xhc3NSO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc2NvdW50Q2FyZCgpOiBJcmxUcmF2ZWxDYXJkIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaXJsRGlzY291bnRDYXJkcztcclxuICB9XHJcblxyXG4gIHNldCBkaXNjb3VudENhcmQoZGF0YTogSXJsVHJhdmVsQ2FyZCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmlybERpc2NvdW50Q2FyZHMgPSBkYXRhO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXJsRGlzY291bnRDYXJkc0FycmF5OiBJcmxUcmF2ZWxDYXJkW10gPSBbXTtcclxuICBnZXQgaXJsRGlzY291bnRDYXJkc0FycmF5KCk6IElybFRyYXZlbENhcmRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXJsRGlzY291bnRDYXJkc0FycmF5O1xyXG4gIH1cclxuXHJcbiAgc2V0IGlybERpc2NvdW50Q2FyZHNBcnJheShhcnJheTogSXJsVHJhdmVsQ2FyZFtdKSB7XHJcbiAgICB0aGlzLl9pcmxEaXNjb3VudENhcmRzQXJyYXkgPSBhcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBvdXRCb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dEJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKTtcclxuXHJcbiAgICB0aGlzLm1pbkluYm91bmREYXRlID0ge1xyXG4gICAgICB5ZWFyOiBuZXdEYXRlVGltZS55ZWFyKCksXHJcbiAgICAgIG1vbnRoOiBuZXdEYXRlVGltZS5tb250aCgpICsgMSxcclxuICAgICAgZGF5OiBuZXdEYXRlVGltZS5kYXRlKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcwNzAwJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuaXNBZnRlcih0aGlzLmluQm91bmREYXRlVGltZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRoaXMub3V0Qm91bmREYXRlVGltZS5jbG9uZSgpLmFkZCgxLCAnZGF5Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluQm91bmREYXRlVGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5Cb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9yZXR1cm5fdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcxNjAwJztcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBvdXRib3VuZF9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgb3V0Ym91bmRfdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCByZXR1cm5fZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgcmV0dXJuX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCk6IFZhbHVlRGlzcGxheVtdIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg0OClcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb2ZmbGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBvZmZsaW5lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX29mZmxpbmU7XHJcbiAgfVxyXG5cclxuICBzZXQgb2ZmbGluZShkYXRhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9vZmZsaW5lID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lybENsYXNzOiBJcmxDbGFzcyA9IElybENsYXNzLkFsbDtcclxuICBnZXQgaXJsQ2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lybENsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGlybENsYXNzKGRhdGE6IElybENsYXNzKSB7XHJcbiAgICB0aGlzLl9pcmxDbGFzcyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9qb3VybmV5dHlwZTogSXJsSm91cm5leVR5cGUgPSBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5O1xyXG4gIGdldCBqb3VybmV5VHlwZSgpOiBJcmxKb3VybmV5VHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fam91cm5leXR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgam91cm5leVR5cGUoZGF0YTogSXJsSm91cm5leVR5cGUpIHtcclxuICAgIHRoaXMuX2pvdXJuZXl0eXBlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBzb3J0RHJvcGRvd25WYWx1ZXMoKTogU29ydFR5cGVJcmxbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydEFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhaW5OdW1iZXI6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHRyYWluTnVtYmVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhaW5OdW1iZXI7XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhaW5OdW1iZXIoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90cmFpbk51bWJlciA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBhZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWRkaXRpb25hbEluc3RydWN0aW9ucztcclxuICB9XHJcbiAgc2V0IGFkZGl0aW9uYWxJbnN0cnVjdGlvbnMoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBJcmxmZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFE+LFxyXG4gICAgcHJpdmF0ZSBpcmxEaXNjb3VudENhcmRzRmV0Y2hlcjogQmFzZUlybERpc2NvdW50Q2FyZEZldGNoZXI8R0lERl9RPixcclxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMpO1xyXG5cclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgcXVlcnk6IHt9O1xyXG4gICAgICB0ZW1wUGFyYW1zOiBJcmxUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IElybFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHF1ZXJ5OiB7fSxcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgSXJsVGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBJcmxUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgaWYgKHRoaXMudHJhdmVsbGVyc1swXSAmJiAhdGhpcy50cmF2ZWxsZXJzWzBdLmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy50cmF2ZWxsZXJzWzBdLmFnZVR5cGUgPSBhZ2VzLkFkdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICBjb25zdCByZXN1bHRzID1cclxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8SXJsUXVvdGVSZXN1bHRBcnJheT4oXHJcbiAgICAgICAgdGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWVcclxuICAgICAgKSB8fCBbXTtcclxuICAgIC8vIGlmIChyZXN1bHRzID09IG51bGwgJiYgdGhpcy5pc1ZhbGlkKSB7XHJcbiAgICAvLyAgIHNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzIHx8IFtdKTtcclxuICB9XHJcbiAgaXJsRGlzY291bnRDYXJkczogSXJsVHJhdmVsQ2FyZDtcclxuXHJcbiAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzKHJlc3VsdHM6IElybFF1b3RlUmVzdWx0QXJyYXkpIHtcclxuICAgIHJlc3VsdHNbMF0/Lm91dGJvdW5kLmZvckVhY2goKGl0ZW06IElybEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAgICAgaXRlbS5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucy5tYXAoXHJcbiAgICAgICAgKHRpY2tldDogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICB0aWNrZXQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRpY2tldC5TaG93RGV0YWlsID0gZmFsc2U7XHJcbiAgICAgICAgICB0aWNrZXQudWlkID0gYCR7dGlja2V0LmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyfV8ke2luZGV4ICsgMX1gO1xyXG4gICAgICAgICAgcmV0dXJuIHRpY2tldDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5mcmVlemUocmVzdWx0cyk7XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeSgpKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgY29uc3Qgbm93ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl90cmF2ZWxsaW5nRnJvbSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBGcm9tIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ1RvKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBFbnRlciBhIFRvIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZVRpbWU/LmlzQmVmb3JlKG5vdykpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnRGVwYXJ0dXJlIERhdGUvVGltZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5XHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgLy8gY2hlY2sgZm9yIHJldHVybiBzcGVjaWZpYyB2YWxpZGF0aW9ucyBpbiBoZXJlXHJcblxyXG4gICAgLy8gICBpZiAodGhpcy5pbkJvdW5kRGF0ZVRpbWU/LmlzU2FtZU9yQmVmb3JlKHRoaXMub3V0Qm91bmREYXRlVGltZSkpIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgLy8gICAgICAgJ1JldHVybiBEYXRlL1RpbWUgbXVzdCBiZSBhZnRlciBEZXBhcnR1cmUgRGF0ZS9UaW1lJ1xyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy52aWEpIHtcclxuICAgIC8vICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb24pIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgZW50ZXIgYSB2aWEgbG9jYXRpb24uJyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA8IDEpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAxIHRyYXZlbGxlcicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gT2JqZWN0LmZyZWV6ZSh7IC4uLnRoaXMudGVtcFBhcmFtcyB9KTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5JcmxmZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShtYXAoKHJlc3VsdCkgPT4gcmVzdWx0KSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXNcclxuICApOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xyXG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnk6IElJcmxTZWFyY2hBcmdzID0gdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbCxcclxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMub3V0Qm91bmREYXRlVGltZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShxdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMpOiBJSXJsU2VhcmNoQXJnc3tcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJSXJsU2VhcmNoQXJncyAgPSBxdWVyeTtcclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdGcm9tKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LnRyYXZlbGxpbmdGcm9tID0gdGhpcy50cmF2ZWxsaW5nRnJvbTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50cmF2ZWxsaW5nVG8pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ1RvID0gdGhpcy50cmF2ZWxsaW5nVG87XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMuam91cm5leVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZTtcclxuICAgIHRoaXMuaXJsQ2xhc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jbGFzcztcclxuICAgIHRoaXMudHJhdmVsbGluZ1RvID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhdmVsbGluZ1RvO1xyXG4gICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRyYXZlbGxpbmdGcm9tO1xyXG5cclxuICAgIC8vIGdldCBvdXRCb3VuZERhdGVUaW1lLCBpbkJvdW5kRGF0ZVRpbWVcclxuICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSA9IG1vbWVudChcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgKTtcclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZSA9PT0gSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSkge1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IG1vbWVudChcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX291dGJvdW5kX2RhdGUgJiYgdGhpcy5fb3V0Ym91bmRfdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUsXHJcbiAgICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmV0dXJuX2RhdGUgJiYgdGhpcy5fcmV0dXJuX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9yZXR1cm5fZGF0ZSxcclxuICAgICAgICB0aGlzLl9yZXR1cm5fdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzIHtcclxuICAgIC8vIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICB0aGlzLm5vT2ZBZHVsdHMgPSB0aGlzLnRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+XHJcbiAgICAgICAgdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuQWR1bHQgfHxcclxuICAgICAgICB0cmF2ZWxsZXIuYWdlVHlwZSA9PT0gYWdlcy5Zb3V0aCB8fFxyXG4gICAgICAgIHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLlNlbmlvclxyXG4gICAgKS5sZW5ndGg7XHJcbiAgICB0aGlzLm5vT2ZDaGlsZHJlbiA9IHRoaXMudHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4gdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuQ2hpbGRcclxuICAgICkubGVuZ3RoO1xyXG4gICAgaWYgKCF0aGlzLnN1cHBsaWVyICYmIHRoaXMudHJhdmVsbGluZ0Zyb20ubmFtZSkge1xyXG4gICAgICB0aGlzLnN1cHBsaWVyID0gdGhpcy50cmF2ZWxsaW5nRnJvbS5yYWlsc3RhdGlvbi5zdXBwbGllcjtcclxuICAgICAgdGhpcy5nZXRJcmxEaXNjb3VudENhcmRzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pcmxEaXNjb3VudENhcmRzQXJyYXkgPSBkYXRhO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyA9IHtcclxuICAgICAgc3VwcGxpZXI6IHRoaXMuc3VwcGxpZXIsIC8vIElSTFN1cHBsaWVyIVxyXG4gICAgICBjb3VudHJ5Q29kZTogJ0dCJyxcclxuICAgICAgaXJsRGlzY291bnRDYXJkczogdGhpcy5kaXNjb3VudENhcmQgPyB0aGlzLmRpc2NvdW50Q2FyZC5pZCA6IG51bGwsXHJcbiAgICAgIGNsYXNzOiB0aGlzLmlybENsYXNzLCAvLyBJUkxDbGFzc1xyXG4gICAgICBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lOiB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogdGhpcy5fdHJhdmVsbGluZ0Zyb20sXHJcbiAgICAgIGFycml2YWxMb2NhdGlvbklkOiB0aGlzLl90cmF2ZWxsaW5nVG8sXHJcbiAgICAgIGFkdWx0czogdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyxcclxuICAgICAgY2hpbGRyZW46IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbixcclxuICAgICAgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgam91cm5leVR5cGU6IHRoaXMuam91cm5leVR5cGVcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9PT0gMCkge1xyXG4gICAgICBxdWVyeS5jaGlsZHJlbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnRlbXBQYXJhbXMuam91cm5leVR5cGUpIHtcclxuICAgICAgY2FzZSBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5OlxyXG4gICAgICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoSXJsUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge31cclxuXHJcbiAgdXBkYXRlQ2FuQ29tYmluZSh0a3Q6IElybFRpY2tldE9wdGlvbik6IHZvaWQge1xyXG4gICAgKHRrdC5pZGVudGlmaWVycy5hbGxvd2VkV2l0aCB8fCBbXSkuZm9yRWFjaCgoYWxsb3dlZCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuX2NhbkNvbWJpbmVbdGt0LnR5cGVdW2FsbG93ZWQuam91cm5leUlkZW50aWZpZXJdKSB7XHJcbiAgICAgICAgdGhpcy5fY2FuQ29tYmluZVt0a3QudHlwZV1bYWxsb3dlZC5qb3VybmV5SWRlbnRpZmllcl0gPSBbXHJcbiAgICAgICAgICBhbGxvd2VkLmZhcmVJZGVudGlmaWVyXHJcbiAgICAgICAgXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXVthbGxvd2VkLmpvdXJuZXlJZGVudGlmaWVyXS5wdXNoKFxyXG4gICAgICAgICAgYWxsb3dlZC5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uKTogYW55W10ge1xyXG4gICAgbGV0IGxlZ3M6IGFueVtdID0gW107XHJcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LnNlZ21lbnRzLmxlbmd0aCkge1xyXG4gICAgICBsZWdzID0gcmFpbEpvdXJuZXlPcHRpb24uc2VnbWVudHMubWFwKChzZWdtZW50OiBJcmxTZWdtZW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9wZXJhdG9yOlxyXG4gICAgICAgICAgICBzZWdtZW50Lm9wZXJhdG9yIHx8IHJhaWxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5wcm92aWRlcklkLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHNlZ21lbnQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogc2VnbWVudC5kZXBhcnQsXHJcbiAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHNlZ21lbnQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHNlZ21lbnQuYXJyaXZlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVncztcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkSXJsVGlja2V0T3B0aW9uKFxyXG4gICAgaXJsSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvbixcclxuICAgIGlybFRpY2tldE9wdGlvbjogSXJsVGlja2V0T3B0aW9uLFxyXG4gICAgcHJvdmlkZXJJbmRleDogbnVtYmVyXHJcbiAgKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1twcm92aWRlckluZGV4XS50aWNrZXRPcHRpb25zLmZpbmQoXHJcbiAgICAgICh0aWNrZXRPcHRpb24pID0+XHJcbiAgICAgICAgdGlja2V0T3B0aW9uLnR5cGUgPT09IGlybFRpY2tldE9wdGlvbi50eXBlICYmXHJcbiAgICAgICAgKHRpY2tldE9wdGlvbi5wcmljZSA9PT0gaXJsVGlja2V0T3B0aW9uLnByaWNlIHx8XHJcbiAgICAgICAgICB0aWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIgPT09XHJcbiAgICAgICAgICAgIGlybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIGlybFF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcclxuICAgIG91dGJvdW5kOiBJcmxUaWNrZXRPcHRpb24sXHJcbiAgICBpcmxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKHNlcnZpY2VJZCxyYWlsUXVlcnksaXJsSm91cm5leU9wdGlvbilcclxuICAgIC8vICAgLy8gaWYgKGlybEpvdXJuZXlPcHRpb24udW5zZWxsYWJsZSkge1xyXG4gICAgLy8gICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgLy8gICAvLyB9XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24gPSB0aGlzLmdldFNlbGVjdGVkSXJsVGlja2V0T3B0aW9uKFxyXG4gICAgICAgIGlybEpvdXJuZXlPcHRpb24sXHJcbiAgICAgICAgb3V0Ym91bmQsXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBsZWdzID0gdGhpcy5nZXRMZWdzRnJvbUlybEpvdXJuZXlPcHRpb24oaXJsSm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKGlybEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICAvLyBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5wcm92aWRlcjtcclxuICAgICAgY29uc3QgYmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaXJsSm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpcmxKb3VybmV5T3B0aW9uLnRvLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbkNvZGU6IGlybEpvdXJuZXlPcHRpb24udG9Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogaXJsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGlybEpvdXJuZXlPcHRpb24uZnJvbSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbkNvZGU6IGlybEpvdXJuZXlPcHRpb24uZnJvbUNvZGUsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaXJsSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi50eXBlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgbGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjpcclxuICAgICAgICAgICAgaXJsSm91cm5leU9wdGlvbi5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjpcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllclxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN1cHBsaWVyOiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5wcm92aWRlcklkLFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogaXJsUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiBpcmxRdWVyeSxcclxuICAgICAgICAvLyBjbzJQZXJJdGVtOiBpcmxKb3VybmV5T3B0aW9uLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgLy8gY28yUGVyUGFzc2VuZ2VyOiBpcmxKb3VybmV5T3B0aW9uLmNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBvdXRib3VuZERhdGU6IGlybEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVyc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRSZXR1cm5Kb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIGlybFF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcclxuICAgIGluYm91bmQ6IElybFRpY2tldE9wdGlvbixcclxuICAgIGluSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvblxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3Qgb3V0Ym91bmQgPSB0aGlzLm91dGJvdW5kVGlja2V0O1xyXG4gICAgY29uc3Qgb3V0Sm91cm5leU9wdGlvbiA9IHRoaXMub3V0Ym91bmRKb3VybmV5T3B0aW9ucztcclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZElybFRpY2tldE9wdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24oXHJcbiAgICAgICAgb3V0Sm91cm5leU9wdGlvbixcclxuICAgICAgICBvdXRib3VuZCxcclxuICAgICAgICAwXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKG91dEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKGluSm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKG91dEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtID0ge1xyXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZCxcclxuICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRKb3VybmV5T3B0aW9uLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IG91dEpvdXJuZXlPcHRpb24udG8sXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uQ29kZTogb3V0Sm91cm5leU9wdGlvbi50b0NvZGUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25Db2RlOiBvdXRKb3VybmV5T3B0aW9uLmZyb21Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogb3V0Sm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IG91dEpvdXJuZXlPcHRpb24uZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBvdXRKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24ucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBvdXRib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBpbkpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogaW5Kb3VybmV5T3B0aW9uLnRvLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbkNvZGU6IGluSm91cm5leU9wdGlvbi50b0NvZGUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25Db2RlOiBpbkpvdXJuZXlPcHRpb24uZnJvbUNvZGUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbkpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBpbkpvdXJuZXlPcHRpb24uZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBpbkpvdXJuZXlPcHRpb24ucHJvdmlkZXJzWzBdLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24udHlwZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IGluYm91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBvdXRib3VuZC5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjpcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllclxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN1cHBsaWVyOiBvdXRKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5wcm92aWRlcklkLFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogaXJsUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiBpcmxRdWVyeSxcclxuICAgICAgICBvdXRib3VuZERhdGU6IG91dEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWVcclxuICAgICAgICAvLyBjbzJQZXJJdGVtOiBvdXRib3VuZC5jbzJQZXJJdGVtLFxyXG4gICAgICAgIC8vIGNvMlBlclBhc3Nlbmdlcjogb3V0Ym91bmQuY28yUGVyUGFzc2VuZ2VyXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWQoKTtcclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25zW10pOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGN1cnJlbmN5ID1cclxuICAgICAgcmVzdWx0c1swXT8ub3V0Ym91bmRbMF0/LnByb3ZpZGVyc1swXT8uY2hlYXBlc3RUaWNrZXQ/LmN1cnJlbmN5O1xyXG4gICAgY29uc3QgcHJpY2UgPSB0aGlzLmZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFtb3VudDogcHJpY2UsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogY3VycmVuY3lcclxuICAgIH07XHJcbiAgfVxyXG4gIGZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSBudWxsO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RTdGFuZGFyZCA9IG51bGw7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGNoZWFwZXN0QXJyOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAgIHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgcmVzdWx0Lm91dGJvdW5kLm1hcCgob3V0KSA9PiB7XHJcbiAgICAgICAgb3V0LnByb3ZpZGVycy5tYXAoKHRrdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2hlYXBlc3RUaWNrZXQ6IG51bWJlciA9IHRrdC5jaGVhcGVzdFRpY2tldC5wcmljZTtcclxuICAgICAgICAgIHRrdC50aWNrZXRPcHRpb25zLm1hcCgodGt0T3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRrdFByaWNlID0gdGt0T3B0aW9uLnByaWNlO1xyXG4gICAgICAgICAgICBjb25zdCB0a3RDbGFzcyA9IHRrdE9wdGlvbi5jbGFzcztcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRrdENsYXNzID09PSAnRmlyc3QnICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuX2NoZWFwZXN0Rmlyc3Q/LnByaWNlID4gdGt0UHJpY2UgfHwgIXRoaXMuX2NoZWFwZXN0Rmlyc3QpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSB0a3RPcHRpb247XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgdGt0Q2xhc3MgPT09ICdTdGFuZGFyZCcgJiZcclxuICAgICAgICAgICAgICAodGhpcy5fY2hlYXBlc3RTdGFuZGFyZD8ucHJpY2UgPiB0a3RQcmljZSB8fFxyXG4gICAgICAgICAgICAgICAgIXRoaXMuX2NoZWFwZXN0U3RhbmRhcmQpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NoZWFwZXN0U3RhbmRhcmQgPSB0a3RPcHRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRrdFByaWNlID09PSBjaGVhcGVzdFRpY2tldCkge1xyXG4gICAgICAgICAgICAgIGNoZWFwZXN0QXJyLnB1c2goY2hlYXBlc3RUaWNrZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBNYXRoLm1pbiguLi5jaGVhcGVzdEFycik7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNvcnQgcmVzdWx0cyBieSBwcmljZVxyXG4gICAqXHJcbiAgICogQHJldHVybnNcclxuICAgKiBAbWVtYmVyb2YgaXJsLWVudGVycHJpc2Utc2VhcmNoXHJcbiAgICovXHJcbiAgc29ydEJ5UHJpY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaWNlRGlyID0gIXRoaXMucHJpY2VEaXI7XHJcbiAgICBjb25zdCByZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdID0gdGhpcy5maWx0ZXJTZWxlY3RlZCh0aGlzLl9pc0ZpbHRlcmVkKTtcclxuXHJcbiAgICBjb25zdCBieVByaWNlID0gKGE6IElybEpvdXJuZXlPcHRpb24sIGI6IElybEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJpY2VEaXJcclxuICAgICAgICA/IGEucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlIC1cclxuICAgICAgICAgICAgYi5wcm92aWRlcnNbMF0uY2hlYXBlc3RUaWNrZXQucHJpY2VcclxuICAgICAgICA6IGIucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlIC1cclxuICAgICAgICAgICAgYS5wcm92aWRlcnNbMF0uY2hlYXBlc3RUaWNrZXQucHJpY2U7XHJcbiAgICB9O1xyXG4gICAgcmVzdWx0c1swXS5vdXRib3VuZCA9IHJlc3VsdHNbMF0ub3V0Ym91bmQuc29ydChieVByaWNlKTtcclxuICAgIHJlc3VsdHNbMF0ucmV0dXJuID0gcmVzdWx0c1swXS5yZXR1cm4uc29ydChieVByaWNlKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCByZXN1bHRzIGJ5IGRlcGFydHVyZSB0aW1lXHJcbiAgICpcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBpcmwtZW50ZXJwcmlzZS1zZWFyY2hcclxuICAgKi9cclxuICBzb3J0QnlEYXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRlRGlyID0gIXRoaXMuZGF0ZURpcjtcclxuXHJcbiAgICBjb25zdCByZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdID0gdGhpcy5maWx0ZXJTZWxlY3RlZCh0aGlzLl9pc0ZpbHRlcmVkKTtcclxuICAgIGNvbnN0IGJ5RGF0ZSA9IChhOiBJcmxKb3VybmV5T3B0aW9uLCBiOiBJcmxKb3VybmV5T3B0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGVEaXJcclxuICAgICAgICA/IG1vbWVudChhLmRlcGFydERhdGVUaW1lKS51bml4KCkgLSBtb21lbnQoYi5kZXBhcnREYXRlVGltZSkudW5peCgpXHJcbiAgICAgICAgOiBtb21lbnQoYi5kZXBhcnREYXRlVGltZSkudW5peCgpIC0gbW9tZW50KGEuZGVwYXJ0RGF0ZVRpbWUpLnVuaXgoKTtcclxuICAgIH07XHJcbiAgICByZXN1bHRzWzBdLm91dGJvdW5kID0gcmVzdWx0c1swXS5vdXRib3VuZC5zb3J0KGJ5RGF0ZSk7XHJcbiAgICByZXN1bHRzWzBdLnJldHVybiA9IHJlc3VsdHNbMF0ucmV0dXJuLnNvcnQoYnlEYXRlKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgYWRkT3V0Ym91bmRBbmRGaWx0ZXIoXHJcbiAgICB0aWNrZXQ6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCxcclxuICAgIGZ1bGxUaWNrZXQ6IElybEpvdXJuZXlPcHRpb25cclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMub3V0Ym91bmRKb3VybmV5T3B0aW9ucyA9IGZ1bGxUaWNrZXQ7XHJcbiAgICB0aGlzLm91dGJvdW5kVGlja2V0ID0gdGlja2V0O1xyXG4gICAgdGhpcy5maWx0ZXJTZWxlY3RlZCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGZpbHRlclNlbGVjdGVkKGZpbHRlck91dGJvdW5kOiBib29sZWFuID0gZmFsc2UpOiBJcmxKb3VybmV5T3B0aW9uc1tdIHtcclxuICAgIGNvbnN0IHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25zW10gPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHRoaXMuZnVsbFJlc3VsdHMgYXMgSXJsSm91cm5leU9wdGlvbnNbXVxyXG4gICAgKTtcclxuICAgIGlmIChmaWx0ZXJPdXRib3VuZCkge1xyXG4gICAgICB0aGlzLl9pc0ZpbHRlcmVkID0gdHJ1ZTtcclxuICAgICAgcmVzdWx0c1swXS5vdXRib3VuZCA9IFtcclxuICAgICAgICByZXN1bHRzWzBdLm91dGJvdW5kLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGl0ZW0uZGVwYXJ0RGF0ZVRpbWUgPT09XHJcbiAgICAgICAgICAgICAgdGhpcy5fb3V0Ym91bmRKb3VybmV5T3B0aW9ucy5kZXBhcnREYXRlVGltZSAmJlxyXG4gICAgICAgICAgICBpdGVtLmFycml2ZURhdGVUaW1lID09PSB0aGlzLl9vdXRib3VuZEpvdXJuZXlPcHRpb25zLmFycml2ZURhdGVUaW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIF07XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMgPVxyXG4gICAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMucmVkdWNlKFxyXG4gICAgICAgICAgKGFjYywgdGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRpY2tldC51aWQgPT09IHRoaXMuX291dGJvdW5kVGlja2V0LnVpZCkge1xyXG4gICAgICAgICAgICAgIHRpY2tldC5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYWNjLnB1c2godGlja2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2lzRmlsdGVyZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5vdXRib3VuZEpvdXJuZXlPcHRpb25zID0gbnVsbDtcclxuICAgICAgdGhpcy5vdXRib3VuZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMubWFwKFxyXG4gICAgICAgICAgKHRpY2tldDogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICAgICAgIHRpY2tldC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aWNrZXQuU2hvd0RldGFpbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGlja2V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgaXJsIHN0YXRpb24gbG9jYXRpb25zXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2hcclxuICAgKiBAcGFyYW0gaXNMb2FkaW5nIC0gQmVoYXZpb3JTdWJqZWN0IHNvIHdlIGtub3cgc29tZXRoaW5nIGlzIGhhcHBlbmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0SXJsRGlzY291bnRDYXJkcygpOiBPYnNlcnZhYmxlPElybFRyYXZlbENhcmRbXT4ge1xyXG4gICAgY29uc3Qgc3VwcGxpZXIgPSB0aGlzLnN1cHBsaWVyO1xyXG4gICAgcmV0dXJuIHRoaXMuaXJsRGlzY291bnRDYXJkc0ZldGNoZXIuZmV0Y2hMaXN0KHtcclxuICAgICAgc3VwcGxpZXJcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybXNBbmRDb25kKGluSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvbikge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGYXJlIFJ1bGVzJyxcclxuICAgICAgICB2YWx1ZTogaW5Kb3VybmV5T3B0aW9uPy5wcm92aWRlcnNbMF0/LnRpY2tldE9wdGlvbnNbMF0/LmZhcmVSdWxlc1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+e1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJSXJsU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWwsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJsLWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxHQUFHLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBTUwsNEJBQTRCLEVBQzdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLFFBQVEsRUFNUixXQUFXLEVBQ1gsY0FBYyxFQUlmLE1BQU0sd0JBQXdCLENBQUM7QUFrQmhDLE9BQU8sRUFBYSxJQUFJLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFPMUQsTUFBTSxDQUFOLElBQVksWUFJWDtBQUpELFdBQVksWUFBWTtJQUN0QixtQ0FBbUIsQ0FBQTtJQUNuQixtQ0FBbUIsQ0FBQTtJQUNuQixpQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsWUFBWSxLQUFaLFlBQVksUUFJdkI7QUFXRCxNQUFNLENBQU4sSUFBWSxTQU1YO0FBTkQsV0FBWSxTQUFTO0lBQ25CLDBCQUFhLENBQUE7SUFDYiwwQkFBYSxDQUFBO0lBQ2IscUNBQXFDO0lBQ3JDLHVDQUEwQixDQUFBO0lBQzFCLHNDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFOVyxTQUFTLEtBQVQsU0FBUyxRQU1wQjtBQWFELE1BQU0sT0FBTyxtQkFLWCxTQUFRLG9CQUlQO0lBaWNELFlBQ1UsVUFBa0MsRUFDbEMsdUJBQTJELEVBQ25FLE9BQTJCLEVBQ25CLGFBQStDLEVBQ3ZELGNBQWtDLEVB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QUcsQ0FBQyxXQUFXLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVc7Z0JBQ2QsR0FBRyxDQUFDLFdBQVcsS0FBSyxlQUFlO29CQUNqQyxDQUFDLENBQUMsY0FBYyxDQUFDLGFBQWE7b0JBQzlCLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUMvQixDQUFDO0tBQUE7O0FBaDJDZSwwQ0FBc0IsR0FBRyxZQUFZLENBQUM7QUFDdEMsMkNBQXVCLEdBQUcsYUFBYSxDQUFDO0FBQ3hDLGlDQUFhLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVmFsdWVEaXNwbGF5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWx1ZS1kaXNwbGF5JztcclxuaW1wb3J0IHtcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIElybFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxyXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnNcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFza2V0SXRlbSxcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgSXJsQ2xhc3MsXHJcbiAgSXJsSm91cm5leU9wdGlvbixcclxuICBJcmxKb3VybmV5T3B0aW9ucyxcclxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgSXJsVGlja2V0T3B0aW9uLFxyXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIElybEpvdXJuZXlUeXBlLFxyXG4gIElybFN1cHBsaWVyLFxyXG4gIElybFRyYXZlbENhcmQsXHJcbiAgSXJsU2VnbWVudFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VJcmxEaXNjb3VudENhcmRGZXRjaGVyLFxyXG4gIElybERpc2NvdW50Q2FyZEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLWRpc2NvdW50LWNhcmQtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybFF1b3RlRmV0Y2hlcixcclxuICBJcmxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgSXJsVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgYWdlcyB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHsgU29ydE1ldGhvZCB9IGZyb20gJy4vZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJSXJsU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaXJsLXNlYXJjaC1hcmcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcixcclxuICBHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1pcmwtc3VwcGxpZXItc3RhdGlvbi5mZXRjaGVyJztcclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRUeXBlc0lybCB7XHJcbiAgQ2hlYXBlc3RGaXJzdCA9ICdDJyxcclxuICBFYXJsaWVzdEZpcnN0ID0gJ0UnLFxyXG4gIExhdGVzdEZpcnN0ID0gJ0wnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU29ydFR5cGVJcmwge1xyXG4gIC8qKiBUaXRsZSBkaXNwbGF5ZWQgb24gZHJvcGRvd24gKi9cclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIC8qKiBNZXRob2QgbmFtZSB1c2VkIGJ5IGNvbXBvbmVudCB0byBzb3J0IHJlc3VsdHMgKi9cclxuICBtZXRob2RSZWY6IFNvcnRNZXRob2Q7XHJcbiAgLyoqIEljb24gZGlzcGxheWVkIG9uIGRyb3AgZG93biAqL1xyXG4gIGljb246IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQ2xhc3NUeXBlIHtcclxuICBDbGFzc18xID0gJzEnLFxyXG4gIENsYXNzXzIgPSAnMicsXHJcbiAgLy8gISB0aGVzZSAyIHNob3B1bGQgYmUgcmVtb3ZlZCBsYXRlclxyXG4gIFNlY29uZF9DbGFzcyA9ICcybmQgQ2xhc3MnLFxyXG4gIEZpcnN0X0NsYXNzID0gJzFzdCBDbGFzcydcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJcmxGaWx0ZXJzIHtcclxuICBwcmljZU1heDogbnVtYmVyO1xyXG4gIHByaWNlTWluOiBudW1iZXI7XHJcbiAgZGF0ZUFyck1heDogbnVtYmVyO1xyXG4gIGRhdGVBcnJNaW46IG51bWJlcjtcclxuICBkYXRlRGVwTWF4OiBudW1iZXI7XHJcbiAgZGF0ZURlcE1pbjogbnVtYmVyO1xyXG4gIGNsYXNzZXM6IGFueVtdO1xyXG4gIGNoYW5nZXM6IGFueVtdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSVJMRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIFEgZXh0ZW5kcyBJcmxRdW90ZUZldGNoZXJUeXBlLFxyXG4gICAgR0lERl9RIGV4dGVuZHMgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGUsXHJcbiAgICBHSVNTRl9RIGV4dGVuZHMgR2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlclR5cGVcclxuICA+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIElybFRlbXBQYXJhbXMsXHJcbiAgICBJcmxRdW90ZVJlc3VsdEFycmF5LFxyXG4gICAgSXJsUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9pcmwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdpcmxfcmVzdWx0cyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFBBU1NJTkdfUE9JTlQgPSAnUGFzc2luZyc7XHJcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogU29ydFR5cGVJcmxbXSA9IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdQcmljZScsXHJcbiAgICAgIG1ldGhvZFJlZjogU29ydE1ldGhvZC5zb3J0QnlQcmljZSxcclxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1RpbWUnLFxyXG4gICAgICBtZXRob2RSZWY6IFNvcnRNZXRob2Quc29ydEJ5RGF0ZSxcclxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcidcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgc2VhcmNoVHlwZXMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdSZXR1cm4nLCB2YWx1ZTogSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5IH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgY2xhc3NUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBJcmxDbGFzcy5BbGwgfSxcclxuICAgIHsgZGlzcGxheTogJ1N0YW5kYXJkJywgdmFsdWU6IElybENsYXNzLlN0YW5kYXJkIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGaXJzdCcsIHZhbHVlOiBJcmxDbGFzcy5GaXJzdCB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFnZVJhbmdlczoge1xyXG4gICAga2V5OiBhZ2VzO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICB9W10gPSBbXHJcbiAgICB7IGtleTogYWdlcy5DaGlsZCwgdmFsdWU6ICdDaGlsZCAoMC0zKScgfSxcclxuICAgIHsga2V5OiBhZ2VzLkNoaWxkLCB2YWx1ZTogJ0NoaWxkICg0LTUpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuQ2hpbGQsIHZhbHVlOiAnQ2hpbGQgKDYtMTEpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuWW91dGgsIHZhbHVlOiAnWW91dGggKDEyLTE0KScgfSxcclxuICAgIHsga2V5OiBhZ2VzLllvdXRoLCB2YWx1ZTogJ1lvdXRoICgxNS0yNSknIH0sXHJcbiAgICB7IGtleTogYWdlcy5BZHVsdCwgdmFsdWU6ICdBZHVsdCAoMjYtNTkpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuWW91dGgsIHZhbHVlOiAnU2VuaW9yICg2MCspJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHRyYXZlbENhcmRzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnWW91bmcgcGVyc29ucyByYWlsY2FyZCcsIHZhbHVlOiAnWU5HJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRGlzYWJpbGl0eSByYWlsY2FyZCcsIHZhbHVlOiAnRElTJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmFtaWx5IHJhaWxjYXJkJywgdmFsdWU6ICdGQU0nIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGb3JjZXMgcmFpbGNhcmQnLCB2YWx1ZTogJ0hNRicgfSxcclxuICAgIHsgZGlzcGxheTogJ1RyYXZlbCBhZ2VuY3kgZGlzY291bnQnLCB2YWx1ZTogJ1RBRCcgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsO1xyXG4gIHB1YmxpYyBtaW5PdXRib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHVibGljIG1pbkluYm91bmREYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5W107XHJcbiAgcHJpdmF0ZSBfY2FuQ29tYmluZTogYW55O1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdGcm9tOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdHJhdmVsbGluZ1RvOiBzdHJpbmc7XHJcbiAgcHJvdGVjdGVkIF9vcmlnaW5hbFVzZXJTZWFyY2g6IElybFRlbXBQYXJhbXM7XHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRKb3VybmV5T3B0aW9uczogSXJsSm91cm5leU9wdGlvbjtcclxuICBwcml2YXRlIF9pc0ZpbHRlcmVkOiBib29sZWFuO1xyXG4gIGdldCBvdXRib3VuZEpvdXJuZXlPcHRpb25zKCk6IElybEpvdXJuZXlPcHRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kSm91cm5leU9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRKb3VybmV5T3B0aW9ucyhkYXRhOiBJcmxKb3VybmV5T3B0aW9uKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZEpvdXJuZXlPcHRpb25zID0gZGF0YTtcclxuICB9XHJcbiAgX291dGJvdW5kVGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQ7XHJcbiAgZ2V0IG91dGJvdW5kVGlja2V0KCk6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRUaWNrZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRUaWNrZXQoZGF0YTogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZFRpY2tldCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgbm9PZkFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XHJcbiAgfVxyXG5cclxuICBzZXQgbm9PZkFkdWx0cyhhZHVsdHM6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IGFkdWx0cztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBub09mQ2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBzZXQgbm9PZkNoaWxkcmVuKGNoaWxkcmVuOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYXZlbGxpbmdUbygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsTG9jYXRpb25JZDtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nVG8odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFycml2YWxMb2NhdGlvbklkID0gdHQ7XHJcblxyXG4gICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ0Zyb20oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0dXJlTG9jYXRpb25JZDtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nRnJvbSh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0dXJlTG9jYXRpb25JZCA9IHR0O1xyXG4gICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSAnJztcclxuICAgIGlmICh0dD8ucmFpbHN0YXRpb24/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gdHQucmFpbHN0YXRpb24uaWQ7XHJcbiAgICAgIHRoaXMuc3VwcGxpZXIgPSB0dC5yYWlsc3RhdGlvbi5zdXBwbGllcjtcclxuICAgICAgdGhpcy5nZXRJcmxEaXNjb3VudENhcmRzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pcmxEaXNjb3VudENhcmRzQXJyYXkgPSBkYXRhO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdXBwbGllcjogSXJsU3VwcGxpZXIgPSBudWxsO1xyXG4gIGdldCBzdXBwbGllcigpOiBJcmxTdXBwbGllciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3VwcGxpZXI7XHJcbiAgfVxyXG4gIHNldCBzdXBwbGllcihkYXRhOiBJcmxTdXBwbGllcikge1xyXG4gICAgdGhpcy5fc3VwcGxpZXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY291bnRyeUNvZGU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGNvdW50cnlDb2RlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY291bnRyeUNvZGU7XHJcbiAgfVxyXG4gIHNldCBjb3VudHJ5Q29kZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvdW50cnlDb2RlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsYXNzOiBJcmxDbGFzcyA9IElybENsYXNzLkFsbDtcclxuICBnZXQgY2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsYXNzO1xyXG4gIH1cclxuICBzZXQgY2xhc3MoZGF0YTogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMuX2NsYXNzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSBudWxsO1xyXG4gIGdldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzA3MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVwYXJ0dXJlTG9jYXRpb25JZDogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgZGVwYXJ0dXJlTG9jYXRpb25JZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlcGFydHVyZUxvY2F0aW9uSWQ7XHJcbiAgfVxyXG4gIHNldCBkZXBhcnR1cmVMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZGVwYXJ0dXJlTG9jYXRpb25JZCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcnJpdmFsTG9jYXRpb25JZDogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgYXJyaXZhbExvY2F0aW9uSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hcnJpdmFsTG9jYXRpb25JZDtcclxuICB9XHJcbiAgc2V0IGFycml2YWxMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fYXJyaXZhbExvY2F0aW9uSWQgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XHJcbiAgfVxyXG4gIHNldCBhZHVsdHMoZGF0YTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoaWxkcmVuOiBudW1iZXIgPSAwO1xyXG4gIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xyXG4gIH1cclxuICBzZXQgY2hpbGRyZW4oZGF0YTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jaGlsZHJlbiA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGVhcGVzdFN0YW5kYXJkOiBJcmxUaWNrZXRPcHRpb24gPSBudWxsO1xyXG4gIGdldCBjaGVhcGVzdFN0YW5kYXJkKCk6IElybFRpY2tldE9wdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hlYXBlc3RTdGFuZGFyZDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2hlYXBlc3RGaXJzdDogSXJsVGlja2V0T3B0aW9uID0gbnVsbDtcclxuICBnZXQgY2hlYXBlc3RGaXJzdCgpOiBJcmxUaWNrZXRPcHRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoZWFwZXN0Rmlyc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTogbW9tZW50Lk1vbWVudCA9IG51bGw7XHJcbiAgZ2V0IHJldHVybkRlcGFydHVyZURhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybkRlcGFydHVyZURhdGVUaW1lO1xyXG4gIH1cclxuICBzZXQgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX3JldHVybl90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzE2MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FnZVJhbmdlOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBhZ2VSYW5nZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FnZVJhbmdlO1xyXG4gIH1cclxuICBzZXQgYWdlUmFuZ2UoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hZ2VSYW5nZSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmljZURpcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgZ2V0IHByaWNlRGlyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByaWNlRGlyO1xyXG4gIH1cclxuICBzZXQgcHJpY2VEaXIoZGF0YTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcHJpY2VEaXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGF0ZURpcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgZ2V0IGRhdGVEaXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZURpcjtcclxuICB9XHJcbiAgc2V0IGRhdGVEaXIoZGF0YTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGF0ZURpciA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuU2VhcmNoQ2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hDbGFzcyhjbGFzc1I6IElybENsYXNzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2xhc3MgPSBjbGFzc1I7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzY291bnRDYXJkKCk6IElybFRyYXZlbENhcmQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pcmxEaXNjb3VudENhcmRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRpc2NvdW50Q2FyZChkYXRhOiBJcmxUcmF2ZWxDYXJkKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaXJsRGlzY291bnRDYXJkcyA9IGRhdGE7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pcmxEaXNjb3VudENhcmRzQXJyYXk6IElybFRyYXZlbENhcmRbXSA9IFtdO1xyXG4gIGdldCBpcmxEaXNjb3VudENhcmRzQXJyYXkoKTogSXJsVHJhdmVsQ2FyZFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9pcmxEaXNjb3VudENhcmRzQXJyYXk7XHJcbiAgfVxyXG5cclxuICBzZXQgaXJsRGlzY291bnRDYXJkc0FycmF5KGFycmF5OiBJcmxUcmF2ZWxDYXJkW10pIHtcclxuICAgIHRoaXMuX2lybERpc2NvdW50Q2FyZHNBcnJheSA9IGFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dEJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Qm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpO1xyXG5cclxuICAgIHRoaXMubWluSW5ib3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IG5ld0RhdGVUaW1lLnllYXIoKSxcclxuICAgICAgbW9udGg6IG5ld0RhdGVUaW1lLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IG5ld0RhdGVUaW1lLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzA3MDAnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lICYmXHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lICYmXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZS5pc0FmdGVyKHRoaXMuaW5Cb3VuZERhdGVUaW1lKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5vdXRCb3VuZERhdGVUaW1lLmNsb25lKCkuYWRkKDEsICdkYXknKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5Cb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBpbkJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX3JldHVybl90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzE2MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcclxuICBwcml2YXRlIF9vdXRib3VuZF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IG91dGJvdW5kX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZF9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vdXRib3VuZF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBvdXRib3VuZF90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfdGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZF90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dGJvdW5kX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybl9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IHJldHVybl9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybl90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCByZXR1cm5fdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3JldHVybl90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKTogVmFsdWVEaXNwbGF5W10ge1xyXG4gICAgdGhpcy5fdGltZUFycmF5ID1cclxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XHJcbiAgICAgIEFycmF5KDQ4KVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDIpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDIpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDIpICogMzApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vZmZsaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IG9mZmxpbmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb2ZmbGluZTtcclxuICB9XHJcblxyXG4gIHNldCBvZmZsaW5lKGRhdGE6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX29mZmxpbmUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXJsQ2xhc3M6IElybENsYXNzID0gSXJsQ2xhc3MuQWxsO1xyXG4gIGdldCBpcmxDbGFzcygpOiBJcmxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy5faXJsQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgaXJsQ2xhc3MoZGF0YTogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMuX2lybENsYXNzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2pvdXJuZXl0eXBlOiBJcmxKb3VybmV5VHlwZSA9IElybEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk7XHJcbiAgZ2V0IGpvdXJuZXlUeXBlKCk6IElybEpvdXJuZXlUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLl9qb3VybmV5dHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBqb3VybmV5VHlwZShkYXRhOiBJcmxKb3VybmV5VHlwZSkge1xyXG4gICAgdGhpcy5fam91cm5leXR5cGUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBTb3J0VHlwZUlybFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90cmFpbk51bWJlcjogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgdHJhaW5OdW1iZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFpbk51bWJlcjtcclxuICB9XHJcblxyXG4gIHNldCB0cmFpbk51bWJlcihkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3RyYWluTnVtYmVyID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZGl0aW9uYWxJbnN0cnVjdGlvbnM6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGFkZGl0aW9uYWxJbnN0cnVjdGlvbnMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zO1xyXG4gIH1cclxuICBzZXQgYWRkaXRpb25hbEluc3RydWN0aW9ucyhkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2FkZGl0aW9uYWxJbnN0cnVjdGlvbnMgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIElybGZldGNoZXI6IEJhc2VJcmxRdW90ZUZldGNoZXI8UT4sXHJcbiAgICBwcml2YXRlIGlybERpc2NvdW50Q2FyZHNGZXRjaGVyOiBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcjxHSURGX1E+LFxyXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcjogQmFzZUdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXI8R0lTU0ZfUT5cclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHF1ZXJ5OiB7fTtcclxuICAgICAgdGVtcFBhcmFtczogSXJsVGVtcFBhcmFtcztcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBJcmxUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICBxdWVyeToge30sXHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIElybFRlbXBQYXJhbXMsXHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDoge30gYXMgSXJsVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgaWYgKHRoaXMudHJhdmVsbGVyc1swXSAmJiAhdGhpcy50cmF2ZWxsZXJzWzBdLmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy50cmF2ZWxsZXJzWzBdLmFnZVR5cGUgPSBhZ2VzLkFkdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICBjb25zdCByZXN1bHRzID1cclxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8SXJsUXVvdGVSZXN1bHRBcnJheT4oXHJcbiAgICAgICAgdGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWVcclxuICAgICAgKSB8fCBbXTtcclxuICAgIC8vIGlmIChyZXN1bHRzID09IG51bGwgJiYgdGhpcy5pc1ZhbGlkKSB7XHJcbiAgICAvLyAgIHNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XHJcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gcmVzdWx0cztcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMgfHwgW10pO1xyXG4gIH1cclxuICBpcmxEaXNjb3VudENhcmRzOiBJcmxUcmF2ZWxDYXJkO1xyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMocmVzdWx0czogSXJsUXVvdGVSZXN1bHRBcnJheSkge1xyXG4gICAgcmVzdWx0c1swXT8ub3V0Ym91bmQuZm9yRWFjaCgoaXRlbTogSXJsSm91cm5leU9wdGlvbikgPT4ge1xyXG4gICAgICBpdGVtLnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLm1hcChcclxuICAgICAgICAodGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHRpY2tldC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGlja2V0LlNob3dEZXRhaWwgPSBmYWxzZTtcclxuICAgICAgICAgIHRpY2tldC51aWQgPSBgJHt0aWNrZXQuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXJ9XyR7aW5kZXggKyAxfWA7XHJcbiAgICAgICAgICByZXR1cm4gdGlja2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmZyZWV6ZShyZXN1bHRzKTtcclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeSgpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KCkpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAge1xyXG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcclxuICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBjb25zdCBub3cgPSBtb21lbnQoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdGcm9tKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBFbnRlciBhIEZyb20gTG9jYXRpb24uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl90cmF2ZWxsaW5nVG8pIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIEVudGVyIGEgVG8gTG9jYXRpb24uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3V0Qm91bmREYXRlVGltZT8uaXNCZWZvcmUobm93KSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICdEZXBhcnR1cmUgRGF0ZS9UaW1lIGNhbm5vdCBiZSBpbiB0aGUgcGFzdC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPT09IElybEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXlcclxuICAgIC8vICkge1xyXG4gICAgLy8gICAvLyBjaGVjayBmb3IgcmV0dXJuIHNwZWNpZmljIHZhbGlkYXRpb25zIGluIGhlcmVcclxuXHJcbiAgICAvLyAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZT8uaXNTYW1lT3JCZWZvcmUodGhpcy5vdXRCb3VuZERhdGVUaW1lKSkge1xyXG4gICAgLy8gICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAvLyAgICAgICAnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIERlcGFydHVyZSBEYXRlL1RpbWUnXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLnZpYSkge1xyXG4gICAgLy8gICBpZiAoIXRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbikge1xyXG4gICAgLy8gICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZpYSBsb2NhdGlvbi4nKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuYWR1bHRzICsgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuIDwgMSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDEgdHJhdmVsbGVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcclxuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKHsgLi4udGhpcy50ZW1wUGFyYW1zIH0pO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcclxuICAgICAgICB0aGlzLklybGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KS5waXBlKG1hcCgocmVzdWx0KSA9PiByZXN1bHQpKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeTogSUlybFNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbCxcclxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMub3V0Qm91bmREYXRlVGltZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyk6IElJcmxTZWFyY2hBcmdzIHtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJSXJsU2VhcmNoQXJncyA9IHF1ZXJ5O1xyXG4gICAgaWYgKHRoaXMudHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ0Zyb20gPSB0aGlzLnRyYXZlbGxpbmdGcm9tO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdUbykge1xyXG4gICAgICBzZWFyY2hRdWVyeS50cmF2ZWxsaW5nVG8gPSB0aGlzLnRyYXZlbGxpbmdUbztcclxuICAgIH1cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5qb3VybmV5VHlwZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmpvdXJuZXlUeXBlO1xyXG4gICAgdGhpcy5pcmxDbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNsYXNzO1xyXG4gICAgdGhpcy50cmF2ZWxsaW5nVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmF2ZWxsaW5nVG87XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhdmVsbGluZ0Zyb207XHJcblxyXG4gICAgLy8gZ2V0IG91dEJvdW5kRGF0ZVRpbWUsIGluQm91bmREYXRlVGltZVxyXG4gICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gbW9tZW50KFxyXG4gICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lXHJcbiAgICApO1xyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmpvdXJuZXlUeXBlID09PSBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5KSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gbW9tZW50KFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fb3V0Ym91bmRfZGF0ZSAmJiB0aGlzLl9vdXRib3VuZF90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSxcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF90aW1lXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVSZXR1cm5EYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yZXR1cm5fZGF0ZSAmJiB0aGlzLl9yZXR1cm5fdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX3JldHVybl9kYXRlLFxyXG4gICAgICAgIHRoaXMuX3JldHVybl90aW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUXVlcnkoKTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMge1xyXG4gICAgLy8gdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgIGlmICghdGhpcy50cmF2ZWxsZXJzKSB7XHJcbiAgICAgIHRoaXMubm9PZkFkdWx0cyA9IHRoaXMuYWR1bHRzO1xyXG4gICAgICB0aGlzLm5vT2ZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm5vT2ZBZHVsdHMgPSB0aGlzLnRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT5cclxuICAgICAgICAgIHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLkFkdWx0IHx8XHJcbiAgICAgICAgICB0cmF2ZWxsZXIuYWdlVHlwZSA9PT0gYWdlcy5Zb3V0aCB8fFxyXG4gICAgICAgICAgdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuU2VuaW9yXHJcbiAgICAgICkubGVuZ3RoO1xyXG4gICAgICB0aGlzLm5vT2ZDaGlsZHJlbiA9IHRoaXMudHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICAgKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB0cmF2ZWxsZXIuYWdlVHlwZSA9PT0gYWdlcy5DaGlsZFxyXG4gICAgICApLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuc3VwcGxpZXIgJiYgdGhpcy50cmF2ZWxsaW5nRnJvbS5uYW1lKSB7XHJcbiAgICAgIHRoaXMuc3VwcGxpZXIgPSB0aGlzLnRyYXZlbGxpbmdGcm9tLnJhaWxzdGF0aW9uLnN1cHBsaWVyO1xyXG4gICAgICB0aGlzLmdldElybERpc2NvdW50Q2FyZHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmlybERpc2NvdW50Q2FyZHNBcnJheSA9IGRhdGE7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcXVlcnk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID0ge1xyXG4gICAgICBzdXBwbGllcjogdGhpcy5zdXBwbGllciwgLy8gSVJMU3VwcGxpZXIhXHJcbiAgICAgIGNvdW50cnlDb2RlOiAnR0InLFxyXG4gICAgICBpcmxEaXNjb3VudENhcmRzOiB0aGlzLmRpc2NvdW50Q2FyZCA/IHRoaXMuZGlzY291bnRDYXJkLmlkIDogbnVsbCxcclxuICAgICAgY2xhc3M6IHRoaXMuY2xhc3MsIC8vIElSTENsYXNzXHJcbiAgICAgIG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICBkZXBhcnR1cmVMb2NhdGlvbklkOiB0aGlzLl90cmF2ZWxsaW5nRnJvbSxcclxuICAgICAgYXJyaXZhbExvY2F0aW9uSWQ6IHRoaXMuX3RyYXZlbGxpbmdUbyxcclxuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuLFxyXG4gICAgICByZXR1cm5EZXBhcnR1cmVEYXRlVGltZTogdGhpcy50ZW1wUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICBqb3VybmV5VHlwZTogdGhpcy5qb3VybmV5VHlwZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgIHF1ZXJ5LmNoaWxkcmVuID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMudGVtcFBhcmFtcy5qb3VybmV5VHlwZSkge1xyXG4gICAgICBjYXNlIElybEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk6XHJcbiAgICAgICAgcXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VhcmNoRnJvbUV4cGlyZWRCYXNrZXRJdGVtKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaElybFF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyA9IGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XHJcbiAgICB0aGlzLmpvdXJuZXlUeXBlID0gc2VhcmNoSXJsUXVlcnkuam91cm5leVR5cGU7XHJcbiAgICB0aGlzLmlybENsYXNzID0gc2VhcmNoSXJsUXVlcnkuY2xhc3M7XHJcblxyXG4gICAgLy8gZ2V0IG91dEJvdW5kRGF0ZVRpbWUsIGluQm91bmREYXRlVGltZVxyXG4gICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gbW9tZW50KHNlYXJjaElybFF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUpO1xyXG4gICAgaWYgKHNlYXJjaElybFF1ZXJ5LmpvdXJuZXlUeXBlID09PSBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5KSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gbW9tZW50KHNlYXJjaElybFF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoSXJsUXVlcnkuZGVwYXJ0dXJlTG9jYXRpb25JZCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0UmFpbFN0YXRpb25CeUlkKHNlYXJjaElybFF1ZXJ5LmRlcGFydHVyZUxvY2F0aW9uSWQpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZGVwYXJ0dXJlU3RhdGlvbikgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IHtcclxuICAgICAgICAgICAgbmFtZTogZGVwYXJ0dXJlU3RhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICByYWlsc3RhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGlkOiBkZXBhcnR1cmVTdGF0aW9uLmlkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IGRlcGFydHVyZVN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBubGNDb2RlOiBkZXBhcnR1cmVTdGF0aW9uLm5sY0NvZGUsXHJcbiAgICAgICAgICAgICAgc3RhdGlvbkNvZGU6IGRlcGFydHVyZVN0YXRpb24uc3RhdGlvbkNvZGUsXHJcbiAgICAgICAgICAgICAgdHJhaW5saW5lQ29kZTogZGVwYXJ0dXJlU3RhdGlvbi50cmFpbmxpbmVDb2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZVVuaXF1ZUNvZGU6IGRlcGFydHVyZVN0YXRpb24udHJhaW5saW5lVW5pcXVlQ29kZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hJcmxRdWVyeS5hcnJpdmFsTG9jYXRpb25JZCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0UmFpbFN0YXRpb25CeUlkKHNlYXJjaElybFF1ZXJ5LmFycml2YWxMb2NhdGlvbklkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGFycml2YWxTdGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IHtcclxuICAgICAgICAgICAgbmFtZTogYXJyaXZhbFN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgcmFpbHN0YXRpb246IHtcclxuICAgICAgICAgICAgICBpZDogYXJyaXZhbFN0YXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogYXJyaXZhbFN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBubGNDb2RlOiBhcnJpdmFsU3RhdGlvbi5ubGNDb2RlLFxyXG4gICAgICAgICAgICAgIHN0YXRpb25Db2RlOiBhcnJpdmFsU3RhdGlvbi5zdGF0aW9uQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVDb2RlOiBhcnJpdmFsU3RhdGlvbi50cmFpbmxpbmVDb2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZVVuaXF1ZUNvZGU6IGFycml2YWxTdGF0aW9uLnRyYWlubGluZVVuaXF1ZUNvZGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgVHJhdmVsbGVyc1xyXG4gICAgaWYgKGJhc2tldEl0ZW0udXNlcnMpIHtcclxuICAgICAgYmFza2V0SXRlbS51c2Vycy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuYWRkVHJhdmVsbGVyKHVzZXIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge31cclxuXHJcbiAgdXBkYXRlQ2FuQ29tYmluZSh0a3Q6IElybFRpY2tldE9wdGlvbik6IHZvaWQge1xyXG4gICAgKHRrdC5pZGVudGlmaWVycy5hbGxvd2VkV2l0aCB8fCBbXSkuZm9yRWFjaCgoYWxsb3dlZCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuX2NhbkNvbWJpbmVbdGt0LnR5cGVdW2FsbG93ZWQuam91cm5leUlkZW50aWZpZXJdKSB7XHJcbiAgICAgICAgdGhpcy5fY2FuQ29tYmluZVt0a3QudHlwZV1bYWxsb3dlZC5qb3VybmV5SWRlbnRpZmllcl0gPSBbXHJcbiAgICAgICAgICBhbGxvd2VkLmZhcmVJZGVudGlmaWVyXHJcbiAgICAgICAgXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXVthbGxvd2VkLmpvdXJuZXlJZGVudGlmaWVyXS5wdXNoKFxyXG4gICAgICAgICAgYWxsb3dlZC5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uKTogYW55W10ge1xyXG4gICAgbGV0IGxlZ3M6IGFueVtdID0gW107XHJcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LnNlZ21lbnRzLmxlbmd0aCkge1xyXG4gICAgICBsZWdzID0gcmFpbEpvdXJuZXlPcHRpb24uc2VnbWVudHMubWFwKChzZWdtZW50OiBJcmxTZWdtZW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9wZXJhdG9yOlxyXG4gICAgICAgICAgICBzZWdtZW50Lm9wZXJhdG9yIHx8IHJhaWxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5wcm92aWRlcklkLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHNlZ21lbnQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogc2VnbWVudC5kZXBhcnQsXHJcbiAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHNlZ21lbnQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHNlZ21lbnQuYXJyaXZlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVncztcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkSXJsVGlja2V0T3B0aW9uKFxyXG4gICAgaXJsSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvbixcclxuICAgIGlybFRpY2tldE9wdGlvbjogSXJsVGlja2V0T3B0aW9uLFxyXG4gICAgcHJvdmlkZXJJbmRleDogbnVtYmVyXHJcbiAgKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1twcm92aWRlckluZGV4XS50aWNrZXRPcHRpb25zLmZpbmQoXHJcbiAgICAgICh0aWNrZXRPcHRpb24pID0+XHJcbiAgICAgICAgdGlja2V0T3B0aW9uLnR5cGUgPT09IGlybFRpY2tldE9wdGlvbi50eXBlICYmXHJcbiAgICAgICAgKHRpY2tldE9wdGlvbi5wcmljZSA9PT0gaXJsVGlja2V0T3B0aW9uLnByaWNlIHx8XHJcbiAgICAgICAgICB0aWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIgPT09XHJcbiAgICAgICAgICAgIGlybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIGlybFF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcclxuICAgIG91dGJvdW5kOiBJcmxUaWNrZXRPcHRpb24sXHJcbiAgICBpcmxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uXHJcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKHNlcnZpY2VJZCxyYWlsUXVlcnksaXJsSm91cm5leU9wdGlvbilcclxuICAgIC8vICAgLy8gaWYgKGlybEpvdXJuZXlPcHRpb24udW5zZWxsYWJsZSkge1xyXG4gICAgLy8gICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgLy8gICAvLyB9XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24gPSB0aGlzLmdldFNlbGVjdGVkSXJsVGlja2V0T3B0aW9uKFxyXG4gICAgICAgIGlybEpvdXJuZXlPcHRpb24sXHJcbiAgICAgICAgb3V0Ym91bmQsXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBsZWdzID0gdGhpcy5nZXRMZWdzRnJvbUlybEpvdXJuZXlPcHRpb24oaXJsSm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKGlybEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICAvLyBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5wcm92aWRlcjtcclxuICAgICAgY29uc3QgYmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaXJsSm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpcmxKb3VybmV5T3B0aW9uLnRvLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbkNvZGU6IGlybEpvdXJuZXlPcHRpb24udG9Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogaXJsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGlybEpvdXJuZXlPcHRpb24uZnJvbSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbkNvZGU6IGlybEpvdXJuZXlPcHRpb24uZnJvbUNvZGUsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaXJsSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi50eXBlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgbGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjpcclxuICAgICAgICAgICAgaXJsSm91cm5leU9wdGlvbi5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjpcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllclxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN1cHBsaWVyOiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5wcm92aWRlcklkLFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogaXJsUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiBpcmxRdWVyeSxcclxuICAgICAgICAvLyBjbzJQZXJJdGVtOiBpcmxKb3VybmV5T3B0aW9uLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgLy8gY28yUGVyUGFzc2VuZ2VyOiBpcmxKb3VybmV5T3B0aW9uLmNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBvdXRib3VuZERhdGU6IGlybEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIGZhbHNlIC8vIFRPRE9cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBpcmxRdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXHJcbiAgICBpbmJvdW5kOiBJcmxUaWNrZXRPcHRpb24sXHJcbiAgICBpbkpvdXJuZXlPcHRpb246IElybEpvdXJuZXlPcHRpb24sXHJcbiAgICBvdXRib3VuZFRpY2tldD86IElybFRpY2tldE9wdGlvbixcclxuICAgIG91dGJvdW5kSm91cm5leT86IElybEpvdXJuZXlPcHRpb25cclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGNvbnN0IG91dGJvdW5kID0gb3V0Ym91bmRUaWNrZXQgPyBvdXRib3VuZFRpY2tldCA6IHRoaXMub3V0Ym91bmRUaWNrZXQ7XHJcbiAgICBjb25zdCBvdXRKb3VybmV5T3B0aW9uID0gb3V0Ym91bmRKb3VybmV5XHJcbiAgICAgID8gb3V0Ym91bmRKb3VybmV5XHJcbiAgICAgIDogdGhpcy5vdXRib3VuZEpvdXJuZXlPcHRpb25zO1xyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uID0gdGhpcy5nZXRTZWxlY3RlZElybFRpY2tldE9wdGlvbihcclxuICAgICAgICBvdXRKb3VybmV5T3B0aW9uLFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbUlybEpvdXJuZXlPcHRpb24ob3V0Sm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IGluYm91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbUlybEpvdXJuZXlPcHRpb24oaW5Kb3VybmV5T3B0aW9uKTtcclxuICAgICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQob3V0Sm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW0gPSB7XHJcbiAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgc2VydmljZTogc2VydmljZUlkLFxyXG4gICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IG91dEpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogb3V0Sm91cm5leU9wdGlvbi50byxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25Db2RlOiBvdXRKb3VybmV5T3B0aW9uLnRvQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbkNvZGU6IG91dEpvdXJuZXlPcHRpb24uZnJvbUNvZGUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBvdXRKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Sm91cm5leU9wdGlvbi5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IG91dEpvdXJuZXlPcHRpb24ucHJvdmlkZXJzWzBdLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24udHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IG91dGJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGlud2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGluSm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpbkpvdXJuZXlPcHRpb24udG8sXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uQ29kZTogaW5Kb3VybmV5T3B0aW9uLnRvQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbkNvZGU6IGluSm91cm5leU9wdGlvbi5mcm9tQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IGluSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGluSm91cm5leU9wdGlvbi5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGluSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBpbmJvdW5kLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBpbmJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogb3V0Ym91bmQuaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzdXBwbGllcjogb3V0Sm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ucHJvdmlkZXJJZCxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IGlybFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogTnVtYmVyKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBOdW1iZXIoc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24ucHJpY2UpICsgTnVtYmVyKGluYm91bmQucHJpY2UpXHJcbiAgICAgICAgICApLnRvRml4ZWQoMilcclxuICAgICAgICApLFxyXG4gICAgICAgIGN1cnJlbmN5OiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgc2VhcmNoUXVlcnk6IGlybFF1ZXJ5LFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Sm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZVxyXG4gICAgICAgIC8vIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgLy8gY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXJcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZCgpO1xyXG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBmYWxzZSAvLyBUT0RPXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogSXJsSm91cm5leU9wdGlvbnNbXSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgY3VycmVuY3kgPVxyXG4gICAgICByZXN1bHRzWzBdPy5vdXRib3VuZFswXT8ucHJvdmlkZXJzWzBdPy5jaGVhcGVzdFRpY2tldD8uY3VycmVuY3k7XHJcbiAgICBjb25zdCBwcmljZSA9IHRoaXMuZmluZENoZWFwZXN0VGlja2V0KHJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYW1vdW50OiBwcmljZSxcclxuICAgICAgY3VycmVuY3lDb2RlOiBjdXJyZW5jeVxyXG4gICAgfTtcclxuICB9XHJcbiAgZmluZENoZWFwZXN0VGlja2V0KHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25zW10pOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY2hlYXBlc3RGaXJzdCA9IG51bGw7XHJcbiAgICB0aGlzLl9jaGVhcGVzdFN0YW5kYXJkID0gbnVsbDtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgY2hlYXBlc3RBcnI6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICByZXN1bHQub3V0Ym91bmQubWFwKChvdXQpID0+IHtcclxuICAgICAgICBvdXQucHJvdmlkZXJzLm1hcCgodGt0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjaGVhcGVzdFRpY2tldDogbnVtYmVyID0gdGt0LmNoZWFwZXN0VGlja2V0LnByaWNlO1xyXG4gICAgICAgICAgdGt0LnRpY2tldE9wdGlvbnMubWFwKCh0a3RPcHRpb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGt0UHJpY2UgPSB0a3RPcHRpb24ucHJpY2U7XHJcbiAgICAgICAgICAgIGNvbnN0IHRrdENsYXNzID0gdGt0T3B0aW9uLmNsYXNzO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgdGt0Q2xhc3MgPT09ICdGaXJzdCcgJiZcclxuICAgICAgICAgICAgICAodGhpcy5fY2hlYXBlc3RGaXJzdD8ucHJpY2UgPiB0a3RQcmljZSB8fCAhdGhpcy5fY2hlYXBlc3RGaXJzdClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2hlYXBlc3RGaXJzdCA9IHRrdE9wdGlvbjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICB0a3RDbGFzcyA9PT0gJ1N0YW5kYXJkJyAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLl9jaGVhcGVzdFN0YW5kYXJkPy5wcmljZSA+IHRrdFByaWNlIHx8XHJcbiAgICAgICAgICAgICAgICAhdGhpcy5fY2hlYXBlc3RTdGFuZGFyZClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2hlYXBlc3RTdGFuZGFyZCA9IHRrdE9wdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGt0UHJpY2UgPT09IGNoZWFwZXN0VGlja2V0KSB7XHJcbiAgICAgICAgICAgICAgY2hlYXBlc3RBcnIucHVzaChjaGVhcGVzdFRpY2tldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIE1hdGgubWluKC4uLmNoZWFwZXN0QXJyKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCByZXN1bHRzIGJ5IHByaWNlXHJcbiAgICpcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBpcmwtZW50ZXJwcmlzZS1zZWFyY2hcclxuICAgKi9cclxuICBzb3J0QnlQcmljZShpZ25vcmVEaXJlY3Rpb25DaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKCFpZ25vcmVEaXJlY3Rpb25DaGFuZ2UpIHtcclxuICAgICAgdGhpcy5wcmljZURpciA9ICF0aGlzLnByaWNlRGlyO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzdWx0czogSXJsSm91cm5leU9wdGlvbnNbXSA9IHRoaXMuZmlsdGVyU2VsZWN0ZWQodGhpcy5faXNGaWx0ZXJlZCk7XHJcblxyXG4gICAgY29uc3QgYnlQcmljZSA9IChhOiBJcmxKb3VybmV5T3B0aW9uLCBiOiBJcmxKb3VybmV5T3B0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByaWNlRGlyXHJcbiAgICAgICAgPyBhLnByb3ZpZGVyc1swXS5jaGVhcGVzdFRpY2tldC5wcmljZSAtXHJcbiAgICAgICAgICAgIGIucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlXHJcbiAgICAgICAgOiBiLnByb3ZpZGVyc1swXS5jaGVhcGVzdFRpY2tldC5wcmljZSAtXHJcbiAgICAgICAgICAgIGEucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlO1xyXG4gICAgfTtcclxuICAgIHJlc3VsdHNbMF0ub3V0Ym91bmQgPSByZXN1bHRzWzBdLm91dGJvdW5kLnNvcnQoYnlQcmljZSk7XHJcbiAgICByZXN1bHRzWzBdLnJldHVybiA9IHJlc3VsdHNbMF0ucmV0dXJuLnNvcnQoYnlQcmljZSk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnQgcmVzdWx0cyBieSBkZXBhcnR1cmUgdGltZVxyXG4gICAqXHJcbiAgICogQHJldHVybnNcclxuICAgKiBAbWVtYmVyb2YgaXJsLWVudGVycHJpc2Utc2VhcmNoXHJcbiAgICovXHJcbiAgc29ydEJ5RGF0ZShpZ25vcmVEaXJlY3Rpb246IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKCFpZ25vcmVEaXJlY3Rpb24pIHtcclxuICAgICAgdGhpcy5kYXRlRGlyID0gIXRoaXMuZGF0ZURpcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdID0gdGhpcy5maWx0ZXJTZWxlY3RlZCh0aGlzLl9pc0ZpbHRlcmVkKTtcclxuICAgIGNvbnN0IGJ5RGF0ZSA9IChhOiBJcmxKb3VybmV5T3B0aW9uLCBiOiBJcmxKb3VybmV5T3B0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGVEaXJcclxuICAgICAgICA/IG1vbWVudChhLmRlcGFydERhdGVUaW1lKS51bml4KCkgLSBtb21lbnQoYi5kZXBhcnREYXRlVGltZSkudW5peCgpXHJcbiAgICAgICAgOiBtb21lbnQoYi5kZXBhcnREYXRlVGltZSkudW5peCgpIC0gbW9tZW50KGEuZGVwYXJ0RGF0ZVRpbWUpLnVuaXgoKTtcclxuICAgIH07XHJcbiAgICByZXN1bHRzWzBdLm91dGJvdW5kID0gcmVzdWx0c1swXS5vdXRib3VuZC5zb3J0KGJ5RGF0ZSk7XHJcbiAgICByZXN1bHRzWzBdLnJldHVybiA9IHJlc3VsdHNbMF0ucmV0dXJuLnNvcnQoYnlEYXRlKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgYWRkT3V0Ym91bmRBbmRGaWx0ZXIoXHJcbiAgICB0aWNrZXQ6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCxcclxuICAgIGZ1bGxUaWNrZXQ6IElybEpvdXJuZXlPcHRpb25cclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMub3V0Ym91bmRKb3VybmV5T3B0aW9ucyA9IGZ1bGxUaWNrZXQ7XHJcbiAgICB0aGlzLm91dGJvdW5kVGlja2V0ID0gdGlja2V0O1xyXG4gICAgdGhpcy5maWx0ZXJTZWxlY3RlZCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGZpbHRlclNlbGVjdGVkKGZpbHRlck91dGJvdW5kOiBib29sZWFuID0gZmFsc2UpOiBJcmxKb3VybmV5T3B0aW9uc1tdIHtcclxuICAgIGNvbnN0IHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25zW10gPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHRoaXMuZnVsbFJlc3VsdHMgYXMgSXJsSm91cm5leU9wdGlvbnNbXVxyXG4gICAgKTtcclxuICAgIGlmIChmaWx0ZXJPdXRib3VuZCkge1xyXG4gICAgICB0aGlzLl9pc0ZpbHRlcmVkID0gdHJ1ZTtcclxuICAgICAgcmVzdWx0c1swXS5vdXRib3VuZCA9IFtcclxuICAgICAgICByZXN1bHRzWzBdLm91dGJvdW5kLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGl0ZW0uZGVwYXJ0RGF0ZVRpbWUgPT09XHJcbiAgICAgICAgICAgICAgdGhpcy5fb3V0Ym91bmRKb3VybmV5T3B0aW9ucy5kZXBhcnREYXRlVGltZSAmJlxyXG4gICAgICAgICAgICBpdGVtLmFycml2ZURhdGVUaW1lID09PSB0aGlzLl9vdXRib3VuZEpvdXJuZXlPcHRpb25zLmFycml2ZURhdGVUaW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIF07XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMgPVxyXG4gICAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMucmVkdWNlKFxyXG4gICAgICAgICAgKGFjYywgdGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRpY2tldC51aWQgPT09IHRoaXMuX291dGJvdW5kVGlja2V0LnVpZCkge1xyXG4gICAgICAgICAgICAgIHRpY2tldC5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYWNjLnB1c2godGlja2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2lzRmlsdGVyZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5vdXRib3VuZEpvdXJuZXlPcHRpb25zID0gbnVsbDtcclxuICAgICAgdGhpcy5vdXRib3VuZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMubWFwKFxyXG4gICAgICAgICAgKHRpY2tldDogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICAgICAgIHRpY2tldC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aWNrZXQuU2hvd0RldGFpbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGlja2V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgaXJsIHN0YXRpb24gbG9jYXRpb25zXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2hcclxuICAgKiBAcGFyYW0gaXNMb2FkaW5nIC0gQmVoYXZpb3JTdWJqZWN0IHNvIHdlIGtub3cgc29tZXRoaW5nIGlzIGhhcHBlbmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0SXJsRGlzY291bnRDYXJkcygpOiBPYnNlcnZhYmxlPElybFRyYXZlbENhcmRbXT4ge1xyXG4gICAgY29uc3Qgc3VwcGxpZXIgPSB0aGlzLnN1cHBsaWVyO1xyXG4gICAgcmV0dXJuIHRoaXMuaXJsRGlzY291bnRDYXJkc0ZldGNoZXIuZmV0Y2hMaXN0KHtcclxuICAgICAgc3VwcGxpZXJcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybXNBbmRDb25kKGluSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvbikge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGYXJlIFJ1bGVzJyxcclxuICAgICAgICB2YWx1ZTogaW5Kb3VybmV5T3B0aW9uPy5wcm92aWRlcnNbMF0/LnRpY2tldE9wdGlvbnNbMF0/LmZhcmVSdWxlc1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogSUlybFNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xyXG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXHJcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsLFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdlbmVyYXRlRmlsdGVycyhyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uW10pOiBJcmxGaWx0ZXJzIHtcclxuICAgIC8vIGZpcnN0IG9mIGFsbCB3ZSBuZWVkIHRvIGZpbmQgdGhlIG1pbiBwcmljZSBhbmQgdGhlIG1heCBwcmljZVxyXG5cclxuICAgIGlmICghcmVzdWx0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJpY2VNYXg6IG51bWJlciA9IG51bGw7XHJcbiAgICBsZXQgcHJpY2VNaW46IG51bWJlciA9IG51bGw7XHJcbiAgICBsZXQgZGF0ZURlcE1pbjogbnVtYmVyID0gbnVsbDtcclxuICAgIGxldCBkYXRlRGVwTWF4OiBudW1iZXIgPSBudWxsO1xyXG4gICAgbGV0IGRhdGVBcnJNaW46IG51bWJlciA9IG51bGw7XHJcbiAgICBsZXQgZGF0ZUFyck1heDogbnVtYmVyID0gbnVsbDtcclxuICAgIGxldCBjbGFzc09iamVjdDogYW55ID0ge307XHJcbiAgICBsZXQgY2hhbmdlc09iamVjdDogYW55ID0ge307XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgcmVzdWx0LnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLmZvckVhY2goKHRpY2tldCkgPT4ge1xyXG4gICAgICAgIGlmICghcHJpY2VNYXggfHwgcHJpY2VNYXggPCB0aWNrZXQucHJpY2UpIHtcclxuICAgICAgICAgIHByaWNlTWF4ID0gTWF0aC5jZWlsKHRpY2tldC5wcmljZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICghcHJpY2VNaW4gfHwgcHJpY2VNaW4gPiByZXN1bHQucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlKSB7XHJcbiAgICAgICAgcHJpY2VNaW4gPSBNYXRoLmZsb29yKHJlc3VsdC5wcm92aWRlcnNbMF0uY2hlYXBlc3RUaWNrZXQucHJpY2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIWRhdGVEZXBNaW4gfHxcclxuICAgICAgICBtb21lbnQocmVzdWx0LmRlcGFydERhdGVUaW1lKS5pc0JlZm9yZShtb21lbnQoZGF0ZURlcE1pbikpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGRhdGVEZXBNaW4gPSBOdW1iZXIobW9tZW50KHJlc3VsdC5kZXBhcnREYXRlVGltZSkuZm9ybWF0KCdISG1tJykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIWRhdGVEZXBNYXggfHxcclxuICAgICAgICBtb21lbnQocmVzdWx0LmRlcGFydERhdGVUaW1lKS5pc0FmdGVyKG1vbWVudChkYXRlRGVwTWF4KSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGF0ZURlcE1heCA9IE51bWJlcihtb21lbnQocmVzdWx0LmRlcGFydERhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhZGF0ZUFyck1pbiB8fFxyXG4gICAgICAgIG1vbWVudChyZXN1bHQuYXJyaXZlRGF0ZVRpbWUpLmlzQmVmb3JlKG1vbWVudChkYXRlQXJyTWluKSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGF0ZUFyck1pbiA9IE51bWJlcihtb21lbnQocmVzdWx0LmFycml2ZURhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhZGF0ZUFyck1heCB8fFxyXG4gICAgICAgIG1vbWVudChyZXN1bHQuYXJyaXZlRGF0ZVRpbWUpLmlzQWZ0ZXIobW9tZW50KGRhdGVBcnJNYXgpKVxyXG4gICAgICApIHtcclxuICAgICAgICBkYXRlQXJyTWF4ID0gTnVtYmVyKG1vbWVudChyZXN1bHQuYXJyaXZlRGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2hhbmdlc09iamVjdFtyZXN1bHQuc2VnbWVudHMubGVuZ3RoIC0gMV0gPSB7XHJcbiAgICAgICAga2V5OiByZXN1bHQuc2VnbWVudHMubGVuZ3RoIC0gMSxcclxuICAgICAgICB0aXRsZTogYCR7cmVzdWx0LnNlZ21lbnRzLmxlbmd0aCAtIDF9IGNoYW5nZXNgLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVzdWx0LnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLmZvckVhY2goKHRpY2tldCkgPT4ge1xyXG4gICAgICAgIGlmICh0aWNrZXQuY2xhc3MgPT09ICcxJykge1xyXG4gICAgICAgICAgY2xhc3NPYmplY3RbJ0ZpcnN0J10gPSB7XHJcbiAgICAgICAgICAgIGtleTogQ2xhc3NUeXBlLkNsYXNzXzEsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnRmlyc3QnLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aWNrZXQuY2xhc3MgPT09ICcyJykge1xyXG4gICAgICAgICAgY2xhc3NPYmplY3RbJ1NlY29uZCddID0ge1xyXG4gICAgICAgICAgICBrZXk6IENsYXNzVHlwZS5DbGFzc18yLFxyXG4gICAgICAgICAgICB0aXRsZTogJ1NlY29uZCcsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcmV0T2JqZWN0ID0ge1xyXG4gICAgICBwcmljZU1heCxcclxuICAgICAgcHJpY2VNaW4sXHJcbiAgICAgIGRhdGVBcnJNYXgsXHJcbiAgICAgIGRhdGVBcnJNaW4sXHJcbiAgICAgIGRhdGVEZXBNYXgsXHJcbiAgICAgIGRhdGVEZXBNaW4sXHJcbiAgICAgIGNsYXNzZXM6IE9iamVjdC52YWx1ZXMoY2xhc3NPYmplY3QpLFxyXG4gICAgICBjaGFuZ2VzOiBPYmplY3QudmFsdWVzKGNoYW5nZXNPYmplY3QpXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnNvbGUubG9nKHJldE9iamVjdCk7XHJcbiAgICByZXR1cm4gcmV0T2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKGZpbHRlcnM6IElybEZpbHRlcnMsIGRpcmVjdGlvbjogc3RyaW5nID0gJ08nKTogdm9pZCB7XHJcbiAgICBjb25zdCBmdWxsUmVzdWx0c0NvcHkgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XHJcbiAgICBsZXQgZGlyUmVzdWx0cztcclxuXHJcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xyXG4gICAgICBjYXNlICdPJzpcclxuICAgICAgICBkaXJSZXN1bHRzID0gZnVsbFJlc3VsdHNDb3B5WzBdLm91dGJvdW5kO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdJJzpcclxuICAgICAgICBkaXJSZXN1bHRzID0gZnVsbFJlc3VsdHNDb3B5WzBdLnJldHVybjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBub3cgZmlyc3Qgb2YgYWxsIC0gYXBwbHkgdGhlIHByaWNlIGZpbHRlcnNcclxuXHJcbiAgICBkaXJSZXN1bHRzID0gZGlyUmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCB0aWNrZXRzID0gcmVzdWx0LnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLmZpbHRlcigodGlja2V0KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIHRpY2tldC5wcmljZSA+PSBmaWx0ZXJzLnByaWNlTWluICYmIHRpY2tldC5wcmljZSA8PSBmaWx0ZXJzLnByaWNlTWF4XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucyA9IHRpY2tldHM7XHJcbiAgICAgIHJldHVybiB0aWNrZXRzLmxlbmd0aDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHRpbWVzXHJcblxyXG4gICAgLy8gZGVwXHJcbiAgICBkaXJSZXN1bHRzID0gZGlyUmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBkZXBUaW1lID0gTnVtYmVyKG1vbWVudChyZXN1bHQuZGVwYXJ0RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpKTtcclxuICAgICAgcmV0dXJuIGRlcFRpbWUgPj0gZmlsdGVycy5kYXRlRGVwTWluICYmIGRlcFRpbWUgPD0gZmlsdGVycy5kYXRlRGVwTWF4O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gYXJyXHJcbiAgICBkaXJSZXN1bHRzID0gZGlyUmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBhcnJUaW1lID0gTnVtYmVyKG1vbWVudChyZXN1bHQuYXJyaXZlRGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpKTtcclxuICAgICAgcmV0dXJuIGFyclRpbWUgPj0gZmlsdGVycy5kYXRlQXJyTWluICYmIGFyclRpbWUgPD0gZmlsdGVycy5kYXRlQXJyTWF4O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gY2xhc3Nlc1xyXG4gICAgLy8gZmlyc3Qgb2YgYWxsIGRldGVybWluZSBpZiBhbnkgYXJlIHNlbGVjdGVkXHJcbiAgICBjb25zdCBzZWxlY3RlZENsYXNzZXMgPSBmaWx0ZXJzLmNsYXNzZXMuZmlsdGVyKChjbGFzc0YpID0+IHtcclxuICAgICAgcmV0dXJuIGNsYXNzRi5zZWxlY3RlZDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZENsYXNzZXM/Lmxlbmd0aCkge1xyXG4gICAgICBkaXJSZXN1bHRzID0gZGlyUmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld1RpY2tldHM6IGFueVtdID0gW107XHJcbiAgICAgICAgY29uc29sZS5sb2coJ29nIHRpY2tldHM6JywgcmVzdWx0LnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zKTtcclxuICAgICAgICByZXN1bHQucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMuZm9yRWFjaCgodGlja2V0KSA9PiB7XHJcbiAgICAgICAgICBzZWxlY3RlZENsYXNzZXMuZm9yRWFjaCgoY2xhc3NTKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aWNrZXQuY2xhc3MgPT09IGNsYXNzUy5rZXkpIHtcclxuICAgICAgICAgICAgICBuZXdUaWNrZXRzLnB1c2godGlja2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKG5ld1RpY2tldHMpO1xyXG4gICAgICAgIHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucyA9IG5ld1RpY2tldHM7XHJcbiAgICAgICAgcmV0dXJuIG5ld1RpY2tldHMubGVuZ3RoID4gMDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coZGlyUmVzdWx0cyk7XHJcblxyXG4gICAgLy8gZmluYWxseSBzdG9wc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRTdG9wcyA9IGZpbHRlcnMuY2hhbmdlcy5maWx0ZXIoKGNoYW5nZSkgPT4ge1xyXG4gICAgICByZXR1cm4gY2hhbmdlLnNlbGVjdGVkO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkU3RvcHMubGVuZ3RoKSB7XHJcbiAgICAgIGRpclJlc3VsdHMgPSBkaXJSZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZFN0b3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LnNlZ21lbnRzLmxlbmd0aCAtIDEgPT09IHNlbGVjdGVkU3RvcHNbaV0ua2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xyXG4gICAgICBjYXNlICdPJzpcclxuICAgICAgICBmdWxsUmVzdWx0c0NvcHlbMF0ub3V0Ym91bmQgPSBkaXJSZXN1bHRzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdJJzpcclxuICAgICAgICBmdWxsUmVzdWx0c0NvcHlbMF0ucmV0dXJuID0gZGlyUmVzdWx0cztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzQ29weSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5nZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyXHJcbiAgICAgIC5mZXRjaExpc3QoeyBpZDogZmF2LmRlcGFydHVyZUxvY2F0aW9uSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSgoYSkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20gPSBhO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlclxyXG4gICAgICAuZmV0Y2hMaXN0KHsgaWQ6IGZhdi5hcnJpdmFsTG9jYXRpb25JZCB9KVxyXG4gICAgICAuc3Vic2NyaWJlKChhKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmF2ZWxsaW5nVG8gPSBhO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuYWR1bHRzID0gZmF2LmFkdWx0cztcclxuICAgIHRoaXMuY2hpbGRyZW4gPSBmYXYuY2hpbGRyZW47XHJcbiAgICB0aGlzLmNsYXNzID0gZmF2LmNsYXNzO1xyXG4gICAgdGhpcy5jb3VudHJ5Q29kZSA9IGZhdi5jb3VudHJ5Q29kZTtcclxuICAgIHRoaXMuam91cm5leVR5cGUgPVxyXG4gICAgICBmYXYuam91cm5leVR5cGUgPT09ICdSZXR1cm5Kb3VybmV5J1xyXG4gICAgICAgID8gSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leVxyXG4gICAgICAgIDogSXJsSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTtcclxuICAgIHRoaXMuc3VwcGxpZXIgPSBmYXYuc3VwcGxpZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|