@sabstravtech/obtservices 0.0.22051001 → 0.1.6161600
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 +5 -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-office.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-default-mi-value.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 +4 -3
- package/angular/lib/vendor/services/logon.service.d.ts +2 -1
- package/angular/lib/vendor/services/user.service.d.ts +9 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +614 -550
- package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/angular/updaters.d.ts +1 -0
- package/base/fetchers.d.ts +5 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +7 -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 +9 -4
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +12 -4
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +14 -7
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +16 -5
- package/base/lib/vendor/classes/helpers.d.ts +6 -1
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +10 -3
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +13 -8
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +3 -3
- package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +10 -8
- package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
- package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
- package/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +3 -1
- package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +1 -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-office.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +2 -2
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +5 -2
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +8 -6
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +7 -5
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +8 -1
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +8 -2
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +8 -7
- package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Imybookings.service.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +5 -2
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +5 -2
- package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +11 -3
- package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
- package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/summary-interface.d.ts +6 -0
- package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
- package/base/lib/vendor/models/traveller.object.d.ts +12 -2
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +22 -9
- package/base/lib/vendor/services/logon.service.d.ts +5 -1
- package/base/lib/vendor/services/my-bookings.service.d.ts +3 -2
- package/base/lib/vendor/services/search.service.d.ts +27 -23
- package/base/lib/vendor/services/url.service.d.ts +2 -0
- package/base/lib/vendor/services/user.service.d.ts +36 -5
- package/base/lib/vendor/services/webtoken.service.d.ts +6 -0
- package/base/lib/vendor/types/graphql.types.d.ts +581 -549
- package/base/lib/vendor/types/types.d.ts +48 -6
- 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/updaters.d.ts +1 -0
- package/bundles/sabstravtech-obtservices-angular.umd.js +541 -252
- 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 +4080 -1471
- 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 +6 -1
- 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-office.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-default-mi-value.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 +24 -21
- package/esm2015/angular/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
- package/esm2015/angular/lib/vendor/services/search.service.js +1 -1
- package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +4 -1
- package/esm2015/angular/lib/vendor/services/user.service.js +28 -10
- package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +1023 -1220
- package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
- package/esm2015/angular/updaters.js +2 -1
- package/esm2015/base/fetchers.js +6 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +12 -3
- package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +14 -1
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -8
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +219 -18
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +235 -67
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +462 -49
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +37 -13
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +281 -62
- package/esm2015/base/lib/vendor/classes/helpers.js +32 -3
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +228 -54
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +221 -46
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +101 -14
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +67 -40
- package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +146 -11
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +210 -25
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +58 -4
- package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
- package/esm2015/base/lib/vendor/data/countries.json +484 -242
- package/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +3 -3
- 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-office.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +1 -1
- 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/Imybookings.service.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/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 +21 -3
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +129 -43
- package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/base/lib/vendor/services/logon.service.js +40 -3
- package/esm2015/base/lib/vendor/services/my-bookings.service.js +3 -2
- package/esm2015/base/lib/vendor/services/requires-reason.service.js +14 -10
- package/esm2015/base/lib/vendor/services/search.service.js +100 -117
- package/esm2015/base/lib/vendor/services/url.service.js +3 -1
- package/esm2015/base/lib/vendor/services/user.service.js +90 -12
- package/esm2015/base/lib/vendor/services/webtoken.service.js +14 -1
- package/esm2015/base/lib/vendor/types/graphql.types.js +21 -2
- package/esm2015/base/lib/vendor/types/types.js +32 -14
- package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
- package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
- package/esm2015/base/updaters.js +2 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +1254 -1332
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +3324 -839
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,10 +3,11 @@ import moment from 'moment';
|
|
|
3
3
|
import { BaseEnterpriseSearch } from './base-enterprise';
|
|
4
4
|
import { BehaviorSubject } from 'rxjs';
|
|
5
5
|
import { FareType, FlightCabinClass, FlightPassengerType, ServiceType } from '../types/graphql.types';
|
|
6
|
-
import { FlightDirectionEnum } from '../types/types';
|
|
6
|
+
import { FlightDirectionEnum, DifferentInvokdedUserReasons } from '../types/types';
|
|
7
7
|
import { EurostarSearchType } from './eurostar-search-type.enum';
|
|
8
8
|
import { TimeWindow } from './flight-enterprise-search';
|
|
9
9
|
import { ModalTypes } from './modal-types.enum';
|
|
10
|
+
import { take } from 'rxjs/operators';
|
|
10
11
|
const DEFAULT_FILTERS = Object.freeze({
|
|
11
12
|
stops: {},
|
|
12
13
|
totalStops: {},
|
|
@@ -62,12 +63,12 @@ export var SortMethod;
|
|
|
62
63
|
SortMethod["sortByDate"] = "sortByDate";
|
|
63
64
|
})(SortMethod || (SortMethod = {}));
|
|
64
65
|
export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
65
|
-
constructor(eurostarFetcher, helpers, userService, basketService, storageService, searchService, modalService) {
|
|
66
|
-
super(storageService, helpers);
|
|
66
|
+
constructor(eurostarFetcher, helpers, userService, basketService, storageService, searchService, modalService, applyFlightRules) {
|
|
67
|
+
super(storageService, helpers, searchService, userService);
|
|
67
68
|
this.eurostarFetcher = eurostarFetcher;
|
|
68
69
|
this.basketService = basketService;
|
|
69
|
-
this.searchService = searchService;
|
|
70
70
|
this.modalService = modalService;
|
|
71
|
+
this.applyFlightRules = applyFlightRules;
|
|
71
72
|
this.type = ServiceType.Eurostar;
|
|
72
73
|
this.avaliableClasses = new BehaviorSubject([]);
|
|
73
74
|
this.timeCriteriaOptions = new BehaviorSubject([]);
|
|
@@ -477,12 +478,18 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
477
478
|
}
|
|
478
479
|
processResults(results1) {
|
|
479
480
|
this.resultQuery = this.getSearchQuery();
|
|
480
|
-
|
|
481
|
+
this.multi = results1.multi;
|
|
482
|
+
// delete this.resultQuery['withGrouped'];
|
|
481
483
|
this.filters.next(this.helpers.createFlightFilters(results1.journeys, DEFAULT_FILTERS));
|
|
482
484
|
if (results1 && this.searchService.isFlightsGrouped()) {
|
|
485
|
+
this._ruleActionSummary = Object.assign({}, {
|
|
486
|
+
journeyWhenSelected: {},
|
|
487
|
+
dualSingleWhenSelected: {},
|
|
488
|
+
whenSelectedAlone: {}
|
|
489
|
+
}, results1.ruleActionSummary || {});
|
|
483
490
|
const returndata = (results1.journeys || []).reduce((acc, result, index) => {
|
|
484
491
|
if (result.outboundFlights.length) {
|
|
485
|
-
const euroResult = this.formatEurostarResults(result.outboundFlights, result.total, index);
|
|
492
|
+
const euroResult = this.formatEurostarResults(result.outboundFlights, result.total, result.journeyHash, index);
|
|
486
493
|
euroResult.co2PerPassenger = result.co2PerPassenger;
|
|
487
494
|
euroResult.co2PerItem = result.co2PerItem;
|
|
488
495
|
euroResult.sourceId = result.sourceId;
|
|
@@ -495,7 +502,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
495
502
|
}
|
|
496
503
|
}
|
|
497
504
|
if (result.inboundFlights.length) {
|
|
498
|
-
const euroResult = this.formatEurostarResults(result.inboundFlights, result.total, index);
|
|
505
|
+
const euroResult = this.formatEurostarResults(result.inboundFlights, result.total, result.journeyHash, index);
|
|
499
506
|
euroResult.co2PerPassenger = result.co2PerPassenger;
|
|
500
507
|
euroResult.co2PerItem = result.co2PerItem;
|
|
501
508
|
euroResult.sourceId = result.sourceId;
|
|
@@ -543,8 +550,8 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
543
550
|
}
|
|
544
551
|
return acc;
|
|
545
552
|
}
|
|
546
|
-
formatEurostarResults(results, total, index) {
|
|
547
|
-
|
|
553
|
+
formatEurostarResults(results, total, journeyHash, index) {
|
|
554
|
+
let returnObject = {
|
|
548
555
|
dateArrival: null,
|
|
549
556
|
dateDeparture: null,
|
|
550
557
|
duration: null,
|
|
@@ -562,7 +569,21 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
562
569
|
isDisabled: true,
|
|
563
570
|
price: NaN,
|
|
564
571
|
currency: 'GBP',
|
|
565
|
-
selected: false
|
|
572
|
+
selected: false,
|
|
573
|
+
requiresReason: false,
|
|
574
|
+
preferred: false,
|
|
575
|
+
preferredMessages: '',
|
|
576
|
+
companyPreferred: false,
|
|
577
|
+
companyPreferredMessage: '',
|
|
578
|
+
officePreferred: false,
|
|
579
|
+
officePreferredMessage: '',
|
|
580
|
+
tmcPreferred: false,
|
|
581
|
+
tmcPreferredMessage: '',
|
|
582
|
+
unavailable: false,
|
|
583
|
+
unavailableMessage: '',
|
|
584
|
+
requiresReasonMessage: '',
|
|
585
|
+
canSelect: false,
|
|
586
|
+
journeyHash: ''
|
|
566
587
|
},
|
|
567
588
|
standardFare: {
|
|
568
589
|
class: null,
|
|
@@ -570,7 +591,21 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
570
591
|
isDisabled: true,
|
|
571
592
|
price: NaN,
|
|
572
593
|
currency: 'GBP',
|
|
573
|
-
selected: false
|
|
594
|
+
selected: false,
|
|
595
|
+
requiresReason: false,
|
|
596
|
+
preferred: false,
|
|
597
|
+
preferredMessages: '',
|
|
598
|
+
companyPreferred: false,
|
|
599
|
+
companyPreferredMessage: '',
|
|
600
|
+
officePreferred: false,
|
|
601
|
+
officePreferredMessage: '',
|
|
602
|
+
tmcPreferred: false,
|
|
603
|
+
tmcPreferredMessage: '',
|
|
604
|
+
unavailable: false,
|
|
605
|
+
unavailableMessage: '',
|
|
606
|
+
requiresReasonMessage: '',
|
|
607
|
+
canSelect: false,
|
|
608
|
+
journeyHash: ''
|
|
574
609
|
},
|
|
575
610
|
standardPremierFare: {
|
|
576
611
|
class: null,
|
|
@@ -578,9 +613,22 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
578
613
|
isDisabled: true,
|
|
579
614
|
price: NaN,
|
|
580
615
|
currency: 'GBP',
|
|
581
|
-
selected: false
|
|
582
|
-
|
|
583
|
-
|
|
616
|
+
selected: false,
|
|
617
|
+
requiresReason: false,
|
|
618
|
+
preferred: false,
|
|
619
|
+
preferredMessages: '',
|
|
620
|
+
companyPreferred: false,
|
|
621
|
+
companyPreferredMessage: '',
|
|
622
|
+
officePreferred: false,
|
|
623
|
+
officePreferredMessage: '',
|
|
624
|
+
tmcPreferred: false,
|
|
625
|
+
tmcPreferredMessage: '',
|
|
626
|
+
unavailable: false,
|
|
627
|
+
unavailableMessage: '',
|
|
628
|
+
requiresReasonMessage: '',
|
|
629
|
+
canSelect: false,
|
|
630
|
+
journeyHash: ''
|
|
631
|
+
}
|
|
584
632
|
};
|
|
585
633
|
// returnObject.duration = results.outboundTotalDuration;
|
|
586
634
|
results.forEach((flight) => {
|
|
@@ -606,6 +654,8 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
606
654
|
returnObject.standardFare.currency = total.currency;
|
|
607
655
|
returnObject.standardFare.class = flight.cabinClass;
|
|
608
656
|
returnObject.standardFare.selected = false;
|
|
657
|
+
returnObject.standardFare.journeyHash = journeyHash;
|
|
658
|
+
returnObject = this.updateRules(returnObject, journeyHash, 'standardFare');
|
|
609
659
|
break;
|
|
610
660
|
case 'Premium':
|
|
611
661
|
returnObject.standardPremierFare.isDisabled = false;
|
|
@@ -614,6 +664,8 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
614
664
|
returnObject.standardPremierFare.currency = total.currency;
|
|
615
665
|
returnObject.standardPremierFare.class = flight.cabinClass;
|
|
616
666
|
returnObject.standardPremierFare.selected = false;
|
|
667
|
+
returnObject.standardPremierFare.journeyHash = journeyHash;
|
|
668
|
+
returnObject = this.updateRules(returnObject, journeyHash, 'standardPremierFare');
|
|
617
669
|
break;
|
|
618
670
|
case FlightCabinClass.Business:
|
|
619
671
|
returnObject.businessPremierFare.isDisabled = false;
|
|
@@ -622,6 +674,8 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
622
674
|
returnObject.businessPremierFare.currency = total.currency;
|
|
623
675
|
returnObject.businessPremierFare.class = flight.cabinClass;
|
|
624
676
|
returnObject.businessPremierFare.selected = false;
|
|
677
|
+
returnObject.businessPremierFare.journeyHash = journeyHash;
|
|
678
|
+
returnObject = this.updateRules(returnObject, journeyHash, 'businessPremierFare');
|
|
625
679
|
break;
|
|
626
680
|
default:
|
|
627
681
|
console.warn('new class to be implemented: ', flight.cabinClass);
|
|
@@ -629,6 +683,108 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
629
683
|
});
|
|
630
684
|
return returnObject;
|
|
631
685
|
}
|
|
686
|
+
updateRules(returnObject, journeyHash, fareType) {
|
|
687
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33;
|
|
688
|
+
const selectedRuleSummary = this._ruleActionSummary.dualSingleWhenSelected[(_a = this.selectedGroupFlight) === null || _a === void 0 ? void 0 : _a.journeyHash] || {};
|
|
689
|
+
const hasField = (journeyHash, field, def) => {
|
|
690
|
+
return (this.helpers.fieldFromObject(this._ruleActionSummary, [
|
|
691
|
+
'journeyWhenSelected',
|
|
692
|
+
journeyHash,
|
|
693
|
+
field
|
|
694
|
+
]) ||
|
|
695
|
+
this.helpers.fieldFromObject(this._ruleActionSummary, [
|
|
696
|
+
'whenSelectedAlone',
|
|
697
|
+
journeyHash,
|
|
698
|
+
field
|
|
699
|
+
]) ||
|
|
700
|
+
this.helpers.fieldFromObject(selectedRuleSummary, [
|
|
701
|
+
journeyHash,
|
|
702
|
+
field
|
|
703
|
+
]) ||
|
|
704
|
+
def);
|
|
705
|
+
};
|
|
706
|
+
switch (fareType) {
|
|
707
|
+
case 'standardFare':
|
|
708
|
+
returnObject.standardFare.companyPreferred =
|
|
709
|
+
((_b = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _b === void 0 ? void 0 : _b.companyPreferred) || ((_c = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _c === void 0 ? void 0 : _c.companyPreferred) ||
|
|
710
|
+
false;
|
|
711
|
+
returnObject.standardFare.companyPreferredMessage =
|
|
712
|
+
((_d = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _d === void 0 ? void 0 : _d.companyPreferredMessage) || ((_e = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _e === void 0 ? void 0 : _e.companyPreferredMessage) ||
|
|
713
|
+
'';
|
|
714
|
+
returnObject.standardFare.officePreferred =
|
|
715
|
+
((_f = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _f === void 0 ? void 0 : _f.officePreferred) || ((_g = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _g === void 0 ? void 0 : _g.officePreferred) ||
|
|
716
|
+
false;
|
|
717
|
+
returnObject.standardFare.officePreferredMessage =
|
|
718
|
+
((_h = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _h === void 0 ? void 0 : _h.officePreferredMessage) || ((_j = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _j === void 0 ? void 0 : _j.officePreferredMessage) ||
|
|
719
|
+
'';
|
|
720
|
+
returnObject.standardFare.tmcPreferred =
|
|
721
|
+
((_k = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _k === void 0 ? void 0 : _k.tmcPreferred) || ((_l = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _l === void 0 ? void 0 : _l.tmcPreferred) ||
|
|
722
|
+
false;
|
|
723
|
+
returnObject.standardFare.tmcPreferredMessage =
|
|
724
|
+
((_m = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _m === void 0 ? void 0 : _m.tmcPreferredMessage) || ((_o = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _o === void 0 ? void 0 : _o.tmcPreferredMessage) ||
|
|
725
|
+
'';
|
|
726
|
+
returnObject.standardFare.preferred =
|
|
727
|
+
((_p = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _p === void 0 ? void 0 : _p.companyPreferred) || ((_q = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _q === void 0 ? void 0 : _q.companyPreferred) || ((_r = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _r === void 0 ? void 0 : _r.officePreferred) || ((_s = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _s === void 0 ? void 0 : _s.officePreferred) || ((_t = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _t === void 0 ? void 0 : _t.tmcPreferred) || ((_u = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _u === void 0 ? void 0 : _u.tmcPreferred);
|
|
728
|
+
returnObject.standardFare.selected = returnObject.uid === ((_v = this.selectedGroupFlight) === null || _v === void 0 ? void 0 : _v.uid);
|
|
729
|
+
returnObject.standardFare.unavailable = hasField(journeyHash, 'unavailable', false);
|
|
730
|
+
returnObject.standardFare.unavailableMessage = hasField(journeyHash, 'unavailableMessage', '');
|
|
731
|
+
returnObject.standardFare.requiresReason = hasField(journeyHash, 'requiresReason', false);
|
|
732
|
+
returnObject.standardFare.requiresReasonMessage = hasField(journeyHash, 'requiresReasonMessage', '');
|
|
733
|
+
case 'standardPremierFare':
|
|
734
|
+
returnObject.standardPremierFare.companyPreferred =
|
|
735
|
+
((_w = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _w === void 0 ? void 0 : _w.companyPreferred) || ((_x = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _x === void 0 ? void 0 : _x.companyPreferred) ||
|
|
736
|
+
false;
|
|
737
|
+
returnObject.standardPremierFare.companyPreferredMessage =
|
|
738
|
+
((_y = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _y === void 0 ? void 0 : _y.companyPreferredMessage) || ((_z = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _z === void 0 ? void 0 : _z.companyPreferredMessage) ||
|
|
739
|
+
'';
|
|
740
|
+
returnObject.standardPremierFare.officePreferred =
|
|
741
|
+
((_0 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _0 === void 0 ? void 0 : _0.officePreferred) || ((_1 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _1 === void 0 ? void 0 : _1.officePreferred) ||
|
|
742
|
+
false;
|
|
743
|
+
returnObject.standardPremierFare.officePreferredMessage =
|
|
744
|
+
((_2 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _2 === void 0 ? void 0 : _2.officePreferredMessage) || ((_3 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _3 === void 0 ? void 0 : _3.officePreferredMessage) ||
|
|
745
|
+
'';
|
|
746
|
+
returnObject.standardPremierFare.tmcPreferred =
|
|
747
|
+
((_4 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _4 === void 0 ? void 0 : _4.tmcPreferred) || ((_5 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _5 === void 0 ? void 0 : _5.tmcPreferred) ||
|
|
748
|
+
false;
|
|
749
|
+
returnObject.standardPremierFare.tmcPreferredMessage =
|
|
750
|
+
((_6 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _6 === void 0 ? void 0 : _6.tmcPreferredMessage) || ((_7 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _7 === void 0 ? void 0 : _7.tmcPreferredMessage) ||
|
|
751
|
+
'';
|
|
752
|
+
returnObject.standardPremierFare.preferred =
|
|
753
|
+
((_8 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _8 === void 0 ? void 0 : _8.companyPreferred) || ((_9 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _9 === void 0 ? void 0 : _9.companyPreferred) || ((_10 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _10 === void 0 ? void 0 : _10.officePreferred) || ((_11 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _11 === void 0 ? void 0 : _11.officePreferred) || ((_12 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _12 === void 0 ? void 0 : _12.tmcPreferred) || ((_13 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _13 === void 0 ? void 0 : _13.tmcPreferred);
|
|
754
|
+
returnObject.standardPremierFare.selected = returnObject.uid === ((_14 = this.selectedGroupFlight) === null || _14 === void 0 ? void 0 : _14.uid);
|
|
755
|
+
returnObject.standardPremierFare.unavailable = hasField(journeyHash, 'unavailable', false);
|
|
756
|
+
returnObject.standardPremierFare.unavailableMessage = hasField(journeyHash, 'unavailableMessage', '');
|
|
757
|
+
returnObject.standardPremierFare.requiresReason = hasField(journeyHash, 'requiresReason', false);
|
|
758
|
+
returnObject.standardPremierFare.requiresReasonMessage = hasField(journeyHash, 'requiresReasonMessage', '');
|
|
759
|
+
case 'businessPremierFare':
|
|
760
|
+
returnObject.businessPremierFare.companyPreferred =
|
|
761
|
+
((_15 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _15 === void 0 ? void 0 : _15.companyPreferred) || ((_16 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _16 === void 0 ? void 0 : _16.companyPreferred) ||
|
|
762
|
+
false;
|
|
763
|
+
returnObject.businessPremierFare.companyPreferredMessage =
|
|
764
|
+
((_17 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _17 === void 0 ? void 0 : _17.companyPreferredMessage) || ((_18 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _18 === void 0 ? void 0 : _18.companyPreferredMessage) ||
|
|
765
|
+
'';
|
|
766
|
+
returnObject.businessPremierFare.officePreferred =
|
|
767
|
+
((_19 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _19 === void 0 ? void 0 : _19.officePreferred) || ((_20 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _20 === void 0 ? void 0 : _20.officePreferred) ||
|
|
768
|
+
false;
|
|
769
|
+
returnObject.businessPremierFare.officePreferredMessage =
|
|
770
|
+
((_21 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _21 === void 0 ? void 0 : _21.officePreferredMessage) || ((_22 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _22 === void 0 ? void 0 : _22.officePreferredMessage) ||
|
|
771
|
+
'';
|
|
772
|
+
returnObject.businessPremierFare.tmcPreferred =
|
|
773
|
+
((_23 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _23 === void 0 ? void 0 : _23.tmcPreferred) || ((_24 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _24 === void 0 ? void 0 : _24.tmcPreferred) ||
|
|
774
|
+
false;
|
|
775
|
+
returnObject.businessPremierFare.tmcPreferredMessage =
|
|
776
|
+
((_25 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _25 === void 0 ? void 0 : _25.tmcPreferredMessage) || ((_26 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _26 === void 0 ? void 0 : _26.tmcPreferredMessage) ||
|
|
777
|
+
'';
|
|
778
|
+
returnObject.businessPremierFare.preferred =
|
|
779
|
+
((_27 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _27 === void 0 ? void 0 : _27.companyPreferred) || ((_28 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _28 === void 0 ? void 0 : _28.companyPreferred) || ((_29 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _29 === void 0 ? void 0 : _29.officePreferred) || ((_30 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _30 === void 0 ? void 0 : _30.officePreferred) || ((_31 = this._ruleActionSummary.journeyWhenSelected[journeyHash]) === null || _31 === void 0 ? void 0 : _31.tmcPreferred) || ((_32 = this._ruleActionSummary.whenSelectedAlone[journeyHash]) === null || _32 === void 0 ? void 0 : _32.tmcPreferred);
|
|
780
|
+
returnObject.businessPremierFare.selected = returnObject.uid === ((_33 = this.selectedGroupFlight) === null || _33 === void 0 ? void 0 : _33.uid);
|
|
781
|
+
returnObject.businessPremierFare.unavailable = hasField(journeyHash, 'unavailable', false);
|
|
782
|
+
returnObject.businessPremierFare.unavailableMessage = hasField(journeyHash, 'unavailableMessage', '');
|
|
783
|
+
returnObject.businessPremierFare.requiresReason = hasField(journeyHash, 'requiresReason', false);
|
|
784
|
+
returnObject.businessPremierFare.requiresReasonMessage = hasField(journeyHash, 'requiresReasonMessage', '');
|
|
785
|
+
}
|
|
786
|
+
return returnObject;
|
|
787
|
+
}
|
|
632
788
|
resetQuery(checkIsValid = true) {
|
|
633
789
|
this.updateTempParams(this.searchService.makeEurostarQuery());
|
|
634
790
|
if (checkIsValid) {
|
|
@@ -669,7 +825,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
669
825
|
}
|
|
670
826
|
// this is stuff for matching cabin classes
|
|
671
827
|
if (!this.checkCabinMatchisValid()) {
|
|
672
|
-
this.validationMessages.push('The types of cabin classes selected are not compatible. Examples of compatible cabin classes; Any - Any
|
|
828
|
+
this.validationMessages.push('The types of cabin classes selected are not compatible. Examples of compatible cabin classes; Any - Any; Standard - Standard; Business - Business');
|
|
673
829
|
}
|
|
674
830
|
}
|
|
675
831
|
this.isValid.next(this.validationMessages.length === 0);
|
|
@@ -987,11 +1143,186 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
987
1143
|
};
|
|
988
1144
|
return [sortedResults];
|
|
989
1145
|
}
|
|
1146
|
+
updateSearchFromExpiredBasketItem(basketItem) {
|
|
1147
|
+
const searchEuroStarQuery = basketItem.searchQuery;
|
|
1148
|
+
if (searchEuroStarQuery.outboundDate) {
|
|
1149
|
+
let outboundTimeWindow = searchEuroStarQuery.outboundDepartureTimeWindow
|
|
1150
|
+
? searchEuroStarQuery.outboundDepartureTimeWindow
|
|
1151
|
+
: searchEuroStarQuery.outboundArrivalTimeWindow;
|
|
1152
|
+
this.outBoundDate = this.convertRecentSearchDateTime(searchEuroStarQuery.outboundDate, outboundTimeWindow);
|
|
1153
|
+
}
|
|
1154
|
+
if (searchEuroStarQuery.returnDate) {
|
|
1155
|
+
let returnTimeWindow = searchEuroStarQuery.returnDepartureTimeWindow
|
|
1156
|
+
? searchEuroStarQuery.returnDepartureTimeWindow
|
|
1157
|
+
: searchEuroStarQuery.returnArrivalTimeWindow;
|
|
1158
|
+
this.inboundDate = this.convertRecentSearchDateTime(searchEuroStarQuery.returnDate, returnTimeWindow);
|
|
1159
|
+
}
|
|
1160
|
+
this.fareType = searchEuroStarQuery.fareType;
|
|
1161
|
+
this.maxConnections = searchEuroStarQuery.maxConnections;
|
|
1162
|
+
if (searchEuroStarQuery.outboundCabinClass) {
|
|
1163
|
+
this.cabinClass = searchEuroStarQuery
|
|
1164
|
+
.outboundCabinClass[0];
|
|
1165
|
+
}
|
|
1166
|
+
if (searchEuroStarQuery.returnCabinClass) {
|
|
1167
|
+
this.returnCabinClass = searchEuroStarQuery
|
|
1168
|
+
.returnCabinClass[0];
|
|
1169
|
+
}
|
|
1170
|
+
this.includeNearbyAirports = searchEuroStarQuery.includeNearbyAirports;
|
|
1171
|
+
this.chosenSearchType = searchEuroStarQuery.returnTrip
|
|
1172
|
+
? EurostarSearchType.return
|
|
1173
|
+
: EurostarSearchType.oneWay;
|
|
1174
|
+
if (searchEuroStarQuery.outboundDepartureTimeWindow) {
|
|
1175
|
+
this.outTimeCriteria = TimeWindow.Depart;
|
|
1176
|
+
}
|
|
1177
|
+
else if (searchEuroStarQuery.outboundArrivalTimeWindow) {
|
|
1178
|
+
this.outTimeCriteria = TimeWindow.Arrive;
|
|
1179
|
+
}
|
|
1180
|
+
else {
|
|
1181
|
+
this.outTimeCriteria = TimeWindow.Anytime;
|
|
1182
|
+
}
|
|
1183
|
+
if (searchEuroStarQuery.returnDepartureTimeWindow) {
|
|
1184
|
+
this.inTimeCriteria = TimeWindow.Depart;
|
|
1185
|
+
}
|
|
1186
|
+
else if (searchEuroStarQuery.returnArrivalTimeWindow) {
|
|
1187
|
+
this.inTimeCriteria = TimeWindow.Arrive;
|
|
1188
|
+
}
|
|
1189
|
+
else {
|
|
1190
|
+
this.inTimeCriteria = TimeWindow.Anytime;
|
|
1191
|
+
}
|
|
1192
|
+
if (searchEuroStarQuery.originAirport) {
|
|
1193
|
+
this.searchService
|
|
1194
|
+
.lookupEurostarStations(searchEuroStarQuery.originAirport)
|
|
1195
|
+
.subscribe((stations) => {
|
|
1196
|
+
this.departLocation = stations[0];
|
|
1197
|
+
});
|
|
1198
|
+
}
|
|
1199
|
+
if (searchEuroStarQuery.destinationAirport) {
|
|
1200
|
+
this.searchService
|
|
1201
|
+
.lookupEurostarStations(searchEuroStarQuery.destinationAirport)
|
|
1202
|
+
.subscribe((stations) => {
|
|
1203
|
+
this.arriveLocation = stations[0];
|
|
1204
|
+
});
|
|
1205
|
+
}
|
|
1206
|
+
// add Travellers
|
|
1207
|
+
if (basketItem.users) {
|
|
1208
|
+
basketItem.users.forEach((user) => {
|
|
1209
|
+
this.searchService.addTraveller(user);
|
|
1210
|
+
});
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
990
1213
|
updateFromPreviousSearches(previousItems) {
|
|
991
|
-
var _a;
|
|
1214
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
992
1215
|
const flightItem = (_a = previousItems[ServiceType.Flight]) === null || _a === void 0 ? void 0 : _a.searchQuery;
|
|
1216
|
+
const railItem = (_b = previousItems[ServiceType.Rail]) === null || _b === void 0 ? void 0 : _b.searchQuery;
|
|
1217
|
+
const irlItem = (_c = previousItems[ServiceType.InternationalRail]) === null || _c === void 0 ? void 0 : _c.searchQuery;
|
|
1218
|
+
const hotelItem = (_d = previousItems[ServiceType.Rail]) === null || _d === void 0 ? void 0 : _d.searchQuery;
|
|
1219
|
+
const carItem = (_e = previousItems[ServiceType.Car]) === null || _e === void 0 ? void 0 : _e.searchQuery;
|
|
1220
|
+
const loungeItem = (_f = previousItems[ServiceType.Lounge]) === null || _f === void 0 ? void 0 : _f.searchQuery;
|
|
1221
|
+
const parkingItem = (_g = previousItems[ServiceType.Parking]) === null || _g === void 0 ? void 0 : _g.searchQuery;
|
|
993
1222
|
if (flightItem) {
|
|
994
|
-
|
|
1223
|
+
try {
|
|
1224
|
+
this.outBoundDate = moment(previousItems.FLIGHT.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1225
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1226
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1227
|
+
if (previousItems.FLIGHT.inboundDate) {
|
|
1228
|
+
this.inboundDate = moment(previousItems.FLIGHT.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1229
|
+
if (this.inboundDate.minutes() % 30)
|
|
1230
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1233
|
+
catch (_h) {
|
|
1234
|
+
console.error('Error trying to prepopulate eurostar from flight item');
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1237
|
+
else if (railItem) {
|
|
1238
|
+
try {
|
|
1239
|
+
this.outBoundDate = moment(previousItems.RAIL.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1240
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1241
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1242
|
+
if (previousItems.RAIL.inboundDate) {
|
|
1243
|
+
this.inboundDate = moment(previousItems.RAIL.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1244
|
+
if (this.inboundDate.minutes() % 30)
|
|
1245
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
catch (_j) {
|
|
1249
|
+
console.error('Error trying to prepopulate eurostar from rail item');
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
else if (irlItem) {
|
|
1253
|
+
try {
|
|
1254
|
+
this.outBoundDate = moment(previousItems.INTERNATIONAL_RAIL.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1255
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1256
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1257
|
+
if (previousItems.INTERNATIONAL_RAIL.inboundDate) {
|
|
1258
|
+
this.inboundDate = moment(previousItems.INTERNATIONAL_RAIL.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1259
|
+
if (this.inboundDate.minutes() % 30)
|
|
1260
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
catch (_k) {
|
|
1264
|
+
console.error('Error trying to prepopulate eurostar from international rail item');
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
else if (hotelItem) {
|
|
1268
|
+
try {
|
|
1269
|
+
this.outBoundDate = moment(previousItems.HOTEL.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1270
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1271
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1272
|
+
if (previousItems.HOTEL.inboundDate) {
|
|
1273
|
+
this.inboundDate = moment(previousItems.HOTEL.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1274
|
+
if (this.inboundDate.minutes() % 30)
|
|
1275
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
catch (_l) {
|
|
1279
|
+
console.error('Error trying to prepopulate eurostar from hotel item');
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
else if (carItem) {
|
|
1283
|
+
try {
|
|
1284
|
+
this.outBoundDate = moment(previousItems.CAR.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1285
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1286
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1287
|
+
if (previousItems.CAR.inboundDate) {
|
|
1288
|
+
this.inboundDate = moment(previousItems.CAR.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1289
|
+
if (this.inboundDate.minutes() % 30)
|
|
1290
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
catch (_m) {
|
|
1294
|
+
console.error('Error trying to prepopulate eurostar from car item');
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
else if (loungeItem) {
|
|
1298
|
+
try {
|
|
1299
|
+
this.outBoundDate = moment(previousItems.LOUNGE.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1300
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1301
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1302
|
+
if (previousItems.LOUNGE.inboundDate) {
|
|
1303
|
+
this.inboundDate = moment(previousItems.LOUNGE.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1304
|
+
if (this.inboundDate.minutes() % 30)
|
|
1305
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
catch (_o) {
|
|
1309
|
+
console.error('Error trying to prepopulate eurostar from lounge item');
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1312
|
+
else if (parkingItem) {
|
|
1313
|
+
try {
|
|
1314
|
+
this.outBoundDate = moment(previousItems.PARKING.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1315
|
+
if (this.outBoundDate.minutes() % 30)
|
|
1316
|
+
this.outBoundDate = this.outBoundDate.subtract(this.outBoundDate.minutes() % 30, "minutes");
|
|
1317
|
+
if (previousItems.PARKING.inboundDate) {
|
|
1318
|
+
this.inboundDate = moment(previousItems.PARKING.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
|
|
1319
|
+
if (this.inboundDate.minutes() % 30)
|
|
1320
|
+
this.inboundDate = this.inboundDate.subtract(this.inboundDate.minutes() % 30, "minutes");
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
catch (_p) {
|
|
1324
|
+
console.error('Error trying to prepopulate eurostar from parking item');
|
|
1325
|
+
}
|
|
995
1326
|
}
|
|
996
1327
|
}
|
|
997
1328
|
getTotalBaggage(result) {
|
|
@@ -1153,7 +1484,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1153
1484
|
outboundFlights: [this.makeSchemaFlights(fare.fare, 'outbound', 0)],
|
|
1154
1485
|
inboundFlights: [],
|
|
1155
1486
|
journeyType: 'single'
|
|
1156
|
-
}, selectedEurostar.dateDeparture, null, fare.price,
|
|
1487
|
+
}, selectedEurostar.dateDeparture, null, fare.price, fare.requiresReason);
|
|
1157
1488
|
return;
|
|
1158
1489
|
}
|
|
1159
1490
|
// return logic needs updating - either accept outbound or return and somehow distiguish them
|
|
@@ -1175,7 +1506,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1175
1506
|
this.makeSchemaFlights(fare.fare, 'outbound', 0)
|
|
1176
1507
|
],
|
|
1177
1508
|
journeyType: 'roundtrip'
|
|
1178
|
-
}, selectedEurostar.dateDeparture, this.selectedGroupEurostar.item.dateArrival, price,
|
|
1509
|
+
}, selectedEurostar.dateDeparture, this.selectedGroupEurostar.item.dateArrival, price, fare.requiresReason);
|
|
1179
1510
|
this.resetSelectedFares();
|
|
1180
1511
|
this.basketService.toggleMenu();
|
|
1181
1512
|
this.results.next(this.fullResults.map(this.removeSelectedFlags));
|
|
@@ -1215,7 +1546,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1215
1546
|
],
|
|
1216
1547
|
inboundFlights: [this.makeSchemaFlights(fare.fare, 'inbound', 0)],
|
|
1217
1548
|
journeyType: 'roundtrip'
|
|
1218
|
-
}, selectedEurostar.dateDeparture, this.selectedGroupEurostar.item.dateArrival, price,
|
|
1549
|
+
}, selectedEurostar.dateDeparture, this.selectedGroupEurostar.item.dateArrival, price, fare.requiresReason);
|
|
1219
1550
|
this.resetSelectedFares();
|
|
1220
1551
|
this.basketService.toggleMenu();
|
|
1221
1552
|
this.results.next(this.fullResults.map(this.removeSelectedFlags));
|
|
@@ -1239,11 +1570,44 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1239
1570
|
const inbound = result.inbound.filter((item) => index === item.uid);
|
|
1240
1571
|
return { inbound, outbound: result.outbound };
|
|
1241
1572
|
}));
|
|
1573
|
+
this._updateTravelPolicies();
|
|
1242
1574
|
}
|
|
1243
1575
|
}
|
|
1244
1576
|
}
|
|
1245
1577
|
});
|
|
1246
1578
|
}
|
|
1579
|
+
_updateTravelPolicies() {
|
|
1580
|
+
if (!this.selectedGroupEurostar ||
|
|
1581
|
+
this._ruleActionSummary.dualSingleWhenSelected[this._selectedEurostarFare.item.journeyHash] ||
|
|
1582
|
+
!this.multi ||
|
|
1583
|
+
this.multi.length === 0) {
|
|
1584
|
+
return;
|
|
1585
|
+
}
|
|
1586
|
+
const multiInbounds = (this.multi || []).reduce((acc, item) => {
|
|
1587
|
+
if (item.order === 1 && item.results && item.results.length > 0) {
|
|
1588
|
+
acc = acc.concat(item.results);
|
|
1589
|
+
}
|
|
1590
|
+
return acc;
|
|
1591
|
+
}, []);
|
|
1592
|
+
if (multiInbounds.length > 0) {
|
|
1593
|
+
if (!this.rawResults) {
|
|
1594
|
+
this.rawResults = this.storageService.getSessionItem(this.resultsSessionName + '_raw');
|
|
1595
|
+
}
|
|
1596
|
+
console.log(this.rawResults);
|
|
1597
|
+
this.applyFlightRules
|
|
1598
|
+
.fetchOne({
|
|
1599
|
+
selectedOutboundFlight: this.selectedGroupFlight,
|
|
1600
|
+
availableInboundFlights: multiInbounds,
|
|
1601
|
+
searchId: this.rawResults.searchId
|
|
1602
|
+
})
|
|
1603
|
+
.pipe(take(1))
|
|
1604
|
+
.subscribe((rules) => {
|
|
1605
|
+
if (rules) {
|
|
1606
|
+
this._ruleActionSummary = this.helpers.mergeObjects(this._ruleActionSummary, rules);
|
|
1607
|
+
}
|
|
1608
|
+
});
|
|
1609
|
+
}
|
|
1610
|
+
}
|
|
1247
1611
|
resetSelectedFares() {
|
|
1248
1612
|
this.selectedGroupEurostar = {
|
|
1249
1613
|
direction: null,
|
|
@@ -1271,7 +1635,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1271
1635
|
}
|
|
1272
1636
|
updateLowestPrice(results) {
|
|
1273
1637
|
if (!results.length || this.searchService.isFlightsGrouped())
|
|
1274
|
-
return;
|
|
1638
|
+
return; //
|
|
1275
1639
|
const result = results[0];
|
|
1276
1640
|
const journeys = result.journeys;
|
|
1277
1641
|
if (!journeys.length)
|
|
@@ -1285,24 +1649,63 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1285
1649
|
}, { amount: Number.MAX_SAFE_INTEGER, currencyCode: currency });
|
|
1286
1650
|
}
|
|
1287
1651
|
doBooking(intBasket, selectedFlight, schemaDetails, outboundDate, inboundDate, price, requiresReason) {
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1652
|
+
var _a, _b;
|
|
1653
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1654
|
+
const { sourceId, co2PerItem, co2PerPassenger, total } = selectedFlight;
|
|
1655
|
+
const booking = {
|
|
1656
|
+
adults: this.adults,
|
|
1657
|
+
basket: intBasket.id,
|
|
1658
|
+
children: this.children,
|
|
1659
|
+
co2PerItem,
|
|
1660
|
+
co2PerPassenger,
|
|
1661
|
+
currency: total.currency,
|
|
1662
|
+
detail: schemaDetails,
|
|
1663
|
+
price,
|
|
1664
|
+
searchQuery: this.resultQuery,
|
|
1665
|
+
service: sourceId.toString(),
|
|
1666
|
+
outboundDate,
|
|
1667
|
+
lowestPrice: (_a = this.lowestPrice) === null || _a === void 0 ? void 0 : _a.amount,
|
|
1668
|
+
lowestPriceCurrency: (_b = this.lowestPrice) === null || _b === void 0 ? void 0 : _b.currencyCode
|
|
1669
|
+
};
|
|
1670
|
+
if (inboundDate) {
|
|
1671
|
+
booking.inboundDate = inboundDate;
|
|
1672
|
+
}
|
|
1673
|
+
const whatHappened = yield this.basketService.addToBasket(booking, intBasket, this.searchService, this.travellers, requiresReason);
|
|
1674
|
+
if (whatHappened === DifferentInvokdedUserReasons.research) {
|
|
1675
|
+
this.performSearch();
|
|
1676
|
+
}
|
|
1677
|
+
return whatHappened;
|
|
1678
|
+
});
|
|
1679
|
+
}
|
|
1680
|
+
get lowestPrice() {
|
|
1681
|
+
if (this.cheapestPrice)
|
|
1682
|
+
return this.cheapestPrice;
|
|
1683
|
+
const outbound = this.fullResults[0].outbound;
|
|
1684
|
+
const currency = outbound[0].standardFare.currency;
|
|
1685
|
+
let cheapestOutbound;
|
|
1686
|
+
outbound.forEach(a => {
|
|
1687
|
+
if (!cheapestOutbound || a.standardFare.price < cheapestOutbound)
|
|
1688
|
+
cheapestOutbound = a.standardFare.price;
|
|
1689
|
+
if (a.standardPremierFare.price < cheapestOutbound)
|
|
1690
|
+
cheapestOutbound = a.standardPremierFare.price;
|
|
1691
|
+
if (a.businessPremierFare.price < cheapestOutbound)
|
|
1692
|
+
cheapestOutbound = a.businessPremierFare.price;
|
|
1693
|
+
});
|
|
1694
|
+
const inbound = this.fullResults[0].inbound;
|
|
1695
|
+
let cheapestinbound;
|
|
1696
|
+
if (inbound) {
|
|
1697
|
+
inbound.forEach(a => {
|
|
1698
|
+
if (!cheapestinbound || a.standardFare.price < cheapestinbound)
|
|
1699
|
+
cheapestinbound = a.standardFare.price;
|
|
1700
|
+
if (a.standardPremierFare.price < cheapestinbound)
|
|
1701
|
+
cheapestinbound = a.standardPremierFare.price;
|
|
1702
|
+
if (a.businessPremierFare.price < cheapestinbound)
|
|
1703
|
+
cheapestinbound = a.businessPremierFare.price;
|
|
1704
|
+
});
|
|
1304
1705
|
}
|
|
1305
|
-
|
|
1706
|
+
else
|
|
1707
|
+
cheapestinbound = 0;
|
|
1708
|
+
return { amount: cheapestOutbound + cheapestinbound, currencyCode: currency };
|
|
1306
1709
|
}
|
|
1307
1710
|
makeSchemaFlights(selectedFlight, flightGroup, groupIndex, segmentIndex) {
|
|
1308
1711
|
return Object.assign(Object.assign({}, selectedFlight), { journeyInfo: {
|
|
@@ -1379,7 +1782,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1379
1782
|
addEurostarJourneysToBasket(eurostarQuote) {
|
|
1380
1783
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1381
1784
|
if (eurostarQuote.unavailable) {
|
|
1382
|
-
return Promise.resolve(
|
|
1785
|
+
return Promise.resolve(DifferentInvokdedUserReasons.cancel);
|
|
1383
1786
|
}
|
|
1384
1787
|
const intBasket = yield this.basketService.getDefaultBasket();
|
|
1385
1788
|
const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
|
|
@@ -1417,9 +1820,13 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1417
1820
|
booking.inboundDate = inboundDate.format();
|
|
1418
1821
|
schemaDetails.journeyType = 'roundtrip';
|
|
1419
1822
|
}
|
|
1420
|
-
|
|
1823
|
+
const whatHappened = yield this.basketService.addToBasket(booking, intBasket, this.searchService, this.travellers, eurostarQuote.requiresReason);
|
|
1824
|
+
if (whatHappened === DifferentInvokdedUserReasons.research) {
|
|
1825
|
+
this.performSearch();
|
|
1826
|
+
}
|
|
1827
|
+
return whatHappened;
|
|
1421
1828
|
}
|
|
1422
|
-
return Promise.resolve(
|
|
1829
|
+
return Promise.resolve(DifferentInvokdedUserReasons.cancel);
|
|
1423
1830
|
});
|
|
1424
1831
|
}
|
|
1425
1832
|
// TODO waiting for data
|
|
@@ -1572,16 +1979,22 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1572
1979
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1573
1980
|
this.fareType = fav.fareType;
|
|
1574
1981
|
this.includeNearbyAirports = fav.includeNearbyAirports;
|
|
1575
|
-
this.chosenSearchType = fav.returnTrip
|
|
1576
|
-
|
|
1577
|
-
|
|
1982
|
+
this.chosenSearchType = fav.returnTrip
|
|
1983
|
+
? EurostarSearchType.return
|
|
1984
|
+
: EurostarSearchType.oneWay;
|
|
1985
|
+
this.searchService
|
|
1986
|
+
.getAirportsList(fav.originAirport)
|
|
1987
|
+
.subscribe((results) => {
|
|
1988
|
+
this.departLocation = results.find((a) => a.gateway == fav.originAirport);
|
|
1578
1989
|
});
|
|
1579
|
-
this.searchService
|
|
1580
|
-
|
|
1990
|
+
this.searchService
|
|
1991
|
+
.getAirportsList(fav.destinationAirport)
|
|
1992
|
+
.subscribe((results) => {
|
|
1993
|
+
this.arriveLocation = results.find((a) => a.gateway == fav.destinationAirport);
|
|
1581
1994
|
});
|
|
1582
1995
|
this._passengers = fav.passengers;
|
|
1583
|
-
this.adults = fav.passengers.filter((a) => a.type ==
|
|
1584
|
-
this.children = fav.passengers.filter((a) => a.type ==
|
|
1996
|
+
this.adults = fav.passengers.filter((a) => a.type == 'ADULT').length;
|
|
1997
|
+
this.children = fav.passengers.filter((a) => a.type == 'CHILD').length;
|
|
1585
1998
|
});
|
|
1586
1999
|
}
|
|
1587
2000
|
openEurostarFareRules(basketItem) {
|
|
@@ -1602,4 +2015,4 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1602
2015
|
}
|
|
1603
2016
|
EurostarEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_eurostar';
|
|
1604
2017
|
EurostarEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_eurostar';
|
|
1605
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL2NsYXNzZXMvZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBQUUsZUFBZSxFQUE2QixNQUFNLE1BQU0sQ0FBQztBQUlsRSxPQUFPLEVBS0wsUUFBUSxFQUNSLGdCQUFnQixFQUtoQixtQkFBbUIsRUFFbkIsV0FBVyxFQUdaLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUtMLG1CQUFtQixFQWNwQixNQUFNLGdCQUFnQixDQUFDO0FBT3hCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBY2pFLE9BQU8sRUFJTCxVQUFVLEVBQ1gsTUFBTSw0QkFBNEIsQ0FBQztBQUdwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxlQUFlLEdBQWtCLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkQsS0FBSyxFQUFFLEVBQUU7SUFDVCxVQUFVLEVBQUUsRUFBRTtJQUNkLFdBQVcsRUFBRSxFQUFFO0lBQ2YsT0FBTyxFQUFFLEVBQUU7SUFDWCxRQUFRLEVBQUUsRUFBRTtJQUNaLFlBQVksRUFBRSxFQUFFO0lBQ2hCLGVBQWUsRUFBRSxFQUFFO0lBQ25CLHFCQUFxQixFQUFFLEVBQUU7SUFDekIsY0FBYyxFQUFFLEVBQUU7SUFDbEIsb0JBQW9CLEVBQUUsRUFBRTtJQUN4QixPQUFPLEVBQUUsRUFBRTtJQUNYLFNBQVMsRUFBRSxFQUFFO0lBQ2IsS0FBSyxFQUFFO1FBQ0wsR0FBRyxFQUFF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bSAnbW9tZW50JztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7IEZsaWdodEZpbHRlcnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1maWx0ZXJzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFNlbGVjdEZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0LWZpbHRlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIERlc3RpbmF0aW9uRW50cnksXHJcbiAgRmFyZVR5cGUsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBGbGlnaHRGYXJlVG90YWwsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxyXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXHJcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIElucHV0RmxpZ2h0Sm91cm5leVxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEV1cm9zdGFyUXVvdGVSZXN1bHQsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRBaXJwb3J0RGV0YWlscyxcclxuICBPQlRBaXJsaW5lc0RldGFpbHMsXHJcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICBHcm91cGVkRmxpZ2h0cyxcclxuICBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgRXVyb3N0YXJHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgRXVyb3N0YXJSZXN1bHRzLFxyXG4gIEV1cm9zdGFySXRlbSxcclxuICBFdXJvc3RhckZhcmUsXHJcbiAgRXVyb3N0YXJDbGFzc0VudW0sXHJcbiAgRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5LFxyXG4gIE1pbk1heCxcclxuICBGbGlnaHRBbGxRdW90ZVJlc3VsdCxcclxuICBGbGlnaHRRdW90ZVJlc3VsdEFycmF5LFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgRnVsbFVzZXJEZXRhaWxzLFxyXG4gIFVzZXJTZXJ2aWNlSW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmltcG9ydCB7IEV1cm9zdGFyU2VhcmNoVHlwZSB9IGZyb20gJy4vZXVyb3N0YXItc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcixcclxuICBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9ldXJvc3Rhci1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBFdXJvc3RhckVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgRXVyb3N0YXJUZW1wUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEFsbG93ZWRDbGFzc2VzLFxyXG4gIEZsaWdodE9wZXJhdG9yLFxyXG4gIEZsaWdodFNvcnRUeXBlcyxcclxuICBUaW1lV2luZG93XHJcbn0gZnJvbSAnLi9mbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJRXVyb3N0YXJTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ldXJvc3Rhci1zZWFyY2gtYXJnLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuL21vZGFsLXR5cGVzLmVudW0nO1xyXG5cclxuY29uc3QgREVGQVVMVF9GSUxURVJTOiBGbGlnaHRGaWx0ZXJzID0gT2JqZWN0LmZyZWV6ZSh7XHJcbiAgc3RvcHM6IHt9LFxyXG4gIHRvdGFsU3RvcHM6IHt9LFxyXG4gIG11c3RJbmNsdWRlOiB7fSxcclxuICBjbGFzc2VzOiB7fSxcclxuICBhaXJsaW5lczoge30sXHJcbiAgdHJhdmVsUG9saWN5OiB7fSxcclxuICBkZXBhdHVyZUFpcnBvcnQ6IHt9LFxyXG4gIGRlcGF0dXJlUmV0dXJuQWlycG9ydDoge30sXHJcbiAgYXJyaXZhbEFpcnBvcnQ6IHt9LFxyXG4gIGFycml2YWxSZXR1cm5BaXJwb3J0OiB7fSxcclxuICBiYWdnYWdlOiB7fSxcclxuICBmYXJlVHlwZXM6IHt9LFxyXG4gIHByaWNlOiB7XHJcbiAgICBtaW46IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxyXG4gICAgbWF4OiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxyXG4gIH0sXHJcbiAgZHVyYXRpb246IHtcclxuICAgIG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICBtYXg6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXHJcbiAgfSxcclxuICByZXR1cm5EdXJhdGlvbjoge1xyXG4gICAgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuICAgIG1heDogTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJcclxuICB9LFxyXG4gIGRlcGFydHVyZVRpbWU6IHtcclxuICAgIG1pbjogMCxcclxuICAgIG1heDogMjM1OVxyXG4gIH0sXHJcbiAgYXJyaXZhbFRpbWU6IHtcclxuICAgIG1pbjogMCxcclxuICAgIG1heDogMjM1OVxyXG4gIH0sXHJcbiAgcmV0dXJuRGVwYXJ0dXJlVGltZToge1xyXG4gICAgbWluOiAwLFxyXG4gICAgbWF4OiAyMzU5XHJcbiAgfSxcclxuICByZXR1cm5BcnJpdmFsVGltZToge1xyXG4gICAgbWluOiAwLFxyXG4gICAgbWF4OiAyMzU5XHJcbiAgfSxcclxuXHJcbiAgZmxpZ2h0TnVtYmVyOiAnJ1xyXG59KSBhcyBGbGlnaHRGaWx0ZXJzO1xyXG5cclxuZXhwb3J0IHR5cGUgRXVyb3N0YXJTdGF0aW9uID0ge1xyXG4gIGdhdGV3YXk6IHN0cmluZztcclxuICBkZXN0aW5hdGlvbjogc3RyaW5nO1xyXG59O1xyXG5cclxuZXhwb3J0IGVudW0gU29ydFR5cGVzRXVyb3N0YXIge1xyXG4gIENoZWFwZXN0Rmlyc3QgPSAnQycsXHJcbiAgRWFybGllc3RGaXJzdCA9ICdFJyxcclxuICBMYXRlc3RGaXJzdCA9ICdMJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTb3J0TWV0aG9kIHtcclxuICBzb3J0QnlQcmljZSA9ICdzb3J0QnlQcmljZScsXHJcbiAgc29ydEJ5RGF0ZSA9ICdzb3J0QnlEYXRlJ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRUeXBlRXVyb3N0YXIge1xyXG4gIC8qKiBUaXRsZSBkaXNwbGF5ZWQgb24gZHJvcGRvd24gKi9cclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIC8qKiBNZXRob2QgbmFtZSB1c2VkIGJ5IGNvbXBvbmVudCB0byBzb3J0IHJlc3VsdHMgKi9cclxuICBtZXRob2Q6IFNvcnRNZXRob2Q7XHJcbiAgLyoqIEljb24gZGlzcGxheWVkIG9uIGRyb3AgZG93biAqL1xyXG4gIGljb246IHN0cmluZztcclxuICAvKiogU29ydGluZyBkaXJlY3Rpb24gdHJ1ZSBmb3IgYXNjLCBmYWxzZSBmb3IgZHNjICovXHJcbiAgZGlyOiBib29sZWFuO1xyXG4gIC8vIHRoaXMgaXMgd2hhdCB3ZSB3aWxsIHVzZSB0byBzb3J0XHJcbiAgY29kZTogU29ydFR5cGVzRXVyb3N0YXI7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEV1cm9zdGFyR3JvdXBzID0gJ1N0YW5kYXJkJyB8ICdTdGFuZGFyZFByZW1pZXInIHwgJ0J1c2luZXNzUHJlbWllcic7XHJcblxyXG5pbnRlcmZhY2UgRXVyb3N0YXJTZXNzaW9uVHlwZSB7XHJcbiAgcmVzdWx0czogRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5O1xyXG4gIGdyb3VwRGF0YTogeyBba2V5OiBudW1iZXJdOiBudW1iZXJbXSB9O1xyXG4gIGdyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzO1xyXG4gIHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaDxTRV9RIGV4dGVuZHMgRXVyb3N0YXJRdW90ZUZldGNoZXJUeXBlPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBFdXJvc3RhclRlbXBQYXJhbXMsXHJcbiAgICBFdXJvc3RhclF1b3RlUmVzdWx0LFxyXG4gICAgRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfZXVyb3N0YXInO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX2V1cm9zdGFyJztcclxuXHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuRXVyb3N0YXI7XHJcblxyXG4gIGF2YWxpYWJsZUNsYXNzZXM6IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlcz4gPVxyXG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlcz4oW10pO1xyXG4gIHRpbWVDcml0ZXJpYU9wdGlvbnM6IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRpbWVXaW5kb3dbXVxyXG4gID4oW10pO1xyXG4gIGZsaWdodE9wZXJhdG9yczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodE9wZXJhdG9yW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIEZsaWdodE9wZXJhdG9yW11cclxuICA+KFtdKTtcclxuXHJcbiAgcHJpdmF0ZSBfbmVnb3RpYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX25lYXJieV9haXJwb3J0czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheVtdO1xyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogU29ydFR5cGVFdXJvc3RhcltdID0gW1xyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1ByaWNlJyxcclxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeVByaWNlLFxyXG4gICAgICBpY29uOiAnaWNvLWRvbGxhcicsXHJcbiAgICAgIGRpcjogdHJ1ZSxcclxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdUaW1lJyxcclxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeURhdGUsXHJcbiAgICAgIGljb246ICdpY28tY2FsZW5kYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkVhcmxpZXN0Rmlyc3RcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnVGltZSAoRGVzY2VuZGluZyknLFxyXG4gICAgICBtZXRob2Q6IFNvcnRNZXRob2Quc29ydEJ5RGF0ZSxcclxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcicsXHJcbiAgICAgIGRpcjogdHJ1ZSxcclxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuTGF0ZXN0Rmlyc3RcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBwcml2YXRlIF9zb3J0QXJyYXlMdTogU29ydFR5cGVFdXJvc3RhcltdID0gW1xyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1ByaWNlJyxcclxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeVByaWNlLFxyXG4gICAgICBpY29uOiAnaWNvLWRvbGxhcicsXHJcbiAgICAgIGRpcjogdHJ1ZSxcclxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdUaW1lJyxcclxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeURhdGUsXHJcbiAgICAgIGljb246ICdpY28tY2FsZW5kYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkVhcmxpZXN0Rmlyc3RcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBwcml2YXRlIF9mYXJlVHlwZUFycmF5OiBWYWx1ZURpc3BsYXlbXSA9IFtcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkZsZXhpYmxlLCBkaXNwbGF5OiAnRmxleGlibGUnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5MZWlzdXJlLCBkaXNwbGF5OiAnTGVpc3VyZScgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkxvd2VzdCwgZGlzcGxheTogJ0xvd2VzdCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOZWdvdGlhdGVkJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTm9uTmVnb3RpYXRlZCwgZGlzcGxheTogJ05vbi1OZWdvdGlhdGVkJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuUmVxdWVzdEZhcmVSdWxlcywgZGlzcGxheTogJ1JlcXVlc3QgRmFyZSBSdWxlcycgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlNlbGVjdEFuZFBybywgZGlzcGxheTogJ1NlbGVjdCAmIFBybycgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBtaW5pbXVtT3V0Qm91bmREYXRlID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG5cclxuICBwdWJsaWMgbWluaW11bUluQm91bmREYXRlID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc2VhcmNoVHlwZXM6IFZhbHVlRGlzcGxheVtdID0gW1xyXG4gICAgeyB2YWx1ZTogRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybiwgZGlzcGxheTogJ1JldHVybicgfSxcclxuICAgIHsgdmFsdWU6IEV1cm9zdGFyU2VhcmNoVHlwZS5vbmVXYXksIGRpc3BsYXk6ICdPbmUtd2F5JyB9XHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfb3V0RGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfaW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2luVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xyXG4gIHByaXZhdGUgX29yaWdpbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9wYXNzZW5nZXJzOiBhbnk7XHJcbiAgcHJpdmF0ZSBncm91cGVkT2JqZWN0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1tdO1xyXG4gIHByb3RlY3RlZCBmbGlnaHRzVG9Hcm91cDogeyBba2V5OiBudW1iZXJdOiBudW1iZXJbXSB9ID0ge307XHJcbiAgcHJvdGVjdGVkIHJlc3VsdFF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcztcclxuICBwcm90ZWN0ZWQgZ3JvdXBlZDogR3JvdXBlZEZsaWdodHMgPSBudWxsO1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBzZWxlY3RlZEdyb3VwRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucztcclxuICBwcml2YXRlIF9kaXNwbGF5QWRkSG90ZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RmlsdGVycz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgREVGQVVMVF9GSUxURVJTXHJcbiAgKTtcclxuXHJcbiAgcHVibGljIGdldCBkaXNwbGF5QWRkSG90ZWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheUFkZEhvdGVsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkaXNwbGF5QWRkSG90ZWwobmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kaXNwbGF5QWRkSG90ZWwgPSBuZXdWYWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdGVkR3JvdXBFdXJvc3Rhcjoge1xyXG4gICAgaXRlbTogRXVyb3N0YXJJdGVtO1xyXG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtO1xyXG4gIH0gPSB7XHJcbiAgICBpdGVtOiBudWxsLFxyXG4gICAgZGlyZWN0aW9uOiBudWxsXHJcbiAgfTtcclxuICBwcml2YXRlIF9zZWxlY3RlZEV1cm9zdGFyRmFyZToge1xyXG4gICAgaXRlbTogRXVyb3N0YXJGYXJlO1xyXG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtO1xyXG4gIH0gPSB7XHJcbiAgICBpdGVtOiBudWxsLFxyXG4gICAgZGlyZWN0aW9uOiBudWxsXHJcbiAgfTtcclxuXHJcbiAgZ2V0IHNlbGVjdGVkRXVyb3N0YXJGYXJlKCk6IEV1cm9zdGFyRmFyZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbTtcclxuICB9XHJcbiAgZ2V0IHNlbGVjdGVkRmFyZUNsYXNzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmU/Lml0ZW0/LmNsYXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoOTYpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwcmVmZXJyZWRDYXJyaWVycygpOiBPQlRBaXJsaW5lc0RldGFpbHNbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBwcmVmZXJyZWRDYXJyaWVycyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjEoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMSh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjIoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMih2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjMoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjQoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yNCh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM10gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMuX21pbkRhdGUgfHwgdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudCgpKTtcclxuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0TG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0TG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSAnJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeU9yaWdpbkFpcG9ydCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX29yaWdpbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHF1ZXJ5RGVzdGluYXRpb25BaXBvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0RGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0RGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgIHRoaXMuX291dERhdGUsXHJcbiAgICAgIHRoaXMuX291dFRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydFRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRUaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dFRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICB0aGlzLl9vdXREYXRlLFxyXG4gICAgICB0aGlzLl9vdXRUaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvdXRCb3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3V0Qm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSk7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xyXG4gICAgdGhpcy5taW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IHZhbHVlLnllYXIoKSxcclxuICAgICAgbW9udGg6IHZhbHVlLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IHZhbHVlLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgJiZcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlICYmXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCh0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlKS5hZGQoMSwgJ2RheScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9vdXRUaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJldHVybkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZXR1cm5EYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9pbkRhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhcnJpdmVUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5UaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhcnJpdmVUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2luVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGluYm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW5ib3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIHRoaXMuX2luRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9pblRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJyaXZlTG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYXJyaXZlTG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybkNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybkNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogRXVyb3N0YXJTZWFyY2hUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hUeXBlKHR5cGU6IEV1cm9zdGFyU2VhcmNoVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzUmV0dXJuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dFRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dFRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluVGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBpblRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIGdldCBtYXhDb25uZWN0aW9ucygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHNldCBtYXhDb25uZWN0aW9ucyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX211bHRpRGVzdGluYXRpb246IERlc3RpbmF0aW9uRW50cnlbXSA9IFtdO1xyXG4gIGdldCBtdWx0aURlc3RpbmF0aW9uKCk6IElNdWx0aURlc3RpbmF0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IG11bHRpRGVzdGluYXRpb24odmFsdWVBcnJheTogSU11bHRpRGVzdGluYXRpb25bXSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24gPSB2YWx1ZUFycmF5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KG11bHRpRGVzdGluYXRpb246IElNdWx0aURlc3RpbmF0aW9uW10pIHtcclxuICAgIGNvbnN0IG5ld011bHRpRGVzdGluYXRpb24gPSB0aGlzLmhlbHBlcnMuY2xvbmUobXVsdGlEZXN0aW5hdGlvbik7XHJcbiAgICByZXR1cm4gbmV3TXVsdGlEZXN0aW5hdGlvbi5yZWR1Y2UoXHJcbiAgICAgIChkZXN0aW5hdGlvbkFycmF5OiBEZXN0aW5hdGlvbkVudHJ5W10sIGl0ZW06IElNdWx0aURlc3RpbmF0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25PYmplY3QgPSB7fSBhcyBEZXN0aW5hdGlvbkVudHJ5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0Lm9yaWcgPSBpdGVtLm9yaWcuZ2F0ZXdheTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5kZXN0ID0gaXRlbS5kZXN0LmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGF0ZSA9IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKGl0ZW0uZGF0ZSk7XHJcbiAgICAgICAgZGVzdGluYXRpb25BcnJheS5wdXNoKGRlc3RpbmF0aW9uT2JqZWN0KTtcclxuICAgICAgICByZXR1cm4gZGVzdGluYXRpb25BcnJheTtcclxuICAgICAgfSxcclxuICAgICAgW10gYXMgRGVzdGluYXRpb25FbnRyeVtdXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IG9ubHlcclxuICBnZXQgc29ydERyb3Bkb3duVmFsdWVzKCk6IFNvcnRUeXBlRXVyb3N0YXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydEFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlc0x1KCk6IFNvcnRUeXBlRXVyb3N0YXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydEFycmF5THU7XHJcbiAgfVxyXG5cclxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9mYXJlVHlwZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZhcmVUeXBlKCk6IEZhcmVUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgZmFyZVR5cGUodmFsdWU6IEZhcmVUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBuZWdvdGlhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX25lZ290aWF0ZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgbmVnb3RpYXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fbmVnb3RpYXRlZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHZhbHVlO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZXVyb3N0YXJGZXRjaGVyOiBCYXNlRXVyb3N0YXJRdW90ZUZldGNoZXI8U0VfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMpO1xyXG5cclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgdGVtcFBhcmFtczogRXVyb3N0YXJUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IEV1cm9zdGFyVGVtcFBhcmFtcztcclxuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcclxuICAgICAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBFdXJvc3RhclRlbXBQYXJhbXMsXHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDoge30gYXMgRXVyb3N0YXJUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG4gICAgLy8gZGF0YS50ZW1wUGFyYW1zLmFkdWx0cyA9IDE7XHJcbiAgICAvLyBkYXRhLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IFtGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXldO1xyXG4gICAgY29uc3QgcXVlcnkgPSBzZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KGRhdGEudGVtcFBhcmFtcyk7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMocXVlcnkpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5FdXJvc3RhclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAvLyB0aGlzLnRlbXBQYXJhbXMuaW5mYW50cyA9IHNwbGl0VHJhdmVsbGVycy5pbmZhbnRzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdXNlclNlcnZpY2UuY2hhbmdlVXNlci5zdWJzY3JpYmUoKHVzZXI6IEZ1bGxVc2VyRGV0YWlscykgPT4ge1xyXG4gICAgICB0aGlzLnRpbWVDcml0ZXJpYU9wdGlvbnMubmV4dChbXHJcbiAgICAgICAgVGltZVdpbmRvdy5Bbnl0aW1lLFxyXG4gICAgICAgIFRpbWVXaW5kb3cuQXJyaXZlLFxyXG4gICAgICAgIFRpbWVXaW5kb3cuRGVwYXJ0XHJcbiAgICAgIF0pOyAvLyBUT0RPIHVwZGF0ZSB3aXRoIGFueSBVRnNcclxuICAgICAgdGhpcy51cGRhdGVBdmFsaWFibGVDbGFzc2VzKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICAgIGNvbnN0IHJlc3VsdHM6IEV1cm9zdGFyU2Vzc2lvblR5cGUgPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcclxuICAgICAgdGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWVcclxuICAgICkgfHwge1xyXG4gICAgICByZXN1bHRzOiBbXSxcclxuICAgICAgZ3JvdXBEYXRhOiB7fSxcclxuICAgICAgZ3JvdXBlZDogW10sXHJcbiAgICAgIHF1ZXJ5OiB7fSBhcyBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlc1xyXG4gICAgfTtcclxuICAgIHRoaXMuZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cy5yZXN1bHRzKTtcclxuICAgIHRoaXMuZmxpZ2h0c1RvR3JvdXAgPSByZXN1bHRzLmdyb3VwRGF0YSB8fCB7fTtcclxuICAgIHRoaXMucmVzdWx0UXVlcnkgPSByZXN1bHRzLnF1ZXJ5O1xyXG4gICAgY29uc3QgaXNGbGlnaHRzR3JvdXBlZCA9IHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dCgocmVzdWx0cy5yZXN1bHRzIHx8IFtdKSBhcyBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXkpO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdHNDbG9uZTogYW55ID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMucmVzdWx0cyk7XHJcbiAgICAvLyBnZXQgYXJvdW5kIHRoZSBhbm5veWluZyB0eXBlIHJlc3RyaWN0aW9ucyAtIEkgS05PVyBKT1VSTkVZUyBJUyBUSEVSRSBJIENBTiBTRUUgSVQgU1RPUCBURUxMSU5HIE1FIElUIElTTidUIFRZUEVTQ1JJUFQhXHJcbiAgICBpZiAocmVzdWx0c0Nsb25lLmxlbmd0aClcclxuICAgICAgdGhpcy5maWx0ZXJzLm5leHQoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXHJcbiAgICAgICAgICByZXN1bHRzQ2xvbmVbMF0uam91cm5leXMsXHJcbiAgICAgICAgICBERUZBVUxUX0ZJTFRFUlNcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgdGhpcy5uZWdvdGlhdGVkID1cclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID09PSBGYXJlVHlwZS5OZWdvdGlhdGVkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzKFxyXG4gICAgcmVzdWx0czE6IEV1cm9zdGFyUXVvdGVSZXN1bHRcclxuICApOiBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgdGhpcy5yZXN1bHRRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgIGRlbGV0ZSB0aGlzLnJlc3VsdFF1ZXJ5LndpdGhHcm91cGVkO1xyXG4gICAgdGhpcy5maWx0ZXJzLm5leHQoXHJcbiAgICAgIHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKHJlc3VsdHMxLmpvdXJuZXlzLCBERUZBVUxUX0ZJTFRFUlMpXHJcbiAgICApO1xyXG4gICAgaWYgKHJlc3VsdHMxICYmIHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcclxuICAgICAgY29uc3QgcmV0dXJuZGF0YSA9IChyZXN1bHRzMS5qb3VybmV5cyB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAgIChcclxuICAgICAgICAgIGFjYzogRXVyb3N0YXJSZXN1bHRzLFxyXG4gICAgICAgICAgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICBpbmRleDogbnVtYmVyXHJcbiAgICAgICAgKTogRXVyb3N0YXJSZXN1bHRzID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBldXJvUmVzdWx0ID0gdGhpcy5mb3JtYXRFdXJvc3RhclJlc3VsdHMoXHJcbiAgICAgICAgICAgICAgcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICByZXN1bHQudG90YWwsXHJcbiAgICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5jbzJQZXJQYXNzZW5nZXIgPSByZXN1bHQuY28yUGVyUGFzc2VuZ2VyO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlckl0ZW0gPSByZXN1bHQuY28yUGVySXRlbTtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5zb3VyY2VJZCA9IHJlc3VsdC5zb3VyY2VJZDtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC50b3RhbCA9IHJlc3VsdC50b3RhbDtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKHJlc3VsdC5vdXRib3VuZFRvdGFsRHVyYXRpb24pO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhldXJvUmVzdWx0LmNhYmluQ2xhc3MpO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIWFjYy5vdXRib3VuZC5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGl0ZW06IEV1cm9zdGFySXRlbSkgPT5cclxuICAgICAgICAgICAgICAgICAgaXRlbS5kYXRlRGVwYXJ0dXJlID09PSBldXJvUmVzdWx0LmRhdGVEZXBhcnR1cmUgJiZcclxuICAgICAgICAgICAgICAgICAgaXRlbS5jYWJpbkNsYXNzID09PSBldXJvUmVzdWx0LmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGFjYy5vdXRib3VuZC5wdXNoKGV1cm9SZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgZXVyb1Jlc3VsdCA9IHRoaXMuZm9ybWF0RXVyb3N0YXJSZXN1bHRzKFxyXG4gICAgICAgICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICByZXN1bHQudG90YWwsXHJcbiAgICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5jbzJQZXJQYXNzZW5nZXIgPSByZXN1bHQuY28yUGVyUGFzc2VuZ2VyO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlckl0ZW0gPSByZXN1bHQuY28yUGVySXRlbTtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5zb3VyY2VJZCA9IHJlc3VsdC5zb3VyY2VJZDtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC50b3RhbCA9IHJlc3VsdC50b3RhbDtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKHJlc3VsdC5pbmJvdW5kVG90YWxEdXJhdGlvbik7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGV1cm9SZXN1bHQuY2FiaW5DbGFzcyk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhYWNjLmluYm91bmQuZmluZChcclxuICAgICAgICAgICAgICAgIChpdGVtOiBFdXJvc3Rhckl0ZW0pID0+XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0ZURlcGFydHVyZSA9PT0gZXVyb1Jlc3VsdC5kYXRlRGVwYXJ0dXJlICYmXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW0uY2FiaW5DbGFzcyA9PT0gZXVyb1Jlc3VsdC5jYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBhY2MuaW5ib3VuZC5wdXNoKGV1cm9SZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBvdXRib3VuZDogW10sIGluYm91bmQ6IFtdIH0gYXMgRXVyb3N0YXJSZXN1bHRzXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybmRhdGEub3V0Ym91bmQgPSByZXR1cm5kYXRhLm91dGJvdW5kLnJlZHVjZShcclxuICAgICAgICB0aGlzLm1hdGNoRmFyZXMuYmluZCh0aGlzKSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm5kYXRhLmluYm91bmQgPSByZXR1cm5kYXRhLmluYm91bmQucmVkdWNlKFxyXG4gICAgICAgIHRoaXMubWF0Y2hGYXJlcy5iaW5kKHRoaXMpLFxyXG4gICAgICAgIFtdXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBbcmV0dXJuZGF0YV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcmVzdWx0czEgPyBbcmVzdWx0czFdIDogW107XHJcbiAgICB9XHJcbiAgfVxyXG4gIG1hdGNoRmFyZXMoYWNjOiBFdXJvc3Rhckl0ZW1bXSwgb3V0OiBFdXJvc3Rhckl0ZW0pOiBFdXJvc3Rhckl0ZW1bXSB7XHJcbiAgICBjb25zdCBtYXRjaGluZ0V1cm9zdGFyID0gYWNjLmZpbmQoXHJcbiAgICAgIChpdGVtKSA9PiBpdGVtLmRhdGVEZXBhcnR1cmUgPT09IG91dC5kYXRlRGVwYXJ0dXJlXHJcbiAgICApO1xyXG4gICAgaWYgKCFtYXRjaGluZ0V1cm9zdGFyKSB7XHJcbiAgICAgIGFjYy5wdXNoKG91dCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBjaGVjayB3aGF0IG5lZWRzIGFkZGluZyBhbmQgYWRkIGl0XHJcbiAgICAgIHN3aXRjaCAob3V0LmNhYmluQ2xhc3MpIHtcclxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teTpcclxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnczpcclxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQ6XHJcbiAgICAgICAgICBtYXRjaGluZ0V1cm9zdGFyLnN0YW5kYXJkRmFyZSA9IG91dC5zdGFuZGFyZEZhcmU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdQcmVtaXVtJzpcclxuICAgICAgICAgIG1hdGNoaW5nRXVyb3N0YXIuc3RhbmRhcmRQcmVtaWVyRmFyZSA9IG91dC5zdGFuZGFyZFByZW1pZXJGYXJlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxyXG4gICAgICAgICAgbWF0Y2hpbmdFdXJvc3Rhci5idXNpbmVzc1ByZW1pZXJGYXJlID0gb3V0LmJ1c2luZXNzUHJlbWllckZhcmU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2hvdyBkaWQgSSBnZXQgaGVyZScsIG91dC5jYWJpbkNsYXNzKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RXVyb3N0YXJSZXN1bHRzKFxyXG4gICAgcmVzdWx0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgdG90YWw6IEZsaWdodEZhcmVUb3RhbCxcclxuICAgIGluZGV4OiBudW1iZXJcclxuICApOiBFdXJvc3Rhckl0ZW0ge1xyXG4gICAgY29uc3QgcmV0dXJuT2JqZWN0OiBFdXJvc3Rhckl0ZW0gPSB7XHJcbiAgICAgIGRhdGVBcnJpdmFsOiBudWxsLFxyXG4gICAgICBkYXRlRGVwYXJ0dXJlOiBudWxsLFxyXG4gICAgICBkdXJhdGlvbjogbnVsbCxcclxuICAgICAgdGltZUFycml2YWw6IG51bGwsXHJcbiAgICAgIHRpbWVEZXBhcnR1cmU6IG51bGwsXHJcbiAgICAgIGNvMlBlckl0ZW06IDAsXHJcbiAgICAgIGNvMlBlclBhc3NlbmdlcjogMCxcclxuICAgICAgc291cmNlSWQ6IG51bGwsXHJcbiAgICAgIHRvdGFsOiBudWxsLFxyXG4gICAgICB1aWQ6IG51bGwsXHJcbiAgICAgIGNhYmluQ2xhc3M6IG51bGwsXHJcbiAgICAgIGJ1c2luZXNzUHJlbWllckZhcmU6IHtcclxuICAgICAgICBjbGFzczogbnVsbCxcclxuICAgICAgICBmYXJlOiBudWxsLFxyXG4gICAgICAgIGlzRGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgcHJpY2U6IE5hTixcclxuICAgICAgICBjdXJyZW5jeTogJ0dCUCcsXHJcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0YW5kYXJkRmFyZToge1xyXG4gICAgICAgIGNsYXNzOiBudWxsLFxyXG4gICAgICAgIGZhcmU6IG51bGwsXHJcbiAgICAgICAgaXNEaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgICBwcmljZTogTmFOLFxyXG4gICAgICAgIGN1cnJlbmN5OiAnR0JQJyxcclxuICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgc3RhbmRhcmRQcmVtaWVyRmFyZToge1xyXG4gICAgICAgIGNsYXNzOiBudWxsLFxyXG4gICAgICAgIGZhcmU6IG51bGwsXHJcbiAgICAgICAgaXNEaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgICBwcmljZTogTmFOLFxyXG4gICAgICAgIGN1cnJlbmN5OiAnR0JQJyxcclxuICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgcmVxdWlyZXNSZWFzb246IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgLy8gcmV0dXJuT2JqZWN0LmR1cmF0aW9uID0gcmVzdWx0cy5vdXRib3VuZFRvdGFsRHVyYXRpb247XHJcbiAgICByZXN1bHRzLmZvckVhY2goKGZsaWdodDogRmxpZ2h0Sm91cm5leSkgPT4ge1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0ZUFycml2YWwgPSBmbGlnaHQuZGF0ZVRpbWVBcnJpdmluZztcclxuICAgICAgcmV0dXJuT2JqZWN0LmRhdGVEZXBhcnR1cmUgPSBmbGlnaHQuZGF0ZVRpbWVEZXBhcnRpbmc7XHJcbiAgICAgIHJldHVybk9iamVjdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKGZsaWdodC50b3RhbER1cmF0aW9uKTtcclxuICAgICAgcmV0dXJuT2JqZWN0LnRpbWVBcnJpdmFsID0gbW9tZW50KGZsaWdodC5kYXRlVGltZUFycml2aW5nKS5mb3JtYXQoXHJcbiAgICAgICAgJ0hIOm1tJ1xyXG4gICAgICApO1xyXG4gICAgICByZXR1cm5PYmplY3QudGltZURlcGFydHVyZSA9IG1vbWVudChmbGlnaHQuZGF0ZVRpbWVEZXBhcnRpbmcpLmZvcm1hdChcclxuICAgICAgICAnSEg6bW0nXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybk9iamVjdC5jYWJpbkNsYXNzID0gZmxpZ2h0LmNhYmluQ2xhc3M7XHJcbiAgICAgIHJldHVybk9iamVjdC51aWQgPSBpbmRleDtcclxuICAgICAgLy8gWzE0OjQxXSBCcmVuZGFuIFZlbmluZ2FcclxuICAgICAgLy8gRWNvbm9teSAoYW5kIHRoZWlyIHZhcmlhbnRzKSB3b3VsZCBiZSBTdGFuZGFyZFxyXG4gICAgICAvLyBQcmVtaXVtIHdvdWxkIGJlIFN0YW5kYXJkIFByZW1pdW1cclxuICAgICAgLy8gQnVzaW5lc3Mgd291bGQgYmUgQnVzaW5lc3MgUHJlbWl1bVxyXG4gICAgICBzd2l0Y2ggKGZsaWdodC5jYWJpbkNsYXNzKSB7XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aTpcclxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnczpcclxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWQ6XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXk6XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuZmFyZSA9IGZsaWdodDtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUucHJpY2UgPSB0b3RhbC5wcmljZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuY3VycmVuY3kgPSB0b3RhbC5jdXJyZW5jeTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuY2xhc3MgPSBmbGlnaHQuY2FiaW5DbGFzcztcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1ByZW1pdW0nOlxyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuZmFyZSA9IGZsaWdodDtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlID0gdG90YWwucHJpY2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5jdXJyZW5jeSA9IHRvdGFsLmN1cnJlbmN5O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuY2xhc3MgPSBmbGlnaHQuY2FiaW5DbGFzcztcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3M6XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5mYXJlID0gZmxpZ2h0O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUucHJpY2UgPSB0b3RhbC5wcmljZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ25ldyBjbGFzcyB0byBiZSBpbXBsZW1lbnRlZDogJywgZmxpZ2h0LmNhYmluQ2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5PYmplY3Q7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeShjaGVja0lzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KCkpO1xyXG4gICAgaWYgKGNoZWNrSXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRQYXJhbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICB0aGlzLnJlc2V0UXVlcnkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAoIXRoaXMuX29yaWdpbkFpcnBvcnQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGFycml2YWwgZGVzdGluYXRpb24nKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc0FmdGVyKG1vbWVudCgpKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ICYmXHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHRoaXMuX29yaWdpbkFpcnBvcnRcclxuICAgICkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICdPcmlnaW4gYW5kIGRlc3RpbmF0aW9uIHN0YXRpb24gY2Fubm90IGJlIHRoZSBzYW1lJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcclxuICAgICAgLy8gVE9ETyBjaGVjayB0aGF0IHJldHVybiBkZXRhaWxzIGFyZSBzZXRcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNTYW1lT3JBZnRlcihcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMgaXMgc3R1ZmYgZm9yIG1hdGNoaW5nIGNhYmluIGNsYXNzZXNcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrQ2FiaW5NYXRjaGlzVmFsaWQoKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnVGhlIHR5cGVzIG9mIGNhYmluIGNsYXNzZXMgc2VsZWN0ZWQgYXJlIG5vdCBjb21wYXRpYmxlLiBFeGFtcGxlcyBvZiBjb21wYXRpYmxlIGNhYmluIGNsYXNzZXM7IEFueSAtIEFueSwgU3RhbmRhcmQgLSBTdGFuZGFyZCwgQnVzaW5lc3MgLSBCdXNpbmVzcydcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQ2FiaW5NYXRjaGlzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzKSB7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5Bbnk6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkFueTtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXk6XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgIT09IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MgJiZcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzICE9PSBGbGlnaHRDYWJpbkNsYXNzLkFueVxyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzczpcclxuICAgICAgICByZXR1cm4gIShcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXkgfHxcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PVxyXG4gICAgICAgICAgICBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IHx8XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9PT0gRmxpZ2h0Q2FiaW5DbGFzcy5BbnlcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRlbXBQYXJhbXMpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgICAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcclxuICAgICAgICB0aGlzLmV1cm9zdGFyRmV0Y2hlci5mZXRjaExpc3QodGhpcy5nZXRTZWFyY2hRdWVyeSgpKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeTogSUV1cm9zdGFyU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkV1cm9zdGFyLFxyXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcclxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5vdXRCb3VuZERhdGUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlc1xyXG4gICk6IElFdXJvc3RhclNlYXJjaEFyZ3Mge1xyXG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IElFdXJvc3RhclNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIGlmICh0aGlzLmRlcGFydExvY2F0aW9uKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmRlcGFydExvY2F0aW9uID0gdGhpcy5kZXBhcnRMb2NhdGlvbjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmFycml2ZUxvY2F0aW9uID0gdGhpcy5hcnJpdmVMb2NhdGlvbjtcclxuICAgIH1cclxuICAgIHNlYXJjaFF1ZXJ5Lm91dGJvdW5kQ2FiaW5DbGFzc05hbWUgPSB0aGlzLnR1cm5DYWJpblR5cGVUb05hbWUoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcclxuICAgICAgc2VhcmNoUXVlcnkucmV0dXJuQ2FiaW5DbGFzc05hbWUgPVxyXG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzID09PSB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc1xyXG4gICAgICAgICAgPyBzZWFyY2hRdWVyeS5vdXRib3VuZENhYmluQ2xhc3NOYW1lXHJcbiAgICAgICAgICA6IHRoaXMudHVybkNhYmluVHlwZVRvTmFtZSh0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG5cclxuICB0dXJuQ2FiaW5UeXBlVG9OYW1lKGNsYXNzVHlwZTogRmxpZ2h0Q2FiaW5DbGFzcykge1xyXG4gICAgY29uc3QgY2xhc3NlcyA9IHRoaXMuYXZhbGlhYmxlQ2xhc3Nlcy52YWx1ZTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ2Fsc3NOYW1lID0gY2xhc3Nlcy5maW5kKFxyXG4gICAgICAoY2xhc3NJdGVtKSA9PiBjbGFzc0l0ZW0udHlwZSA9PT0gY2xhc3NUeXBlXHJcbiAgICApLm5hbWU7XHJcbiAgICByZXR1cm4gW3NlbGVjdGVkQ2Fsc3NOYW1lXTtcclxuICB9XHJcblxyXG4gIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJnc1xyXG4gICAgICAgIC5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXHJcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mYXJlVHlwZTtcclxuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuVHJpcFxyXG4gICAgICA/IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm5cclxuICAgICAgOiBFdXJvc3RhclNlYXJjaFR5cGUub25lV2F5O1xyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcclxuICAgIH0gZWxzZSBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnQ7XHJcbiAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYXJyaXZlTG9jYXRpb247XHJcbiAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwYXJ0TG9jYXRpb247XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB3aW5kb3cgPT09IFRpbWVXaW5kb3cuRGVwYXJ0XHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICBkYXRlVGltZTogbW9tZW50Lk1vbWVudCxcclxuICAgIHdpbmRvdzogVGltZVdpbmRvd1xyXG4gICk6IHN0cmluZyB7XHJcbiAgICBpZiAod2luZG93ICE9PSBUaW1lV2luZG93LkFycml2ZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMik7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXHJcbiAgICBkYXRlOiBzdHJpbmcsXHJcbiAgICB0aW1lV2luZG93Pzogc3RyaW5nXHJcbiAgKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBpZiAodGltZVdpbmRvdykge1xyXG4gICAgICBjb25zdCBmbGlnaHRUaW1lID0gdGltZVdpbmRvdy5zcGxpdCgnLScpO1xyXG4gICAgICBsZXQgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzPihcclxuICAgICAgT2JqZWN0LmFzc2lnbihcclxuICAgICAgICB7fSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5BaXJwb3J0OiB0aGlzLl9vcmlnaW5BaXJwb3J0LFxyXG4gICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0OiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQsXHJcbiAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBhc3NlbmdlcnM6IHRoaXMuX3Bhc3NlbmdlcnMsXHJcbiAgICAgICAgICByZXR1cm5UcmlwOiB0aGlzLmlzUmV0dXJuLFxyXG4gICAgICAgICAgb3V0Ym91bmRDYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc11cclxuICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgICAgcmVxdWlyZUZyZWVCYWc6IG51bGwsXHJcbiAgICAgICAgICBtYXhDb25uZWN0aW9uczogdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zLFxyXG4gICAgICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzLFxyXG4gICAgICAgICAgcHJlZmVycmVkQ2FycmllcnM6IHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycy5tYXAoXHJcbiAgICAgICAgICAgIChjYXJyaWVyOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+XHJcbiAgICAgICAgICAgICAgY2Fycmllcj8uY29kZSA/IGNhcnJpZXIuY29kZSA6IG51bGxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBmYXJlVHlwZTogdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlLFxyXG4gICAgICAgICAgd2l0aEdyb3VwZWQ6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRoaXMuaXNSZXR1cm5cclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIHJldHVybkRhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICByZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICByZXR1cm5BcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIHRoaXMuYXZhbGlhYmxlQ2xhc3Nlcy5uZXh0KFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBbnknLFxyXG4gICAgICAgIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3RhbmRhcmQgKHNlbWkgZmxleGlibGUpJyxcclxuICAgICAgICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdGFuZGFyZCBwcmVtaWVyIChzZW1pIGZsZXhpYmxlKScsXHJcbiAgICAgICAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0J1c2luZXNzIHByZW1pZXIgKGZ1bGx5IGZsZXhpYmxlKScsXHJcbiAgICAgICAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc1xyXG4gICAgICB9XHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIGZsaWdodCByZXN1bHRzXHJcbiAgICogQHRvZG8gLSBGaWxsIG91dCBQcmVmZXJyZWQgYW5kIENvMiBzb3J0aW5nIHdoZW4gd2UgaGF2ZSB0aGF0IGRhdGFcclxuICAgKi9cclxuICBwdWJsaWMgc29ydFJlc3VsdHMoXHJcbiAgICBzb3J0TWV0aG9kVmFsdWU6IFNvcnRUeXBlc0V1cm9zdGFyLFxyXG4gICAgZGlyOiBib29sZWFuLFxyXG4gICAgZ2l2ZW5SZXN1bHRzPzogRXVyb3N0YXJSZXN1bHRzW11cclxuICApOiB2b2lkIHtcclxuICAgIGxldCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICBnaXZlblJlc3VsdHNcclxuICAgICAgICA/IGdpdmVuUmVzdWx0c1xyXG4gICAgICAgIDogPEV1cm9zdGFyUmVzdWx0c1tdPig8dW5rbm93bj50aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgKTtcclxuXHJcbiAgICBzd2l0Y2ggKHNvcnRNZXRob2RWYWx1ZSkge1xyXG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3Q6XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5UHJpY2UocmVzdWx0cywgZGlyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0OlxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeURhdGUocmVzdWx0cywgZGlyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmVycm9yKGArKysgVW5rbm93biBzb3J0aW5nIG1ldGhvZDogJHtzb3J0TWV0aG9kVmFsdWV9ICsrK2ApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRSZXN1bHRzRmxpZ2h0Sm91cm5leXMoXHJcbiAgICBzb3J0TWV0aG9kVmFsdWU6IFNvcnRUeXBlc0V1cm9zdGFyLFxyXG4gICAgaW5ib3VuZDogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgZ2l2ZW5SZXN1bHRzPzogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShnaXZlblJlc3VsdHMpO1xyXG5cclxuICAgIHN3aXRjaCAoc29ydE1ldGhvZFZhbHVlKSB7XHJcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdDpcclxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlQcmljZUZsaWdodChyZXN1bHRzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0OlxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeURhdGVGbGlnaHQocmVzdWx0cywgaW5ib3VuZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuTGF0ZXN0Rmlyc3Q6XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RGF0ZUZsaWdodERlY2VuZGluZyhyZXN1bHRzLCBpbmJvdW5kKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmVycm9yKGArKysgVW5rbm93biBzb3J0aW5nIG1ldGhvZDogJHtzb3J0TWV0aG9kVmFsdWV9ICsrK2ApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ5UHJpY2VGbGlnaHQocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIoYS50b3RhbC5wcmljZSkgLSBOdW1iZXIoYi50b3RhbC5wcmljZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNvcnRCeURhdGVGbGlnaHQoXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGluYm91bmQ6IGJvb2xlYW5cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChpbmJvdW5kKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG1vbWVudChhLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KCkgLVxyXG4gICAgICAgICAgbW9tZW50KGIuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cclxuICAgICAgICAgIG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzb3J0QnlEYXRlRmxpZ2h0RGVjZW5kaW5nKFxyXG4gICAgcmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10sXHJcbiAgICBpbmJvdW5kOiBib29sZWFuXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgcmV0dXJuIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBpZiAoaW5ib3VuZCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBtb21lbnQoYi5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cclxuICAgICAgICAgIG1vbWVudChhLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KClcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKSAtXHJcbiAgICAgICAgICBtb21lbnQoYS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCByZXN1bHRzIGJ5IGRlcGFydHVyZSB0aW1lXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V1cm9zdGFyUmVzdWx0c1tdfSByZXN1bHRzXHJcbiAgICogQHJldHVybnNcclxuICAgKiBAbWVtYmVyb2YgRXVyb3N0YXJJbmZvXHJcbiAgICovXHJcbiAgc29ydEJ5RGF0ZShyZXN1bHRzOiBFdXJvc3RhclJlc3VsdHNbXSwgZGlyPzogYm9vbGVhbik6IEV1cm9zdGFyUmVzdWx0c1tdIHtcclxuICAgIGNvbnN0IGJ5RGF0ZSA9IChhOiBFdXJvc3Rhckl0ZW0sIGI6IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICBpZiAoZGlyKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudChhLmRhdGVEZXBhcnR1cmUpLnVuaXgoKSAtIG1vbWVudChiLmRhdGVEZXBhcnR1cmUpLnVuaXgoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50KGIuZGF0ZURlcGFydHVyZSkudW5peCgpIC0gbW9tZW50KGEuZGF0ZURlcGFydHVyZSkudW5peCgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSB7XHJcbiAgICAgIG91dGJvdW5kOiByZXN1bHRzWzBdLm91dGJvdW5kLnNvcnQoYnlEYXRlKSxcclxuICAgICAgaW5ib3VuZDogcmVzdWx0c1swXS5pbmJvdW5kLnNvcnQoYnlEYXRlKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBbc29ydGVkUmVzdWx0c107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0IHJlc3VsdHMgYnkgcHJpY2VcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXVyb3N0YXJSZXN1bHRzW119IHJlc3VsdHNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBFdXJvc3RhckluZm9cclxuICAgKi9cclxuICBzb3J0QnlQcmljZShyZXN1bHRzOiBFdXJvc3RhclJlc3VsdHNbXSwgZGlyPzogYm9vbGVhbik6IEV1cm9zdGFyUmVzdWx0c1tdIHtcclxuICAgIGNvbnN0IGJ5UHJpY2UgPSAoYTogRXVyb3N0YXJJdGVtLCBiOiBFdXJvc3Rhckl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgYVByaWNlID1cclxuICAgICAgICArYS5zdGFuZGFyZEZhcmUucHJpY2UgfHxcclxuICAgICAgICArYS5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlIHx8XHJcbiAgICAgICAgK2EuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZTtcclxuICAgICAgY29uc3QgYlByaWNlID1cclxuICAgICAgICArYi5zdGFuZGFyZEZhcmUucHJpY2UgfHxcclxuICAgICAgICArYi5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlIHx8XHJcbiAgICAgICAgK2IuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZTtcclxuICAgICAgaWYgKGRpcikge1xyXG4gICAgICAgIHJldHVybiBhUHJpY2UgLSBiUHJpY2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGJQcmljZSAtIGFQcmljZTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IHtcclxuICAgICAgb3V0Ym91bmQ6IHJlc3VsdHNbMF0ub3V0Ym91bmQuc29ydChieVByaWNlKSxcclxuICAgICAgaW5ib3VuZDogcmVzdWx0c1swXS5pbmJvdW5kLnNvcnQoYnlQcmljZSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gW3NvcnRlZFJlc3VsdHNdO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoXHJcbiAgICBwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBmbGlnaHRJdGVtOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XHJcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xyXG4gICAgICAvLyBUT0RPIGZsaWdodHMgaGF2ZW4ndCBiZWVuIGRvbmUgeWV0LlxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG90YWxCYWdnYWdlKHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KTogbnVtYmVyIHtcclxuICAgIGxldCB0b3RhbCA9IDA7XHJcblxyXG4gICAgY29uc3QgcGFyc2VkQWRkaXRpb25hbCA9IEpTT04ucGFyc2UocmVzdWx0LmFkZGl0aW9uYWwpO1xyXG4gICAgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMpIHtcclxuICAgICAgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0OiBhbnkpID0+IHtcclxuICAgICAgICBmbGlnaHQuYmFnZ2FnZS5mb3JFYWNoKChiYWc6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGJhZy5hbGxvd2FuY2UgJiYgYmFnLmFsbG93YW5jZSA+IHRvdGFsKSB7XHJcbiAgICAgICAgICAgIHRvdGFsID0gYmFnLmFsbG93YW5jZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZS5mb3JFYWNoKChiYWdnYWdlQWxsb3c6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSAmJlxyXG4gICAgICAgICAgTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSkgPiB0b3RhbFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdG90YWwgPSBOdW1iZXIoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3RhbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdpdmUgdGhlIGNvcnJlY3QgZm9ybWF0IGZvciB0cmFuc2ZlcmluZyBtaW51ZXRlcyBvbiB0aGUgc2xpZGVyc1xyXG4gICAqIEBwYXJhbSBtaW4gLSB0aGUgbWluIGluIDEwMHRoJ3MgdG8gdHJhbnNmb3JtIG9udG8gNjB0aCdzXHJcbiAgICovXHJcbiAgdHJhbnNmb3JtTWluKG1pbjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBudW0gPSAoTnVtYmVyKG1pbikgKiA2MCkgLyAxMDA7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnKysrIE51bSBDb3B5OiAnLCBfLmNsb25lKG51bSksICcgKysrJyk7XHJcbiAgICBpZiAobnVtICUgMSA8IDAuNSkge1xyXG4gICAgICBudW0gPSBNYXRoLmZsb29yKG51bSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBudW0gPSBNYXRoLmNlaWwobnVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVtLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGFwcGx5IGFsbCBmaWx0ZXJzIHRvIHJlc3VsdHNcclxuICAgKiBAcGFyYW0gZmlsdGVyc1xyXG4gICAqIEBwYXJhbSBpbmJvdW5kXHJcbiAgICogQHBhcmFtIHJlc3VsdHNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGFwcGx5RmlsdGVycyhmaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mdWxsUmVzdWx0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIG5lZWQgdG8gZmlsdGVyIG92ZXIgdGhlIHRpbWVzLCBzdG9wcyBhbmQgcHJpY2UsIHRob3VnaCBwcmljZSBhbmQgc3RvcHMgYWx3YXlzIHNlZW0gdG8gYmUgdGhlIHNhbWVcclxuXHJcbiAgICAvLyAhIC0gVkFSSU9VUyBGVU5DVElPTlMgVE8gUEFTUyBJTiBUTyBETyBUSEUgQUNUVUFMIEZJTFRFUklOR1xyXG5cclxuICAgIGNvbnN0IHRlc3RlciA9IChcclxuICAgICAgZmlsdGVyc1RvdGVzdDogUmVjb3JkPG51bWJlciB8IHN0cmluZywgU2VsZWN0RmlsdGVyPixcclxuICAgICAgdGVzdEZ1bmN0aW9uOiAoXHJcbiAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5LFxyXG4gICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXJcclxuICAgICAgKSA9PiBib29sZWFuXHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBPYmplY3QudmFsdWVzKGZpbHRlcnNUb3Rlc3QpLmZpbHRlcihcclxuICAgICAgICAoZmlsdGVyOiBTZWxlY3RGaWx0ZXIpID0+IGZpbHRlci5zZWxlY3RlZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiAhIXNlbGVjdGVkLmZpbmQoKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXN0RnVuY3Rpb24oZmxpZ2h0SXRpbmVyYXJ5LCBmaWx0ZXIudmFsdWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaXNUaW1lQmV0d2VlbiA9IChcclxuICAgICAgbWlubWF4OiBNaW5NYXgsXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XHJcblxyXG4gICAgICAgIC8vIG5vdyBhdHRlbXB0IHRvIGdldCB0aGUgbWluIC0gbWF5IG5lZWQgdG8gbm9ybWFsaXNlIHRoaXNcclxuICAgICAgICBjb25zdCB2YWwyID0gbW9tZW50KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS5nZXQoJ21pbnV0ZScpO1xyXG5cclxuICAgICAgICBjb25zdCB0b3RhbFRpbWU6IG51bWJlciA9IE51bWJlcihcclxuICAgICAgICAgIGAke3ZhbC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9JHt2YWwyXHJcbiAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB0b3RhbFRpbWUgPj0gbWlubWF4Lm1pbiAmJiB0b3RhbFRpbWUgPD0gbWlubWF4Lm1heDtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVwbGFjZUZpZWxkcyA9IChcclxuICAgICAgZmllbGQ6IHN0cmluZyxcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICk6IHN0cmluZyA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZFxyXG4gICAgICAgIC5yZXBsYWNlKCdPVVRCT1VORF9ERVBBUlRVUkUnLCAnb3V0Ym91bmRGbGlnaHRzLjAnKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgJ09VVEJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ291dGJvdW5kRmxpZ2h0cy4nICsgKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnJlcGxhY2UoJ0lOQk9VTkRfREVQQVJUVVJFJywgJ2luYm91bmRGbGlnaHRzLjAnKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgJ0lOQk9VTkRfQVJSSVZBTCcsXHJcbiAgICAgICAgICAnaW5ib3VuZEZsaWdodHMuJyArXHJcbiAgICAgICAgICAgICgoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggLSAxKVxyXG4gICAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGlzQmV0d2VlbiA9IChcclxuICAgICAgbWlubWF4OiBNaW5NYXgsXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdmFsID49IG1pbm1heC5taW4gJiYgdmFsIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGZpZWxkSGFzVmFsdWUgPSAoXHJcbiAgICAgIGZpZWxkOiBrZXlvZiBGbGlnaHRKb3VybmV5XHJcbiAgICApOiAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBmbGlnaHRbZmllbGRdID09PSB2YWx1ZTtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gISAtIE91dGJvdW5kIGFuZCBJbmJvdW5kIEZpbHRlcnNcclxuXHJcbiAgICBjb25zdCBvdXRJdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcbiAgICBjb25zdCBpbkl0aW5lcmFyeVRlc3RlcnM6ICgoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5hcnJpdmFsVGltZSwgJ09VVEJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZycpXHJcbiAgICApO1xyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMuZGVwYXJ0dXJlVGltZSxcclxuICAgICAgICAnT1VUQk9VTkRfREVQQVJUVVJFLmRhdGVUaW1lRGVwYXJ0aW5nJ1xyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xyXG5cclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUsXHJcbiAgICAgICAgJ0lOQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJ1xyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyAhIC0gVGVzdGVyc1xyXG4gICAgY29uc3Qgb3V0Sm91cm5leVRlc3RlcnM6ICgoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKGZpbHRlcnMuY2xhc3NlcywgZmllbGRIYXNWYWx1ZSgnY2FiaW5DbGFzcycpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBpbkpvdXJuZXlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG5cclxuICAgIGluSm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpKTtcclxuXHJcbiAgICAvLyAhLSBJdGluZXJhcmllc1xyXG4gICAgY29uc3Qgb3V0RmlsdGVySXRpbmVyYXJpZXMgPSAoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICBncm91cEluZGV4OiBudW1iZXJcclxuICAgICk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGFjYyA9IGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhb3V0Sm91cm5leVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChcclxuICAgICAgICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpbkZpbHRlckl0aW5lcmFyaWVzID0gKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgZ3JvdXBJbmRleDogbnVtYmVyXHJcbiAgICApOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBpbkl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAhIWluSm91cm5leVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChcclxuICAgICAgICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBub3cgZmluYWxseSBwZXJmb3JtIHRoZSBmaWx0ZXJpbmcgYW5kIGdvIG92ZXIgdGhlIHJlc3VsdHNcclxuICAgIC8vIFRPRE8gLSBhZGQgdGhlIGFkZGl0aW9uYWwgc3R1ZmYgbmVlZGVkIGZvciBHcm91cGVkRmxpZ2h0cyAoTGlnaHRuaW5nKVxyXG5cclxuICAgIGNvbnN0IGZ1bGxSZXN1bHRzQ2xvbmUgPSA8YW55PnRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bGxSZXN1bHRzQ2xvbmUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZnVsbFJlc3VsdCA9IGZ1bGxSZXN1bHRzQ2xvbmVbaV07XHJcbiAgICAgIGZ1bGxSZXN1bHQuam91cm5leXMgPSBmdWxsUmVzdWx0LmpvdXJuZXlzLmZpbHRlcihvdXRGaWx0ZXJJdGluZXJhcmllcyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgIGZ1bGxSZXN1bHQuam91cm5leXMgPSBmdWxsUmVzdWx0LmpvdXJuZXlzLmZpbHRlcihpbkZpbHRlckl0aW5lcmFyaWVzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVsbFJlc3VsdC5qb3VybmV5cyA9IGZ1bGxSZXN1bHQuam91cm5leXM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoZnVsbFJlc3VsdHNDbG9uZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZWxlY3RHcm91cGVkRXVyb3N0YXIoXHJcbiAgICBzZWxlY3RlZEV1cm9zdGFyOiBFdXJvc3Rhckl0ZW0sXHJcbiAgICBmYXJlOiBFdXJvc3RhckZhcmUsXHJcbiAgICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW1cclxuICApIHtcclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgLy8gb25lIHdheSBlYXN5XHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldCAmJlxyXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBFdXJvc3RhclNlYXJjaFR5cGUub25lV2F5ICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG91dGJvdW5kRmxpZ2h0czogW3RoaXMubWFrZVNjaGVtYUZsaWdodHMoZmFyZS5mYXJlLCAnb3V0Ym91bmQnLCAwKV0sXHJcbiAgICAgICAgICBpbmJvdW5kRmxpZ2h0czogW10sXHJcbiAgICAgICAgICBqb3VybmV5VHlwZTogJ3NpbmdsZSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZURlcGFydHVyZSxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIGZhcmUucHJpY2UsXHJcbiAgICAgICAgc2VsZWN0ZWRFdXJvc3Rhci5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyByZXR1cm4gbG9naWMgbmVlZHMgdXBkYXRpbmcgLSBlaXRoZXIgYWNjZXB0IG91dGJvdW5kIG9yIHJldHVybiBhbmQgc29tZWhvdyBkaXN0aWd1aXNoIHRoZW1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm5cclxuICAgICkge1xyXG4gICAgICAvLyBjbGlja2VkIG9uIGFuIG91dGJvdW5kIGV1cm9zdGFyXHJcbiAgICAgIGlmIChkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQpIHtcclxuICAgICAgICAvLyBnaXZlbiB0aGUgb3V0Ym91bmQgYnV0IHdlIGFscmVhZHkgaGF2ZSBpbmJvdW5kIHNlbGVjdGVkXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXI/LmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5JbmJvdW5kXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBMVSBsb2dpYyBzaG93cyB0aGUgYmlnZ2VzdCBwcmljZSBhY3Jvc3Mgb3V0Ym91bmQgYW5kIHJldHVyblxyXG4gICAgICAgICAgY29uc3QgcHJpY2UgPVxyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZS5pdGVtLnByaWNlID4gZmFyZS5wcmljZVxyXG4gICAgICAgICAgICAgID8gdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5wcmljZVxyXG4gICAgICAgICAgICAgIDogZmFyZS5wcmljZTtcclxuICAgICAgICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBpbmJvdW5kRmxpZ2h0czogW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5mYXJlLFxyXG4gICAgICAgICAgICAgICAgICAnaW5ib3VuZCcsXHJcbiAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIG91dGJvdW5kRmxpZ2h0czogW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmYXJlLmZhcmUsICdvdXRib3VuZCcsIDApXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBqb3VybmV5VHlwZTogJ3JvdW5kdHJpcCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRFdXJvc3Rhci5kYXRlRGVwYXJ0dXJlLFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhci5pdGVtLmRhdGVBcnJpdmFsLFxyXG4gICAgICAgICAgICBwcmljZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRFdXJvc3Rhci5yZXF1aXJlc1JlYXNvblxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEZhcmVzKCk7XHJcbiAgICAgICAgICB0aGlzLmJhc2tldFNlcnZpY2UudG9nZ2xlTWVudSgpO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgICAgICAgICh0aGlzLmZ1bGxSZXN1bHRzIGFzIEV1cm9zdGFyUmVzdWx0c1tdKS5tYXAoXHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZEZsYWdzXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyPy5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEZhcmVzKCk7XHJcbiAgICAgICAgICAvLyB3ZSBoYXZlIGFuIG91dGJvdW5kIGFscmVhZHkgc2VsZWN0ZWQgLSBkZXNlbGVjdCBpdFxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQodGhpcy5mdWxsUmVzdWx0cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHdlIGRvbnQgaGF2ZSBhbiBpbmJvdW5kIHNlbGVjdGVkXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3RhciA9IHtcclxuICAgICAgICAgICAgaXRlbTogc2VsZWN0ZWRFdXJvc3RhcixcclxuICAgICAgICAgICAgZGlyZWN0aW9uXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUgPSB7XHJcbiAgICAgICAgICAgIGl0ZW06IGZhcmUsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvblxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2VsZWN0ZWRFdXJvc3Rhci51aWQ7XHJcbiAgICAgICAgICAvLyBmaWx0ZXIgb24gb3V0Ym91bmRzIGFzIHdlIGhhdmUgc2VsZWN0ZWQgYW5kIGFkZGVkIGFuIG91dGJvdW5kXHJcbiAgICAgICAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgICAgICAgKHRoaXMuZnVsbFJlc3VsdHMgYXMgRXVyb3N0YXJSZXN1bHRzW10pLm1hcChcclxuICAgICAgICAgICAgICAocmVzdWx0OiBFdXJvc3RhclJlc3VsdHMpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kID0gcmVzdWx0Lm91dGJvdW5kLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW06IEV1cm9zdGFySXRlbSkgPT4gaW5kZXggPT09IGl0ZW0udWlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaW5ib3VuZDogcmVzdWx0LmluYm91bmQsIG91dGJvdW5kIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uSW5ib3VuZCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyPy5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIC8vIGVzc2VudGlhbGx5IGFkZCBhcyB3ZSBkaWQgYmVmb3JlXHJcbiAgICAgICAgICBjb25zdCBwcmljZSA9XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0ucHJpY2UgPiBmYXJlLnByaWNlXHJcbiAgICAgICAgICAgICAgPyB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZS5pdGVtLnByaWNlXHJcbiAgICAgICAgICAgICAgOiBmYXJlLnByaWNlO1xyXG4gICAgICAgICAgdGhpcy5kb0Jvb2tpbmcoXHJcbiAgICAgICAgICAgIGludEJhc2tldCxcclxuICAgICAgICAgICAgc2VsZWN0ZWRFdXJvc3RhcixcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG91dGJvdW5kRmxpZ2h0czogW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5mYXJlLFxyXG4gICAgICAgICAgICAgICAgICAnb3V0Ym91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBpbmJvdW5kRmxpZ2h0czogW3RoaXMubWFrZVNjaGVtYUZsaWdodHMoZmFyZS5mYXJlLCAnaW5ib3VuZCcsIDApXSxcclxuICAgICAgICAgICAgICBqb3VybmV5VHlwZTogJ3JvdW5kdHJpcCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRFdXJvc3Rhci5kYXRlRGVwYXJ0dXJlLFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhci5pdGVtLmRhdGVBcnJpdmFsLFxyXG4gICAgICAgICAgICBwcmljZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRFdXJvc3Rhci5yZXF1aXJlc1JlYXNvblxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEZhcmVzKCk7XHJcbiAgICAgICAgICB0aGlzLmJhc2tldFNlcnZpY2UudG9nZ2xlTWVudSgpO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgICAgICAgICh0aGlzLmZ1bGxSZXN1bHRzIGFzIEV1cm9zdGFyUmVzdWx0c1tdKS5tYXAoXHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZEZsYWdzXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyPy5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uSW5ib3VuZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkRmFyZXMoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc3VsdHMubmV4dCh0aGlzLmZ1bGxSZXN1bHRzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgPSB7XHJcbiAgICAgICAgICAgIGl0ZW06IHNlbGVjdGVkRXVyb3N0YXIsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvblxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlID0ge1xyXG4gICAgICAgICAgICBpdGVtOiBmYXJlLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb25cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHNlbGVjdGVkRXVyb3N0YXIudWlkO1xyXG4gICAgICAgICAgLy8gZmlsdGVyIG9uIG91dGJvdW5kcyBhcyB3ZSBoYXZlIHNlbGVjdGVkIGFuZCBhZGRlZCBhbiBvdXRib3VuZFxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgICAgICAgICh0aGlzLmZ1bGxSZXN1bHRzIGFzIEV1cm9zdGFyUmVzdWx0c1tdKS5tYXAoXHJcbiAgICAgICAgICAgICAgKHJlc3VsdDogRXVyb3N0YXJSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmJvdW5kID0gcmVzdWx0LmluYm91bmQuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoaXRlbTogRXVyb3N0YXJJdGVtKSA9PiBpbmRleCA9PT0gaXRlbS51aWRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBpbmJvdW5kLCBvdXRib3VuZDogcmVzdWx0Lm91dGJvdW5kIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXNldFNlbGVjdGVkRmFyZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3RhciA9IHtcclxuICAgICAgZGlyZWN0aW9uOiBudWxsLFxyXG4gICAgICBpdGVtOiBudWxsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUgPSB7XHJcbiAgICAgIGRpcmVjdGlvbjogbnVsbCxcclxuICAgICAgaXRlbTogbnVsbFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdGVkRmxhZ3MocmVzdWx0OiBFdXJvc3RhclJlc3VsdHMpOiBFdXJvc3RhclJlc3VsdHMge1xyXG4gICAgY29uc3QgaW5ib3VuZCA9IHJlc3VsdC5pbmJvdW5kLm1hcCgoaXRlbTogRXVyb3N0YXJJdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uc3RhbmRhcmRQcmVtaWVyRmFyZS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICBpdGVtLnN0YW5kYXJkRmFyZS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICBpdGVtLmJ1c2luZXNzUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IG91dGJvdW5kID0gcmVzdWx0Lm91dGJvdW5kLm1hcCgoaXRlbTogRXVyb3N0YXJJdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uc3RhbmRhcmRQcmVtaWVyRmFyZS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICBpdGVtLnN0YW5kYXJkRmFyZS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICBpdGVtLmJ1c2luZXNzUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IGluYm91bmQsIG91dGJvdW5kIH07XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoIHx8IHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHJldHVybjtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdHNbMF0gYXMgRXVyb3N0YXJRdW90ZVJlc3VsdDtcclxuICAgIGNvbnN0IGpvdXJuZXlzID0gcmVzdWx0LmpvdXJuZXlzO1xyXG4gICAgaWYgKCFqb3VybmV5cy5sZW5ndGgpIHJldHVybjtcclxuICAgIGNvbnN0IGN1cnJlbmN5ID0gam91cm5leXNbMF0udG90YWwuY3VycmVuY3k7XHJcbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZG9Cb29raW5nKFxyXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBFdXJvc3Rhckl0ZW0sXHJcbiAgICBzY2hlbWFEZXRhaWxzOiBhbnksXHJcbiAgICBvdXRib3VuZERhdGU6IHN0cmluZyxcclxuICAgIGluYm91bmREYXRlOiBzdHJpbmcsXHJcbiAgICBwcmljZTogbnVtYmVyLFxyXG4gICAgcmVxdWlyZXNSZWFzb246IGJvb2xlYW5cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwgfSA9IHNlbGVjdGVkRmxpZ2h0O1xyXG4gICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XHJcbiAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXHJcbiAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcclxuICAgICAgY28yUGVySXRlbSxcclxuICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICBjdXJyZW5jeTogdG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXHJcbiAgICAgIHByaWNlLFxyXG4gICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgb3V0Ym91bmREYXRlXHJcbiAgICB9O1xyXG4gICAgaWYgKGluYm91bmREYXRlKSB7XHJcbiAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgYm9va2luZyxcclxuICAgICAgaW50QmFza2V0LFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgcmVxdWlyZXNSZWFzb25cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRKb3VybmV5LFxyXG4gICAgZmxpZ2h0R3JvdXA6ICdvdXRib3VuZCcgfCAnaW5ib3VuZCcsXHJcbiAgICBncm91cEluZGV4OiBudW1iZXIsXHJcbiAgICBzZWdtZW50SW5kZXg/OiBudW1iZXJcclxuICApOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQsXHJcbiAgICAgIGpvdXJuZXlJbmZvOiB7XHJcbiAgICAgICAgZmxpZ2h0R3JvdXAsXHJcbiAgICAgICAgZ3JvdXBJbmRleCxcclxuICAgICAgICBzZWdtZW50SW5kZXhcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlR3JvdXBlZEl0ZW0oXHJcbiAgICByZXR1cm5PYmplY3Q6IEV1cm9zdGFyR3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgc291cmNlOiBzdHJpbmcsXHJcbiAgICBvdXRib3VuZEZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcclxuICAgIG91dGJvdW5kVG90YWxEdXJhdGlvbjogbnVtYmVyLFxyXG4gICAgaW5ib3VuZEZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcclxuICAgIGluYm91bmRUb3RhbER1cmF0aW9uOiBudW1iZXJcclxuICApIHtcclxuICAgIGlmIChvdXRib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmRlcGFydERhdGVUaW1lKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0ID0gb3V0Ym91bmRGbGlnaHRzWzBdO1xyXG4gICAgICBjb25zdCBsYXN0ID0gb3V0Ym91bmRGbGlnaHRzW291dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnQgPSBmaXJzdC5vcmlnaW5BaXJwb3J0O1xyXG4gICAgICByZXR1cm5PYmplY3Qub3JpZ2luQWlycG9ydE5hbWUgPSBmaXJzdC5vcmlnaW5BaXJwb3J0TmFtZTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydCA9IGxhc3QuZGVzdGluYXRpb25BaXJwb3J0O1xyXG4gICAgICByZXR1cm5PYmplY3QuZGVzdGluYXRpb25BaXJwb3J0TmFtZSA9IGxhc3QuZGVzdGluYXRpb25BaXJwb3J0TmFtZTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlcGFydERhdGVUaW1lID0gZmlyc3QuZGF0ZVRpbWVEZXBhcnRpbmc7XHJcbiAgICAgIHJldHVybk9iamVjdC5hcnJpdmFsRGF0ZVRpbWUgPSBsYXN0LmRhdGVUaW1lQXJyaXZpbmc7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZFRvdGFsRHVyYXRpb24gPSBvdXRib3VuZFRvdGFsRHVyYXRpb247XHJcbiAgICAgIHJldHVybk9iamVjdC5kYXRhU291cmNlID0gc291cmNlO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3BlcmF0b3IgPSBmaXJzdC5vcGVyYXRpbmdDYXJyaWVyO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3BlcmF0b3JGdWxsID0gZmlyc3Qub3BlcmF0aW5nQ2Fycmllck5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRsZWdzQ291bnQgPSBvdXRib3VuZEZsaWdodHMubGVuZ3RoO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVncyA9IG91dGJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGJvdW5kRmxpZ2h0TnVtYmVyID1cclxuICAgICAgICB0aGlzLmhlbHBlcnMuam9pbkZyb21BdHRyaWJ1dGU8RmxpZ2h0Sm91cm5leT4oXHJcbiAgICAgICAgICAnLScsXHJcbiAgICAgICAgICAnb3BlcmF0aW5nRmxpZ2h0TnVtYmVyJyxcclxuICAgICAgICAgIG91dGJvdW5kRmxpZ2h0c1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm5PYmplY3QuaXNSZXR1cm4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzQ291bnQgPSBpbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoXHJcbiAgICBkYXRhOiBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBFdXJvc3RhclNlc3Npb25UeXBlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc3VsdHM6IFtdLFxyXG4gICAgICBncm91cERhdGE6IFtdLFxyXG4gICAgICBncm91cGVkOiBbXSxcclxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRNaW5GbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWluID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcbiAgICBtYXRjaGluZ0JyYW5kRmxpZ2h0cy5mb3JFYWNoKChmbGlnaHQpID0+IHtcclxuICAgICAgaWYgKG1pbiA+IGZsaWdodD8udG90YWw/LnByaWNlKSB7XHJcbiAgICAgICAgbWluID0gZmxpZ2h0LnRvdGFsLnByaWNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBtaW47XHJcbiAgfVxyXG5cclxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcblxyXG4gIGlzT3Zlck5pZ2h0KCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgb3V0d2FyZERheSA9IHRoaXMub3V0Qm91bmREYXRlLmRhdGUoKTtcclxuICAgIGNvbnN0IHJldHVybkRheSA9IHRoaXMuaW5ib3VuZERhdGUuZGF0ZSgpO1xyXG4gICAgaWYgKHJldHVybkRheSAtIG91dHdhcmREYXkgPj0gMSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1pblRvSG91ciA9IChkdXI6IG51bWJlcik6IHN0cmluZyA9PiBgJHtNYXRoLmZsb29yKGR1ciAvIDYwKX1oICR7ZHVyICUgNjB9bWA7XHJcblxyXG4gIGFzeW5jIGFkZEV1cm9zdGFySm91cm5leXNUb0Jhc2tldChcclxuICAgIGV1cm9zdGFyUXVvdGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoZXVyb3N0YXJRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBldXJvc3RhclF1b3RlO1xyXG4gICAgICBjb25zdCBvdXRib3VuZERhdGU6IGFueSA9IG1vbWVudChcclxuICAgICAgICBldXJvc3RhclF1b3RlLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1xyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBpbmJvdW5kRGF0ZTogYW55ID0gZXVyb3N0YXJRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcclxuICAgICAgICA/IG1vbWVudChldXJvc3RhclF1b3RlLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKVxyXG4gICAgICAgIDogbnVsbDtcclxuICAgICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoZXVyb3N0YXJRdW90ZSk7XHJcbiAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5ldXJvc3RhclF1b3RlLm91dGJvdW5kRmxpZ2h0cy5tYXAoXHJcbiAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCAnb3V0Ym91bmQnLCAwLCBzZWdtZW50SW5kZXgpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXSxcclxuICAgICAgICBpbmJvdW5kRmxpZ2h0czogW1xyXG4gICAgICAgICAgLi4uZXVyb3N0YXJRdW90ZS5pbmJvdW5kRmxpZ2h0cy5tYXAoXHJcbiAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCAnaW5ib3VuZCcsIDAsIHNlZ21lbnRJbmRleClcclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gJ3JvdW5kdHJpcCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYm9va2luZyxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBldXJvc3RhclF1b3RlLnJlcXVpcmVzUmVhc29uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTsgLy8gVE9ETyBzaG91bGQgdGhpcyB0aHJvdyBhbiBlcnJvcj9cclxuICB9XHJcblxyXG4gIC8vIFRPRE8gd2FpdGluZyBmb3IgZGF0YVxyXG4gIGdldFRlcm1zQW5kQ29uZChldXJvc3RhclF1b3RlOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdQZW5hbHRpZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0VsaWdpYmlsaXR5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAgLFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0RheS90aW1lJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTZWFzb25hbGl0eScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRmxpZ2h0wqBBcHBsaWNhdGlvbicsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQWR2YW5jZcKgUmVzZXJ2YXRpb25zL3RpY2tldGluZycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTWF4aW11bcKgU3RheScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTWluaW11bcKgU3RheScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3RvcG92ZXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUcmFuc2ZlcnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0NvbWJpbmF0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQmxhY2tvdXTCoERhdGVzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdXJjaGFyZ2VzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBY2NvbXBhbmllZMKgVHJhdmVsJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUcmF2ZWzCoFJlc3RyaWN0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU2FsZXPCoFJlc3RyaWN0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSGlwL21pbGVhZ2XCoEV4Y2VwdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldMKgRW5kb3JzZW1lbnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDaGlsZHJlbsKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUb3VywqBDb25kdWN0b3LCoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQWdlbnTCoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQWxswqBPdGhlcsKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNaXNjZWxsYW5lb3VzwqBQcm92aXNpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGYXJlwqBCecKgUnVsZScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnR3JvdXBzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUb3VycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVmlzaXTCoEFub3RoZXLCoENvdW50cnknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0RlcG9zaXRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWb2x1bnRhcnnCoENoYW5nZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZvbHVudGFyecKgUmVmdW5kcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTmVnb3RpYXRlZMKgRmFyZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1J1bGXCoEFwcGxpY2F0aW9uwqBBbmTCoE90aGVywqBDb25kaXRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElFdXJvc3RhclNlYXJjaEFyZ3MgPVxyXG4gICAgICAgIHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuRXVyb3N0YXIsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD57XHJcbiAgICB0aGlzLmZhcmVUeXBlID0gZmF2LmZhcmVUeXBlXHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IGZhdi5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IGZhdi5yZXR1cm5UcmlwID8gRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybiA6IEV1cm9zdGFyU2VhcmNoVHlwZS5vbmVXYXlcclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoZmF2Lm9yaWdpbkFpcnBvcnQpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcclxuICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IChyZXN1bHRzIGFzIE9CVEFpcnBvcnREZXRhaWxzW10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gZmF2Lm9yaWdpbkFpcnBvcnQpXHJcbiAgICB9KVxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRzTGlzdChmYXYuZGVzdGluYXRpb25BaXJwb3J0KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XHJcbiAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSAocmVzdWx0cyBhcyBPQlRBaXJwb3J0RGV0YWlsc1tdKS5maW5kKGEgPT4gYS5nYXRld2F5ID09IGZhdi5kZXN0aW5hdGlvbkFpcnBvcnQpXHJcbiAgICB9KVxyXG4gICAgdGhpcy5fcGFzc2VuZ2VycyA9IGZhdi5wYXNzZW5nZXJzXHJcbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gXCJBRFVMVFwiKS5sZW5ndGhcclxuICAgIHRoaXMuY2hpbGRyZW4gPSBmYXYucGFzc2VuZ2Vycy5maWx0ZXIoKGE6IGFueSkgPT4gYS50eXBlID09IFwiQ0hJTERcIikubGVuZ3RoXHJcbiAgfVxyXG5cclxuICBvcGVuRXVyb3N0YXJGYXJlUnVsZXMoYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmxpZ2h0cyA9IFsuLi5iYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZEZsaWdodHNdO1xyXG4gICAgZmxpZ2h0c1swXS5mYXJlSW5mbyA9IGZsaWdodHNbMF0uam91cm5leUluZm87XHJcbiAgICBkZWxldGUgZmxpZ2h0c1swXS5qb3VybmV5SW5mbztcclxuICAgIGNvbnN0IHJ1bGVzRnJvbUNhbGwgPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmxpZ2h0RmFyZVJ1bGVzKFxyXG4gICAgICBmbGlnaHRzWzBdIGFzIElucHV0RmxpZ2h0Sm91cm5leVxyXG4gICAgKTtcclxuICAgIHJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG51bGwsIHtcclxuICAgICAgICAgIHJ1bGVzOiBkYXRhLnJlc3VsdHNbMF0sXHJcbiAgICAgICAgICBmcm9tOiBmbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXHJcbiAgICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|
|
2018
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL2NsYXNzZXMvZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBSW5ELE9BQU8sRUFLTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBS2hCLG1CQUFtQixFQUVuQixXQUFXLEVBVVosTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBS0wsbUJBQW1CLEVBV25CLDRCQUE0QixFQUk3QixNQUFNLGdCQUFnQixDQUFDO0FBT3hCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBa0JqRSxPQUFPLEVBR0wsVUFBVSxFQUNYLE1BQU0sNEJBQTRCLENBQUM7QUFHcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxNQUFNLGVBQWUsR0FBa0IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNuRCxLQUFLLEVBQUUsRUFBRTtJQUNULFVBQVUsRUFBRSxFQUFFO0lBQ2QsV0FBVyxFQUFFLEVBQUU7SUFDZixPQUFPLEVBQUUsRUFBRTtJQUNYLFFBQVEsRUFBRSxFQUFFO0lBQ1osWUFBWSxFQUFFLEVBQUU7SUFDaEIsZUFBZSxFQUFFLEVBQUU7SUFDbkIscUJBQXFCLEVBQUUsRUFBRTtJQUN6QixjQUFjLEVBQUUsRUFBRTtJQUNsQixvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLE9BQU8sRUFB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QUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYTtnQkFDOUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjthQUNuRCxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDOztBQTFuRmUsK0NBQXNCLEdBQUcsaUJBQWlCLENBQUM7QUFDM0MsZ0RBQXVCLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQgeyBGbGlnaHRGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtZmlsdGVycy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdC1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcclxuICBCYXNrZXRJdGVtLFxyXG4gIEN1cnJlbmN5Q29kZSxcclxuICBEZXN0aW5hdGlvbkVudHJ5LFxyXG4gIEZhcmVUeXBlLFxyXG4gIEZsaWdodENhYmluQ2xhc3MsXHJcbiAgRmxpZ2h0RmFyZVRvdGFsLFxyXG4gIEZsaWdodEl0aW5lcmFyeSxcclxuICBGbGlnaHRKb3VybmV5LFxyXG4gIEZsaWdodFBhc3Nlbmdlck9iamVjdCxcclxuICBGbGlnaHRQYXNzZW5nZXJUeXBlLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBJbnB1dEZsaWdodEpvdXJuZXksXHJcbiAgU2VhcmNoRXVyb3N0YXJRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hQYXJraW5nUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoTG91bmdlc1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXNcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBFdXJvc3RhclF1b3RlUmVzdWx0LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIEZsaWdodERpcmVjdGlvbkVudW0sXHJcbiAgR3JvdXBlZEZsaWdodHMsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIEV1cm9zdGFyR3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gIEV1cm9zdGFyUmVzdWx0cyxcclxuICBFdXJvc3Rhckl0ZW0sXHJcbiAgRXVyb3N0YXJGYXJlLFxyXG4gIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSxcclxuICBNaW5NYXgsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcclxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLFxyXG4gIFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlLFxyXG4gIFJlY29yZFJ1bGVBY3Rpb24sXHJcbiAgRXVyb3N0YXJNdWx0aVxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBGdWxsVXNlckRldGFpbHMsXHJcbiAgVXNlclNlcnZpY2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHsgRXVyb3N0YXJTZWFyY2hUeXBlIH0gZnJvbSAnLi9ldXJvc3Rhci1zZWFyY2gtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgSU11bHRpRGVzdGluYXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1tdWx0aS1kZXN0aW5hdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyLFxyXG4gIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2V1cm9zdGFyLXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcclxuICBFdXJvc3RhclRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lldXJvc3Rhci1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXHJcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XHJcbmltcG9ydCB7XHJcbiAgQWxsb3dlZENsYXNzZXMsXHJcbiAgRmxpZ2h0T3BlcmF0b3IsXHJcbiAgVGltZVdpbmRvd1xyXG59IGZyb20gJy4vZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgSUV1cm9zdGFyU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZXVyb3N0YXItc2VhcmNoLWFyZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi9tb2RhbC10eXBlcy5lbnVtJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmNvbnN0IERFRkFVTFRfRklMVEVSUzogRmxpZ2h0RmlsdGVycyA9IE9iamVjdC5mcmVlemUoe1xyXG4gIHN0b3BzOiB7fSxcclxuICB0b3RhbFN0b3BzOiB7fSxcclxuICBtdXN0SW5jbHVkZToge30sXHJcbiAgY2xhc3Nlczoge30sXHJcbiAgYWlybGluZXM6IHt9LFxyXG4gIHRyYXZlbFBvbGljeToge30sXHJcbiAgZGVwYXR1cmVBaXJwb3J0OiB7fSxcclxuICBkZXBhdHVyZVJldHVybkFpcnBvcnQ6IHt9LFxyXG4gIGFycml2YWxBaXJwb3J0OiB7fSxcclxuICBhcnJpdmFsUmV0dXJuQWlycG9ydDoge30sXHJcbiAgYmFnZ2FnZToge30sXHJcbiAgZmFyZVR5cGVzOiB7fSxcclxuICBwcmljZToge1xyXG4gICAgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuICAgIG1heDogTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJcclxuICB9LFxyXG4gIGR1cmF0aW9uOiB7XHJcbiAgICBtaW46IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxyXG4gICAgbWF4OiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxyXG4gIH0sXHJcbiAgcmV0dXJuRHVyYXRpb246IHtcclxuICAgIG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICBtYXg6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXHJcbiAgfSxcclxuICBkZXBhcnR1cmVUaW1lOiB7XHJcbiAgICBtaW46IDAsXHJcbiAgICBtYXg6IDIzNTlcclxuICB9LFxyXG4gIGFycml2YWxUaW1lOiB7XHJcbiAgICBtaW46IDAsXHJcbiAgICBtYXg6IDIzNTlcclxuICB9LFxyXG4gIHJldHVybkRlcGFydHVyZVRpbWU6IHtcclxuICAgIG1pbjogMCxcclxuICAgIG1heDogMjM1OVxyXG4gIH0sXHJcbiAgcmV0dXJuQXJyaXZhbFRpbWU6IHtcclxuICAgIG1pbjogMCxcclxuICAgIG1heDogMjM1OVxyXG4gIH0sXHJcblxyXG4gIGZsaWdodE51bWJlcjogJydcclxufSkgYXMgRmxpZ2h0RmlsdGVycztcclxuXHJcbmV4cG9ydCB0eXBlIEV1cm9zdGFyU3RhdGlvbiA9IHtcclxuICBnYXRld2F5OiBzdHJpbmc7XHJcbiAgZGVzdGluYXRpb246IHN0cmluZztcclxufTtcclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRUeXBlc0V1cm9zdGFyIHtcclxuICBDaGVhcGVzdEZpcnN0ID0gJ0MnLFxyXG4gIEVhcmxpZXN0Rmlyc3QgPSAnRScsXHJcbiAgTGF0ZXN0Rmlyc3QgPSAnTCdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gU29ydE1ldGhvZCB7XHJcbiAgc29ydEJ5UHJpY2UgPSAnc29ydEJ5UHJpY2UnLFxyXG4gIHNvcnRCeURhdGUgPSAnc29ydEJ5RGF0ZSdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTb3J0VHlwZUV1cm9zdGFyIHtcclxuICAvKiogVGl0bGUgZGlzcGxheWVkIG9uIGRyb3Bkb3duICovXHJcbiAgdGl0bGU6IHN0cmluZztcclxuICAvKiogTWV0aG9kIG5hbWUgdXNlZCBieSBjb21wb25lbnQgdG8gc29ydCByZXN1bHRzICovXHJcbiAgbWV0aG9kOiBTb3J0TWV0aG9kO1xyXG4gIC8qKiBJY29uIGRpc3BsYXllZCBvbiBkcm9wIGRvd24gKi9cclxuICBpY29uOiBzdHJpbmc7XHJcbiAgLyoqIFNvcnRpbmcgZGlyZWN0aW9uIHRydWUgZm9yIGFzYywgZmFsc2UgZm9yIGRzYyAqL1xyXG4gIGRpcjogYm9vbGVhbjtcclxuICAvLyB0aGlzIGlzIHdoYXQgd2Ugd2lsbCB1c2UgdG8gc29ydFxyXG4gIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBFdXJvc3Rhckdyb3VwcyA9ICdTdGFuZGFyZCcgfCAnU3RhbmRhcmRQcmVtaWVyJyB8ICdCdXNpbmVzc1ByZW1pZXInO1xyXG5cclxuaW50ZXJmYWNlIEV1cm9zdGFyU2Vzc2lvblR5cGUge1xyXG4gIHJlc3VsdHM6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheTtcclxuICBncm91cERhdGE6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyW10gfTtcclxuICBncm91cGVkOiBHcm91cGVkRmxpZ2h0cztcclxuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2g8U0VfUSBleHRlbmRzIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZSwgQUpGX1EgZXh0ZW5kcyBBcHBseUppdEZsaWdodFJ1bGVzVHlwZT5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgRXVyb3N0YXJUZW1wUGFyYW1zLFxyXG4gICAgRXVyb3N0YXJRdW90ZVJlc3VsdCxcclxuICAgIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2V1cm9zdGFyJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19ldXJvc3Rhcic7XHJcblxyXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkV1cm9zdGFyO1xyXG5cclxuICBhdmFsaWFibGVDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+KFtdKTtcclxuICB0aW1lQ3JpdGVyaWFPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8VGltZVdpbmRvd1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBUaW1lV2luZG93W11cclxuICA+KFtdKTtcclxuICBmbGlnaHRPcGVyYXRvcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRPcGVyYXRvcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBGbGlnaHRPcGVyYXRvcltdXHJcbiAgPihbXSk7XHJcblxyXG4gIHByaXZhdGUgX25lZ290aWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9uZWFyYnlfYWlycG9ydHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXlbXTtcclxuICBwcml2YXRlIF9zb3J0QXJyYXk6IFNvcnRUeXBlRXVyb3N0YXJbXSA9IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdQcmljZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlQcmljZSxcclxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3RcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnVGltZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxyXG4gICAgICBpY29uOiAnaWNvLWNhbGVuZGFyJyxcclxuICAgICAgZGlyOiB0cnVlLFxyXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1RpbWUgKERlc2NlbmRpbmcpJyxcclxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeURhdGUsXHJcbiAgICAgIGljb246ICdpY28tY2FsZW5kYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkxhdGVzdEZpcnN0XHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfc29ydEFycmF5THU6IFNvcnRUeXBlRXVyb3N0YXJbXSA9IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdQcmljZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlQcmljZSxcclxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3RcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnVGltZScsXHJcbiAgICAgIG1ldGhvZDogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxyXG4gICAgICBpY29uOiAnaWNvLWNhbGVuZGFyJyxcclxuICAgICAgZGlyOiB0cnVlLFxyXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0XHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfZmFyZVR5cGVBcnJheTogVmFsdWVEaXNwbGF5W10gPSBbXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5GbGV4aWJsZSwgZGlzcGxheTogJ0ZsZXhpYmxlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTGVpc3VyZSwgZGlzcGxheTogJ0xlaXN1cmUnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Mb3dlc3QsIGRpc3BsYXk6ICdMb3dlc3QnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTmVnb3RpYXRlZCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5vbk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOb24tTmVnb3RpYXRlZCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlJlcXVlc3RGYXJlUnVsZXMsIGRpc3BsYXk6ICdSZXF1ZXN0IEZhcmUgUnVsZXMnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5TZWxlY3RBbmRQcm8sIGRpc3BsYXk6ICdTZWxlY3QgJiBQcm8nIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgbWluaW11bU91dEJvdW5kRGF0ZSA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1JbkJvdW5kRGF0ZSA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHNlYXJjaFR5cGVzOiBWYWx1ZURpc3BsYXlbXSA9IFtcclxuICAgIHsgdmFsdWU6IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm4sIGRpc3BsYXk6ICdSZXR1cm4nIH0sXHJcbiAgICB7IHZhbHVlOiBFdXJvc3RhclNlYXJjaFR5cGUub25lV2F5LCBkaXNwbGF5OiAnT25lLXdheScgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX291dERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHJpdmF0ZSBfb3V0VGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2luRGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9pblRpbWU6IHN0cmluZztcclxuICBwcml2YXRlIF9kZXN0aW5hdGlvbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9vcmlnaW5BaXJwb3J0OiBhbnk7XHJcbiAgcHJpdmF0ZSBfcGFzc2VuZ2VyczogYW55O1xyXG4gIHByaXZhdGUgZ3JvdXBlZE9iamVjdDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXTtcclxuICBwcm90ZWN0ZWQgZmxpZ2h0c1RvR3JvdXA6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyW10gfSA9IHt9O1xyXG4gIHByb3RlY3RlZCByZXN1bHRRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbiAgcHJvdGVjdGVkIGdyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzID0gbnVsbDtcclxuICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgc2VsZWN0ZWRHcm91cEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM7XHJcbiAgcHJpdmF0ZSBfZGlzcGxheUFkZEhvdGVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcnVsZUFjdGlvblN1bW1hcnk6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlO1xyXG4gIG11bHRpOiBFdXJvc3Rhck11bHRpW107XHJcbiAgZmlsdGVyczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodEZpbHRlcnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIERFRkFVTFRfRklMVEVSU1xyXG4gICk7XHJcblxyXG4gIHB1YmxpYyBnZXQgZGlzcGxheUFkZEhvdGVsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlBZGRIb3RlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGlzcGxheUFkZEhvdGVsKG5ld1ZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzcGxheUFkZEhvdGVsID0gbmV3VmFsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RlZEdyb3VwRXVyb3N0YXI6IHtcclxuICAgIGl0ZW06IEV1cm9zdGFySXRlbTtcclxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bTtcclxuICB9ID0ge1xyXG4gICAgaXRlbTogbnVsbCxcclxuICAgIGRpcmVjdGlvbjogbnVsbFxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRFdXJvc3RhckZhcmU6IHtcclxuICAgIGl0ZW06IEV1cm9zdGFyRmFyZTtcclxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bTtcclxuICB9ID0ge1xyXG4gICAgaXRlbTogbnVsbCxcclxuICAgIGRpcmVjdGlvbjogbnVsbFxyXG4gIH07XHJcblxyXG4gIGdldCBzZWxlY3RlZEV1cm9zdGFyRmFyZSgpOiBFdXJvc3RhckZhcmUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW07XHJcbiAgfVxyXG4gIGdldCBzZWxlY3RlZEZhcmVDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlPy5pdGVtPy5jbGFzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCkge1xyXG4gICAgdGhpcy5fdGltZUFycmF5ID1cclxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XHJcbiAgICAgIEFycmF5KDk2KVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVBcnJheTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcHJlZmVycmVkQ2FycmllcnMoKTogT0JUQWlybGluZXNEZXRhaWxzW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcHJlZmVycmVkQ2FycmllcnModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlsc1tdKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IxKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjEodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IyKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzFdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjIodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzFdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IzKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3I0KCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjQodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9taW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9taW5EYXRlIHx8IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShtb21lbnQoKSk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYWR1bHRzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydExvY2F0aW9uKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlcGFydExvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmRlcGFydExvY2F0aW9uID0gdmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gJyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcclxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcXVlcnlPcmlnaW5BaXBvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vcmlnaW5BaXJwb3J0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeURlc3RpbmF0aW9uQWlwb3J0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZXBhcnREYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlcGFydERhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX291dERhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICB0aGlzLl9vdXREYXRlLFxyXG4gICAgICB0aGlzLl9vdXRUaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZXBhcnRUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0VGltZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0VGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRUaW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgdGhpcy5fb3V0RGF0ZSxcclxuICAgICAgdGhpcy5fb3V0VGltZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb3V0Qm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG91dEJvdW5kRGF0ZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdmFsdWUgPSBtb21lbnQodmFsdWUpO1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIHRoaXMubWluaW11bUluQm91bmREYXRlID0ge1xyXG4gICAgICB5ZWFyOiB2YWx1ZS55ZWFyKCksXHJcbiAgICAgIG1vbnRoOiB2YWx1ZS5tb250aCgpICsgMSxcclxuICAgICAgZGF5OiB2YWx1ZS5kYXRlKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlICYmXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSAmJlxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIodGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSBtb21lbnQodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSkuYWRkKDEsICdkYXknKTtcclxuICAgIH1cclxuICAgIHRoaXMuX291dERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgdGhpcy5fb3V0VGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZXR1cm5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcmV0dXJuRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5faW5EYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2luRGF0ZSwgdGhpcy5faW5UaW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJyaXZlVGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luVGltZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYXJyaXZlVGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9pblRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpbmJvdW5kRGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGluYm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSk7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XHJcbiAgICB0aGlzLl9pbkRhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgdGhpcy5faW5UaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFycml2ZUxvY2F0aW9uKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFycml2ZUxvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFycml2ZUxvY2F0aW9uID0gdmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSAnJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCByZXR1cm5DYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcztcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5DYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5TZWFyY2hUeXBlKCk6IEV1cm9zdGFyU2VhcmNoVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZSh0eXBlOiBFdXJvc3RhclNlYXJjaFR5cGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1JldHVybigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybjtcclxuICB9XHJcblxyXG4gIGdldCBvdXRUaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRUaW1lQ3JpdGVyaWEodmFsdWU6IFRpbWVXaW5kb3cpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpblRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5UaW1lQ3JpdGVyaWEodmFsdWU6IFRpbWVXaW5kb3cpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBnZXQgbWF4Q29ubmVjdGlvbnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgbWF4Q29ubmVjdGlvbnModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tdWx0aURlc3RpbmF0aW9uOiBEZXN0aW5hdGlvbkVudHJ5W10gPSBbXTtcclxuICBnZXQgbXVsdGlEZXN0aW5hdGlvbigpOiBJTXVsdGlEZXN0aW5hdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBtdWx0aURlc3RpbmF0aW9uKHZhbHVlQXJyYXk6IElNdWx0aURlc3RpbmF0aW9uW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uID0gdmFsdWVBcnJheTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xyXG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxyXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBvbmx5XHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBTb3J0VHlwZUV1cm9zdGFyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBzb3J0RHJvcGRvd25WYWx1ZXNMdSgpOiBTb3J0VHlwZUV1cm9zdGFyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheUx1O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZhcmVUeXBlc1ZhbHVlcygpOiBWYWx1ZURpc3BsYXlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmFyZVR5cGVBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZSgpOiBGYXJlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZhcmVUeXBlKHZhbHVlOiBGYXJlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmVnb3RpYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdvdGlhdGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5lZ290aWF0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25lZ290aWF0ZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuICB9XHJcblxyXG4gIHNldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGV1cm9zdGFyRmV0Y2hlcjogQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyPFNFX1E+LFxyXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBseUZsaWdodFJ1bGVzOiBCYXNlQXBwbHlKaXRGbGlnaHRSdWxlc0ZldGNoZXI8QUpGX1E+LFxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IEV1cm9zdGFyVGVtcFBhcmFtcztcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBFdXJvc3RhclRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgRXVyb3N0YXJUZW1wUGFyYW1zLFxyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIEV1cm9zdGFyVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuICAgIC8vIGRhdGEudGVtcFBhcmFtcy5hZHVsdHMgPSAxO1xyXG4gICAgLy8gZGF0YS50ZW1wUGFyYW1zLmNhYmluQ2xhc3MgPSBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215XTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gc2VhcmNoU2VydmljZS5tYWtlRXVyb3N0YXJRdWVyeShkYXRhLnRlbXBQYXJhbXMpO1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHF1ZXJ5KTtcclxuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuRXVyb3N0YXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgLy8gdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSBzcGxpdFRyYXZlbGxlcnMuaW5mYW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVzZXJTZXJ2aWNlLmNoYW5nZVVzZXIuc3Vic2NyaWJlKCh1c2VyOiBGdWxsVXNlckRldGFpbHMpID0+IHtcclxuICAgICAgdGhpcy50aW1lQ3JpdGVyaWFPcHRpb25zLm5leHQoW1xyXG4gICAgICAgIFRpbWVXaW5kb3cuQW55dGltZSxcclxuICAgICAgICBUaW1lV2luZG93LkFycml2ZSxcclxuICAgICAgICBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICBdKTsgLy8gVE9ETyB1cGRhdGUgd2l0aCBhbnkgVUZzXHJcbiAgICAgIHRoaXMudXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICBjb25zdCByZXN1bHRzOiBFdXJvc3RhclNlc3Npb25UeXBlID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICApIHx8IHtcclxuICAgICAgcmVzdWx0czogW10sXHJcbiAgICAgIGdyb3VwRGF0YToge30sXHJcbiAgICAgIGdyb3VwZWQ6IFtdLFxyXG4gICAgICBxdWVyeToge30gYXMgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXNcclxuICAgIH07XHJcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMucmVzdWx0cyk7XHJcbiAgICB0aGlzLmZsaWdodHNUb0dyb3VwID0gcmVzdWx0cy5ncm91cERhdGEgfHwge307XHJcbiAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gcmVzdWx0cy5xdWVyeTtcclxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoKHJlc3VsdHMucmVzdWx0cyB8fCBbXSkgYXMgRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5KTtcclxuXHJcbiAgICBjb25zdCByZXN1bHRzQ2xvbmU6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLnJlc3VsdHMpO1xyXG4gICAgLy8gZ2V0IGFyb3VuZCB0aGUgYW5ub3lpbmcgdHlwZSByZXN0cmljdGlvbnMgLSBJIEtOT1cgSk9VUk5FWVMgSVMgVEhFUkUgSSBDQU4gU0VFIElUIFNUT1AgVEVMTElORyBNRSBJVCBJU04nVCBUWVBFU0NSSVBUIVxyXG4gICAgaWYgKHJlc3VsdHNDbG9uZS5sZW5ndGgpXHJcbiAgICAgIHRoaXMuZmlsdGVycy5uZXh0KFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxyXG4gICAgICAgICAgcmVzdWx0c0Nsb25lWzBdLmpvdXJuZXlzLFxyXG4gICAgICAgICAgREVGQVVMVF9GSUxURVJTXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIHRoaXMubmVnb3RpYXRlZCA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9PT0gRmFyZVR5cGUuTmVnb3RpYXRlZCA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhcclxuICAgIHJlc3VsdHMxOiBFdXJvc3RhclF1b3RlUmVzdWx0XHJcbiAgKTogRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIHRoaXMucmVzdWx0UXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcblxyXG4gICAgdGhpcy5tdWx0aSA9IHJlc3VsdHMxLm11bHRpO1xyXG4gICAgLy8gZGVsZXRlIHRoaXMucmVzdWx0UXVlcnlbJ3dpdGhHcm91cGVkJ107XHJcbiAgICB0aGlzLmZpbHRlcnMubmV4dChcclxuICAgICAgdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMocmVzdWx0czEuam91cm5leXMsIERFRkFVTFRfRklMVEVSUylcclxuICAgICk7XHJcbiAgICBpZiAocmVzdWx0czEgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSkge1xyXG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZDoge30sXHJcbiAgICAgICAgICBkdWFsU2luZ2xlV2hlblNlbGVjdGVkOiB7fSxcclxuICAgICAgICAgIHdoZW5TZWxlY3RlZEFsb25lOiB7fVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzdWx0czEucnVsZUFjdGlvblN1bW1hcnkgfHwge31cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcmV0dXJuZGF0YSA9IChyZXN1bHRzMS5qb3VybmV5cyB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAgIChcclxuICAgICAgICAgIGFjYzogRXVyb3N0YXJSZXN1bHRzLFxyXG4gICAgICAgICAgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICBpbmRleDogbnVtYmVyXHJcbiAgICAgICAgKTogRXVyb3N0YXJSZXN1bHRzID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBldXJvUmVzdWx0ID0gdGhpcy5mb3JtYXRFdXJvc3RhclJlc3VsdHMoXHJcbiAgICAgICAgICAgICAgcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICByZXN1bHQudG90YWwsXHJcbiAgICAgICAgICAgICAgcmVzdWx0LmpvdXJuZXlIYXNoLFxyXG4gICAgICAgICAgICAgIGluZGV4XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuY28yUGVyUGFzc2VuZ2VyID0gcmVzdWx0LmNvMlBlclBhc3NlbmdlcjtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5jbzJQZXJJdGVtID0gcmVzdWx0LmNvMlBlckl0ZW07XHJcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuc291cmNlSWQgPSByZXN1bHQuc291cmNlSWQ7XHJcbiAgICAgICAgICAgIGV1cm9SZXN1bHQudG90YWwgPSByZXN1bHQudG90YWw7XHJcbiAgICAgICAgICAgIGV1cm9SZXN1bHQuZHVyYXRpb24gPSB0aGlzLm1pblRvSG91cihyZXN1bHQub3V0Ym91bmRUb3RhbER1cmF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGV1cm9SZXN1bHQuY2FiaW5DbGFzcyk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhYWNjLm91dGJvdW5kLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoaXRlbTogRXVyb3N0YXJJdGVtKSA9PlxyXG4gICAgICAgICAgICAgICAgICBpdGVtLmRhdGVEZXBhcnR1cmUgPT09IGV1cm9SZXN1bHQuZGF0ZURlcGFydHVyZSAmJlxyXG4gICAgICAgICAgICAgICAgICBpdGVtLmNhYmluQ2xhc3MgPT09IGV1cm9SZXN1bHQuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgYWNjLm91dGJvdW5kLnB1c2goZXVyb1Jlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBldXJvUmVzdWx0ID0gdGhpcy5mb3JtYXRFdXJvc3RhclJlc3VsdHMoXHJcbiAgICAgICAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgIHJlc3VsdC50b3RhbCxcclxuICAgICAgICAgICAgICByZXN1bHQuam91cm5leUhhc2gsXHJcbiAgICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5jbzJQZXJQYXNzZW5nZXIgPSByZXN1bHQuY28yUGVyUGFzc2VuZ2VyO1xyXG4gICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlckl0ZW0gPSByZXN1bHQuY28yUGVySXRlbTtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5zb3VyY2VJZCA9IHJlc3VsdC5zb3VyY2VJZDtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC50b3RhbCA9IHJlc3VsdC50b3RhbDtcclxuICAgICAgICAgICAgZXVyb1Jlc3VsdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKHJlc3VsdC5pbmJvdW5kVG90YWxEdXJhdGlvbik7XHJcblxyXG5cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZXVyb1Jlc3VsdC5jYWJpbkNsYXNzKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICFhY2MuaW5ib3VuZC5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGl0ZW06IEV1cm9zdGFySXRlbSkgPT5cclxuICAgICAgICAgICAgICAgICAgaXRlbS5kYXRlRGVwYXJ0dXJlID09PSBldXJvUmVzdWx0LmRhdGVEZXBhcnR1cmUgJiZcclxuICAgICAgICAgICAgICAgICAgaXRlbS5jYWJpbkNsYXNzID09PSBldXJvUmVzdWx0LmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGFjYy5pbmJvdW5kLnB1c2goZXVyb1Jlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IG91dGJvdW5kOiBbXSwgaW5ib3VuZDogW10gfSBhcyBFdXJvc3RhclJlc3VsdHNcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuZGF0YS5vdXRib3VuZCA9IHJldHVybmRhdGEub3V0Ym91bmQucmVkdWNlKFxyXG4gICAgICAgIHRoaXMubWF0Y2hGYXJlcy5iaW5kKHRoaXMpLFxyXG4gICAgICAgIFtdXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybmRhdGEuaW5ib3VuZCA9IHJldHVybmRhdGEuaW5ib3VuZC5yZWR1Y2UoXHJcbiAgICAgICAgdGhpcy5tYXRjaEZhcmVzLmJpbmQodGhpcyksXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuXHJcblxyXG4gICAgICByZXR1cm4gW3JldHVybmRhdGFdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHMxID8gW3Jlc3VsdHMxXSA6IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuICBtYXRjaEZhcmVzKGFjYzogRXVyb3N0YXJJdGVtW10sIG91dDogRXVyb3N0YXJJdGVtKTogRXVyb3N0YXJJdGVtW10ge1xyXG4gICAgY29uc3QgbWF0Y2hpbmdFdXJvc3RhciA9IGFjYy5maW5kKFxyXG4gICAgICAoaXRlbSkgPT4gaXRlbS5kYXRlRGVwYXJ0dXJlID09PSBvdXQuZGF0ZURlcGFydHVyZVxyXG4gICAgKTtcclxuICAgIGlmICghbWF0Y2hpbmdFdXJvc3Rhcikge1xyXG4gICAgICBhY2MucHVzaChvdXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gY2hlY2sgd2hhdCBuZWVkcyBhZGRpbmcgYW5kIGFkZCBpdFxyXG4gICAgICBzd2l0Y2ggKG91dC5jYWJpbkNsYXNzKSB7XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXk6XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3M6XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkOlxyXG4gICAgICAgICAgbWF0Y2hpbmdFdXJvc3Rhci5zdGFuZGFyZEZhcmUgPSBvdXQuc3RhbmRhcmRGYXJlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUHJlbWl1bSc6XHJcbiAgICAgICAgICBtYXRjaGluZ0V1cm9zdGFyLnN0YW5kYXJkUHJlbWllckZhcmUgPSBvdXQuc3RhbmRhcmRQcmVtaWVyRmFyZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzczpcclxuICAgICAgICAgIG1hdGNoaW5nRXVyb3N0YXIuYnVzaW5lc3NQcmVtaWVyRmFyZSA9IG91dC5idXNpbmVzc1ByZW1pZXJGYXJlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdob3cgZGlkIEkgZ2V0IGhlcmUnLCBvdXQuY2FiaW5DbGFzcyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjYztcclxuICB9XHJcblxyXG4gIGZvcm1hdEV1cm9zdGFyUmVzdWx0cyhcclxuICAgIHJlc3VsdHM6IEZsaWdodEpvdXJuZXlbXSxcclxuICAgIHRvdGFsOiBGbGlnaHRGYXJlVG90YWwsXHJcbiAgICBqb3VybmV5SGFzaDogc3RyaW5nLFxyXG4gICAgaW5kZXg6IG51bWJlclxyXG4gICk6IEV1cm9zdGFySXRlbSB7XHJcbiAgICBsZXQgcmV0dXJuT2JqZWN0OiBFdXJvc3Rhckl0ZW0gPSB7XHJcbiAgICAgIGRhdGVBcnJpdmFsOiBudWxsLFxyXG4gICAgICBkYXRlRGVwYXJ0dXJlOiBudWxsLFxyXG4gICAgICBkdXJhdGlvbjogbnVsbCxcclxuICAgICAgdGltZUFycml2YWw6IG51bGwsXHJcbiAgICAgIHRpbWVEZXBhcnR1cmU6IG51bGwsXHJcbiAgICAgIGNvMlBlckl0ZW06IDAsXHJcbiAgICAgIGNvMlBlclBhc3NlbmdlcjogMCxcclxuICAgICAgc291cmNlSWQ6IG51bGwsXHJcbiAgICAgIHRvdGFsOiBudWxsLFxyXG4gICAgICB1aWQ6IG51bGwsXHJcbiAgICAgIGNhYmluQ2xhc3M6IG51bGwsXHJcbiAgICAgIGJ1c2luZXNzUHJlbWllckZhcmU6IHtcclxuICAgICAgICBjbGFzczogbnVsbCxcclxuICAgICAgICBmYXJlOiBudWxsLFxyXG4gICAgICAgIGlzRGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgcHJpY2U6IE5hTixcclxuICAgICAgICBjdXJyZW5jeTogJ0dCUCcsXHJcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJlcXVpcmVzUmVhc29uOiBmYWxzZSxcclxuICAgICAgICBwcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHByZWZlcnJlZE1lc3NhZ2VzOiAnJyxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkTWVzc2FnZTogJycsXHJcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlOiAnJyxcclxuICAgICAgICB0bWNQcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHRtY1ByZWZlcnJlZE1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIHVuYXZhaWxhYmxlOiBmYWxzZSxcclxuICAgICAgICB1bmF2YWlsYWJsZU1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIHJlcXVpcmVzUmVhc29uTWVzc2FnZTogJycsXHJcbiAgICAgICAgY2FuU2VsZWN0OiBmYWxzZSxcclxuICAgICAgICBqb3VybmV5SGFzaDogJydcclxuICAgICAgfSxcclxuICAgICAgc3RhbmRhcmRGYXJlOiB7XHJcbiAgICAgICAgY2xhc3M6IG51bGwsXHJcbiAgICAgICAgZmFyZTogbnVsbCxcclxuICAgICAgICBpc0Rpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgIHByaWNlOiBOYU4sXHJcbiAgICAgICAgY3VycmVuY3k6ICdHQlAnLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICByZXF1aXJlc1JlYXNvbjogZmFsc2UsXHJcbiAgICAgICAgcHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBwcmVmZXJyZWRNZXNzYWdlczogJycsXHJcbiAgICAgICAgY29tcGFueVByZWZlcnJlZDogZmFsc2UsXHJcbiAgICAgICAgY29tcGFueVByZWZlcnJlZE1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIG9mZmljZVByZWZlcnJlZDogZmFsc2UsXHJcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkTWVzc2FnZTogJycsXHJcbiAgICAgICAgdG1jUHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICB0bWNQcmVmZXJyZWRNZXNzYWdlOiAnJyxcclxuICAgICAgICB1bmF2YWlsYWJsZTogZmFsc2UsXHJcbiAgICAgICAgdW5hdmFpbGFibGVNZXNzYWdlOiAnJyxcclxuICAgICAgICByZXF1aXJlc1JlYXNvbk1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIGNhblNlbGVjdDogZmFsc2UsXHJcbiAgICAgICAgam91cm5leUhhc2g6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0YW5kYXJkUHJlbWllckZhcmU6IHtcclxuICAgICAgICBjbGFzczogbnVsbCxcclxuICAgICAgICBmYXJlOiBudWxsLFxyXG4gICAgICAgIGlzRGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgcHJpY2U6IE5hTixcclxuICAgICAgICBjdXJyZW5jeTogJ0dCUCcsXHJcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJlcXVpcmVzUmVhc29uOiBmYWxzZSxcclxuICAgICAgICBwcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHByZWZlcnJlZE1lc3NhZ2VzOiAnJyxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkTWVzc2FnZTogJycsXHJcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlOiAnJyxcclxuICAgICAgICB0bWNQcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHRtY1ByZWZlcnJlZE1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIHVuYXZhaWxhYmxlOiBmYWxzZSxcclxuICAgICAgICB1bmF2YWlsYWJsZU1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIHJlcXVpcmVzUmVhc29uTWVzc2FnZTogJycsXHJcbiAgICAgICAgY2FuU2VsZWN0OiBmYWxzZSxcclxuICAgICAgICBqb3VybmV5SGFzaDogJydcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIHJldHVybk9iamVjdC5kdXJhdGlvbiA9IHJlc3VsdHMub3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChmbGlnaHQ6IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRhdGVBcnJpdmFsID0gZmxpZ2h0LmRhdGVUaW1lQXJyaXZpbmc7XHJcbiAgICAgIHJldHVybk9iamVjdC5kYXRlRGVwYXJ0dXJlID0gZmxpZ2h0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuZHVyYXRpb24gPSB0aGlzLm1pblRvSG91cihmbGlnaHQudG90YWxEdXJhdGlvbik7XHJcbiAgICAgIHJldHVybk9iamVjdC50aW1lQXJyaXZhbCA9IG1vbWVudChmbGlnaHQuZGF0ZVRpbWVBcnJpdmluZykuZm9ybWF0KFxyXG4gICAgICAgICdISDptbSdcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuT2JqZWN0LnRpbWVEZXBhcnR1cmUgPSBtb21lbnQoZmxpZ2h0LmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoXHJcbiAgICAgICAgJ0hIOm1tJ1xyXG4gICAgICApO1xyXG4gICAgICByZXR1cm5PYmplY3QuY2FiaW5DbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xyXG4gICAgICByZXR1cm5PYmplY3QudWlkID0gaW5kZXg7XHJcbiAgICAgIC8vIFsxNDo0MV0gQnJlbmRhbiBWZW5pbmdhXHJcbiAgICAgIC8vIEVjb25vbXkgKGFuZCB0aGVpciB2YXJpYW50cykgd291bGQgYmUgU3RhbmRhcmRcclxuICAgICAgLy8gUHJlbWl1bSB3b3VsZCBiZSBTdGFuZGFyZCBQcmVtaXVtXHJcbiAgICAgIC8vIEJ1c2luZXNzIHdvdWxkIGJlIEJ1c2luZXNzIFByZW1pdW1cclxuICAgICAgc3dpdGNoIChmbGlnaHQuY2FiaW5DbGFzcykge1xyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGk6XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3M6XHJcbiAgICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlSZXN0cmljdGVkOlxyXG4gICAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmZhcmUgPSBmbGlnaHQ7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnByaWNlID0gdG90YWwucHJpY2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmNsYXNzID0gZmxpZ2h0LmNhYmluQ2xhc3M7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmpvdXJuZXlIYXNoID0gam91cm5leUhhc2g7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QgPSB0aGlzLnVwZGF0ZVJ1bGVzKHJldHVybk9iamVjdCwgam91cm5leUhhc2gsICdzdGFuZGFyZEZhcmUnKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUHJlbWl1bSc6XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5mYXJlID0gZmxpZ2h0O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2UgPSB0b3RhbC5wcmljZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLmpvdXJuZXlIYXNoID0gam91cm5leUhhc2g7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QgPSB0aGlzLnVwZGF0ZVJ1bGVzKHJldHVybk9iamVjdCwgam91cm5leUhhc2gsICdzdGFuZGFyZFByZW1pZXJGYXJlJylcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3M6XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5mYXJlID0gZmxpZ2h0O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUucHJpY2UgPSB0b3RhbC5wcmljZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmpvdXJuZXlIYXNoID0gam91cm5leUhhc2g7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QgPSB0aGlzLnVwZGF0ZVJ1bGVzKHJldHVybk9iamVjdCwgam91cm5leUhhc2gsICdidXNpbmVzc1ByZW1pZXJGYXJlJylcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ25ldyBjbGFzcyB0byBiZSBpbXBsZW1lbnRlZDogJywgZmxpZ2h0LmNhYmluQ2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5PYmplY3Q7XHJcbiAgfVxyXG4gIHByaXZhdGUgdXBkYXRlUnVsZXMocmV0dXJuT2JqZWN0OiBFdXJvc3Rhckl0ZW0sIGpvdXJuZXlIYXNoOiBzdHJpbmcsIGZhcmVUeXBlOiBzdHJpbmcpOiBFdXJvc3Rhckl0ZW17XHJcbiAgICBjb25zdCBzZWxlY3RlZFJ1bGVTdW1tYXJ5OiBSZWNvcmRSdWxlQWN0aW9uID1cclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8uam91cm5leUhhc2hcclxuICAgIF0gfHwge307XHJcblxyXG4gIGNvbnN0IGhhc0ZpZWxkID0gPFQ+KFxyXG4gICAgam91cm5leUhhc2g6IHN0cmluZyxcclxuICAgIGZpZWxkOiBzdHJpbmcsXHJcbiAgICBkZWY6IFRcclxuICApOiBUID0+IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuaGVscGVycy5maWVsZEZyb21PYmplY3QodGhpcy5fcnVsZUFjdGlvblN1bW1hcnksIFtcclxuICAgICAgICAnam91cm5leVdoZW5TZWxlY3RlZCcsXHJcbiAgICAgICAgam91cm5leUhhc2gsXHJcbiAgICAgICAgZmllbGRcclxuICAgICAgXSkgfHxcclxuICAgICAgdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdCh0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSwgW1xyXG4gICAgICAgICd3aGVuU2VsZWN0ZWRBbG9uZScsXHJcbiAgICAgICAgam91cm5leUhhc2gsXHJcbiAgICAgICAgZmllbGRcclxuICAgICAgXSkgfHxcclxuICAgICAgdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdChzZWxlY3RlZFJ1bGVTdW1tYXJ5LCBbXHJcbiAgICAgICAgam91cm5leUhhc2gsXHJcbiAgICAgICAgZmllbGRcclxuICAgICAgXSkgfHxcclxuICAgICAgZGVmXHJcbiAgICApO1xyXG4gIH07XHJcbiAgc3dpdGNoIChmYXJlVHlwZSkge1xyXG4gICAgY2FzZSAnc3RhbmRhcmRGYXJlJzpcclxuICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuY29tcGFueVByZWZlcnJlZCA9XHJcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgIGZhbHNlO1xyXG5cclxuICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICAgID8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICcnO1xyXG4gICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5vZmZpY2VQcmVmZXJyZWQgPVxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlID1cclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgID8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICAgID8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgJyc7XHJcbiAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnRtY1ByZWZlcnJlZCA9XHJcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/LnRtY1ByZWZlcnJlZCB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICAgID8udG1jUHJlZmVycmVkIHx8XHJcbiAgICBmYWxzZTtcclxuXHJcbiAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnRtY1ByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgICAgPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICAnJztcclxuICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUucHJlZmVycmVkID1cclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgPy50bWNQcmVmZXJyZWQgfHxcclxuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICA/LnRtY1ByZWZlcnJlZDtcclxuXHJcbiAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSByZXR1cm5PYmplY3QudWlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LnVpZDtcclxuICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS51bmF2YWlsYWJsZSA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAndW5hdmFpbGFibGUnLCBmYWxzZSk7XHJcblxyXG4gICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnVuYXZhaWxhYmxlTWVzc2FnZSA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAndW5hdmFpbGFibGVNZXNzYWdlJywgJycpO1xyXG4gICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnJlcXVpcmVzUmVhc29uID0gaGFzRmllbGQoam91cm5leUhhc2gsICdyZXF1aXJlc1JlYXNvbicsIGZhbHNlKTtcclxuICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2UgPSBoYXNGaWVsZChqb3VybmV5SGFzaCwgJ3JlcXVpcmVzUmVhc29uTWVzc2FnZScsICcnKTtcclxuXHJcbiAgICAgIGNhc2UgJ3N0YW5kYXJkUHJlbWllckZhcmUnOlxyXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLmNvbXBhbnlQcmVmZXJyZWQgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgICAgIGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5jb21wYW55UHJlZmVycmVkTWVzc2FnZSA9XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICAgICAnJztcclxuICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5vZmZpY2VQcmVmZXJyZWQgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICAgICAgICBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSA9XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICAgICAgJyc7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUudG1jUHJlZmVycmVkID1cclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy50bWNQcmVmZXJyZWQgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8udG1jUHJlZmVycmVkIHx8XHJcbiAgICAgICAgZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnRtY1ByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8udG1jUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgICAgICcnO1xyXG4gICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnByZWZlcnJlZCA9XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy5jb21wYW55UHJlZmVycmVkIHx8XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgICAgICAgID8ub2ZmaWNlUHJlZmVycmVkIHx8XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LnRtY1ByZWZlcnJlZCB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy50bWNQcmVmZXJyZWQ7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5zZWxlY3RlZCA9IHJldHVybk9iamVjdC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUudW5hdmFpbGFibGUgPSBoYXNGaWVsZChqb3VybmV5SGFzaCwgJ3VuYXZhaWxhYmxlJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnVuYXZhaWxhYmxlTWVzc2FnZSA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAndW5hdmFpbGFibGVNZXNzYWdlJywgJycpO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUucmVxdWlyZXNSZWFzb24gPSBoYXNGaWVsZChqb3VybmV5SGFzaCwgJ3JlcXVpcmVzUmVhc29uJywgZmFsc2UpO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUucmVxdWlyZXNSZWFzb25NZXNzYWdlID0gaGFzRmllbGQoam91cm5leUhhc2gsICdyZXF1aXJlc1JlYXNvbk1lc3NhZ2UnLCAnJyk7XHJcbiBjYXNlICdidXNpbmVzc1ByZW1pZXJGYXJlJzpcclxuICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5jb21wYW55UHJlZmVycmVkID1cclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgPy5jb21wYW55UHJlZmVycmVkIHx8XHJcbiAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICBmYWxzZTtcclxuXHJcbiAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICA/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICA/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgJyc7XHJcbiAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUub2ZmaWNlUHJlZmVycmVkID1cclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgID8ub2ZmaWNlUHJlZmVycmVkIHx8XHJcbiAgZmFsc2U7XHJcblxyXG4gIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICA/Lm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgID8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICcnO1xyXG4gIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnRtY1ByZWZlcnJlZCA9XHJcbiAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF1cclxuICAgID8udG1jUHJlZmVycmVkIHx8XHJcbiAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICA/LnRtY1ByZWZlcnJlZCB8fFxyXG4gIGZhbHNlO1xyXG5cclxuICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS50bWNQcmVmZXJyZWRNZXNzYWdlID1cclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdXHJcbiAgICA/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAnJztcclxuICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmVmZXJyZWQgPVxyXG4gIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXHJcbiAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXVxyXG4gICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxyXG4gICAgPy50bWNQcmVmZXJyZWQgfHxcclxuICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF1cclxuICAgID8udG1jUHJlZmVycmVkO1xyXG4gICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuc2VsZWN0ZWQgPSByZXR1cm5PYmplY3QudWlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LnVpZDtcclxuICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnVuYXZhaWxhYmxlID0gaGFzRmllbGQoam91cm5leUhhc2gsICd1bmF2YWlsYWJsZScsIGZhbHNlKTtcclxuXHJcbiAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS51bmF2YWlsYWJsZU1lc3NhZ2UgPSBoYXNGaWVsZChqb3VybmV5SGFzaCwgJ3VuYXZhaWxhYmxlTWVzc2FnZScsICcnKTtcclxuICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnJlcXVpcmVzUmVhc29uID0gaGFzRmllbGQoam91cm5leUhhc2gsICdyZXF1aXJlc1JlYXNvbicsIGZhbHNlKTtcclxuICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnJlcXVpcmVzUmVhc29uTWVzc2FnZSA9IGhhc0ZpZWxkKGpvdXJuZXlIYXNoLCAncmVxdWlyZXNSZWFzb25NZXNzYWdlJywgJycpO1xyXG4gICAgICAgIH1cclxuICByZXR1cm4gcmV0dXJuT2JqZWN0XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeShjaGVja0lzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KCkpO1xyXG4gICAgaWYgKGNoZWNrSXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRQYXJhbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICB0aGlzLnJlc2V0UXVlcnkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAoIXRoaXMuX29yaWdpbkFpcnBvcnQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGFycml2YWwgZGVzdGluYXRpb24nKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc0FmdGVyKG1vbWVudCgpKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ICYmXHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHRoaXMuX29yaWdpbkFpcnBvcnRcclxuICAgICkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICdPcmlnaW4gYW5kIGRlc3RpbmF0aW9uIHN0YXRpb24gY2Fubm90IGJlIHRoZSBzYW1lJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcclxuICAgICAgLy8gVE9ETyBjaGVjayB0aGF0IHJldHVybiBkZXRhaWxzIGFyZSBzZXRcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNTYW1lT3JBZnRlcihcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMgaXMgc3R1ZmYgZm9yIG1hdGNoaW5nIGNhYmluIGNsYXNzZXNcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrQ2FiaW5NYXRjaGlzVmFsaWQoKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnVGhlIHR5cGVzIG9mIGNhYmluIGNsYXNzZXMgc2VsZWN0ZWQgYXJlIG5vdCBjb21wYXRpYmxlLiBFeGFtcGxlcyBvZiBjb21wYXRpYmxlIGNhYmluIGNsYXNzZXM7IEFueSAtIEFueTsgU3RhbmRhcmQgLSBTdGFuZGFyZDsgQnVzaW5lc3MgLSBCdXNpbmVzcydcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQ2FiaW5NYXRjaGlzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzKSB7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5Bbnk6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkFueTtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXk6XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgIT09IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MgJiZcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzICE9PSBGbGlnaHRDYWJpbkNsYXNzLkFueVxyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzczpcclxuICAgICAgICByZXR1cm4gIShcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXkgfHxcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID09PVxyXG4gICAgICAgICAgICBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IHx8XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9PT0gRmxpZ2h0Q2FiaW5DbGFzcy5BbnlcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRlbXBQYXJhbXMpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgICAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcclxuICAgICAgICB0aGlzLmV1cm9zdGFyRmV0Y2hlci5mZXRjaExpc3QodGhpcy5nZXRTZWFyY2hRdWVyeSgpKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeTogSUV1cm9zdGFyU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkV1cm9zdGFyLFxyXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcclxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5vdXRCb3VuZERhdGUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlc1xyXG4gICk6IElFdXJvc3RhclNlYXJjaEFyZ3Mge1xyXG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IElFdXJvc3RhclNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIGlmICh0aGlzLmRlcGFydExvY2F0aW9uKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmRlcGFydExvY2F0aW9uID0gdGhpcy5kZXBhcnRMb2NhdGlvbjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmFycml2ZUxvY2F0aW9uID0gdGhpcy5hcnJpdmVMb2NhdGlvbjtcclxuICAgIH1cclxuICAgIHNlYXJjaFF1ZXJ5Lm91dGJvdW5kQ2FiaW5DbGFzc05hbWUgPSB0aGlzLnR1cm5DYWJpblR5cGVUb05hbWUoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcclxuICAgICAgc2VhcmNoUXVlcnkucmV0dXJuQ2FiaW5DbGFzc05hbWUgPVxyXG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzID09PSB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc1xyXG4gICAgICAgICAgPyBzZWFyY2hRdWVyeS5vdXRib3VuZENhYmluQ2xhc3NOYW1lXHJcbiAgICAgICAgICA6IHRoaXMudHVybkNhYmluVHlwZVRvTmFtZSh0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG5cclxuICB0dXJuQ2FiaW5UeXBlVG9OYW1lKGNsYXNzVHlwZTogRmxpZ2h0Q2FiaW5DbGFzcykge1xyXG4gICAgY29uc3QgY2xhc3NlcyA9IHRoaXMuYXZhbGlhYmxlQ2xhc3Nlcy52YWx1ZTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ2Fsc3NOYW1lID0gY2xhc3Nlcy5maW5kKFxyXG4gICAgICAoY2xhc3NJdGVtKSA9PiBjbGFzc0l0ZW0udHlwZSA9PT0gY2xhc3NUeXBlXHJcbiAgICApLm5hbWU7XHJcbiAgICByZXR1cm4gW3NlbGVjdGVkQ2Fsc3NOYW1lXTtcclxuICB9XHJcblxyXG4gIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJnc1xyXG4gICAgICAgIC5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXHJcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mYXJlVHlwZTtcclxuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuVHJpcFxyXG4gICAgICA/IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm5cclxuICAgICAgOiBFdXJvc3RhclNlYXJjaFR5cGUub25lV2F5O1xyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcclxuICAgIH0gZWxzZSBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnQ7XHJcbiAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYXJyaXZlTG9jYXRpb247XHJcbiAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwYXJ0TG9jYXRpb247XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB3aW5kb3cgPT09IFRpbWVXaW5kb3cuRGVwYXJ0XHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICBkYXRlVGltZTogbW9tZW50Lk1vbWVudCxcclxuICAgIHdpbmRvdzogVGltZVdpbmRvd1xyXG4gICk6IHN0cmluZyB7XHJcbiAgICBpZiAod2luZG93ICE9PSBUaW1lV2luZG93LkFycml2ZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMik7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXHJcbiAgICBkYXRlOiBzdHJpbmcsXHJcbiAgICB0aW1lV2luZG93Pzogc3RyaW5nXHJcbiAgKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBpZiAodGltZVdpbmRvdykge1xyXG4gICAgICBjb25zdCBmbGlnaHRUaW1lID0gdGltZVdpbmRvdy5zcGxpdCgnLScpO1xyXG4gICAgICBsZXQgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzPihcclxuICAgICAgT2JqZWN0LmFzc2lnbihcclxuICAgICAgICB7fSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5BaXJwb3J0OiB0aGlzLl9vcmlnaW5BaXJwb3J0LFxyXG4gICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0OiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQsXHJcbiAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBhc3NlbmdlcnM6IHRoaXMuX3Bhc3NlbmdlcnMsXHJcbiAgICAgICAgICByZXR1cm5UcmlwOiB0aGlzLmlzUmV0dXJuLFxyXG4gICAgICAgICAgb3V0Ym91bmRDYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc11cclxuICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgICAgcmVxdWlyZUZyZWVCYWc6IG51bGwsXHJcbiAgICAgICAgICBtYXhDb25uZWN0aW9uczogdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zLFxyXG4gICAgICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzLFxyXG4gICAgICAgICAgcHJlZmVycmVkQ2FycmllcnM6IHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycy5tYXAoXHJcbiAgICAgICAgICAgIChjYXJyaWVyOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+XHJcbiAgICAgICAgICAgICAgY2Fycmllcj8uY29kZSA/IGNhcnJpZXIuY29kZSA6IG51bGxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBmYXJlVHlwZTogdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlLFxyXG4gICAgICAgICAgd2l0aEdyb3VwZWQ6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRoaXMuaXNSZXR1cm5cclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIHJldHVybkRhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICByZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICByZXR1cm5BcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIHRoaXMuYXZhbGlhYmxlQ2xhc3Nlcy5uZXh0KFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBbnknLFxyXG4gICAgICAgIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3RhbmRhcmQgKHNlbWkgZmxleGlibGUpJyxcclxuICAgICAgICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdGFuZGFyZCBwcmVtaWVyIChzZW1pIGZsZXhpYmxlKScsXHJcbiAgICAgICAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0J1c2luZXNzIHByZW1pZXIgKGZ1bGx5IGZsZXhpYmxlKScsXHJcbiAgICAgICAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc1xyXG4gICAgICB9XHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIGZsaWdodCByZXN1bHRzXHJcbiAgICogQHRvZG8gLSBGaWxsIG91dCBQcmVmZXJyZWQgYW5kIENvMiBzb3J0aW5nIHdoZW4gd2UgaGF2ZSB0aGF0IGRhdGFcclxuICAgKi9cclxuICBwdWJsaWMgc29ydFJlc3VsdHMoXHJcbiAgICBzb3J0TWV0aG9kVmFsdWU6IFNvcnRUeXBlc0V1cm9zdGFyLFxyXG4gICAgZGlyOiBib29sZWFuLFxyXG4gICAgZ2l2ZW5SZXN1bHRzPzogRXVyb3N0YXJSZXN1bHRzW11cclxuICApOiB2b2lkIHtcclxuICAgIGxldCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICBnaXZlblJlc3VsdHNcclxuICAgICAgICA/IGdpdmVuUmVzdWx0c1xyXG4gICAgICAgIDogPEV1cm9zdGFyUmVzdWx0c1tdPig8dW5rbm93bj50aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgKTtcclxuXHJcbiAgICBzd2l0Y2ggKHNvcnRNZXRob2RWYWx1ZSkge1xyXG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3Q6XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5UHJpY2UocmVzdWx0cywgZGlyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0OlxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeURhdGUocmVzdWx0cywgZGlyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmVycm9yKGArKysgVW5rbm93biBzb3J0aW5nIG1ldGhvZDogJHtzb3J0TWV0aG9kVmFsdWV9ICsrK2ApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRSZXN1bHRzRmxpZ2h0Sm91cm5leXMoXHJcbiAgICBzb3J0TWV0aG9kVmFsdWU6IFNvcnRUeXBlc0V1cm9zdGFyLFxyXG4gICAgaW5ib3VuZDogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgZ2l2ZW5SZXN1bHRzPzogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShnaXZlblJlc3VsdHMpO1xyXG5cclxuICAgIHN3aXRjaCAoc29ydE1ldGhvZFZhbHVlKSB7XHJcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdDpcclxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlQcmljZUZsaWdodChyZXN1bHRzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5FYXJsaWVzdEZpcnN0OlxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeURhdGVGbGlnaHQocmVzdWx0cywgaW5ib3VuZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuTGF0ZXN0Rmlyc3Q6XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RGF0ZUZsaWdodERlY2VuZGluZyhyZXN1bHRzLCBpbmJvdW5kKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmVycm9yKGArKysgVW5rbm93biBzb3J0aW5nIG1ldGhvZDogJHtzb3J0TWV0aG9kVmFsdWV9ICsrK2ApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ5UHJpY2VGbGlnaHQocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIoYS50b3RhbC5wcmljZSkgLSBOdW1iZXIoYi50b3RhbC5wcmljZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNvcnRCeURhdGVGbGlnaHQoXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGluYm91bmQ6IGJvb2xlYW5cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChpbmJvdW5kKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG1vbWVudChhLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KCkgLVxyXG4gICAgICAgICAgbW9tZW50KGIuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cclxuICAgICAgICAgIG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzb3J0QnlEYXRlRmxpZ2h0RGVjZW5kaW5nKFxyXG4gICAgcmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10sXHJcbiAgICBpbmJvdW5kOiBib29sZWFuXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgcmV0dXJuIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBpZiAoaW5ib3VuZCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBtb21lbnQoYi5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cclxuICAgICAgICAgIG1vbWVudChhLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KClcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKSAtXHJcbiAgICAgICAgICBtb21lbnQoYS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCByZXN1bHRzIGJ5IGRlcGFydHVyZSB0aW1lXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V1cm9zdGFyUmVzdWx0c1tdfSByZXN1bHRzXHJcbiAgICogQHJldHVybnNcclxuICAgKiBAbWVtYmVyb2YgRXVyb3N0YXJJbmZvXHJcbiAgICovXHJcbiAgc29ydEJ5RGF0ZShyZXN1bHRzOiBFdXJvc3RhclJlc3VsdHNbXSwgZGlyPzogYm9vbGVhbik6IEV1cm9zdGFyUmVzdWx0c1tdIHtcclxuICAgIGNvbnN0IGJ5RGF0ZSA9IChhOiBFdXJvc3Rhckl0ZW0sIGI6IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICBpZiAoZGlyKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudChhLmRhdGVEZXBhcnR1cmUpLnVuaXgoKSAtIG1vbWVudChiLmRhdGVEZXBhcnR1cmUpLnVuaXgoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50KGIuZGF0ZURlcGFydHVyZSkudW5peCgpIC0gbW9tZW50KGEuZGF0ZURlcGFydHVyZSkudW5peCgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSB7XHJcbiAgICAgIG91dGJvdW5kOiByZXN1bHRzWzBdLm91dGJvdW5kLnNvcnQoYnlEYXRlKSxcclxuICAgICAgaW5ib3VuZDogcmVzdWx0c1swXS5pbmJvdW5kLnNvcnQoYnlEYXRlKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBbc29ydGVkUmVzdWx0c107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0IHJlc3VsdHMgYnkgcHJpY2VcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXVyb3N0YXJSZXN1bHRzW119IHJlc3VsdHNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBFdXJvc3RhckluZm9cclxuICAgKi9cclxuICBzb3J0QnlQcmljZShyZXN1bHRzOiBFdXJvc3RhclJlc3VsdHNbXSwgZGlyPzogYm9vbGVhbik6IEV1cm9zdGFyUmVzdWx0c1tdIHtcclxuICAgIGNvbnN0IGJ5UHJpY2UgPSAoYTogRXVyb3N0YXJJdGVtLCBiOiBFdXJvc3Rhckl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgYVByaWNlID1cclxuICAgICAgICArYS5zdGFuZGFyZEZhcmUucHJpY2UgfHxcclxuICAgICAgICArYS5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlIHx8XHJcbiAgICAgICAgK2EuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZTtcclxuICAgICAgY29uc3QgYlByaWNlID1cclxuICAgICAgICArYi5zdGFuZGFyZEZhcmUucHJpY2UgfHxcclxuICAgICAgICArYi5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlIHx8XHJcbiAgICAgICAgK2IuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZTtcclxuICAgICAgaWYgKGRpcikge1xyXG4gICAgICAgIHJldHVybiBhUHJpY2UgLSBiUHJpY2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGJQcmljZSAtIGFQcmljZTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IHtcclxuICAgICAgb3V0Ym91bmQ6IHJlc3VsdHNbMF0ub3V0Ym91bmQuc29ydChieVByaWNlKSxcclxuICAgICAgaW5ib3VuZDogcmVzdWx0c1swXS5pbmJvdW5kLnNvcnQoYnlQcmljZSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gW3NvcnRlZFJlc3VsdHNdO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VhcmNoRnJvbUV4cGlyZWRCYXNrZXRJdGVtKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaEV1cm9TdGFyUXVlcnk6IFNlYXJjaEV1cm9zdGFyUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xyXG4gICAgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSBzZWFyY2hFdXJvU3RhclF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgID8gc2VhcmNoRXVyb1N0YXJRdWVyeS5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA6IHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICBzZWFyY2hFdXJvU3RhclF1ZXJ5Lm91dGJvdW5kRGF0ZSxcclxuICAgICAgICBvdXRib3VuZFRpbWVXaW5kb3dcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5EYXRlKSB7XHJcbiAgICAgIGxldCByZXR1cm5UaW1lV2luZG93ID0gc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyBzZWFyY2hFdXJvU3RhclF1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA6IHNlYXJjaEV1cm9TdGFyUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3c7XHJcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICBzZWFyY2hFdXJvU3RhclF1ZXJ5LnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSBzZWFyY2hFdXJvU3RhclF1ZXJ5LmZhcmVUeXBlO1xyXG4gICAgdGhpcy5tYXhDb25uZWN0aW9ucyA9IHNlYXJjaEV1cm9TdGFyUXVlcnkubWF4Q29ubmVjdGlvbnM7XHJcblxyXG4gICAgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHNlYXJjaEV1cm9TdGFyUXVlcnlcclxuICAgICAgICAub3V0Ym91bmRDYWJpbkNsYXNzWzBdIGFzIEZsaWdodENhYmluQ2xhc3M7XHJcbiAgICB9XHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHNlYXJjaEV1cm9TdGFyUXVlcnlcclxuICAgICAgICAucmV0dXJuQ2FiaW5DbGFzc1swXSBhcyBGbGlnaHRDYWJpbkNsYXNzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzID0gc2VhcmNoRXVyb1N0YXJRdWVyeS5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gc2VhcmNoRXVyb1N0YXJRdWVyeS5yZXR1cm5UcmlwXHJcbiAgICAgID8gRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICA6IEV1cm9zdGFyU2VhcmNoVHlwZS5vbmVXYXk7XHJcblxyXG4gICAgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaEV1cm9TdGFyUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5vcmlnaW5BaXJwb3J0KSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAgIC5sb29rdXBFdXJvc3RhclN0YXRpb25zKHNlYXJjaEV1cm9TdGFyUXVlcnkub3JpZ2luQWlycG9ydClcclxuICAgICAgICAuc3Vic2NyaWJlKChzdGF0aW9uczogRXVyb3N0YXJTdGF0aW9uW10pID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSBzdGF0aW9uc1swXSBhcyBPQlRBaXJwb3J0RGV0YWlscztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoRXVyb1N0YXJRdWVyeS5kZXN0aW5hdGlvbkFpcnBvcnQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmxvb2t1cEV1cm9zdGFyU3RhdGlvbnMoc2VhcmNoRXVyb1N0YXJRdWVyeS5kZXN0aW5hdGlvbkFpcnBvcnQpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoc3RhdGlvbnM6IEV1cm9zdGFyU3RhdGlvbltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gc3RhdGlvbnNbMF0gYXMgT0JUQWlycG9ydERldGFpbHM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIFRyYXZlbGxlcnNcclxuICAgIGlmIChiYXNrZXRJdGVtLnVzZXJzKSB7XHJcbiAgICAgIGJhc2tldEl0ZW0udXNlcnMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmFkZFRyYXZlbGxlcih1c2VyKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcclxuICAgIGNvbnN0IHJhaWxJdGVtOiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLlJhaWxdPy5zZWFyY2hRdWVyeTtcclxuICAgIGNvbnN0IGlybEl0ZW06IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID0gXHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdPy5zZWFyY2hRdWVyeVxyXG4gICAgY29uc3QgaG90ZWxJdGVtOiBTZWFyY2hIb3RlbHNRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUmFpbF0/LnNlYXJjaFF1ZXJ5O1xyXG4gICAgY29uc3QgY2FySXRlbTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzID0gXHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuQ2FyXT8uc2VhcmNoUXVlcnlcclxuICAgIGNvbnN0IGxvdW5nZUl0ZW06IFNlYXJjaExvdW5nZXNRdWVyeVZhcmlhYmxlcyA9IFxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkxvdW5nZV0/LnNlYXJjaFF1ZXJ5XHJcbiAgICBjb25zdCBwYXJraW5nSXRlbTogU2VhcmNoUGFya2luZ1F1ZXJ5VmFyaWFibGVzID0gXHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUGFya2luZ10/LnNlYXJjaFF1ZXJ5XHJcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoKHByZXZpb3VzSXRlbXMuRkxJR0hULm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoXCJUXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVswXSwgXCJZWVlZLU1NLUREaGg6bW06c3NcIilcclxuICAgICAgICBpZiAodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5vdXRCb3VuZERhdGUuc3VidHJhY3QodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLkZMSUdIVC5pbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCgocHJldmlvdXNJdGVtcy5GTElHSFQuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCkgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaW5ib3VuZERhdGUuc3VidHJhY3QodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSBmbGlnaHQgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChyYWlsSXRlbSkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoKHByZXZpb3VzSXRlbXMuUkFJTC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgaWYgKHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKSB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlLnN1YnRyYWN0KHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLCBcIm1pbnV0ZXNcIilcclxuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5SQUlMLmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLlJBSUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCkgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaW5ib3VuZERhdGUuc3VidHJhY3QodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSByYWlsIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXJsSXRlbSkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQoKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoXCJUXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVswXSwgXCJZWVlZLU1NLUREaGg6bW06c3NcIilcclxuICAgICAgICBpZiAodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5vdXRCb3VuZERhdGUuc3VidHJhY3QodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLklOVEVSTkFUSU9OQUxfUkFJTC5pbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCgocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgICBpZiAodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCkgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaW5ib3VuZERhdGUuc3VidHJhY3QodGhpcy5pbmJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgZXVyb3N0YXIgZnJvbSBpbnRlcm5hdGlvbmFsIHJhaWwgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChob3RlbEl0ZW0pIHtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLkhPVEVMLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoXCJUXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVswXSwgXCJZWVlZLU1NLUREaGg6bW06c3NcIilcclxuICAgICAgICBpZiAodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5vdXRCb3VuZERhdGUuc3VidHJhY3QodGhpcy5vdXRCb3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLkhPVEVMLmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLkhPVEVMLmluYm91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZShcIlRcIiwgXCJcIikuc3BsaXQoXCIuXCIpWzBdLCBcIllZWVktTU0tRERoaDptbTpzc1wiKVxyXG4gICAgICAgICAgaWYgKHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGV1cm9zdGFyIGZyb20gaG90ZWwgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjYXJJdGVtKSB7XHJcbiAgICAgIHRyeXtcclxuICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IG1vbWVudCgocHJldmlvdXNJdGVtcy5DQVIub3V0Ym91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZShcIlRcIiwgXCJcIikuc3BsaXQoXCIuXCIpWzBdLCBcIllZWVktTU0tRERoaDptbTpzc1wiKVxyXG4gICAgICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCkgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLm91dEJvdW5kRGF0ZS5zdWJ0cmFjdCh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuQ0FSLmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLkNBUi5pbmJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoXCJUXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVswXSwgXCJZWVlZLU1NLUREaGg6bW06c3NcIilcclxuICAgICAgICAgIGlmICh0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKSB0aGlzLmluYm91bmREYXRlID0gdGhpcy5pbmJvdW5kRGF0ZS5zdWJ0cmFjdCh0aGlzLmluYm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLCBcIm1pbnV0ZXNcIilcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBldXJvc3RhciBmcm9tIGNhciBpdGVtJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGxvdW5nZUl0ZW0pIHtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLkxPVU5HRS5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgaWYgKHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwKSB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMub3V0Qm91bmREYXRlLnN1YnRyYWN0KHRoaXMub3V0Qm91bmREYXRlLm1pbnV0ZXMoKSAlIDMwLCBcIm1pbnV0ZXNcIilcclxuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5MT1VOR0UuaW5ib3VuZERhdGUpIHtcclxuICAgICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSBtb21lbnQoKHByZXZpb3VzSXRlbXMuTE9VTkdFLmluYm91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZShcIlRcIiwgXCJcIikuc3BsaXQoXCIuXCIpWzBdLCBcIllZWVktTU0tRERoaDptbTpzc1wiKVxyXG4gICAgICAgICAgaWYgKHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGV1cm9zdGFyIGZyb20gbG91bmdlIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocGFya2luZ0l0ZW0pIHtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLlBBUktJTkcub3V0Ym91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZShcIlRcIiwgXCJcIikuc3BsaXQoXCIuXCIpWzBdLCBcIllZWVktTU0tRERoaDptbTpzc1wiKVxyXG4gICAgICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCkgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLm91dEJvdW5kRGF0ZS5zdWJ0cmFjdCh0aGlzLm91dEJvdW5kRGF0ZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuUEFSS0lORy5pbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCgocHJldmlvdXNJdGVtcy5QQVJLSU5HLmluYm91bmREYXRlIGFzIHN0cmluZykucmVwbGFjZShcIlRcIiwgXCJcIikuc3BsaXQoXCIuXCIpWzBdLCBcIllZWVktTU0tRERoaDptbTpzc1wiKVxyXG4gICAgICAgICAgaWYgKHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzApIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmluYm91bmREYXRlLnN1YnRyYWN0KHRoaXMuaW5ib3VuZERhdGUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGV1cm9zdGFyIGZyb20gcGFya2luZyBpdGVtJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRvdGFsQmFnZ2FnZShyZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSk6IG51bWJlciB7XHJcbiAgICBsZXQgdG90YWwgPSAwO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlZEFkZGl0aW9uYWwgPSBKU09OLnBhcnNlKHJlc3VsdC5hZGRpdGlvbmFsKTtcclxuICAgIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKGZsaWdodDogYW55KSA9PiB7XHJcbiAgICAgICAgZmxpZ2h0LmJhZ2dhZ2UuZm9yRWFjaCgoYmFnOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChiYWcuYWxsb3dhbmNlICYmIGJhZy5hbGxvd2FuY2UgPiB0b3RhbCkge1xyXG4gICAgICAgICAgICB0b3RhbCA9IGJhZy5hbGxvd2FuY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZSkge1xyXG4gICAgICBwYXJzZWRBZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UuZm9yRWFjaCgoYmFnZ2FnZUFsbG93OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkgJiZcclxuICAgICAgICAgIE51bWJlcihiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkpID4gdG90YWxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRvdGFsID0gTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG90YWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnaXZlIHRoZSBjb3JyZWN0IGZvcm1hdCBmb3IgdHJhbnNmZXJpbmcgbWludWV0ZXMgb24gdGhlIHNsaWRlcnNcclxuICAgKiBAcGFyYW0gbWluIC0gdGhlIG1pbiBpbiAxMDB0aCdzIHRvIHRyYW5zZm9ybSBvbnRvIDYwdGgnc1xyXG4gICAqL1xyXG4gIHRyYW5zZm9ybU1pbihtaW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgbnVtID0gKE51bWJlcihtaW4pICogNjApIC8gMTAwO1xyXG4gICAgLy8gY29uc29sZS5sb2coJysrKyBOdW0gQ29weTogJywgXy5jbG9uZShudW0pLCAnICsrKycpO1xyXG4gICAgaWYgKG51bSAlIDEgPCAwLjUpIHtcclxuICAgICAgbnVtID0gTWF0aC5mbG9vcihudW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbnVtID0gTWF0aC5jZWlsKG51bSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBhcHBseSBhbGwgZmlsdGVycyB0byByZXN1bHRzXHJcbiAgICogQHBhcmFtIGZpbHRlcnNcclxuICAgKiBAcGFyYW0gaW5ib3VuZFxyXG4gICAqIEBwYXJhbSByZXN1bHRzXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhcHBseUZpbHRlcnMoZmlsdGVyczogRmxpZ2h0RmlsdGVycyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZnVsbFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBuZWVkIHRvIGZpbHRlciBvdmVyIHRoZSB0aW1lcywgc3RvcHMgYW5kIHByaWNlLCB0aG91Z2ggcHJpY2UgYW5kIHN0b3BzIGFsd2F5cyBzZWVtIHRvIGJlIHRoZSBzYW1lXHJcblxyXG4gICAgLy8gISAtIFZBUklPVVMgRlVOQ1RJT05TIFRPIFBBU1MgSU4gVE8gRE8gVEhFIEFDVFVBTCBGSUxURVJJTkdcclxuXHJcbiAgICBjb25zdCB0ZXN0ZXIgPSAoXHJcbiAgICAgIGZpbHRlcnNUb3Rlc3Q6IFJlY29yZDxudW1iZXIgfCBzdHJpbmcsIFNlbGVjdEZpbHRlcj4sXHJcbiAgICAgIHRlc3RGdW5jdGlvbjogKFxyXG4gICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyXHJcbiAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzVG90ZXN0KS5maWx0ZXIoXHJcbiAgICAgICAgKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gISFzZWxlY3RlZC5maW5kKChmaWx0ZXI6IFNlbGVjdEZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGVzdEZ1bmN0aW9uKGZsaWdodEl0aW5lcmFyeSwgZmlsdGVyLnZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChfZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGlzVGltZUJldHdlZW4gPSAoXHJcbiAgICAgIG1pbm1heDogTWluTWF4LFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSBtb21lbnQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICAgIClcclxuICAgICAgICApLmdldCgnaG91cicpO1xyXG5cclxuICAgICAgICAvLyBub3cgYXR0ZW1wdCB0byBnZXQgdGhlIG1pbiAtIG1heSBuZWVkIHRvIG5vcm1hbGlzZSB0aGlzXHJcbiAgICAgICAgY29uc3QgdmFsMiA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdtaW51dGUnKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxUaW1lOiBudW1iZXIgPSBOdW1iZXIoXHJcbiAgICAgICAgICBgJHt2YWwudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSR7dmFsMlxyXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdG90YWxUaW1lID49IG1pbm1heC5taW4gJiYgdG90YWxUaW1lIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcGxhY2VGaWVsZHMgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmcsXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApOiBzdHJpbmcgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGRcclxuICAgICAgICAucmVwbGFjZSgnT1VUQk9VTkRfREVQQVJUVVJFJywgJ291dGJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdPVVRCT1VORF9BUlJJVkFMJyxcclxuICAgICAgICAgICdvdXRib3VuZEZsaWdodHMuJyArIChmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5yZXBsYWNlKCdJTkJPVU5EX0RFUEFSVFVSRScsICdpbmJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdJTkJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ2luYm91bmRGbGlnaHRzLicgK1xyXG4gICAgICAgICAgICAoKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoIC0gMSlcclxuICAgICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpc0JldHdlZW4gPSAoXHJcbiAgICAgIG1pbm1heDogTWluTWF4LFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHZhbCA+PSBtaW5tYXgubWluICYmIHZhbCA8PSBtaW5tYXgubWF4O1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBmaWVsZEhhc1ZhbHVlID0gKFxyXG4gICAgICBmaWVsZDoga2V5b2YgRmxpZ2h0Sm91cm5leVxyXG4gICAgKTogKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gZmxpZ2h0W2ZpZWxkXSA9PT0gdmFsdWU7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIC8vICEgLSBPdXRib3VuZCBhbmQgSW5ib3VuZCBGaWx0ZXJzXHJcblxyXG4gICAgY29uc3Qgb3V0SXRpbmVyYXJ5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG4gICAgY29uc3QgaW5JdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuYXJyaXZhbFRpbWUsICdPVVRCT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnKVxyXG4gICAgKTtcclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUsXHJcbiAgICAgICAgJ09VVEJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZSxcclxuICAgICAgICAnSU5CT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgLy8gISAtIFRlc3RlcnNcclxuICAgIGNvbnN0IG91dEpvdXJuZXlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG5cclxuICAgIG91dEpvdXJuZXlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaW5Kb3VybmV5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuXHJcbiAgICBpbkpvdXJuZXlUZXN0ZXJzLnB1c2godGVzdGVyKGZpbHRlcnMuY2xhc3NlcywgZmllbGRIYXNWYWx1ZSgnY2FiaW5DbGFzcycpKSk7XHJcblxyXG4gICAgLy8gIS0gSXRpbmVyYXJpZXNcclxuICAgIGNvbnN0IG91dEZpbHRlckl0aW5lcmFyaWVzID0gKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgZ3JvdXBJbmRleDogbnVtYmVyXHJcbiAgICApOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW5cclxuICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICBhY2MgPSBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzIHx8XHJcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAhIW91dEpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICAgICAgICAgICAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaW5GaWx0ZXJJdGluZXJhcmllcyA9IChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGdyb3VwSW5kZXg6IG51bWJlclxyXG4gICAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgaW5JdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW5cclxuICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjEoZmxpZ2h0SXRpbmVyYXJ5KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKSAmJlxyXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzPy5sZW5ndGggfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcclxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFpbkpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICAgICAgICAgICAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gbm93IGZpbmFsbHkgcGVyZm9ybSB0aGUgZmlsdGVyaW5nIGFuZCBnbyBvdmVyIHRoZSByZXN1bHRzXHJcbiAgICAvLyBUT0RPIC0gYWRkIHRoZSBhZGRpdGlvbmFsIHN0dWZmIG5lZWRlZCBmb3IgR3JvdXBlZEZsaWdodHMgKExpZ2h0bmluZylcclxuXHJcbiAgICBjb25zdCBmdWxsUmVzdWx0c0Nsb25lID0gPGFueT50aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmdWxsUmVzdWx0c0Nsb25lLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZ1bGxSZXN1bHQgPSBmdWxsUmVzdWx0c0Nsb25lW2ldO1xyXG4gICAgICBmdWxsUmVzdWx0LmpvdXJuZXlzID0gZnVsbFJlc3VsdC5qb3VybmV5cy5maWx0ZXIob3V0RmlsdGVySXRpbmVyYXJpZXMpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcclxuICAgICAgICBmdWxsUmVzdWx0LmpvdXJuZXlzID0gZnVsbFJlc3VsdC5qb3VybmV5cy5maWx0ZXIoaW5GaWx0ZXJJdGluZXJhcmllcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bGxSZXN1bHQuam91cm5leXMgPSBmdWxsUmVzdWx0LmpvdXJuZXlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzQ2xvbmUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0R3JvdXBlZEV1cm9zdGFyKFxyXG4gICAgc2VsZWN0ZWRFdXJvc3RhcjogRXVyb3N0YXJJdGVtLFxyXG4gICAgZmFyZTogRXVyb3N0YXJGYXJlLFxyXG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtXHJcbiAgKSB7XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIC8vIG9uZSB3YXkgZWFzeVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheSAmJlxyXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmRvQm9va2luZyhcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgc2VsZWN0ZWRFdXJvc3RhcixcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFt0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZhcmUuZmFyZSwgJ291dGJvdW5kJywgMCldLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtdLFxyXG4gICAgICAgICAgam91cm5leVR5cGU6ICdzaW5nbGUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLmRhdGVEZXBhcnR1cmUsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICBmYXJlLnByaWNlLFxyXG4gICAgICAgIGZhcmUucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gcmV0dXJuIGxvZ2ljIG5lZWRzIHVwZGF0aW5nIC0gZWl0aGVyIGFjY2VwdCBvdXRib3VuZCBvciByZXR1cm4gYW5kIHNvbWVob3cgZGlzdGlndWlzaCB0aGVtXHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldCAmJlxyXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICApIHtcclxuICAgICAgLy8gY2xpY2tlZCBvbiBhbiBvdXRib3VuZCBldXJvc3RhclxyXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kKSB7XHJcbiAgICAgICAgLy8gZ2l2ZW4gdGhlIG91dGJvdW5kIGJ1dCB3ZSBhbHJlYWR5IGhhdmUgaW5ib3VuZCBzZWxlY3RlZFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyPy5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uSW5ib3VuZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gTFUgbG9naWMgc2hvd3MgdGhlIGJpZ2dlc3QgcHJpY2UgYWNyb3NzIG91dGJvdW5kIGFuZCByZXR1cm5cclxuICAgICAgICAgIGNvbnN0IHByaWNlID1cclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5wcmljZSA+IGZhcmUucHJpY2VcclxuICAgICAgICAgICAgICA/IHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0ucHJpY2VcclxuICAgICAgICAgICAgICA6IGZhcmUucHJpY2U7XHJcbiAgICAgICAgICB0aGlzLmRvQm9va2luZyhcclxuICAgICAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0uZmFyZSxcclxuICAgICAgICAgICAgICAgICAgJ2luYm91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmFyZS5mYXJlLCAnb3V0Ym91bmQnLCAwKVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZURlcGFydHVyZSxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIuaXRlbS5kYXRlQXJyaXZhbCxcclxuICAgICAgICAgICAgcHJpY2UsXHJcbiAgICAgICAgICAgIGZhcmUucmVxdWlyZXNSZWFzb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xyXG4gICAgICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRvZ2dsZU1lbnUoKTtcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgICAgICAodGhpcy5mdWxsUmVzdWx0cyBhcyBFdXJvc3RhclJlc3VsdHNbXSkubWFwKFxyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRGbGFnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xyXG4gICAgICAgICAgLy8gd2UgaGF2ZSBhbiBvdXRib3VuZCBhbHJlYWR5IHNlbGVjdGVkIC0gZGVzZWxlY3QgaXRcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHRoaXMuZnVsbFJlc3VsdHMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyB3ZSBkb250IGhhdmUgYW4gaW5ib3VuZCBzZWxlY3RlZFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgPSB7XHJcbiAgICAgICAgICAgIGl0ZW06IHNlbGVjdGVkRXVyb3N0YXIsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvblxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlID0ge1xyXG4gICAgICAgICAgICBpdGVtOiBmYXJlLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb25cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHNlbGVjdGVkRXVyb3N0YXIudWlkO1xyXG4gICAgICAgICAgLy8gZmlsdGVyIG9uIG91dGJvdW5kcyBhcyB3ZSBoYXZlIHNlbGVjdGVkIGFuZCBhZGRlZCBhbiBvdXRib3VuZFxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgICAgICAgICh0aGlzLmZ1bGxSZXN1bHRzIGFzIEV1cm9zdGFyUmVzdWx0c1tdKS5tYXAoXHJcbiAgICAgICAgICAgICAgKHJlc3VsdDogRXVyb3N0YXJSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRib3VuZCA9IHJlc3VsdC5vdXRib3VuZC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChpdGVtOiBFdXJvc3Rhckl0ZW0pID0+IGluZGV4ID09PSBpdGVtLnVpZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGluYm91bmQ6IHJlc3VsdC5pbmJvdW5kLCBvdXRib3VuZCB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBlc3NlbnRpYWxseSBhZGQgYXMgd2UgZGlkIGJlZm9yZVxyXG4gICAgICAgICAgY29uc3QgcHJpY2UgPVxyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZS5pdGVtLnByaWNlID4gZmFyZS5wcmljZVxyXG4gICAgICAgICAgICAgID8gdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5wcmljZVxyXG4gICAgICAgICAgICAgIDogZmFyZS5wcmljZTtcclxuICAgICAgICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlLml0ZW0uZmFyZSxcclxuICAgICAgICAgICAgICAgICAgJ291dGJvdW5kJyxcclxuICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFt0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZhcmUuZmFyZSwgJ2luYm91bmQnLCAwKV0sXHJcbiAgICAgICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZURlcGFydHVyZSxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIuaXRlbS5kYXRlQXJyaXZhbCxcclxuICAgICAgICAgICAgcHJpY2UsXHJcbiAgICAgICAgICAgIGZhcmUucmVxdWlyZXNSZWFzb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGYXJlcygpO1xyXG4gICAgICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRvZ2dsZU1lbnUoKTtcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgICAgICAodGhpcy5mdWxsUmVzdWx0cyBhcyBFdXJvc3RhclJlc3VsdHNbXSkubWFwKFxyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRGbGFnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhcj8uZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEZhcmVzKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzLm5leHQodGhpcy5mdWxsUmVzdWx0cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyID0ge1xyXG4gICAgICAgICAgICBpdGVtOiBzZWxlY3RlZEV1cm9zdGFyLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb25cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZEV1cm9zdGFyRmFyZSA9IHtcclxuICAgICAgICAgICAgaXRlbTogZmFyZSxcclxuICAgICAgICAgICAgZGlyZWN0aW9uXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBzZWxlY3RlZEV1cm9zdGFyLnVpZDtcclxuICAgICAgICAgIC8vIGZpbHRlciBvbiBvdXRib3VuZHMgYXMgd2UgaGF2ZSBzZWxlY3RlZCBhbmQgYWRkZWQgYW4gb3V0Ym91bmRcclxuICAgICAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgICAgICAodGhpcy5mdWxsUmVzdWx0cyBhcyBFdXJvc3RhclJlc3VsdHNbXSkubWFwKFxyXG4gICAgICAgICAgICAgIChyZXN1bHQ6IEV1cm9zdGFyUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZCA9IHJlc3VsdC5pbmJvdW5kLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW06IEV1cm9zdGFySXRlbSkgPT4gaW5kZXggPT09IGl0ZW0udWlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaW5ib3VuZCwgb3V0Ym91bmQ6IHJlc3VsdC5vdXRib3VuZCB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRyYXZlbFBvbGljaWVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVUcmF2ZWxQb2xpY2llcygpIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyIHx8XHJcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRFdXJvc3RhckZhcmUuaXRlbS5qb3VybmV5SGFzaFxyXG4gICAgICBdIHx8XHJcbiAgICAgICF0aGlzLm11bHRpIHx8XHJcbiAgICAgIHRoaXMubXVsdGkubGVuZ3RoID09PSAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbXVsdGlJbmJvdW5kcyA9ICh0aGlzLm11bHRpIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgIChhY2M6IEZsaWdodEl0aW5lcmFyeVtdLCBpdGVtOiBFdXJvc3Rhck11bHRpKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ub3JkZXIgPT09IDEgJiYgaXRlbS5yZXN1bHRzICYmIGl0ZW0ucmVzdWx0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBhY2MgPSBhY2MuY29uY2F0KGl0ZW0ucmVzdWx0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdXHJcbiAgICApO1xyXG4gICAgaWYgKG11bHRpSW5ib3VuZHMubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLnJhd1Jlc3VsdHMpIHtcclxuICAgICAgICB0aGlzLnJhd1Jlc3VsdHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWUgKyAnX3JhdydcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnJhd1Jlc3VsdHMpO1xyXG4gICAgICB0aGlzLmFwcGx5RmxpZ2h0UnVsZXNcclxuICAgICAgICAuZmV0Y2hPbmUoe1xyXG4gICAgICAgICAgc2VsZWN0ZWRPdXRib3VuZEZsaWdodDogdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LFxyXG4gICAgICAgICAgYXZhaWxhYmxlSW5ib3VuZEZsaWdodHM6IG11bHRpSW5ib3VuZHMsXHJcbiAgICAgICAgICBzZWFyY2hJZDogdGhpcy5yYXdSZXN1bHRzLnNlYXJjaElkXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJ1bGVzOiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJ1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5ID0gdGhpcy5oZWxwZXJzLm1lcmdlT2JqZWN0cyhcclxuICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSxcclxuICAgICAgICAgICAgICBydWxlc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWxlY3RlZEZhcmVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgPSB7XHJcbiAgICAgIGRpcmVjdGlvbjogbnVsbCxcclxuICAgICAgaXRlbTogbnVsbFxyXG4gICAgfTtcclxuICAgIHRoaXMuX3NlbGVjdGVkRXVyb3N0YXJGYXJlID0ge1xyXG4gICAgICBkaXJlY3Rpb246IG51bGwsXHJcbiAgICAgIGl0ZW06IG51bGxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWxlY3RlZEZsYWdzKHJlc3VsdDogRXVyb3N0YXJSZXN1bHRzKTogRXVyb3N0YXJSZXN1bHRzIHtcclxuICAgIGNvbnN0IGluYm91bmQgPSByZXN1bHQuaW5ib3VuZC5tYXAoKGl0ZW06IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnN0YW5kYXJkUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5idXNpbmVzc1ByZW1pZXJGYXJlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBvdXRib3VuZCA9IHJlc3VsdC5vdXRib3VuZC5tYXAoKGl0ZW06IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnN0YW5kYXJkUHJlbWllckZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5zdGFuZGFyZEZhcmUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgaXRlbS5idXNpbmVzc1ByZW1pZXJGYXJlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4geyBpbmJvdW5kLCBvdXRib3VuZCB9O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5KTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCB8fCB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpKSByZXR1cm47Ly9cclxuICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdHNbMF0gYXMgRXVyb3N0YXJRdW90ZVJlc3VsdDtcclxuICAgIGNvbnN0IGpvdXJuZXlzID0gcmVzdWx0LmpvdXJuZXlzO1xyXG4gICAgaWYgKCFqb3VybmV5cy5sZW5ndGgpIHJldHVybjtcclxuICAgIGNvbnN0IGN1cnJlbmN5ID0gam91cm5leXNbMF0udG90YWwuY3VycmVuY3k7XHJcbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZG9Cb29raW5nKFxyXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBFdXJvc3Rhckl0ZW0sXHJcbiAgICBzY2hlbWFEZXRhaWxzOiBhbnksXHJcbiAgICBvdXRib3VuZERhdGU6IHN0cmluZyxcclxuICAgIGluYm91bmREYXRlOiBzdHJpbmcsXHJcbiAgICBwcmljZTogbnVtYmVyLFxyXG4gICAgcmVxdWlyZXNSZWFzb246IGJvb2xlYW5cclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwgfSA9IHNlbGVjdGVkRmxpZ2h0O1xyXG4gICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XHJcbiAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXHJcbiAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcclxuICAgICAgY28yUGVySXRlbSxcclxuICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICBjdXJyZW5jeTogdG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXHJcbiAgICAgIHByaWNlLFxyXG4gICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgb3V0Ym91bmREYXRlLFxyXG4gICAgICBsb3dlc3RQcmljZTogdGhpcy5sb3dlc3RQcmljZT8uYW1vdW50LFxyXG4gICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OiA8Q3VycmVuY3lDb2RlPnRoaXMubG93ZXN0UHJpY2U/LmN1cnJlbmN5Q29kZVxyXG4gICAgfTtcclxuICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgIGJvb2tpbmcsXHJcbiAgICAgIGludEJhc2tldCxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgIHJlcXVpcmVzUmVhc29uXHJcbiAgICApO1xyXG4gICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgIH1cclxuICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgbG93ZXN0UHJpY2UoKTogSUNoZWFwZXN0UHJpY2V7XHJcbiAgICBpZiAodGhpcy5jaGVhcGVzdFByaWNlKSByZXR1cm4gdGhpcy5jaGVhcGVzdFByaWNlXHJcbiAgICBjb25zdCBvdXRib3VuZCA9ICh0aGlzLmZ1bGxSZXN1bHRzWzBdIGFzIGFueSkub3V0Ym91bmQgYXMgRXVyb3N0YXJJdGVtW11cclxuICAgIGNvbnN0IGN1cnJlbmN5ID0gb3V0Ym91bmRbMF0uc3RhbmRhcmRGYXJlLmN1cnJlbmN5XHJcbiAgICBsZXQgY2hlYXBlc3RPdXRib3VuZDogbnVtYmVyXHJcbiAgICBvdXRib3VuZC5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICBpZiAoIWNoZWFwZXN0T3V0Ym91bmQgfHwgYS5zdGFuZGFyZEZhcmUucHJpY2UgPCBjaGVhcGVzdE91dGJvdW5kKSBjaGVhcGVzdE91dGJvdW5kID0gYS5zdGFuZGFyZEZhcmUucHJpY2VcclxuICAgICAgaWYgKGEuc3RhbmRhcmRQcmVtaWVyRmFyZS5wcmljZSA8IGNoZWFwZXN0T3V0Ym91bmQpIGNoZWFwZXN0T3V0Ym91bmQgPSBhLnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2VcclxuICAgICAgaWYgKGEuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZSA8IGNoZWFwZXN0T3V0Ym91bmQpIGNoZWFwZXN0T3V0Ym91bmQgPSBhLmJ1c2luZXNzUHJlbWllckZhcmUucHJpY2VcclxuICAgIH0pXHJcbiAgICBjb25zdCBpbmJvdW5kID0gKHRoaXMuZnVsbFJlc3VsdHNbMF0gYXMgYW55KS5pbmJvdW5kIGFzIEV1cm9zdGFySXRlbVtdXHJcbiAgICBsZXQgY2hlYXBlc3RpbmJvdW5kOiBudW1iZXJcclxuICAgIGlmIChpbmJvdW5kKXtcclxuICAgICAgaW5ib3VuZC5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICAgIGlmICghY2hlYXBlc3RpbmJvdW5kIHx8IGEuc3RhbmRhcmRGYXJlLnByaWNlIDwgY2hlYXBlc3RpbmJvdW5kKSBjaGVhcGVzdGluYm91bmQgPSBhLnN0YW5kYXJkRmFyZS5wcmljZVxyXG4gICAgICAgIGlmIChhLnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2UgPCBjaGVhcGVzdGluYm91bmQpIGNoZWFwZXN0aW5ib3VuZCA9IGEuc3RhbmRhcmRQcmVtaWVyRmFyZS5wcmljZVxyXG4gICAgICAgIGlmIChhLmJ1c2luZXNzUHJlbWllckZhcmUucHJpY2UgPCBjaGVhcGVzdGluYm91bmQpIGNoZWFwZXN0aW5ib3VuZCA9IGEuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSBjaGVhcGVzdGluYm91bmQgPSAwXHJcbiAgICByZXR1cm4ge2Ftb3VudDogY2hlYXBlc3RPdXRib3VuZCArIGNoZWFwZXN0aW5ib3VuZCwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeX1cclxuICB9XHJcblxyXG4gIG1ha2VTY2hlbWFGbGlnaHRzKFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXHJcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcclxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIHNlZ21lbnRJbmRleD86IG51bWJlclxyXG4gICk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5zZWxlY3RlZEZsaWdodCxcclxuICAgICAgam91cm5leUluZm86IHtcclxuICAgICAgICBmbGlnaHRHcm91cCxcclxuICAgICAgICBncm91cEluZGV4LFxyXG4gICAgICAgIHNlZ21lbnRJbmRleFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVHcm91cGVkSXRlbShcclxuICAgIHJldHVybk9iamVjdDogRXVyb3N0YXJHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIG91dGJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiBudW1iZXIsXHJcbiAgICBpbmJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IG51bWJlclxyXG4gICkge1xyXG4gICAgaWYgKG91dGJvdW5kRmxpZ2h0cz8ubGVuZ3RoICYmICFyZXR1cm5PYmplY3QuZGVwYXJ0RGF0ZVRpbWUpIHtcclxuICAgICAgY29uc3QgZmlyc3QgPSBvdXRib3VuZEZsaWdodHNbMF07XHJcbiAgICAgIGNvbnN0IGxhc3QgPSBvdXRib3VuZEZsaWdodHNbb3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3JpZ2luQWlycG9ydCA9IGZpcnN0Lm9yaWdpbkFpcnBvcnQ7XHJcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0TmFtZSA9IGZpcnN0Lm9yaWdpbkFpcnBvcnROYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGVzdGluYXRpb25BaXJwb3J0ID0gbGFzdC5kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXN0aW5hdGlvbkFpcnBvcnROYW1lID0gbGFzdC5kZXN0aW5hdGlvbkFpcnBvcnROYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGVwYXJ0RGF0ZVRpbWUgPSBmaXJzdC5kYXRlVGltZURlcGFydGluZztcclxuICAgICAgcmV0dXJuT2JqZWN0LmFycml2YWxEYXRlVGltZSA9IGxhc3QuZGF0ZVRpbWVBcnJpdmluZztcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGJvdW5kVG90YWxEdXJhdGlvbiA9IG91dGJvdW5kVG90YWxEdXJhdGlvbjtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRhdGFTb3VyY2UgPSBzb3VyY2U7XHJcbiAgICAgIHJldHVybk9iamVjdC5vcGVyYXRvciA9IGZpcnN0Lm9wZXJhdGluZ0NhcnJpZXI7XHJcbiAgICAgIHJldHVybk9iamVjdC5vcGVyYXRvckZ1bGwgPSBmaXJzdC5vcGVyYXRpbmdDYXJyaWVyTmFtZTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3NDb3VudCA9IG91dGJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRsZWdzID0gb3V0Ym91bmRGbGlnaHRzO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgb3V0Ym91bmRGbGlnaHRzXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybk9iamVjdC5pc1JldHVybiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoICYmICFyZXR1cm5PYmplY3QuaW5ib3VuZFRvdGFsRHVyYXRpb24pIHtcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uID0gaW5ib3VuZFRvdGFsRHVyYXRpb247XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3NDb3VudCA9IGluYm91bmRGbGlnaHRzLmxlbmd0aDtcclxuICAgICAgcmV0dXJuT2JqZWN0LmlubGVncyA9IGluYm91bmRGbGlnaHRzO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5ib3VuZEZsaWdodE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxyXG4gICAgICAgICAgJy0nLFxyXG4gICAgICAgICAgJ29wZXJhdGluZ0ZsaWdodE51bWJlcicsXHJcbiAgICAgICAgICBpbmJvdW5kRmxpZ2h0c1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm5PYmplY3QuaXNSZXR1cm4gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG1ha2VTZXNzaW9uUmVzdWx0cyhcclxuICAgIGRhdGE6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IEV1cm9zdGFyU2Vzc2lvblR5cGUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0czogW10sXHJcbiAgICAgIGdyb3VwRGF0YTogW10sXHJcbiAgICAgIGdyb3VwZWQ6IFtdLFxyXG4gICAgICBxdWVyeTogdGhpcy5yZXN1bHRRdWVyeVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldE1pbkZsaWdodFByaWNlRm9yQnJhbmQobWF0Y2hpbmdCcmFuZEZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtaW4gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWluID4gZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtaW4gPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1pbjtcclxuICB9XHJcblxyXG4gIGdldE1heEZsaWdodFByaWNlRm9yQnJhbmQobWF0Y2hpbmdCcmFuZEZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtYXggPSAwO1xyXG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0KSA9PiB7XHJcbiAgICAgIGlmIChtYXggPCBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xyXG4gICAgICAgIG1heCA9IGZsaWdodC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWF4O1xyXG4gIH1cclxuXHJcbiAgaXNPdmVyTmlnaHQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvdXR3YXJkRGF5ID0gdGhpcy5vdXRCb3VuZERhdGUuZGF0ZSgpO1xyXG4gICAgY29uc3QgcmV0dXJuRGF5ID0gdGhpcy5pbmJvdW5kRGF0ZS5kYXRlKCk7XHJcbiAgICBpZiAocmV0dXJuRGF5IC0gb3V0d2FyZERheSA+PSAxKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbWluVG9Ib3VyID0gKGR1cjogbnVtYmVyKTogc3RyaW5nID0+IGAke01hdGguZmxvb3IoZHVyIC8gNjApfWggJHtkdXIgJSA2MH1tYDtcclxuXHJcbiAgYXN5bmMgYWRkRXVyb3N0YXJKb3VybmV5c1RvQmFza2V0KFxyXG4gICAgZXVyb3N0YXJRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGlmIChldXJvc3RhclF1b3RlLnVuYXZhaWxhYmxlKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWwpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwgfSA9IGV1cm9zdGFyUXVvdGU7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kRGF0ZTogYW55ID0gbW9tZW50KFxyXG4gICAgICAgIGV1cm9zdGFyUXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGluYm91bmREYXRlOiBhbnkgPSBldXJvc3RhclF1b3RlLmluYm91bmRGbGlnaHRzLmxlbmd0aFxyXG4gICAgICAgID8gbW9tZW50KGV1cm9zdGFyUXVvdGUuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChldXJvc3RhclF1b3RlKTtcclxuICAgICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHtcclxuICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmV1cm9zdGFyUXVvdGUub3V0Ym91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdvdXRib3VuZCcsIDAsIHNlZ21lbnRJbmRleClcclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIGluYm91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5ldXJvc3RhclF1b3RlLmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdpbmJvdW5kJywgMCwgc2VnbWVudEluZGV4KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnMsXHJcbiAgICAgICAgam91cm5leVR5cGU6ICdzaW5nbGUnXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xyXG4gICAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXHJcbiAgICAgICAgYmFza2V0OiBpbnRCYXNrZXQuaWQsXHJcbiAgICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXHJcbiAgICAgICAgY28yUGVySXRlbSxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgY3VycmVuY3k6IHRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXHJcbiAgICAgICAgcHJpY2U6IHRvdGFsLnByaWNlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxyXG4gICAgICAgIHNlcnZpY2U6IHNvdXJjZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZERhdGUuZm9ybWF0KClcclxuICAgICAgfTtcclxuICAgICAgaWYgKGluYm91bmREYXRlKSB7XHJcbiAgICAgICAgYm9va2luZy5pbmJvdW5kRGF0ZSA9IGluYm91bmREYXRlLmZvcm1hdCgpO1xyXG4gICAgICAgIHNjaGVtYURldGFpbHMuam91cm5leVR5cGUgPSAncm91bmR0cmlwJztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIGJvb2tpbmcsXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgZXVyb3N0YXJRdW90ZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHdoYXRIYXBwZW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgLy8gVE9ETyB3YWl0aW5nIGZvciBkYXRhXHJcbiAgZ2V0VGVybXNBbmRDb25kKGV1cm9zdGFyUXVvdGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1BlbmFsdGllcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRWxpZ2liaWxpdHknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICAsXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGF5L3RpbWUnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1NlYXNvbmFsaXR5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGbGlnaHTCoEFwcGxpY2F0aW9uJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZHZhbmNlwqBSZXNlcnZhdGlvbnMvdGlja2V0aW5nJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNYXhpbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNaW5pbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdG9wb3ZlcnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYW5zZmVycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ29tYmluYXRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdCbGFja291dMKgRGF0ZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N1cmNoYXJnZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FjY29tcGFuaWVkwqBUcmF2ZWwnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYXZlbMKgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTYWxlc8KgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdIaXAvbWlsZWFnZcKgRXhjZXB0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGlja2V0wqBFbmRvcnNlbWVudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0NoaWxkcmVuwqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXLCoENvbmR1Y3RvcsKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZ2VudMKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBbGzCoE90aGVywqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pc2NlbGxhbmVvdXPCoFByb3Zpc2lvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ZhcmXCoEJ5wqBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdHcm91cHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWaXNpdMKgQW5vdGhlcsKgQ291bnRyeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGVwb3NpdHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZvbHVudGFyecKgQ2hhbmdlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBSZWZ1bmRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdOZWdvdGlhdGVkwqBGYXJlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUnVsZcKgQXBwbGljYXRpb27CoEFuZMKgT3RoZXLCoENvbmRpdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogSUV1cm9zdGFyU2VhcmNoQXJncyA9XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5FdXJvc3RhcixcclxuICAgICAgICBzZWFyY2hBcmdzOiBmYXZvdXJpdGVTZWFyY2hRdWVyeVxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmZhcmVUeXBlID0gZmF2LmZhcmVUeXBlO1xyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSBmYXYuaW5jbHVkZU5lYXJieUFpcnBvcnRzO1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2LnJldHVyblRyaXBcclxuICAgICAgPyBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheTtcclxuICAgIHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAuZ2V0QWlycG9ydHNMaXN0KGZhdi5vcmlnaW5BaXJwb3J0KVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IChyZXN1bHRzIGFzIE9CVEFpcnBvcnREZXRhaWxzW10pLmZpbmQoXHJcbiAgICAgICAgICAoYSkgPT4gYS5nYXRld2F5ID09IGZhdi5vcmlnaW5BaXJwb3J0XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgLmdldEFpcnBvcnRzTGlzdChmYXYuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IChyZXN1bHRzIGFzIE9CVEFpcnBvcnREZXRhaWxzW10pLmZpbmQoXHJcbiAgICAgICAgICAoYSkgPT4gYS5nYXRld2F5ID09IGZhdi5kZXN0aW5hdGlvbkFpcnBvcnRcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuX3Bhc3NlbmdlcnMgPSBmYXYucGFzc2VuZ2VycztcclxuICAgIHRoaXMuYWR1bHRzID0gZmF2LnBhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSAnQURVTFQnKS5sZW5ndGg7XHJcbiAgICB0aGlzLmNoaWxkcmVuID0gZmF2LnBhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSAnQ0hJTEQnKS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBvcGVuRXVyb3N0YXJGYXJlUnVsZXMoYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmxpZ2h0cyA9IFsuLi5iYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZEZsaWdodHNdO1xyXG4gICAgZmxpZ2h0c1swXS5mYXJlSW5mbyA9IGZsaWdodHNbMF0uam91cm5leUluZm87XHJcbiAgICBkZWxldGUgZmxpZ2h0c1swXS5qb3VybmV5SW5mbztcclxuICAgIGNvbnN0IHJ1bGVzRnJvbUNhbGwgPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmxpZ2h0RmFyZVJ1bGVzKFxyXG4gICAgICBmbGlnaHRzWzBdIGFzIElucHV0RmxpZ2h0Sm91cm5leVxyXG4gICAgKTtcclxuICAgIHJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG51bGwsIHtcclxuICAgICAgICAgIHJ1bGVzOiBkYXRhLnJlc3VsdHNbMF0sXHJcbiAgICAgICAgICBmcm9tOiBmbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXHJcbiAgICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|