@sabstravtech/obtservices 0.0.22051001 → 0.0.26051001
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/components/basket-panel.d.ts +1 -0
- package/angular/fetchers.d.ts +3 -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-user-guests.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/enterprise-basket.service.d.ts +2 -1
- package/angular/lib/vendor/services/logon.service.d.ts +2 -1
- package/angular/lib/vendor/services/user.service.d.ts +7 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +268 -85
- 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 +3 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +5 -1
- package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
- package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +4 -3
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +4 -3
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +4 -4
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +3 -3
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +5 -5
- package/base/lib/vendor/classes/helpers.d.ts +6 -1
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +6 -3
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +4 -4
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +3 -3
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +1 -1
- package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +3 -3
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +9 -7
- package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
- 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-user-guests.fetcher.d.ts +20 -0
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +3 -2
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +6 -5
- 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 +2 -1
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +5 -2
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +4 -3
- package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
- 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 +4 -2
- package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +1 -0
- package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
- package/base/lib/vendor/interfaces/summary-interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
- package/base/lib/vendor/models/traveller.object.d.ts +1 -1
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +18 -7
- package/base/lib/vendor/services/logon.service.d.ts +5 -1
- package/base/lib/vendor/services/search.service.d.ts +25 -22
- package/base/lib/vendor/services/url.service.d.ts +2 -0
- package/base/lib/vendor/services/user.service.d.ts +21 -5
- package/base/lib/vendor/services/webtoken.service.d.ts +4 -0
- package/base/lib/vendor/types/graphql.types.d.ts +245 -84
- package/base/lib/vendor/types/types.d.ts +16 -2
- 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 +366 -176
- 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 +2019 -956
- 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 +4 -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-user-guests.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +8 -5
- 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/user.service.js +21 -9
- package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +296 -70
- package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
- package/esm2015/angular/updaters.js +2 -1
- package/esm2015/base/fetchers.js +4 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +8 -2
- package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +14 -1
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -6
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +66 -11
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +108 -61
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +115 -33
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +31 -10
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +196 -57
- package/esm2015/base/lib/vendor/classes/helpers.js +19 -3
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +145 -36
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +100 -30
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +40 -8
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +13 -9
- package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +39 -7
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +131 -20
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +42 -4
- 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-user-guests.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +1 -1
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +93 -30
- package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/base/lib/vendor/services/logon.service.js +37 -3
- package/esm2015/base/lib/vendor/services/requires-reason.service.js +14 -10
- package/esm2015/base/lib/vendor/services/search.service.js +77 -102
- package/esm2015/base/lib/vendor/services/url.service.js +3 -1
- package/esm2015/base/lib/vendor/services/user.service.js +45 -11
- package/esm2015/base/lib/vendor/services/webtoken.service.js +8 -1
- package/esm2015/base/lib/vendor/types/graphql.types.js +7 -2
- package/esm2015/base/lib/vendor/types/types.js +31 -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 +449 -141
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +1383 -410
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import moment from 'moment';
|
|
3
3
|
import { ServiceType } from '../types/graphql.types';
|
|
4
|
+
import { DifferentInvokdedUserReasons } from '../types/types';
|
|
4
5
|
import { BaseEnterpriseSearch } from './base-enterprise';
|
|
5
6
|
export class FastTrackEnterpriseSearch extends BaseEnterpriseSearch {
|
|
6
7
|
constructor(fasttrackFetcher, helpers, basketService, storageService, searchService) {
|
|
7
|
-
super(storageService, helpers);
|
|
8
|
+
super(storageService, helpers, searchService);
|
|
8
9
|
this.fasttrackFetcher = fasttrackFetcher;
|
|
9
10
|
this.basketService = basketService;
|
|
10
|
-
this.searchService = searchService;
|
|
11
11
|
this.type = ServiceType.FastTrack;
|
|
12
12
|
this._date = null;
|
|
13
13
|
this._time = null;
|
|
@@ -141,7 +141,7 @@ export class FastTrackEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
141
141
|
getSearchQuery() {
|
|
142
142
|
const query = {
|
|
143
143
|
adults: this.tempParams.adults,
|
|
144
|
-
children: this.tempParams.children,
|
|
144
|
+
children: this.tempParams.children ? this.tempParams.children : null,
|
|
145
145
|
locationCode: this._locationCode,
|
|
146
146
|
arrivalDatetime: this.tempParams.arrivalDatetime
|
|
147
147
|
};
|
|
@@ -175,6 +175,25 @@ export class FastTrackEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
175
175
|
});
|
|
176
176
|
this.searchService.startSearches();
|
|
177
177
|
}
|
|
178
|
+
updateSearchFromExpiredBasketItem(basketItem) {
|
|
179
|
+
const searchFastTrackQuery = basketItem.searchQuery;
|
|
180
|
+
this.arrivalDatetime = moment(searchFastTrackQuery.arrivalDatetime);
|
|
181
|
+
this.searchService
|
|
182
|
+
.getAirportByCode(searchFastTrackQuery.locationCode)
|
|
183
|
+
.subscribe((airport) => {
|
|
184
|
+
var _a, _b, _c, _d, _e, _f;
|
|
185
|
+
if (airport) {
|
|
186
|
+
this.locationCode = {
|
|
187
|
+
country: (_b = (_a = airport.iataMatch) === null || _a === void 0 ? void 0 : _a.locationDetails) === null || _b === void 0 ? void 0 : _b.country,
|
|
188
|
+
countryCode: (_d = (_c = airport.iataMatch) === null || _c === void 0 ? void 0 : _c.locationDetails) === null || _d === void 0 ? void 0 : _d.countryCode,
|
|
189
|
+
destination: airport.iataMatch.name,
|
|
190
|
+
gateway: airport.iataMatch.iata,
|
|
191
|
+
postcode: (_f = (_e = airport.iataMatch) === null || _e === void 0 ? void 0 : _e.locationDetails) === null || _f === void 0 ? void 0 : _f.postcode,
|
|
192
|
+
terminals: this.searchService.processTerminals(airport.iataMatch.terminals)
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
178
197
|
updateFromPreviousSearches(previousItems) {
|
|
179
198
|
var _a;
|
|
180
199
|
console.log('PREPOPULATING LOUNGE FORM');
|
|
@@ -210,13 +229,13 @@ export class FastTrackEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
210
229
|
var _a;
|
|
211
230
|
return __awaiter(this, void 0, void 0, function* () {
|
|
212
231
|
if (fasttrackQuote.unavailable) {
|
|
213
|
-
return Promise.resolve(
|
|
232
|
+
return Promise.resolve(DifferentInvokdedUserReasons.cancel);
|
|
214
233
|
}
|
|
215
234
|
const intBasket = yield this.basketService.getDefaultBasket();
|
|
216
235
|
const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
|
|
217
236
|
const termsAndConditions = this.getTermsAndCond(fasttrackQuote);
|
|
218
237
|
if (basket) {
|
|
219
|
-
|
|
238
|
+
const whatHappened = yield this.basketService.addToBasket({
|
|
220
239
|
adults: fasttrackQuery.adults,
|
|
221
240
|
children: fasttrackQuery.children,
|
|
222
241
|
basket: basket.id,
|
|
@@ -226,17 +245,19 @@ export class FastTrackEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
226
245
|
locationCode: fasttrackQuote.code,
|
|
227
246
|
name: fasttrackQuote.name,
|
|
228
247
|
airportIata: fasttrackQuery === null || fasttrackQuery === void 0 ? void 0 : fasttrackQuery.locationCode,
|
|
229
|
-
|
|
230
|
-
terminal: (_a = fasttrackQuote.terminal) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
231
|
-
termsAndCond: termsAndConditions
|
|
248
|
+
terminal: (_a = fasttrackQuote.terminal) === null || _a === void 0 ? void 0 : _a.toString()
|
|
232
249
|
},
|
|
233
250
|
price: fasttrackQuote.price,
|
|
234
251
|
currency: fasttrackQuote.currency,
|
|
235
252
|
searchQuery: fasttrackQuery,
|
|
236
253
|
outboundDate: fasttrackQuery.arrivalDatetime.format()
|
|
237
254
|
}, intBasket, this.searchService, this.travellers, fasttrackQuote.requiresReason);
|
|
255
|
+
if (whatHappened === DifferentInvokdedUserReasons.research) {
|
|
256
|
+
this.performSearch();
|
|
257
|
+
}
|
|
258
|
+
return whatHappened;
|
|
238
259
|
}
|
|
239
|
-
return
|
|
260
|
+
return DifferentInvokdedUserReasons.cancel;
|
|
240
261
|
});
|
|
241
262
|
}
|
|
242
263
|
getTermsAndCond(fasttrackQuote) {
|
|
@@ -293,4 +314,4 @@ export class FastTrackEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
293
314
|
}
|
|
294
315
|
FastTrackEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_fasttrack';
|
|
295
316
|
FastTrackEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_fasttrack';
|
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdC10cmFjay1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9mYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFtQjVCLE9BQU8sRUFRTCxXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQVNoQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd6RCxNQUFNLE9BQU8seUJBQ1gsU0FBUSxvQkFJUDtJQTBIRCxZQUNVLGdCQUFrRCxFQUMxRCxPQUEyQixFQUNuQixhQUErQyxFQUN2RCxjQUFrQyxFQUMxQixhQUErQztRQUV2RCxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBTnZCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0M7UUFFbEQsa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBRS9DLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQTFIbEQsU0FBSSxHQUFnQixXQUFXLENBQUMsU0FBUyxDQUFDO1FBdUJ6QyxVQUFLLEdBQWtCLElBQUksQ0FBQztRQVU1QixVQUFLLEdBQVcsSUFBSSxDQUFDO1FBK0VuQix1QkFBa0IsR0FDMUIseUJBQXlCLENBQUMsdUJBQXVCLENBQUM7UUFDMUMsNEJBQXVCLEdBQy9CLHlCQUF5QixDQUFDLHVCQUF1QixDQUFDO1FBVWxELE1BQU0sSUFBSSxHQUdOLGNBQWMsQ0FBQyxjQUFjLENBQy9CLHlCQUF5QixDQUFDLHNCQUFzQixDQUNqRCxJQUFJO1lBQ0gsVUFBVSxFQUFFLEVBQXlCO1lBQ3JDLGtCQUFrQixFQUFFLEVBQXlCO1NBQzlDLENBQUM7UUFDRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFD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QUFHLGtCQUFrQixDQUFDO0FBQzVDLGlEQUF1QixHQUFHLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBCYXNlRmFzdFRyYWNrUXVvdGVGZXRjaGVyLFxyXG4gIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9mYXN0LXRyYWNrLXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBGYXN0VHJhY2tGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mYXN0LXRyYWNrLWZpbHRlcnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgRmFzdFRyYWNrVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWZhc3QtdHJhY2stZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFpcnBvcnRSZXN1bHRzLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIEZhc3RUcmFja1F1b3RlLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcclxuICBTZXJ2aWNlVHlwZVxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEZhc3RUcmFja1F1b3RlUmVzdWx0LFxyXG4gIEZhc3RUcmFja1F1b3RlUmVzdWx0QXJyYXksXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRBaXJwb3J0RGV0YWlscyxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgVGVybWluYWxzVHlwZVxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaDxGVFFfUSBleHRlbmRzIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGU+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIEZhc3RUcmFja1RlbXBQYXJhbXMsXHJcbiAgICBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5LFxyXG4gICAgRmFzdFRyYWNrUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9mYXN0dHJhY2snO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX2Zhc3R0cmFjayc7XHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuRmFzdFRyYWNrO1xyXG5cclxuICBwcml2YXRlIF9sb2NhdGlvbkNvZGU6IHN0cmluZztcclxuICBwcml2YXRlIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xyXG5cclxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuICBnZXQgZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCB0aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCB0aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXJyaXZhbERhdGV0aW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgYXJyaXZhbERhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICBpZiAodmFsdWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgIHRoaXMuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgICB0aGlzLl90aW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZURhdGVUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX2RhdGUgJiYgdGhpcy5fdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2RhdGUsIHRoaXMuX3RpbWUpO1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxvY2F0aW9uQ29kZSgpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uQ29kZTtcclxuICB9XHJcblxyXG4gIHNldCBsb2NhdGlvbkNvZGUodmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25Db2RlID0gdmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLl9sb2NhdGlvbkNvZGUgPSAnJztcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX2xvY2F0aW9uQ29kZSA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xvY2F0aW9uQ29kZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAge1xyXG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcclxuICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBpZiAoIXRoaXMubG9jYXRpb25Db2RlKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBhZGQgaW4gYSBhaXJwb3J0IGxvY2F0aW9uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lLmlzQWZ0ZXIobW9tZW50KCkpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ0RlcGFydHVyZSBkYXRlIGNhbiBub3QgYmUgaW4gdGhlIHBhc3QnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZhc3R0cmFja0ZldGNoZXI6IEJhc2VGYXN0VHJhY2tRdW90ZUZldGNoZXI8RlRRX1E+LFxyXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycyk7XHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IEZhc3RUcmFja1RlbXBQYXJhbXM7XHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogRmFzdFRyYWNrVGVtcFBhcmFtcztcclxuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcclxuICAgICAgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgRmFzdFRyYWNrVGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBGYXN0VHJhY2tUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMoc2VhcmNoU2VydmljZS5tYWtlRmFzdFRyYWNrUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5GYXN0VHJhY2tcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcblxyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3VsdHMgPVxyXG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzIHx8IFtdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCkge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmFzdFRyYWNrUXVlcnkoKSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZhc3R0cmFja0ZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFNlYXJjaEZhc3RUcmFja1F1ZXJ5VmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcyA9IHtcclxuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IHRoaXMuX2xvY2F0aW9uQ29kZSxcclxuICAgICAgYXJyaXZhbERhdGV0aW1lOiB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoRmFzdFRyYWNrUXVlcnlWYXJpYWJsZXNcclxuICApOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkZhc3RUcmFjayxcclxuICAgICAgc2VhcmNoQXJnczogcXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMuYXJyaXZhbERhdGV0aW1lLmZvcm1hdCgpLFxyXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycylcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMuYXJyaXZhbERhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFycml2YWxEYXRldGltZSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgLmdldEFpcnBvcnRCeUNvZGUocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MubG9jYXRpb25Db2RlKVxyXG4gICAgICAuc3Vic2NyaWJlKChhaXJwb3J0OiBBaXJwb3J0UmVzdWx0cykgPT4ge1xyXG4gICAgICAgIGlmIChhaXJwb3J0KSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uQ29kZSA9IHtcclxuICAgICAgICAgICAgY291bnRyeTogYWlycG9ydC5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgICAgY291bnRyeUNvZGU6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogYWlycG9ydC5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgICAgZ2F0ZXdheTogYWlycG9ydC5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgICAgcG9zdGNvZGU6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICAgIGFpcnBvcnQuaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ1BSRVBPUFVMQVRJTkcgTE9VTkdFIEZPUk0nKTtcclxuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcclxuICAgIGlmIChmbGlnaHRJdGVtKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5vdXRCb3VuZERhdGUudG9EYXRlKCk7XHJcbiAgICAgICAgdGhpcy5kYXRlID0ge1xyXG4gICAgICAgICAgZGF5OiBkYXRlLmdldFVUQ0RhdGUoKSxcclxuICAgICAgICAgIG1vbnRoOiBkYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgeWVhcjogZGF0ZS5nZXRVVENGdWxsWWVhcigpXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmxvY2F0aW9uQ29kZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdXHJcbiAgICAgICAgICAuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHM7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBwYXJraW5nIGZyb20gbG91bmdlIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogRmFzdFRyYWNrUXVvdGVbXSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgY3VycmVuY3kgPSByZXN1bHRzWzBdLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogRmFzdFRyYWNrUXVvdGUpID0+IHtcclxuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC5wcmljZTtcclxuICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkgY2hlYXBlc3RQcmljZS5hbW91bnQgPSBwcmljZTtcclxuICAgICAgICByZXR1cm4gY2hlYXBlc3RQcmljZTtcclxuICAgICAgfSxcclxuICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5IH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRGYXN0VHJhY2tUb0Jhc2tldChcclxuICAgIGZhc3R0cmFja1F1b3RlOiBGYXN0VHJhY2tRdW90ZSxcclxuICAgIGZhc3R0cmFja1F1ZXJ5OiBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKGZhc3R0cmFja1F1b3RlLnVuYXZhaWxhYmxlKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChmYXN0dHJhY2tRdW90ZSk7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgYWR1bHRzOiBmYXN0dHJhY2tRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgICBjaGlsZHJlbjogZmFzdHRyYWNrUXVlcnkuY2hpbGRyZW4sXHJcbiAgICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICAgIHNlcnZpY2U6IGZhc3R0cmFja1F1b3RlLnNvdXJjZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGV0aW1lOiBmYXN0dHJhY2tRdWVyeS5hcnJpdmFsRGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgICAgICAgIGxvY2F0aW9uQ29kZTogZmFzdHRyYWNrUXVvdGUuY29kZSxcclxuICAgICAgICAgICAgbmFtZTogZmFzdHRyYWNrUXVvdGUubmFtZSxcclxuICAgICAgICAgICAgYWlycG9ydElhdGE6IGZhc3R0cmFja1F1ZXJ5Py5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICAgIGxvZ286IGZhc3R0cmFja1F1b3RlLmxvZ28sXHJcbiAgICAgICAgICAgIHRlcm1pbmFsOiBmYXN0dHJhY2tRdW90ZS50ZXJtaW5hbD8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwcmljZTogZmFzdHRyYWNrUXVvdGUucHJpY2UsXHJcbiAgICAgICAgICBjdXJyZW5jeTogZmFzdHRyYWNrUXVvdGUuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgICAgc2VhcmNoUXVlcnk6IGZhc3R0cmFja1F1ZXJ5LFxyXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiBmYXN0dHJhY2tRdWVyeS5hcnJpdmFsRGF0ZXRpbWUuZm9ybWF0KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIGZhc3R0cmFja1F1b3RlLnJlcXVpcmVzUmVhc29uXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTsgLy8gVE9ETyBzaG91bGQgdGhpcyB0aHJvdyBhbiBlcnJvcj9cclxuICAgIH1cclxuICBcclxuXHJcbiAgZ2V0VGVybXNBbmRDb25kKGZhc3R0cmFja1F1b3RlOiBGYXN0VHJhY2tRdW90ZSkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdOYW1lJyxcclxuICAgICAgICB2YWx1ZTogZmFzdHRyYWNrUXVvdGUubmFtZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ltcG9ydGFudCBJbmZvcm1hdGlvbicsXHJcbiAgICAgICAgdmFsdWU6IGZhc3R0cmFja1F1b3RlLmltcG9ydGFudEluZm9cclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGFwcGx5RmlsdGVycyhhcHBsaWVkRmlsdGVyczogRmFzdFRyYWNrRmlsdGVycywgc2VsZWN0ZWRTb3J0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBmdWxsUmVzdWx0czogRmFzdFRyYWNrUXVvdGVSZXN1bHRBcnJheSA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgdGhpcy5mdWxsUmVzdWx0c1xyXG4gICAgKTtcclxuXHJcbiAgICBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLmZpbHRlcigocmVzdWx0OiBGYXN0VHJhY2tRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHJlc3VsdC5wcmljZSA+PSBhcHBsaWVkRmlsdGVycy5taW5QcmljZSAmJlxyXG4gICAgICAgIHJlc3VsdC5wcmljZSA8PSBhcHBsaWVkRmlsdGVycy5tYXhQcmljZVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLnNvcnRSZXN1bHRzKHNlbGVjdGVkU29ydCwgZnVsbFJlc3VsdHMpO1xyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIHNvcnRSZXN1bHRzKFxyXG4gICAgc2VsZWN0ZWRTb3J0OiBudW1iZXIsXHJcbiAgICByZXN1bHRzPzogRmFzdFRyYWNrUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IEZhc3RUcmFja1F1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgbGV0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICByZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZVxyXG4gICAgKTtcclxuICAgIHN3aXRjaCAoc2VsZWN0ZWRTb3J0KSB7XHJcbiAgICAgIGNhc2UgMDogLy8gY2hlYXBlc3RcclxuICAgICAgICBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgICAgICAoYTogRmFzdFRyYWNrUXVvdGVSZXN1bHQsIGI6IEZhc3RUcmFja1F1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgICAgICBhLnByaWNlIC0gYi5wcmljZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gZXhwZW5zaXZlXHJcbiAgICAgICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAgICAgKGE6IEZhc3RUcmFja1F1b3RlUmVzdWx0LCBiOiBGYXN0VHJhY2tRdW90ZVJlc3VsdCkgPT5cclxuICAgICAgICAgICAgYi5wcmljZSAtIGEucHJpY2VcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZhbGxiYWNrIHRvIHdoYXRldmVyIHdhcyBiZWZvcmVcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzKTtcclxuICAgIHJldHVybiBmdWxsUmVzdWx0cztcclxuICB9XHJcblxyXG4gIGdldE1pblByaWNlKGZ0czogRmFzdFRyYWNrUXVvdGVSZXN1bHRBcnJheSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZnRzLnJlZHVjZSgobWluOiBudW1iZXIsIGZ0OiBGYXN0VHJhY2tRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAoZnQucHJpY2UgPCBtaW4pIHtcclxuICAgICAgICBtaW4gPSBmdC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWluO1xyXG4gICAgfSwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4UHJpY2UoZnRzOiBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5KTogbnVtYmVyIHtcclxuICAgIHJldHVybiBmdHMucmVkdWNlKChtYXg6IG51bWJlciwgZnQ6IEZhc3RUcmFja1F1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChmdC5wcmljZSA+IG1heCkge1xyXG4gICAgICAgIG1heCA9IGZ0LnByaWNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtYXg7XHJcbiAgICB9LCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdC10cmFjay1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9mYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFtQjVCLE9BQU8sRUFRTCxXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsNEJBQTRCLEVBTzdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekQsTUFBTSxPQUFPLHlCQUNYLFNBQVEsb0JBSVA7SUEwSEQsWUFDVSxnQkFBa0QsRUFDMUQsT0FBMkIsRUFDbkIsYUFBK0MsRUFDdkQsY0FBa0MsRUFDbEMsYUFBK0M7UUFFL0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFOdEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQztRQUVsRCxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUF4SGxELFNBQUksR0FBZ0IsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQXVCekMsVUFBSyxHQUFrQixJQUFJLENBQUM7UUFVNUIsVUFBSyxHQUFXLElBQUksQ0FBQztRQStFbkIsdUJBQWtCLEdBQzFCLHlCQUF5QixDQUFDLHVCQUF1QixDQUFDO1FBQzFDLDRCQUF1QixHQUMvQix5QkFBeUIsQ0FBQyx1QkFBdUIsQ0FBQztRQVVsRCxNQUFNLElBQUksR0FHTixjQUFjLENBQUMsY0FBYyxDQUMvQix5QkFBeUIsQ0FBQyxzQkFBc0IsQ0FDakQsSUFBSTtZQUNILFVBQVUsRUFBRSxFQUF5QjtZQUNyQyxrQkFBa0IsRUFBRSxFQUF5QjtTQUM5QyxDQUFDO1FBQ0YsSUFB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clN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBCYXNlRmFzdFRyYWNrUXVvdGVGZXRjaGVyLFxyXG4gIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9mYXN0LXRyYWNrLXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBGYXN0VHJhY2tGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mYXN0LXRyYWNrLWZpbHRlcnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgRmFzdFRyYWNrVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWZhc3QtdHJhY2stZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFpcnBvcnRSZXN1bHRzLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIEZhc3RUcmFja1F1b3RlLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcclxuICBTZXJ2aWNlVHlwZVxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXHJcbiAgRmFzdFRyYWNrUXVvdGVSZXN1bHQsXHJcbiAgRmFzdFRyYWNrUXVvdGVSZXN1bHRBcnJheSxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBUZXJtaW5hbHNUeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoPEZUUV9RIGV4dGVuZHMgRmFzdFRyYWNrUXVvdGVGZXRjaGVyVHlwZT5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgRmFzdFRyYWNrVGVtcFBhcmFtcyxcclxuICAgIEZhc3RUcmFja1F1b3RlUmVzdWx0QXJyYXksXHJcbiAgICBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2Zhc3R0cmFjayc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZmFzdHRyYWNrJztcclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5GYXN0VHJhY2s7XHJcblxyXG4gIHByaXZhdGUgX2xvY2F0aW9uQ29kZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGFkdWx0cyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG4gIGdldCBkYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBhcnJpdmFsRGF0ZXRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZTtcclxuICB9XHJcblxyXG4gIHNldCBhcnJpdmFsRGF0ZXRpbWUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIGlmICh2YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZSA9IHZhbHVlO1xyXG5cclxuICAgICAgdGhpcy5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuX3RpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWUgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fZGF0ZSAmJiB0aGlzLl90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fZGF0ZSwgdGhpcy5fdGltZSk7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbG9jYXRpb25Db2RlKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25Db2RlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGxvY2F0aW9uQ29kZSh2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvbkNvZGUgPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX2xvY2F0aW9uQ29kZSA9ICcnO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcclxuICAgICAgdGhpcy5fbG9jYXRpb25Db2RlID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbG9jYXRpb25Db2RlID0gbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIGlmICghdGhpcy5sb2NhdGlvbkNvZGUpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGFpcnBvcnQgbG9jYXRpb24nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWUuaXNBZnRlcihtb21lbnQoKSkpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmFzdHRyYWNrRmV0Y2hlcjogQmFzZUZhc3RUcmFja1F1b3RlRmV0Y2hlcjxGVFFfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycywgc2VhcmNoU2VydmljZSk7XHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IEZhc3RUcmFja1RlbXBQYXJhbXM7XHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogRmFzdFRyYWNrVGVtcFBhcmFtcztcclxuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcclxuICAgICAgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgRmFzdFRyYWNrVGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBGYXN0VHJhY2tUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMoc2VhcmNoU2VydmljZS5tYWtlRmFzdFRyYWNrUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5GYXN0VHJhY2tcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcblxyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3VsdHMgPVxyXG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzIHx8IFtdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCkge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmFzdFRyYWNrUXVlcnkoKSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZhc3R0cmFja0ZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFNlYXJjaEZhc3RUcmFja1F1ZXJ5VmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcyA9IHtcclxuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID8gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuIDogbnVsbCxcclxuICAgICAgbG9jYXRpb25Db2RlOiB0aGlzLl9sb2NhdGlvbkNvZGUsXHJcbiAgICAgIGFycml2YWxEYXRldGltZTogdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZVxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoRmFzdFRyYWNrUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZhc3RUcmFja1F1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GYXN0VHJhY2ssXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLmFycml2YWxEYXRldGltZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFycml2YWxEYXRldGltZSA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5hcnJpdmFsRGF0ZXRpbWUpO1xyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgIC5nZXRBaXJwb3J0QnlDb2RlKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmxvY2F0aW9uQ29kZSlcclxuICAgICAgLnN1YnNjcmliZSgoYWlycG9ydDogQWlycG9ydFJlc3VsdHMpID0+IHtcclxuICAgICAgICBpZiAoYWlycG9ydCkge1xyXG4gICAgICAgICAgdGhpcy5sb2NhdGlvbkNvZGUgPSB7XHJcbiAgICAgICAgICAgIGNvdW50cnk6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiBhaXJwb3J0LmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSxcclxuICAgICAgICAgICAgZGVzdGluYXRpb246IGFpcnBvcnQuaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICAgIGdhdGV3YXk6IGFpcnBvcnQuaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICAgIHBvc3Rjb2RlOiBhaXJwb3J0LmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgICBhaXJwb3J0LmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VhcmNoRmFzdFRyYWNrUXVlcnk6IFNlYXJjaEZhc3RUcmFja1F1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcclxuICAgIHRoaXMuYXJyaXZhbERhdGV0aW1lID0gbW9tZW50KHNlYXJjaEZhc3RUcmFja1F1ZXJ5LmFycml2YWxEYXRldGltZSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgLmdldEFpcnBvcnRCeUNvZGUoc2VhcmNoRmFzdFRyYWNrUXVlcnkubG9jYXRpb25Db2RlKVxyXG4gICAgICAuc3Vic2NyaWJlKChhaXJwb3J0OiBBaXJwb3J0UmVzdWx0cykgPT4ge1xyXG4gICAgICAgIGlmIChhaXJwb3J0KSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uQ29kZSA9IHtcclxuICAgICAgICAgICAgY291bnRyeTogYWlycG9ydC5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgICAgY291bnRyeUNvZGU6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogYWlycG9ydC5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgICAgZ2F0ZXdheTogYWlycG9ydC5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgICAgcG9zdGNvZGU6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICAgIGFpcnBvcnQuaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdQUkVQT1BVTEFUSU5HIExPVU5HRSBGT1JNJyk7XHJcbiAgICBjb25zdCBmbGlnaHRJdGVtOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XHJcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPVxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ub3V0Qm91bmREYXRlLnRvRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZGF0ZSA9IHtcclxuICAgICAgICAgIGRheTogZGF0ZS5nZXRVVENEYXRlKCksXHJcbiAgICAgICAgICBtb250aDogZGF0ZS5nZXRVVENNb250aCgpICsgMSxcclxuICAgICAgICAgIHllYXI6IGRhdGUuZ2V0VVRDRnVsbFllYXIoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5sb2NhdGlvbkNvZGUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XVxyXG4gICAgICAgICAgLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgcGFya2luZyBmcm9tIGxvdW5nZSBpdGVtJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEZhc3RUcmFja1F1b3RlW10pOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGN1cnJlbmN5ID0gcmVzdWx0c1swXS5jdXJyZW5jeTtcclxuICAgIHJldHVybiByZXN1bHRzLnJlZHVjZShcclxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZhc3RUcmFja1F1b3RlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkRmFzdFRyYWNrVG9CYXNrZXQoXHJcbiAgICBmYXN0dHJhY2tRdW90ZTogRmFzdFRyYWNrUXVvdGUsXHJcbiAgICBmYXN0dHJhY2tRdWVyeTogU2VhcmNoRmFzdFRyYWNrUXVlcnlWYXJpYWJsZXNcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGlmIChmYXN0dHJhY2tRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoZmFzdHRyYWNrUXVvdGUpO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgYWR1bHRzOiBmYXN0dHJhY2tRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgICBjaGlsZHJlbjogZmFzdHRyYWNrUXVlcnkuY2hpbGRyZW4sXHJcbiAgICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICAgIHNlcnZpY2U6IGZhc3R0cmFja1F1b3RlLnNvdXJjZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGV0aW1lOiBmYXN0dHJhY2tRdWVyeS5hcnJpdmFsRGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgICAgICAgIGxvY2F0aW9uQ29kZTogZmFzdHRyYWNrUXVvdGUuY29kZSxcclxuICAgICAgICAgICAgbmFtZTogZmFzdHRyYWNrUXVvdGUubmFtZSxcclxuICAgICAgICAgICAgYWlycG9ydElhdGE6IGZhc3R0cmFja1F1ZXJ5Py5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICAgIHRlcm1pbmFsOiBmYXN0dHJhY2tRdW90ZS50ZXJtaW5hbD8udG9TdHJpbmcoKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHByaWNlOiBmYXN0dHJhY2tRdW90ZS5wcmljZSxcclxuICAgICAgICAgIGN1cnJlbmN5OiBmYXN0dHJhY2tRdW90ZS5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeTogZmFzdHRyYWNrUXVlcnksXHJcbiAgICAgICAgICBvdXRib3VuZERhdGU6IGZhc3R0cmFja1F1ZXJ5LmFycml2YWxEYXRldGltZS5mb3JtYXQoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgZmFzdHRyYWNrUXVvdGUucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtc0FuZENvbmQoZmFzdHRyYWNrUXVvdGU6IEZhc3RUcmFja1F1b3RlKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ05hbWUnLFxyXG4gICAgICAgIHZhbHVlOiBmYXN0dHJhY2tRdW90ZS5uYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSW1wb3J0YW50IEluZm9ybWF0aW9uJyxcclxuICAgICAgICB2YWx1ZTogZmFzdHRyYWNrUXVvdGUuaW1wb3J0YW50SW5mb1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKGFwcGxpZWRGaWx0ZXJzOiBGYXN0VHJhY2tGaWx0ZXJzLCBzZWxlY3RlZFNvcnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGZ1bGxSZXN1bHRzOiBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5ID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICB0aGlzLmZ1bGxSZXN1bHRzXHJcbiAgICApO1xyXG5cclxuICAgIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuZmlsdGVyKChyZXN1bHQ6IEZhc3RUcmFja1F1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgcmVzdWx0LnByaWNlID49IGFwcGxpZWRGaWx0ZXJzLm1pblByaWNlICYmXHJcbiAgICAgICAgcmVzdWx0LnByaWNlIDw9IGFwcGxpZWRGaWx0ZXJzLm1heFByaWNlXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydFJlc3VsdHMoc2VsZWN0ZWRTb3J0LCBmdWxsUmVzdWx0cyk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoZnVsbFJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgc29ydFJlc3VsdHMoXHJcbiAgICBzZWxlY3RlZFNvcnQ6IG51bWJlcixcclxuICAgIHJlc3VsdHM/OiBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogRmFzdFRyYWNrUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBsZXQgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlXHJcbiAgICApO1xyXG4gICAgc3dpdGNoIChzZWxlY3RlZFNvcnQpIHtcclxuICAgICAgY2FzZSAwOiAvLyBjaGVhcGVzdFxyXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgICAgIChhOiBGYXN0VHJhY2tRdW90ZVJlc3VsdCwgYjogRmFzdFRyYWNrUXVvdGVSZXN1bHQpID0+XHJcbiAgICAgICAgICAgIGEucHJpY2UgLSBiLnByaWNlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOiAvLyBleHBlbnNpdmVcclxuICAgICAgICBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgICAgICAoYTogRmFzdFRyYWNrUXVvdGVSZXN1bHQsIGI6IEZhc3RUcmFja1F1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgICAgICBiLnByaWNlIC0gYS5wcmljZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmFsbGJhY2sgdG8gd2hhdGV2ZXIgd2FzIGJlZm9yZVxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoZnVsbFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIGZ1bGxSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluUHJpY2UoZnRzOiBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5KTogbnVtYmVyIHtcclxuICAgIHJldHVybiBmdHMucmVkdWNlKChtaW46IG51bWJlciwgZnQ6IEZhc3RUcmFja1F1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChmdC5wcmljZSA8IG1pbikge1xyXG4gICAgICAgIG1pbiA9IGZ0LnByaWNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtaW47XHJcbiAgICB9LCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgfVxyXG5cclxuICBnZXRNYXhQcmljZShmdHM6IEZhc3RUcmFja1F1b3RlUmVzdWx0QXJyYXkpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGZ0cy5yZWR1Y2UoKG1heDogbnVtYmVyLCBmdDogRmFzdFRyYWNrUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgaWYgKGZ0LnByaWNlID4gbWF4KSB7XHJcbiAgICAgICAgbWF4ID0gZnQucHJpY2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG1heDtcclxuICAgIH0sIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcclxuICB9XHJcbn1cclxuIl19
|