@sabstravtech/obtservices 0.2.2505190850 → 0.2.2505201645

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.
@@ -1,6 +1,6 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import moment from 'moment';
3
- import { of, firstValueFrom, BehaviorSubject } from 'rxjs';
3
+ import { of, BehaviorSubject } from 'rxjs';
4
4
  import { switchMap, take, tap } from 'rxjs/operators';
5
5
  import { BaseEnterpriseSearch } from './base-enterprise';
6
6
  import { DifferentInvokdedUserReasons, LocationTypes, maxTravellerWellbeing, SchemaFormat, ServiceProvider, WellbeingEnum } from '../types/types';
@@ -2924,8 +2924,12 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
2924
2924
  if (this.applyRailcards) {
2925
2925
  this.railCards = query.railCardQualifiers;
2926
2926
  }
2927
+ // const fetchRailStation = async (locationId: string): Promise<{ name: string; railstation: RailStation }> => {
2928
+ // const station = await firstValueFrom(this.searchService.getRailStationById(locationId));
2929
+ // return { name: station.name, railstation: station };
2930
+ // };
2927
2931
  const fetchRailStation = (locationId) => __awaiter(this, void 0, void 0, function* () {
2928
- const station = yield firstValueFrom(this.searchService.getRailStationById(locationId));
2932
+ const station = yield this.searchService.getRailStationById(locationId).toPromise();
2929
2933
  return { name: station.name, railstation: station };
2930
2934
  });
2931
2935
  const resiN = yield fetchRailStation(query.arrivalLocationId);
@@ -3491,4 +3495,4 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
3491
3495
  RailEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_rail';
3492
3496
  RailEnterpriseSearch.STORAGE_SESSION_RESULTS = 'rail_results';
3493
3497
  RailEnterpriseSearch.PASSING_POINT = 'Passing';
3494
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFpbC1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9yYWlsLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQWMsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFHTCw0QkFBNEIsRUFDNUIsYUFBYSxFQUNiLHFCQUFxQixFQWVyQixZQUFZLEVBQ1osZUFBZSxFQUNmLGFBQWEsRUFDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFFTCxTQUFTLEVBS1QsV0FBVyxFQUVYLHFCQUFxQixFQVdyQixrQkFBa0IsRUFLbkIsTUFBTSx3QkFBd0IsQ0FBQztBQWdCaEMsT0FBTyxFQUFhLElBQUksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzdELE9BQU8sRUFNTCxVQUFVLEVBQ1gsTUFBTSwwQ0FBMEMsQ0FBQztBQUlsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBS2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBTW5FLE1BQU0sQ0FBTixJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIsNkNBQXVCLENBQUE7SUFDdkIsOENBQXdCLENBQUE7QUFDMUIsQ0FBQyxFQUhXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFHN0I7QUFFRCxNQUFNLENBQU4sSUFBWSxtQkFHWDtBQUhELFdBQVksbUJBQW1CO0lBQzdCLHdDQUFpQixDQUFBO0lBQ2pCLHdDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFIVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBRzlCO0FBRUQsTUFBTSxDQUFOLElBQVksYUFNWDtBQU5ELFdBQVksYUFBYTtJQUN2QixrRUFBaUQsQ0FBQTtJQUNqRCwwREFBeUMsQ0FBQTtJQUN6QywwREFBeUMsQ0FBQTtJQUN6QyxrRUFBaUQsQ0FBQTtJQUNqRCwwQ0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBTlcsYUFBYSxLQUFiLGFBQWEsUUFNeEI7QUFFRCxNQUFNLENBQU4sSUFBWSwwQkFJWDtBQUpELFdBQVksMEJBQTBCO0lBQ3BDLDJEQUE2QixDQUFBO0lBQzdCLGdEQUFrQixDQUFBO0lBQ2xCLDREQUE4QixDQUFBO0FBQ2hDLENBQUMsRUFKVywwQkFBMEIsS0FBMUIsMEJBQTBCLFFBSXJDO0FBNEJELE1BQU0sT0FBTyxvQkFJWCxTQUFRLG9CQUFtRjtJQTBxQjNGLFlBQ1UsV0FBb0MsRUFDcEMscUJBQXVELEVBQy9ELE9BQTJCLEVBQ25CLGFBQStDLEVBQ3ZELGNBQWtDLEVBQ2xDLGFBQStDLEVBQy9DLFdBQWlDLEVBQ3pCLFlBQW9DO1FBRTVDLEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQVRuRCxnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFrQztRQUV2RCxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFJL0MsaUJBQVksR0FBWixZQUFZLENBQXdCO1FBenFCdEMsaUJBQVksR0FBb0I7WUFDdEMsYUFBYSxDQUFDLHNCQUFzQjtZQUNwQyxhQUFhLENBQUMsa0JBQWtCO1lBQ2hDLGFBQWEsQ0FBQyxrQkFBa0I7WUFDaEMsYUFBYSxDQUFDLHNCQUFzQjtZQUNwQyxhQUFhLENBQUMsVUFBVTtTQUN6QixDQUFDO1FBeURRLHVCQUFrQixHQUFHLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDO1FBQ2xFLDRCQUF1QixHQUFHLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDO1FBRTFFLGdCQUFXLEdBQUc7WUFDbkIsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxhQUFhLEVBQUU7WUFDakUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxhQUFhLEVBQUU7WUFDbEUsOEVBQThFO1lBQzlFLCtFQUErRTtTQUNoRixDQUFDO1FBRUYsZUFBVSxHQUF3QyxJQUFJLGVBQWUsQ0FBcUIsRUFBRSxDQUFDLENBQUM7UUFDOUYsb0JBQWUsR0FBNkMsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7UUFDM0YsMEJBQXFCLEdBQTZDLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO1FBRTFGLDJCQUFzQixHQUFrQztZQUM3RCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQ3JELEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDakQsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUNqRCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQ3JELEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDakQsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUNqRCxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQzFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDMUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSw2QkFBNkIsRUFBRTtZQUNuRCxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLDZCQUE2QixFQUFFO1NBQ3BELENBQUM7UUFFSyxnQ0FBMkIsR0FFOUI7WUFDRixPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDbkMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ25DLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUMvQixHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDL0IsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQy9CLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUMvQixFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDOUIsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQzlCLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUM5QixFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7U0FDL0IsQ0FBQztRQUVLLGlCQUFZLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEUsZ0JBQVcsR0FBRztZQUNuQixFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ25ELEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDaEQsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtZQUM1QyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzVDLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDcEQsQ0FBQztRQUVLLGlCQUFZLEdBQUc7WUFDcEIsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDbkMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7U0FDcEMsQ0FBQztRQUVNLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFFekIsbUdBQW1HO1FBQzNGLHdCQUFtQixHQUFHO1lBQzVCLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQzNDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQzVDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1NBQzdDLENBQUM7UUFFSyx3QkFBbUIsR0FBeUIsRUFBRSxDQUFDO1FBRXRELGlDQUFpQztRQUNqQyw4QkFBOEI7UUFDOUIsMEJBQTBCO1FBQzFCLDBCQUEwQjtRQUMxQixnQ0FBZ0M7UUFDekIsbUNBQThCLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLFNBQUksR0FBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNyQyw4QkFBeUIsR0FBVyxJQUFJLENBQUM7UUFDekMsNkJBQXdCLEdBQVcsSUFBSSxDQUFDO1FBRXhDLHVCQUFrQixHQUE0QjtZQUNuRCxRQUFRLEVBQUUsRUFBRTtZQUNaLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztRQUVLLDJCQUFzQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzdELG1CQUFjLEdBQTRCLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMzQixhQUFRLEdBQUcsSUFBSSxlQUFlLENBU2xDO1lBQ0QsZ0JBQWdCLEVBQUU7Z0JBQ2hCLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQy9ELHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQy9ELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzNELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzNELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQ3BEO1lBQ0QsZUFBZSxFQUFFO2dCQUNmLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQy9ELHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQy9ELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzNELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzNELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQ3BEO1lBQ0QsbUJBQW1CLEVBQUU7Z0JBQ25CLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzFELGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUN2RCx3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUNqRSxxQkFBcUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQy9EO1lBQ0QseUJBQXlCLEVBQUU7Z0JBQ3pCLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzFELGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUN2RCx3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUNqRSxxQkFBcUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQy9EO1lBQ0QsdUJBQXVCLEVBQUU7Z0JBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzFELGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUN2RCx3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUNqRSxxQkFBcUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQy9EO1lBQ0QsNEJBQTRCLEVBQUU7Z0JBQzVCLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQy9ELHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQy9ELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzNELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzNELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQ3BEO1lBQ0QsMkJBQTJCLEVBQUU7Z0JBQzNCLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQy9ELHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQy9ELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzNELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzNELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQ3BEO1lBQ0QseUJBQXlCLEVBQUU7Z0JBQ3pCLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzFELGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUN2RCx3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUNqRSxxQkFBcUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQy9EO1NBQ0YsQ0FBQyxDQUFDO1FBcUNJLG9CQUFlLEdBQWtCO1lBQ3RDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUU7WUFDckIsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7WUFDM0IsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRTtTQUNyQixDQUFDO1FBQ0ssbUJBQWMsR0FBa0I7WUFDckMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRTtZQUNyQixLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztZQUMzQixHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFO1NBQ3JCLENBQUM7UUFDSyxZQUFPLEdBQWtCO1lBQzlCLDBEQUEwRDtZQUMxRCxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDckMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO1lBQ3ZDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtTQUNyQyxDQUFDO1FBUUssWUFBTyxHQUFnQixFQUFFLENBQUM7UUF3TGpDLCtDQUErQztRQUN2QyxtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFXckMsbUJBQWMsR0FBVyxJQUFJLENBQUM7UUFVOUIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBV25DLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBcU1sQyxNQUFNLElBQUksR0FJTixjQUFjLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLElBQUk7WUFDaEYsS0FBSyxFQUFFLEVBQUU7WUFDVCxVQUFVLEVBQUUsRUFBb0I7WUFDaEMsa0JBQWtCLEVBQUUsRUFBb0I7U0FDekMsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ3JELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFFbkQsSUFBSSxhQUFhLENBQUMsOEJBQThCLEVBQUUsRUFBRTtZQUNsRCxhQUFhLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBdUIsRUFBRSxFQUFFO2dCQUN2RSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztnQkFDN0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0RixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO2dCQUM3QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBc0IsRUFBRSxFQUFFO1lBQzFELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFsc0JELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLGNBQWMsQ0FBQyxjQUEyRTtRQUM1RixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLE9BQU87U0FDUjthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQzVCLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxxQkFBcUIsQ0FBQyxjQUFtQztRQUMzRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsY0FBYyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixPQUFPO1NBQ1I7YUFBTTtZQUNMLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFvQixFQUFXLEVBQUU7Z0JBQ3hGLE9BQU8sS0FBSyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDeEUsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxJQUFJLHFCQUFxQixDQUFDLEVBQVU7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQztJQUMvQyxDQUFDO0lBNkpELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLE1BQWM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7UUFFeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzFCO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLFFBQWlCO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLFFBQVEsTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFjO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQTBCRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEtBQUsscUJBQXFCLENBQUMsaUJBQWlCLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLE1BQWU7UUFDNUIsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDO1NBQzVFO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLGFBQWEsQ0FBQztTQUN4RTtRQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLE9BQThCO1FBQ2pELElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsTUFBYztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxRQUFnQjtRQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxFQUFPOztRQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxNQUFBLEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxXQUFXLDBDQUFFLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1NBQ3hDO2FBQU0sSUFBSSxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLEVBQU87O1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLE1BQUEsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLFdBQVcsMENBQUUsRUFBRSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7U0FDMUM7YUFBTSxJQUFJLEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQzlCO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLGVBQWUsQ0FBQyxRQUFtQjtRQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLGlCQUFpQixDQUFDLE1BQWlCO1FBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsS0FBYztRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLEdBQUcsQ0FBQyxHQUFZO1FBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFdBQWdCOztRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFFMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxNQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxXQUFXLDBDQUFFLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1NBQ2hEO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsV0FBMEI7UUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7UUFDL0MsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDdEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQ1o7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ3BCLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFO1lBQ3hCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztZQUM5QixHQUFHLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRTtTQUN4QixDQUFDO1FBRUYsSUFDRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUNuRDtZQUNBLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWU7aUJBQ3hDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUMvQixHQUFHLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDakMsR0FBRyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNwQztRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLE9BQTJCO1FBQzlDLDREQUE0RDtRQUM1RCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztRQUUzQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLGVBQWUsQ0FBQyxXQUEwQjtRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUM7UUFDOUMsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQ1o7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUtELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsS0FBb0I7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUdELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsS0FBYTtRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBSUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxLQUFvQjtRQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBR0QsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsT0FBMkI7UUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsU0FBa0I7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLGlCQUFpQixDQUFDLG9CQUE0QjtRQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDO1FBQ3pELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLG1CQUFtQixDQUFDLHNCQUE4QjtRQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDO1FBQzdELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLG9CQUFvQixDQUFDLE1BQWU7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksaUJBQWlCLENBQUMsV0FBb0I7UUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxXQUFXLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsT0FBZ0I7UUFDakMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFtQztRQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixJQUFJLENBQUMsVUFBVTtZQUNiLElBQUksQ0FBQyxVQUFVO2dCQUNmLEtBQUssQ0FBQyxFQUFFLENBQUM7cUJBQ04sSUFBSSxDQUFDLENBQUMsQ0FBQztxQkFDUCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBYSxFQUFFLEVBQUU7b0JBQ3hCLE9BQU87d0JBQ0wsS0FBSyxFQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzs2QkFDbEIsUUFBUSxFQUFFOzZCQUNWLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQzt3QkFDdEUsT0FBTyxFQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzs2QkFDbEIsUUFBUSxFQUFFOzZCQUNWLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDOzRCQUNuQixHQUFHOzRCQUNILENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7cUJBQ2pELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsc0JBQXNCO1FBQy9CLElBQUksQ0FBQyx1QkFBdUI7WUFDMUIsSUFBSSxDQUFDLHVCQUF1QjtnQkFDNUIsS0FBSyxDQUFDLEVBQUUsQ0FBQztxQkFDTixJQUFJLENBQUMsQ0FBQyxDQUFDO3FCQUNQLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFhLEVBQUUsRUFBRTtvQkFDeEIsT0FBTzt3QkFDTCxLQUFLLEVBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDOzZCQUNsQixRQUFRLEVBQUU7NkJBQ1YsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO3dCQUN0RSxPQUFPLEVBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDOzZCQUNsQixRQUFRLEVBQUU7NkJBQ1YsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7NEJBQ25CLEdBQUc7NEJBQ0gsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztxQkFDakQsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxxQkFBcUIsQ0FBQyxPQUFlO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDO1FBQ2hELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLEtBQWM7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxVQUczQjtRQUNDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUM5RCxJQUFJLG1CQUFtQixJQUFJLGlCQUFpQixFQUFFO1lBQzVDLElBQUksQ0FBQyxlQUFlLEdBQUcsbUJBQW1CLENBQUM7WUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLE9BQTZCLEVBQUUsT0FBd0I7UUFDMUUsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBb0IsRUFBVyxFQUFFO1lBQ3BELE9BQU8sS0FBSyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQWdDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELG1HQUFtRztJQUNuRyxrQkFBa0I7UUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUM7WUFDcEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUM7WUFDM0UsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzFCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFDbEY7WUFDQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN2QjtJQUNILENBQUM7SUE2Q08sOEJBQThCLENBQ3BDLEtBQTJCLEVBQzNCLFdBQW9CO1FBRXBCLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxXQUFXLENBQUM7U0FDaEM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxtQ0FBbUMsQ0FDekMsS0FBZ0MsRUFDaEMsV0FBb0I7UUFFcEIsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLFdBQVcsQ0FBQztTQUNoQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVTLGNBQWMsQ0FBQyxVQUFnQztRQUN2RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUVsQyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQXdCLEVBQXNCLEVBQUU7WUFDaEUsdUNBQ0ssSUFBSSxLQUNQLElBQUksRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsSUFBSSxFQUNoQixRQUFRLEVBQUUsS0FBSyxFQUNmLFVBQVUsRUFBRSxJQUFJLElBQ2hCO1FBQ0osQ0FBQyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUE2QixFQUEyQixFQUFFO1lBQy9FLHVDQUNLLElBQUksS0FDUCxJQUFJLEVBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksRUFDaEIsUUFBUSxFQUFFLEtBQUssRUFDZixVQUFVLEVBQUUsSUFBSSxJQUNoQjtRQUNKLENBQUMsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLENBQ2hCLFFBQStDLEVBQ2YsRUFBRTtZQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTztpQkFDMUIsS0FBSyxDQUFDLFFBQVEsQ0FBQztpQkFDZixJQUFJLENBQUMsQ0FBQyxLQUF3QixFQUFFLE1BQXlCLEVBQVUsRUFBRTtnQkFDcEUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDakQsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUNsQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUNYO2dCQUNELElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDakMsT0FBTyxDQUFDLENBQUM7aUJBQ1Y7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUM7aUJBQ0QsR0FBRyxDQUFDLENBQUMsT0FBMEIsRUFBZ0MsRUFBRTtnQkFDaEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUF5QixFQUFFLE1BQTBCLEVBQVUsRUFBRTtvQkFDN0UsT0FBTyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQztnQkFFRixNQUFNLFNBQVMsR0FBRyxDQUNoQixLQUE4QixFQUM5QixNQUErQixFQUN2QixFQUFFO29CQUNWLE9BQU8sS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNwQyxDQUFDLENBQUM7Z0JBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLENBQUM7cUJBQzlELElBQUksQ0FBQyxJQUFJLENBQUM7cUJBQ1YsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqQixNQUFNLGtCQUFrQixHQUFHLENBQUMsT0FBTyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQztxQkFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQztxQkFDVixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25GLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25GLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUVwRixNQUFNLHNCQUFzQixHQUF5QixJQUFJLENBQUMsOEJBQThCLENBQ3RGLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFDaEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ3BCLENBQUM7Z0JBQ0YsTUFBTSxzQkFBc0IsR0FBeUIsSUFBSSxDQUFDLDhCQUE4QixDQUN0RixrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQ2hDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUNwQixDQUFDO2dCQUNGLE1BQU0sa0JBQWtCLEdBQXlCLElBQUksQ0FBQyw4QkFBOEIsQ0FDbEYsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFDNUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ3BCLENBQUM7Z0JBQ0YsTUFBTSxrQkFBa0IsR0FBeUIsSUFBSSxDQUFDLDhCQUE4QixDQUNsRixjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUM1QixDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDcEIsQ0FBQztnQkFDRixNQUFNLGtCQUFrQixHQUN0QixJQUFJLENBQUMsbUNBQW1DLENBQ3RDLGFBQWEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQ2hDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUNwQixDQUFDO2dCQUVKLE1BQU0sU0FBUyxHQUFHLGdDQUNiLE9BQU8sS0FDVixzQkFBc0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixFQUFFO3dCQUM5RSxNQUFNO3dCQUNOLENBQUMsc0JBQXNCLEVBQUUsT0FBTyxDQUFDO3FCQUNsQyxDQUFDLEVBQ0Ysc0JBQXNCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRTt3QkFDOUUsTUFBTTt3QkFDTixDQUFDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQztxQkFDbEMsQ0FBQyxFQUNGLGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUU7d0JBQ3RFLE1BQU07d0JBQ04sQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLENBQUM7cUJBQ2xDLENBQUMsRUFDRixrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFO3dCQUN0RSxNQUFNO3dCQUNOLENBQUMsc0JBQXNCLEVBQUUsT0FBTyxDQUFDO3FCQUNsQyxDQUFDLEVBQ0YsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUU7d0JBQzlELE1BQU07d0JBQ04sQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLENBQUM7cUJBQ2xDLENBQUMsR0FDNkIsQ0FBQztnQkFFbEMsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7WUFDTCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUM7UUFFRixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUEyQixFQUFzQixFQUFFOztZQUN4RSxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDbEMsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5RCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztZQUUzRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTNGLE1BQU0sWUFBWSxHQUFHLENBQ25CLEtBQTBCLEVBQzFCLFVBQTRCLEVBQ2YsRUFBRTtnQkFDZixNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDdkMsQ0FBQyxPQUFvQixFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBbUIsRUFBRSxFQUFFO29CQUN4RCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFnQixFQUFzQixFQUFFO3dCQUNwRixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDckQsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQztZQUNGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxPQUFxQyxFQUF3QixFQUFFO2dCQUN4Rix1Q0FDSyxPQUFPLEtBQ1Ysa0JBQWtCLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQyxFQUNsRixzQkFBc0IsRUFBRSxZQUFZLENBQ2xDLE9BQU8sQ0FBQyxzQkFBc0IsRUFDOUIsd0JBQXdCLENBQ3pCLEVBQ0Qsc0JBQXNCLEVBQUUsWUFBWSxDQUNsQyxPQUFPLENBQUMsc0JBQXNCLEVBQzlCLHdCQUF3QixDQUN6QixFQUNELGtCQUFrQixFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUMsRUFDbEYsVUFBVSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxJQUMxRDtZQUNKLENBQUMsQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUV2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUNqQyxRQUFRLEVBQ1I7Z0JBQ0UsZUFBZSxFQUFFO29CQUNmLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQy9ELHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQy9ELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQzNELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQzNELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2lCQUNwRDtnQkFDRCxtQkFBbUIsRUFBRTtvQkFDbkIsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDMUQsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQ3ZELHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQ2pFLHFCQUFxQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7aUJBQy9EO2dCQUNELG1CQUFtQixFQUFFO29CQUNuQixpQkFBaUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUMxRCxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDdkQsd0JBQXdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDakUscUJBQXFCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtpQkFDL0Q7YUFDRixFQUNELEtBQUssQ0FDTixDQUFDO1lBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDaEMsT0FBTyxFQUNQO2dCQUNFLGVBQWUsRUFBRTtvQkFDZixzQkFBc0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUMvRCxzQkFBc0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUMvRCxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUMzRCxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUMzRCxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtpQkFDcEQ7Z0JBQ0QsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLG1CQUFtQjtnQkFDbEQsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLG1CQUFtQjthQUNuRCxFQUVELElBQUksQ0FDTCxDQUFDO1lBRUYsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkYsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFakYsMERBQTBEO1lBQzFELDREQUE0RDtZQUU1RCxNQUFNLGdCQUFnQixHQUNwQixRQUFRLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCO2dCQUM5QyxRQUFRLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDO1lBRTlDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUM3RixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFFM0YsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsS0FBSyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3pHLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUsscUJBQXFCLENBQUMsQ0FBQztZQUV0RyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUN2QyxpQkFBaUIsRUFDakI7Z0JBQ0UsZUFBZSxFQUFFO29CQUNmLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQy9ELHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQy9ELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQzNELGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQzNELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2lCQUNwRDtnQkFDRCxtQkFBbUIsRUFBRTtvQkFDbkIsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDMUQsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQ3ZELHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7b0JBQ2pFLHFCQUFxQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7aUJBQy9EO2dCQUNELG1CQUFtQixFQUFFO29CQUNuQixpQkFBaUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUMxRCxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDdkQsd0JBQXdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDakUscUJBQXFCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtpQkFDL0Q7YUFDRixFQUNELEtBQUssQ0FDTixDQUFDO1lBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDdEMsZ0JBQWdCLEVBQ2hCO2dCQUNFLGVBQWUsRUFBRTtvQkFDZixzQkFBc0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUMvRCxzQkFBc0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUMvRCxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUMzRCxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUMzRCxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtpQkFDcEQ7Z0JBQ0QsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLG1CQUFtQjtnQkFDeEQsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLG1CQUFtQjthQUN6RCxFQUVELElBQUksQ0FDTCxDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxlQUFlO2dCQUMzQyxlQUFlLEVBQUUsUUFBUSxDQUFDLGVBQWU7Z0JBQ3pDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxtQkFBbUI7Z0JBQ2pELHlCQUF5QixFQUFFLFNBQVMsQ0FBQyxtQkFBbUI7Z0JBQ3hELHVCQUF1QixFQUNyQixDQUFBLE1BQUEsZ0JBQWdCLENBQUMsSUFBSSwwQ0FBRSxjQUFjLE1BQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQzFGLDRCQUE0QixFQUFFLGVBQWUsQ0FBQyxlQUFlO2dCQUM3RCwyQkFBMkIsRUFBRSxjQUFjLENBQUMsZUFBZTtnQkFDM0QseUJBQXlCLEVBQUUsZUFBZSxDQUFDLG1CQUFtQjthQUMvRCxDQUFDLENBQUM7WUFDSCxPQUFPLGdDQUNGLFVBQVUsS0FDYixRQUFRLEVBQ1IsTUFBTSxFQUFFLE9BQU8sR0FDTSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FDbkIsUUFBMEM7UUFFMUMsT0FBTztZQUNMLG9CQUFvQjtZQUNwQix3QkFBd0I7WUFDeEIsd0JBQXdCO1lBQ3hCLG9CQUFvQjtZQUNwQixZQUFZO1NBQ2IsQ0FBQyxNQUFNLENBQ04sQ0FDRSxLQUFrRCxFQUNsRCxJQUFzQixFQUN1QixFQUFFO1lBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFDRDtZQUNFLGtCQUFrQixFQUFFLElBQUksaUJBQWlCLEVBQUU7WUFDM0Msc0JBQXNCLEVBQUUsSUFBSSxpQkFBaUIsRUFBRTtZQUMvQyxzQkFBc0IsRUFBRSxJQUFJLGlCQUFpQixFQUFFO1lBQy9DLGtCQUFrQixFQUFFLElBQUksaUJBQWlCLEVBQUU7WUFDM0MsVUFBVSxFQUFFLElBQUksaUJBQWlCLEVBQUU7U0FDcEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWMsQ0FDcEIsUUFBMEMsRUFDMUMsS0FBdUI7UUFFdkIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ3JDLENBQUMsR0FBc0IsRUFBRSxPQUFxQyxFQUFxQixFQUFFO1lBQ25GLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1osT0FBTyxHQUFHLENBQUM7YUFDWjtZQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FDMUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQWlELEVBQUUsRUFBRTtnQkFDekUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQzlCLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFpQyxFQUFFLEVBQUU7b0JBQ3RELEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDLENBQ0YsQ0FBQztZQUNGLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRCxJQUFJLGlCQUFpQixFQUFFLENBQ3hCLENBQUM7SUFDSixDQUFDO0lBQ08sWUFBWSxDQUNsQixRQUFnQyxFQUNoQyxNQUlDLEVBQ0QsUUFBaUI7UUFNakIsTUFBTSxHQUFHLEdBQUcsQ0FDVixPQUlDLEVBQ0QsS0FBMkIsRUFDM0IsT0FBNkIsRUFLN0IsRUFBRTtZQUNGLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ2hDLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1lBRUQsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBRXZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtvQkFDMUQsUUFBUSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNyRDthQUNGO1lBRUQsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDO1FBRUYsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUNwQixDQUNFLE9BSUMsRUFDRCxPQUE2QixFQUs3QixFQUFFOztZQUNGLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBeUIsRUFBRSxNQUEwQixFQUFVLEVBQUU7Z0JBQzdFLE9BQU8sS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3BDLENBQUMsQ0FBQztZQUNGLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FDOUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFeEUsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUM5QyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQTRCLEVBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRixNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQzFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQzlDLENBQUMsTUFBTSxDQUNOLENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEYsQ0FBQztZQUNGLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FDOUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0YsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ3hGLENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEYsQ0FBQztZQUNGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUNyRixDQUFDLFFBQTRCLEVBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQ2pGLENBQUM7WUFDRixNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDeEYsQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsUUFBUSxDQUNwRixDQUFDO1lBQ0YsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ3JGLENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakYsQ0FBQztZQUVGLE1BQU0sY0FBYyxHQUF5QjtnQkFDM0MsR0FBRywwQkFBMEI7Z0JBQzdCLEdBQUcsc0JBQXNCO2dCQUN6QixHQUFHLHNCQUFzQjthQUMxQixDQUFDO1lBQ0YsTUFBTSxXQUFXLEdBQXlCO2dCQUN4QyxHQUFHLDBCQUEwQjtnQkFDN0IsR0FBRyxjQUFjO2FBQ2xCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2IsTUFBTSxXQUFXLEdBQXlCO2dCQUN4QyxHQUFHLHVCQUF1QjtnQkFDMUIsR0FBRyxtQkFBbUI7Z0JBQ3RCLEdBQUcsbUJBQW1CO2FBQ3ZCLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBeUIsQ0FBQyxHQUFHLHVCQUF1QixFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUN0RixJQUFJLENBQ0wsQ0FBQztZQUNGLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQjtZQUVELE9BQU8sQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUNsRCxPQUFPLENBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUM5QyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzdELENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0MsRUFDRCxPQUFPLENBQ1IsQ0FBQztZQUNGLE9BQU8sQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUNsRCxPQUFPLENBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUM5QyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzdELENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0MsRUFDRCxPQUFPLENBQ1IsQ0FBQztZQUVGLE9BQU8sQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUM5QyxPQUFPLENBQUMsZUFBZSxDQUFDLGtCQUFrQixFQUMxQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ3pELENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0MsRUFDRCxPQUFPLENBQ1IsQ0FBQztZQUNGLE9BQU8sQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FDdEMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQ2xDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ2pELENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0MsRUFDRCxPQUFPLENBQ1IsQ0FBQztZQUNGLElBQUksUUFBUSxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsR0FBRyxHQUFHLENBQ3hELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFDcEQsV0FBVyxFQUNYLE9BQU8sQ0FDUixDQUFDO2dCQUNGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQ3JELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFDakQsUUFBUSxFQUNSLE9BQU8sQ0FDUixDQUFDO2dCQUVGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsR0FBRyxHQUFHLENBQ3hELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFDcEQsY0FBYyxFQUNkLE9BQU8sQ0FDUixDQUFDO2dCQUNGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQ3JELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFDakQsV0FBVyxFQUNYLE9BQU8sQ0FDUixDQUFDO2dCQUNGLE1BQU0scUJBQXFCLEdBQ3pCLENBQUEsTUFBQSxNQUFBLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsMENBQUUsSUFBSSwwQ0FBRSxjQUFjO29CQUNuRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7Z0JBQzdCLElBQUkscUJBQXFCLEVBQUU7b0JBQ3pCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FDdEIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixFQUNwRCwwQkFBMEIsRUFDMUIsT0FBTyxDQUNSLENBQUM7b0JBQ0YsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO29CQUMvRSxJQUFJLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7d0JBQzVFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUI7NEJBQzNDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQztxQkFDakQ7eUJBQU0sSUFDTCxZQUFZLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQy9FO3dCQUNBLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsR0FBRyxZQUFZLENBQUM7cUJBQ3JFO2lCQUNGO2dCQUVELE1BQU0sa0JBQWtCLEdBQ3RCLENBQUEsTUFBQSxNQUFBLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLDBDQUFFLElBQUksMENBQUUsY0FBYztvQkFDaEUsbUJBQW1CLENBQUMsTUFBTSxDQUFDO2dCQUM3QixJQUFJLGtCQUFrQixFQUFFO29CQUN0QixNQUFNLFlBQVksR0FBRyxHQUFHLENBQ3RCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFDakQsdUJBQXVCLEVBQ3ZCLE9BQU8sQ0FDUixDQUFDO29CQUNGLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO29CQUNwRSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRTt3QkFDakUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWM7NEJBQ3hDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUM7d0JBQzdDLHdEQUF3RDt3QkFDeEQsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsS0FBSztxQkFDTjt5QkFBTSxJQUNMLFlBQVksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFDNUU7d0JBQ0EsT0FBTyxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixHQUFHLFlBQVksQ0FBQztxQkFDbEU7aUJBQ0Y7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUNqRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQzdDLFdBQVcsRUFDWCxPQUFPLENBQ1IsQ0FBQztnQkFDRixPQUFPLENBQUMsbUJBQW1CLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FDOUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFDMUMsUUFBUSxFQUNSLE9BQU8sQ0FDUixDQUFDO2dCQUVGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQ2pELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFDN0MsY0FBYyxFQUNkLE9BQU8sQ0FDUixDQUFDO2dCQUNGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUM5QyxPQUFPLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUMxQyxXQUFXLEVBQ1gsT0FBTyxDQUNSLENBQUM7YUFDSDtZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsRUFDRCxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSyxZQUFZLENBQ2hCLFNBQXdCLEVBQ3hCLE9BQTZCLEVBQzdCLFFBQTRCLEVBQzVCLFFBQWdCLEVBQ2hCLE9BQXlCLEVBQ3pCLFlBQXFCLEtBQUssRUFDMUIsZ0JBQXlCLElBQUksRUFDN0IsT0FBZ0IsS0FBSzs7O1lBRXJCLE1BQU0sUUFBUSxHQUFHLE1BQUEsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxJQUFJLDBDQUFFLElBQUksQ0FBQztZQUNqRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDakQsTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLE9BQU8sMENBQUUsWUFBWSxFQUMxQyxRQUFRLENBQ1QsQ0FBQztZQUVGLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN0RDtZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO2dCQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7Z0JBQ3JELE9BQU87YUFDUjtZQUNELElBQ0UsSUFBSSxDQUFDLGNBQWM7Z0JBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsV0FBVztnQkFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLEVBQ3ZEO2dCQUNBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxhQUFhO29CQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdkMsT0FBTzthQUNSO1lBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMzQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FDaEUsY0FBYyxDQUFDLCtCQUErQixDQUMvQyxDQUFDO1lBQ0YsSUFDRSxjQUFjO2dCQUNkLENBQUMsU0FBUztnQkFDVixJQUFJLENBQUMsb0JBQW9CO2dCQUN6QixTQUFTLEtBQUssYUFBYSxDQUFDLE9BQU8sRUFDbkM7Z0JBQ0EsTUFBTSxHQUFHLEdBQXlCLGNBQWMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pELE1BQU0sR0FBRyxHQUF5QixPQUFPLENBQUM7Z0JBRTFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUMxQixPQUFPLEVBQ1AsSUFBSSxDQUNMLENBQUM7Z0JBQ0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FDdkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFDMUIsT0FBTyxFQUNQLElBQUksQ0FDTCxDQUFDO2dCQUNGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUM1QyxlQUFlLEdBQUcsaUJBQWlCLEVBQ25DLFlBQVksQ0FDYixDQUFDO2dCQUNGLElBQUksS0FBSyxFQUFFO29CQUNULElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDMUU7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLFdBQVcsR0FBbUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUU1RCxRQUFRLE9BQU8sRUFBRTtvQkFDZixLQUFLLG9CQUFvQjt3QkFDdkIsSUFBSSxTQUFTLEtBQUssYUFBYSxDQUFDLFFBQVEsRUFBRTs0QkFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRztnQ0FDcEIsT0FBTztnQ0FDUCxJQUFJLEVBQUUsUUFBUTs2QkFDZixDQUFDO3lCQUNIO3dCQUNELElBQ0UsQ0FBQSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLDBDQUFFLE1BQU0sSUFBRyxDQUFDOzRCQUNqQyxDQUFDLGtCQUFrQjs0QkFDbkIsMklBQTJJOzRCQUMzSSxDQUFBLE1BQUEsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLDBDQUFFLFFBQVEsTUFBSyxZQUFZLEVBQ2xEOzRCQUNBLE1BQU0sWUFBWSxHQUFzQixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNsRSxVQUFVLENBQUMsMEJBQTBCLEVBQ3JDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUMxRSxFQUFFLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxDQUN2QyxDQUFDOzRCQUNGLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0NBQ2pCLE9BQU87NkJBQ1I7NEJBQ0QsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3lCQUV6RDs2QkFBTSxJQUFJLENBQUEsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSwwQ0FBRSxNQUFNLEtBQUksQ0FBQSxNQUFBLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSywwQ0FBRSxRQUFRLE1BQUssWUFBWSxFQUFFOzRCQUM5RixPQUFPLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQzt5QkFDM0I7d0JBQ0QsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQ2pDLFFBQVEsRUFDUixXQUFXLEVBQ1gsT0FBTyxFQUNQLFFBQVEsRUFDUixLQUFLLEVBQ0wsSUFBSSxDQUNMLENBQUM7d0JBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7d0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO3dCQUN0QyxNQUFNO29CQUNSLEtBQUssb0JBQW9CO3dCQUN2QixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFOzRCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHO2dDQUNwQixPQUFPO2dDQUNQLElBQUksRUFBRSxRQUFROzZCQUNmLENBQUM7eUJBQ0g7NkJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFOzRCQUM5QixJQUNFLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTywwQ0FBRSxZQUFZLDBDQUFFLE1BQU0sSUFBRyxDQUFDO2dDQUNyRCxDQUFDLGtCQUFrQjtnQ0FDbkIsQ0FBQSxNQUFBLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSywwQ0FBRSxRQUFRLE1BQUssWUFBWSxFQUNsRDtnQ0FDQSxNQUFNLFlBQVksR0FBc0IsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDbEUsVUFBVSxDQUFDLDBCQUEwQixFQUNyQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFDMUU7b0NBQ0UseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPO29DQUN0RCx3QkFBd0IsRUFBRSxPQUFPO2lDQUNsQyxDQUFDLHNDQUFzQztpQ0FDekMsQ0FBQztnQ0FDRixJQUFJLENBQUMsWUFBWSxFQUFFO29DQUNqQixPQUFPO2lDQUNSO2dDQUNELGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7NkJBQ3hFO2lDQUFNLElBQUksQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLDBDQUFFLFlBQVksMENBQUUsTUFBTSxLQUFJLENBQUEsTUFBQSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssMENBQUUsUUFBUSxNQUFLLFlBQVksRUFBRTtnQ0FDbEgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQzs2QkFDL0M7NEJBQ0QsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQ2pDLFFBQVEsRUFDUixXQUFXLEVBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQzNCLE9BQU8sRUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFDeEIsUUFBUSxFQUNSLEtBQUssQ0FDTixDQUFDOzRCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3lCQUM1Qjt3QkFDRCxNQUFNO29CQUNSLEtBQUssd0JBQXdCO3dCQUMzQixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFOzRCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHO2dDQUNwQixPQUFPO2dDQUNQLElBQUksRUFBRSxRQUFROzZCQUNmLENBQUM7eUJBQ0g7NkJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFOzRCQUM5QixJQUNFLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTywwQ0FBRSxZQUFZLDBDQUFFLE1BQU0sSUFBRyxDQUFDO2dDQUNyRCxDQUFDLGtCQUFrQjtnQ0FDbkIsQ0FBQSxNQUFBLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSywwQ0FBRSxRQUFRLE1BQUssWUFBWSxFQUNsRDtnQ0FDQSxNQUFNLFlBQVksR0FBc0IsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDbEUsVUFBVSxDQUFDLDBCQUEwQixFQUNyQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFDMUU7b0NBQ0UseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPO29DQUN0RCx3QkFBd0IsRUFBRSxPQUFPO2lDQUNsQyxDQUNGLENBQUM7Z0NBQ0YsSUFBSSxDQUFDLFlBQVksRUFBRTtvQ0FDakIsT0FBTztpQ0FDUjtnQ0FDRCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUMxQixjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOzZCQUN4RTtpQ0FBTSxJQUFJLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTywwQ0FBRSxZQUFZLDBDQUFFLE1BQU0sS0FBSSxDQUFBLE1BQUEsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLDBDQUFFLFFBQVEsTUFBSyxZQUFZLEVBQUU7Z0NBQ2xILElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7NkJBQy9DOzRCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQzs0QkFDNUQsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQzlCLFFBQVEsRUFDUixXQUFXLEVBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQzNCLE9BQU8sRUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFDeEIsUUFBUSxFQUNSLEtBQUssRUFDTCxJQUFJLEVBQ0osS0FBSyxDQUNOLENBQUM7NEJBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7NEJBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDOzRCQUN0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt5QkFDdEM7d0JBQ0QsTUFBTTtvQkFDUixLQUFLLHdCQUF3Qjt3QkFDM0IsSUFDRSxDQUFBLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFlBQVksMENBQUUsTUFBTSxJQUFHLENBQUM7NEJBQ2pDLENBQUMsa0JBQWtCOzRCQUNuQixDQUFBLE1BQUEsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLDBDQUFFLFFBQVEsTUFBSyxZQUFZLEVBQ2xEOzRCQUNBLE1BQU0sWUFBWSxHQUFzQixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNsRSxVQUFVLENBQUMsMEJBQTBCLEVBQ3JDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTs0QkFDMUUsc0NBQXNDOzRCQUN0QyxFQUFFLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxDQUN2QyxDQUFDOzRCQUNGLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0NBQ2pCLE9BQU87NkJBQ1I7NEJBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDMUIsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3lCQUN6RDs2QkFBTSxJQUFJLENBQUEsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSwwQ0FBRSxNQUFNLEtBQUksQ0FBQSxNQUFBLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSywwQ0FBRSxRQUFRLE1BQUssWUFBWSxFQUFFOzRCQUM5RixPQUFPLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQzt5QkFDM0I7d0JBQ0QsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQzNFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3dCQUMzQixNQUFNO29CQUNSLEtBQUssWUFBWTt3QkFDZixxRUFBcUU7d0JBQ3JFLDRCQUE0Qjt3QkFDNUIsMkNBQTJDO3dCQUMzQyxJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFOzRCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHO2dDQUNwQixPQUFPO2dDQUNQLElBQUksRUFBRSxRQUFROzZCQUNmLENBQUM7eUJBQ0g7NkJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFOzRCQUM5QixJQUNFLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTywwQ0FBRSxZQUFZLDBDQUFFLE1BQU0sSUFBRyxDQUFDO2dDQUNyRCxDQUFDLGtCQUFrQjtnQ0FDbkIsQ0FBQSxNQUFBLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSywwQ0FBRSxRQUFRLE1BQUssWUFBWSxFQUNsRDtnQ0FDQSxNQUFNLFlBQVksR0FBc0IsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDbEUsVUFBVSxDQUFDLDBCQUEwQixFQUNyQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFDMUU7b0NBQ0UseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPO29DQUN0RCx3QkFBd0IsRUFBRSxPQUFPO2lDQUNsQyxDQUNGLENBQUM7Z0NBQ0YsSUFBSSxDQUFDLFlBQVksRUFBRTtvQ0FDakIsT0FBTztpQ0FDUjtnQ0FDRCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUMxQixjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOzZCQUN4RTtpQ0FBTSxJQUFJLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTywwQ0FBRSxZQUFZLDBDQUFFLE1BQU0sS0FBSSxDQUFBLE1BQUEsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLDBDQUFFLFFBQVEsTUFBSyxZQUFZLEVBQUU7Z0NBQ2xILE9BQU8sQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDOzZCQUMzQjs0QkFDRCxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FDakMsUUFBUSxFQUNSLFdBQVcsRUFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFDM0IsT0FBTyxFQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUN4QixRQUFRLENBQ1QsQ0FBQzs0QkFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQzt5QkFDNUI7d0JBQ0QsTUFBTTtvQkFDUjt3QkFDRSxNQUFNLElBQUksR0FBcUIsT0FBTyxDQUFDO2lCQUMxQztnQkFDRCxJQUFJLGFBQWE7b0JBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3hDOztLQUNGO0lBRUsscUJBQXFCLENBQUMsY0FBc0IsRUFBRSxhQUFxQjs7WUFDdkUsNEZBQTRGO1lBQzVGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3RCxNQUFNLEtBQUssR0FDVCxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTTtnQkFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUMzQyxNQUFNLENBQUMsZ0JBQWdCLEtBQUsscUJBQXFCLENBQUMsYUFBYTtnQkFDL0QsY0FBYyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDO2dCQUN6RCxhQUFhLEtBQUssQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLHFCQUFxQixDQUFDO1lBQy9ELElBQUksS0FBSyxFQUFFO2dCQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLDZCQUE2QixFQUFFO29CQUNqRixRQUFRLEVBQUUsUUFBUTtpQkFDbkIsQ0FBQyxDQUFDO2dCQUNILElBQUksR0FBRyxFQUFFO29CQUNQLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDO29CQUM1QyxPQUFPLEtBQUssQ0FBQztpQkFDZDtxQkFBTTtvQkFDTCxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7UUFDSCxDQUFDO0tBQUE7SUFFRCxvQ0FBb0M7UUFDbEMsMEJBQTBCO1FBQzFCLCtCQUErQjtRQUUvQixPQUFPLENBQUMsR0FBRyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDOUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0UsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0UsaUJBQWlCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNoQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQy9CLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7UUFDdkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRSx5REFBeUQ7UUFDekQsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZTthQUN2RixHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQzthQUNiLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO1FBQ2xGLHFDQUFxQztRQUNyQyxXQUFXLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUM5RCxXQUFXLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDL0MsV0FBVyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUNoRSxXQUFXLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxXQUFXLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7UUFDdkQsV0FBVyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDOUUsV0FBVyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDNUIsV0FBVyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFSyxpQkFBaUIsQ0FDckIsU0FBd0IsRUFDeEIsT0FBNkIsRUFDN0IsUUFBNEIsRUFDNUIsUUFBZ0IsRUFDaEIsT0FBeUI7OztZQUV6QixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2dCQUNwRCxPQUFPO2FBQ1I7WUFFRCxNQUFNLG1CQUFtQixHQUN2QixJQUFJLENBQUMsY0FBYztnQkFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxXQUFXO2dCQUMvRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUMxRCxNQUFNLGtCQUFrQixHQUN0QixTQUFTLEtBQUssYUFBYSxDQUFDLE9BQU87Z0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCO29CQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsV0FBVztvQkFDdEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLFFBQVE7Z0JBQ2hFLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFFWixJQUFJLG1CQUFtQixJQUFJLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQyxPQUFPLElBQUksa0JBQWtCLENBQUMsRUFBRTtnQkFDdEYsT0FBTyxDQUFDLElBQUksQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxJQUFJLG1CQUFtQixFQUFFO29CQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDM0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUNwQjtnQkFDRCxPQUFPO2FBQ1I7WUFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxPQUFPLENBQUM7Z0JBQzVELENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLG9CQUFvQjtvQkFDN0MsQ0FBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYzt3QkFDbEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFDeEM7Z0JBQ0EsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7YUFDcEM7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1lBQ2hDLE1BQU0sV0FBVyxHQUFtQixJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDNUQsUUFBUSxPQUFPLEVBQUU7Z0JBQ2YsS0FBSyxvQkFBb0I7b0JBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUc7d0JBQ3BCLE9BQU87d0JBQ1AsSUFBSSxFQUFFLFFBQVE7cUJBQ2YsQ0FBQztvQkFFRixNQUFNO2dCQUNSLEtBQUssb0JBQW9CLENBQUM7Z0JBQzFCLEtBQUssWUFBWTtvQkFDZixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFO3dCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHOzRCQUNwQixPQUFPOzRCQUNQLElBQUksRUFBRSxRQUFRO3lCQUNmLENBQUM7cUJBQ0g7eUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUM5QixJQUFJLENBQUMscUJBQXFCLEdBQUc7NEJBQzNCLE9BQU87NEJBQ1AsSUFBSSxFQUFFLFFBQVE7eUJBQ2YsQ0FBQztxQkFDSDtvQkFDRCxNQUFNO2dCQUNSLEtBQUssd0JBQXdCO29CQUMzQixJQUFJLFNBQVMsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFO3dCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHOzRCQUNwQixPQUFPOzRCQUNQLElBQUksRUFBRSxRQUFRO3lCQUNmLENBQUM7cUJBQ0g7eUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUM5QixJQUFJLENBQUMscUJBQXFCLEdBQUc7NEJBQzNCLE9BQU87NEJBQ1AsSUFBSSxFQUFFLFFBQVE7eUJBQ2YsQ0FBQztxQkFDSDtvQkFDRCxNQUFNO2dCQUNSLEtBQUssd0JBQXdCO29CQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHO3dCQUNwQixPQUFPO3dCQUNQLElBQUksRUFBRSxRQUFRO3FCQUNmLENBQUM7b0JBQ0YsTUFBTTtnQkFDUjtvQkFDRSxNQUFNLElBQUksR0FBcUIsT0FBTyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOztLQUNwQjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNHLFdBQVcsQ0FDZixRQUFnQixFQUNoQixXQUEyQixFQUMzQixPQUE2QixFQUM3QixRQUE0QixFQUM1QixlQUFvQyxFQUNwQyxjQUFxQyxFQUNyQyxhQUFhLEdBQUcsS0FBSyxFQUNyQixrQkFBa0IsR0FBRyxLQUFLOzs7WUFFMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQ2hFLGNBQWMsQ0FBQywrQkFBK0IsQ0FDL0MsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLGNBQWMsRUFBRTtnQkFDL0MsTUFBTSxHQUFHLEdBQXlCLE9BQU8sQ0FBQztnQkFDMUMsTUFBTSxHQUFHLEdBQXlCLGNBQWMsQ0FBQztnQkFFakQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQ3JELE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQzFCLE9BQU8sRUFDUCxJQUFJLENBQ0wsQ0FBQztnQkFDRixNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUN2RCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUMxQixPQUFPLEVBQ1AsSUFBSSxDQUNMLENBQUM7Z0JBQ0YsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDeEYsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQzVDLGVBQWUsR0FBRyxpQkFBaUIsRUFDbkMsWUFBWSxDQUNiLENBQUM7Z0JBRUYsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDVixPQUFPLENBQUMsWUFBWTtpQkFDckI7YUFDRjtZQUVELElBQ0UsQ0FBQSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLDBDQUFFLE1BQU0sSUFBRyxDQUFDO2dCQUNqQyxDQUFDLGtCQUFrQjtnQkFDbkIsVUFBVSxDQUFDLDBCQUEwQixDQUFDLFNBQVM7Z0JBQy9DLENBQUEsTUFBQSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssMENBQUUsUUFBUSxNQUFLLFlBQVksRUFDbEQ7Z0JBQ0EsTUFBTSxZQUFZLEdBQXNCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ2xFLFVBQVUsQ0FBQywwQkFBMEIsRUFDckMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFDdEMsRUFBRSx5QkFBeUIsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLENBQ2pGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDakIsT0FBTztpQkFDUjtnQkFDRCxPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDekQ7aUJBQU0sSUFBSSxDQUFBLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFlBQVksMENBQUUsTUFBTSxLQUFJLENBQUEsTUFBQSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssMENBQUUsUUFBUSxNQUFLLFlBQVksRUFBRTtnQkFDOUYsT0FBTyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7YUFDM0I7WUFDRCxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsS0FBSyxxQkFBcUIsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3hFLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQzthQUM5RjtpQkFBTTtnQkFDTCxzREFBc0Q7Z0JBQ3RELElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyx3QkFBd0IsRUFBRTtvQkFDckQsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO2lCQUMzRjtxQkFBTSxJQUFJLFFBQVEsQ0FBQyxjQUFjLEtBQUssUUFBUSxFQUFFO29CQUMvQyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FDbEMsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsY0FBYyxFQUNkLFFBQVEsRUFDUixlQUFlLEVBQ2YsYUFBYSxDQUNkLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsbUJBQW1CO29CQUNuQixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FDOUIsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsY0FBYyxFQUNkLFFBQVEsRUFDUixlQUFlLEVBQ2YsYUFBYSxDQUNkLENBQUM7aUJBQ0g7YUFDRjtZQUVELE9BQU8sNEJBQTRCLENBQUMsTUFBTSxDQUFDOztLQUM1QztJQUVLLHFCQUFxQixDQUN6QixRQUFnQixFQUNoQixXQUEyQixFQUMzQixPQUE2QixFQUM3QixRQUE0QixFQUM1QixnQkFBeUIsS0FBSzs7WUFFOUIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7S0FBQTtJQUVLLHFCQUFxQixDQUN6QixTQUFpQixFQUNqQixXQUFzRCxFQUN0RCxRQUE4QixFQUM5QixPQUE2QixFQUM3QixZQUFnQyxFQUNoQyxXQUErQixFQUMvQixnQkFBeUIsS0FBSyxFQUM5QixPQUFnQixLQUFLLEVBQ3JCLE1BQWUsS0FBSzs7O1lBRXBCLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRztnQkFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBNkIsQ0FBQztnQkFDcEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUEyQixXQUF1QyxDQUFDLENBQUM7WUFDaEcsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksR0FBRyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2dCQUM5RSxTQUFTLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQztnQkFDckMsU0FBUyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQzFCLFNBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO2FBQy9CO1lBQ0QsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsMkNBQTJDO2dCQUMzQyxNQUFNLFlBQVksR0FBcUIsU0FBUyxDQUFDLFVBQVUsQ0FBQztnQkFDNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzVDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEMsSUFBSSxXQUFXLENBQUMsYUFBYSxLQUFLLGtCQUFrQixDQUFDLEtBQUssRUFBRTt3QkFDMUQscUVBQXFFO3dCQUNyRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ25DLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3FCQUM5QjtpQkFDRjtnQkFDRCx3REFBd0Q7YUFDekQ7WUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDdkIsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7YUFDaEM7WUFFRCxJQUFJLGNBQThCLENBQUM7WUFDbkMsSUFBSSxlQUErQixDQUFDO1lBRXBDLDhFQUE4RTtZQUM5RSxJQUFJLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFlBQVksMENBQUUsTUFBTSxFQUFFO2dCQUNqQyxjQUFjLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUN0RTtZQUVELElBQUksTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsWUFBWSwwQ0FBRSxNQUFNLEVBQUU7Z0JBQ2xDLGVBQWUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3hFO1lBRUQsTUFBTSxTQUFTLEdBQTRCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZGLE1BQU0sTUFBTSxHQUFHLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBRXhDLE1BQU0sZ0JBQWdCLEdBQW9DLENBQUEsTUFBQSxNQUFBLFlBQVksQ0FBQyxXQUFXLDBDQUFFLEtBQUssMENBQ3JGLE1BQU07Z0JBQ1IsQ0FBQyxDQUFDLE1BQUEsTUFBQSxZQUFZLENBQUMsV0FBVywwQ0FBRSxLQUFLLDBDQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3pFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRWxDLE1BQU0sZUFBZSxHQUFvQyxDQUFBLE1BQUEsTUFBQSxXQUFXLENBQUMsV0FBVywwQ0FBRSxLQUFLLDBDQUFFLE1BQU07Z0JBQzdGLENBQUMsQ0FBQyxNQUFBLE1BQUEsV0FBVyxDQUFDLFdBQVcsMENBQUUsS0FBSywwQ0FBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVqQyxNQUFNLFdBQVcsR0FBRyxNQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQywwQ0FBRSxJQUFJLENBQUM7WUFFbEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM3QyxZQUFZLEVBQ1osUUFBUSxFQUNSLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsT0FBTyxFQUNQLGVBQWUsRUFDZixXQUFXLENBQ1osQ0FBQztZQUNGLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMvQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksZUFBZSxHQUFzQixFQUFFLENBQUM7Z0JBQzVDLElBQUksWUFBWSxDQUFDLGdCQUFnQixJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDakUsZUFBZSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUM7aUJBQ2hEO3FCQUFNO29CQUNMLGVBQWUsR0FBRyxNQUFBLFlBQVksQ0FBQyxlQUFlLDBDQUFFLE1BQU0sQ0FDcEQsQ0FBQyxJQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FDbkQsQ0FBQztpQkFDSDtnQkFDRCxNQUFNLFVBQVUsR0FBbUI7b0JBQ2pDLHNCQUFzQixFQUFFLFlBQVksQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLFdBQVc7b0JBQzNFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDakIsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLE1BQU0sRUFBRTt3QkFDTixTQUFTLEVBQUUsTUFBQSxZQUFZLENBQUMsV0FBVywwQ0FBRSxTQUFTO3dCQUM5QyxlQUFlLEVBQUUsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBcUIsRUFBbUIsRUFBRTs0QkFDdEYsT0FBTztnQ0FDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0NBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dDQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTs2QkFDaEIsQ0FBQzt3QkFDSixDQUFDLENBQUM7d0JBQ0YsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFpQixFQUFnQixFQUFFOzRCQUNsRixPQUFPO2dDQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQ0FDWCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7NkJBQzlCLENBQUM7d0JBQ0osQ0FBQyxDQUFDO3dCQUNGLGFBQWEsRUFBRTs0QkFDYixlQUFlLEVBQUUsUUFBUSxDQUFDLGNBQWM7NEJBQ3hDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxFQUFFOzRCQUMvQixpQkFBaUIsRUFBRSxRQUFRLENBQUMsY0FBYzs0QkFDMUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLElBQUk7NEJBQ25DLGVBQWUsRUFBRTtnQ0FDZjtvQ0FDRSxZQUFZLEVBQUUsWUFBWSxDQUFDLFlBQVk7b0NBQ3ZDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxJQUFJO29DQUNwQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUs7b0NBQ3pCLElBQUksRUFBRSxZQUFZO29DQUNsQixxQkFBcUIsRUFBRSxZQUFZLENBQUMscUJBQXFCO29DQUN6RCxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsZ0JBQWdCO2lDQUNoRDs2QkFDRjt5QkFDRjt3QkFDRCxZQUFZLEVBQUU7NEJBQ1osZUFBZSxFQUFFLE9BQU8sQ0FBQyxjQUFjOzRCQUN2QyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsRUFBRTs0QkFDOUIsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGNBQWM7NEJBQ3pDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxJQUFJOzRCQUNsQyxlQUFlLEVBQUU7Z0NBQ2Y7b0NBQ0UsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO29DQUN0QyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsSUFBSTtvQ0FDbkMsSUFBSSxFQUFFLFdBQVc7b0NBQ2pCLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxnQkFBZ0I7b0NBQzlDLHFCQUFxQixFQUFFLFdBQVcsQ0FBQyxxQkFBcUI7aUNBQ3pEOzZCQUNGO3lCQUNGO3dCQUNELHFCQUFxQixFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMscUJBQXFCO3dCQUNyRSxRQUFRLEVBQUU7NEJBQ1IsZUFBZSxFQUFFLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsUUFBUSwwQ0FBRSxNQUFNO2dDQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVE7Z0NBQ2xDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDOzRCQUM3QyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLGlCQUFpQjs0QkFDN0Qsa0JBQWtCLEVBQUUsSUFBSTs0QkFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDOzRCQUNqRixPQUFPLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0I7NEJBQ3hDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQSxNQUFBLFlBQVksQ0FBQyxXQUFXLDBDQUFFLE9BQU8sQ0FBQTs0QkFDNUMsS0FBSyxFQUFFLE1BQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLFdBQVcsMENBQUUsS0FBSzs0QkFDdkMsV0FBVyxFQUFFLE1BQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLFdBQVcsMENBQUUsV0FBVzt5QkFDcEQ7d0JBQ0QsbUJBQW1CO3dCQUNuQixNQUFNLEVBQUU7NEJBQ04sZUFBZSxFQUFFLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsT0FBTywwQ0FBRSxNQUFNO2dDQUN2RCxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU87Z0NBQ2pDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDOzRCQUM1QyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLGlCQUFpQjs0QkFDNUQsa0JBQWtCLEVBQUUsSUFBSTs0QkFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDOzRCQUNoRixPQUFPLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0I7NEJBQ3ZDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQSxNQUFBLFdBQVcsQ0FBQyxXQUFXLDBDQUFFLE9BQU8sQ0FBQTs0QkFDM0MsS0FBSyxFQUFFLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFdBQVcsMENBQUUsS0FBSzs0QkFDdEMsV0FBVyxFQUFFLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFdBQVcsMENBQUUsV0FBVzt5QkFDbkQ7d0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJO3dCQUN4QixZQUFZLEVBQUUsa0JBQWtCO3dCQUNoQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FDdkIsWUFBWSxDQUFDLFlBQVksRUFDekIsV0FBVyxDQUFDLFlBQVksRUFDeEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxDQUM3Qzt3QkFDRCxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3BGLGNBQWMsRUFBRSxVQUFVLENBQUMsTUFBTTtxQkFDbEM7b0JBQ0QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO29CQUN4QixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztvQkFDN0QsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4RSxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQXdCO29CQUMvQyxXQUFXLEVBQUUsU0FBUztvQkFDdEIsVUFBVSxFQUFFLENBQUMsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsVUFBVSxtQ0FBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsbUNBQUksQ0FBQyxDQUFDO29CQUNwRSxlQUFlLEVBQUUsQ0FBQyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxlQUFlLG1DQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsZUFBZSxtQ0FBSSxDQUFDLENBQUM7b0JBQ25GLFlBQVksRUFBRSxRQUFRLENBQUMsY0FBYztvQkFDckMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxjQUFjO29CQUNuQyxXQUFXLEVBQ1QsWUFBWSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsWUFBWSxLQUFLLFlBQVksQ0FBQyxRQUFRO3dCQUN4RSxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU07d0JBQ3JCLENBQUMsQ0FBQyxJQUFJO29CQUNWLG1CQUFtQixFQUNqQixZQUFZLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxZQUFZLEtBQUssWUFBWSxDQUFDLFFBQVE7d0JBQ3hFLENBQUMsQ0FBZSxZQUFZLENBQUMsWUFBWTt3QkFDekMsQ0FBQyxDQUFDLElBQUk7b0JBQ1Ysd0JBQXdCLEVBQUUsWUFBWSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsV0FBVztvQkFDN0UsVUFBVSxFQUFFO3dCQUNWLEdBQUcsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDO3dCQUMxQyxHQUFHLENBQUMsV0FBVyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztxQkFDMUM7aUJBQ0YsQ0FBQztnQkFDRiwyRUFBMkU7Z0JBQzNFLDZFQUE2RTtnQkFDN0UsSUFBSSxjQUFjLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQzFCLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUM7aUJBQ3hEO2dCQUNELElBQUksZUFBZSxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUMzQixVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDO2lCQUMzRDtnQkFFRCxJQUFJLGNBQWMsSUFBSSxlQUFlLEVBQUU7b0JBQ3JDLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FDMUUsQ0FBQyxJQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FDbkQsQ0FBQztpQkFDSDtnQkFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFO29CQUN2RixVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQzFFLENBQUMsSUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FDN0QsQ0FBQztpQkFDSDtnQkFDRCxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBVyxVQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztnQkFDM0UsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDdkQsVUFBVSxFQUNWLFNBQVMsRUFDVCxJQUFJLENBQUMsYUFBYSxFQUNsQixVQUFVLEVBQ1YsWUFBWSxDQUFDLGtCQUFrQixJQUFJLFdBQVcsQ0FBQyxrQkFBa0IsRUFDakUsS0FBSyxFQUNMLGFBQWEsQ0FDZCxDQUFDO2dCQUNGLElBQUksQ0FBQyxDQUFBLE1BQUEsWUFBWSxDQUFDLGtCQUFrQiwwQ0FBRSxNQUFNLENBQUEsSUFBSSxDQUFDLENBQUEsTUFBQSxXQUFXLENBQUMsa0JBQWtCLDBDQUFFLE1BQU0sQ0FBQSxFQUFFO29CQUN2RixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO2lCQUNqQztnQkFDRCxJQUFJLFlBQVksS0FBSyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUU7b0JBQzFELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2lCQUM1QjtnQkFDRCxPQUFPLFlBQVksQ0FBQzthQUNyQjtZQUNELE9BQU8sNEJBQTRCLENBQUMsUUFBUSxDQUFDOztLQUM5QztJQUVELGtCQUFrQjs7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN4RSxJQUFJO1lBQ0YsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUkscUJBQXFCLENBQUMsYUFBYSxFQUFFO2dCQUNoRSxJQUFJLGNBQWtDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ3BELE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQzs2QkFDdEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQzs2QkFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN6QixJQUNFLGlCQUFpQjs0QkFDakIsQ0FBQyxDQUFDLGNBQWMsSUFBSSxjQUFjLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQzs0QkFFbkUsY0FBYyxHQUFHLGlCQUFpQixDQUFDO29CQUN2QyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPO29CQUNMLE1BQU0sRUFBRSxDQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxLQUFLLEtBQUksQ0FBQztvQkFDbEMsWUFBWSxFQUFFLENBQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLFFBQVEsS0FBSSxLQUFLO2lCQUNoRCxDQUFDO2FBQ0g7WUFDRCxJQUFJLHNCQUEwQyxDQUFDO1lBQy9DLElBQUksd0JBQTRDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDeEQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDO3lCQUMxRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO3lCQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLElBQ0UsaUJBQWlCO3dCQUNqQixDQUFDLENBQUMsc0JBQXNCLElBQUksc0JBQXNCLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQzt3QkFFbkYsc0JBQXNCLEdBQUcsaUJBQWlCLENBQUM7Z0JBQy9DLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNwRCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7eUJBQ3RELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7eUJBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekIsSUFDRSxpQkFBaUI7d0JBQ2pCLENBQUMsQ0FBQyx3QkFBd0IsSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFDO3dCQUV4Rix3QkFBd0IsR0FBRyxpQkFBaUIsQ0FBQztnQkFDakQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksb0JBQXdDLENBQUM7WUFDN0MsSUFBSSxNQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSwwQ0FBRSxNQUFNLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ3hELE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQzs2QkFDMUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQzs2QkFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN6QixJQUNFLGlCQUFpQjs0QkFDakIsQ0FBQyxDQUFDLG9CQUFvQixJQUFJLG9CQUFvQixDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7NEJBRS9FLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDO29CQUM3QyxDQUFDLENBQUMsQ0FBQztvQkFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDcEQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDOzZCQUN0RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDOzZCQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3pCLElBQ0UsaUJBQWlCOzRCQUNqQixDQUFDLENBQUMsd0JBQXdCO2dDQUN4Qix3QkFBd0IsQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDOzRCQUUzRCx3QkFBd0IsR0FBRyxpQkFBaUIsQ0FBQztvQkFDakQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELElBQUksd0JBQXdCLGFBQXhCLHdCQUF3Qix1QkFBeEIsd0JBQXdCLENBQUUsS0FBSyxFQUFFO2dCQUNuQyxJQUFJLG9CQUFvQixhQUFwQixvQkFBb0IsdUJBQXBCLG9CQUFvQixDQUFFLEtBQUssRUFBRTtvQkFDL0IsSUFDRSxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLENBQUMsS0FBSzt3QkFDdkQsd0JBQXdCLENBQUMsS0FBSzt3QkFDaEMsd0JBQXdCLENBQUMsS0FBSzt3QkFDOUIsc0JBQXNCLENBQUMsUUFBUSxJQUFJLG9CQUFvQixDQUFDLFFBQVEsRUFDaEU7d0JBQ0EsT0FBTzs0QkFDTCxNQUFNLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxHQUFHLG9CQUFvQixDQUFDLEtBQUs7NEJBQ2pFLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxRQUFRO3lCQUM5QyxDQUFDO3FCQUNIO2lCQUNGO3FCQUFNLElBQUksQ0FBQSxzQkFBc0IsYUFBdEIsc0JBQXNCLHVCQUF0QixzQkFBc0IsQ0FBRSxLQUFLLElBQUcsd0JBQXdCLENBQUMsS0FBSyxFQUFFO29CQUN6RSxPQUFPO3dCQUNMLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxLQUFLO3dCQUNwQyxZQUFZLEVBQUUsc0JBQXNCLENBQUMsUUFBUTtxQkFDOUMsQ0FBQztpQkFDSDtnQkFDRCxPQUFPO29CQUNMLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxLQUFLO29CQUN0QyxZQUFZLEVBQUUsd0JBQXdCLENBQUMsUUFBUTtpQkFDaEQsQ0FBQzthQUNIO2lCQUFNLElBQUksb0JBQW9CLGFBQXBCLG9CQUFvQix1QkFBcEIsb0JBQW9CLENBQUUsS0FBSyxFQUFFO2dCQUN0QyxPQUFPO29CQUNMLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CLENBQUMsS0FBSztvQkFDakUsWUFBWSxFQUFFLHNCQUFzQixDQUFDLFFBQVE7aUJBQzlDLENBQUM7YUFDSDtZQUNELE9BQU87Z0JBQ0wsTUFBTSxFQUFFLENBQUEsc0JBQXNCLGFBQXRCLHNCQUFzQix1QkFBdEIsc0JBQXNCLENBQUUsS0FBSyxLQUFJLENBQUM7Z0JBQzFDLFlBQVksRUFBRSxDQUFBLHNCQUFzQixhQUF0QixzQkFBc0IsdUJBQXRCLHNCQUFzQixDQUFFLFFBQVEsS0FBSSxLQUFLO2FBQ3hELENBQUM7U0FDSDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRVMsVUFBVTtRQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNuRixPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQztZQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRU8sUUFBUTs7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsRUFBRTtZQUM5RSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0Isa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUM1QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7UUFDdEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFFckIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2pFO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxDQUFDO1NBQy9EO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDL0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1EQUFtRCxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RGO1FBRUQsSUFBSSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUsscUJBQXFCLENBQUMsYUFBYSxFQUFFO1lBQ2pFLGdEQUFnRDtZQUVoRCxJQUFJLE1BQUEsSUFBSSxDQUFDLGVBQWUsMENBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO2dCQUMvRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsb0RBQW9ELENBQUMsQ0FBQzthQUNqRjtTQUNGO1FBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDaEU7U0FDRjtRQUVELDhCQUE4QjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1NBQ3BGO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUM5QyxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFFOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7YUFDekM7WUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDdkIsUUFBUSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2FBQy9DO1lBRUQsSUFBSSxTQUFTLENBQUMsUUFBUSxLQUFLLE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQzNFLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0RBQWtELENBQUMsQ0FBQzthQUNuRTtZQUVELElBQUksU0FBUyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksU0FBUyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUU7Z0JBQ3hELFFBQVEsQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQzthQUMxRDtZQUVELFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNsQyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7b0JBQ3ZELFFBQVEsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztpQkFDOUM7Z0JBRUQsMkZBQTJGO2dCQUMzRixJQUNFLEtBQUssQ0FBQyxjQUFjO29CQUNwQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7b0JBQ2hELEtBQUssQ0FBQyxhQUFhLEVBQ25CO29CQUNBLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0RBQWtELEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUN6RjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN0QixpQ0FBaUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7WUFFM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFFN0Msb0RBQW9EO1lBQ3BELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzthQUNyQztZQUVELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixFQUFFO2dCQUM5RSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzNCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7YUFDNUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUV0RSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM3RDthQUFNO1lBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLFVBQWtCLEVBQUUsU0FBa0I7UUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsS0FBSyxDQUFDLG1CQUFtQixHQUFHLFVBQVUsQ0FBQztRQUN2QyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUE0QjtRQUNoRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUErQjtRQUN2QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTtZQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1NBQ25DO1FBQ0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDOUUsS0FBSyxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7UUFDakMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDdEIsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBK0I7O1FBQ2xELE1BQU0saUJBQWlCLEdBQXlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3RSxPQUFPO1lBQ0wsV0FBVyxFQUFFLFdBQVcsQ0FBQyxJQUFJO1lBQzdCLFVBQVUsRUFBRSxpQkFBaUI7WUFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDMUMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksMENBQUUsRUFBRSxDQUFDO1NBQ3JGLENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBK0I7O1FBQ3RELE1BQU0sV0FBVyxHQUF5QixLQUFLLENBQUM7UUFFaEQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsV0FBVyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUN0RDtRQUVELElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLFdBQVcsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7U0FDaEU7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDakQsV0FBVyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQy9DLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUM5QztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixXQUFXLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDNUM7UUFDRCxXQUFXLENBQUMsbUJBQW1CLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLFdBQVcsMENBQUUsV0FBVyxDQUFDO1FBRWhGLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsV0FBVywwQ0FBRSxXQUFXLENBQUM7UUFFN0UsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFlBQTBCO1FBQ2pELE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQTBDLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlFLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUI7WUFDdkUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDO1lBQzNELENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUN0QyxZQUFZLENBQUMsVUFBVSxDQUFDLHlCQUF5QixFQUNqRCxZQUFZLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUNoRCxDQUFDO1FBRUYsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsS0FBSyxxQkFBcUIsQ0FBQyxhQUFhLEVBQUU7WUFDL0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLHVCQUF1QjtnQkFDcEUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDO2dCQUN6RCxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUUxRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQ3BDLFlBQVksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQy9DLFlBQVksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQzlDLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDOUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbkYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDckQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMxQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDcEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxhQUE2QixJQUFJLENBQUMsVUFBVTs7UUFDekQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUN6QjtRQUVELE1BQU0sS0FBSyxHQUE2QjtZQUN0QyxXQUFXLEVBQUUsSUFBSTtZQUNqQixXQUFXLEVBQUUsVUFBVSxDQUFDLGdCQUFnQjtZQUN4QyxNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVU7WUFDN0IsaUJBQWlCLEVBQUUsTUFBQSxNQUFBLFVBQVUsQ0FBQyxZQUFZLDBDQUFFLFdBQVcsMENBQUUsRUFBRTtZQUMzRCxtQkFBbUIsRUFBRSxNQUFBLE1BQUEsVUFBVSxDQUFDLGNBQWMsMENBQUUsV0FBVywwQ0FBRSxFQUFFO1lBQy9ELFFBQVEsRUFBRSxVQUFVLENBQUMsWUFBWTtZQUNqQyxLQUFLLEVBQUUsVUFBVSxDQUFDLGlCQUFpQjtZQUNuQyxpQkFBaUIsRUFBRSxVQUFVLENBQUMsU0FBUztZQUN2QyxZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7WUFDckMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7WUFDeEYseUJBQXlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7WUFDMUYscUJBQXFCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO1lBQ3JGLHVCQUF1QixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztZQUN2RixhQUFhLEVBQUUsTUFBQSxNQUFBLFVBQVUsQ0FBQyxXQUFXLDBDQUFFLFdBQVcsMENBQUUsRUFBRTtZQUN0RCxrQkFBa0IsRUFBRSxNQUFBLE1BQUEsVUFBVSxDQUFDLFNBQVMsMENBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQywwQ0FDZCxHQUFHLENBQUMsQ0FBQyxRQUE0QixFQUFFLEVBQUU7Z0JBQ3JDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pGLENBQUMsQ0FBQztZQUNKLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxpQkFBaUI7WUFDL0MsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLG1CQUFtQjtZQUNuRCxxQkFBcUIsRUFBRSxVQUFVLENBQUMscUJBQXFCO1NBQ3hELENBQUM7UUFFRixLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNO1lBQzdCLENBQUMsQ0FBQyxJQUFJO1lBQ04sQ0FBQyxDQUFDLENBQUEsTUFBQSxNQUFBLE1BQUEsVUFBVSxDQUFDLFlBQVksMENBQUUsV0FBVywwQ0FBRSxlQUFlLDBDQUFFLFdBQVcsS0FBSSxJQUFJLENBQUM7UUFFL0UsSUFBSSxVQUFVLENBQUMsWUFBWSxLQUFLLENBQUMsRUFBRTtZQUNqQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUN2QjtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFLEVBQUU7WUFDNUIsS0FBSyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDNUI7UUFFRCxRQUFRLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuQyxLQUFLLGtCQUFrQixDQUFDLE1BQU07Z0JBQzVCLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLE1BQU07WUFDUixLQUFLLGtCQUFrQixDQUFDLE1BQU07Z0JBQzVCLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLE1BQU07WUFDUjtnQkFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixNQUFNLENBQUMsQ0FBQztTQUNqRjtRQUVELFFBQVEsVUFBVSxDQUFDLGNBQWMsRUFBRTtZQUNqQyxLQUFLLGtCQUFrQixDQUFDLE1BQU07Z0JBQzVCLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLE1BQU07WUFDUixLQUFLLGtCQUFrQixDQUFDLE1BQU07Z0JBQzVCLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLE1BQU07WUFDUjtnQkFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsTUFBTSxDQUFDLENBQUM7U0FDL0U7UUFFRCxRQUFRLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuQyxLQUFLLHFCQUFxQixDQUFDLGFBQWEsQ0FBQztZQUN6QyxLQUFLLHFCQUFxQixDQUFDLGlCQUFpQjtnQkFDMUMsS0FBSyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztnQkFDckMsS0FBSyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztnQkFDbkMsTUFBTTtTQUNUO1FBRUQsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7WUFDL0IsS0FBSyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDN0MsS0FBSyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7U0FDbEQ7UUFFRCxzRUFBc0U7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxRQUFRLEdBQVUsRUFBRSxDQUFDO1lBRTNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUM3QixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7d0JBQ3JCLFFBQVEsQ0FBQyxJQUFJLENBQUM7NEJBQ1osSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXOzRCQUN2QixNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYTs0QkFDakQsTUFBTSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7eUJBQ2pDLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQztTQUNyQztRQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzlFLEtBQUssQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRTFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQTJCLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTSwwQkFBMEI7O1FBQy9CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLGFBQWEsR0FBVSxFQUFFLENBQUM7UUFFaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNoRCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLG1CQUFtQixDQUM1QywwQ0FBRSxPQUFPO2dCQUNSLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLO2dCQUMxQixDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO1lBRTdCLE1BQU0sWUFBWSxHQUFHO2dCQUNuQixhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU07b0JBQ3hCLENBQUMsQ0FBQyxxQkFBcUI7b0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDckQsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDL0IsR0FBRyxFQUFFLEVBQUU7Z0JBQ1AsRUFBRSxFQUFFLFNBQVMsQ0FBQyxtQkFBbUI7YUFDbEMsQ0FBQztZQUVGLElBQUksWUFBWSxDQUFDLGFBQWEsS0FBSyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNELFFBQVEsRUFBRSxDQUFDO2FBQ1o7aUJBQU07Z0JBQ0wsTUFBTSxFQUFFLENBQUM7YUFDVjtZQUVELGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDbEM7UUFFRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRU8sd0JBQXdCLENBQUMsUUFBZ0I7UUFDL0MsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFO1lBQ3RDLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFO1lBQ3RDLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxFQUFFO1lBQ3ZDLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxpQkFBeUIsRUFBRSxlQUF1QjtRQUM1RCxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDO1NBQ2xDO2FBQU0sSUFBSSxlQUFlLEVBQUU7WUFDMUIsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7U0FDbEM7UUFDRDtZQUNFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsMEJBQTBCLENBQUMsYUFBOEM7UUFDdkUscUVBQXFFO1FBQ3JFLDhCQUE4QjtRQUM5Qiw4QkFBOEI7UUFDOUIsVUFBVTtRQUNWLHNDQUFzQztRQUN0QyxzREFBc0Q7UUFDdEQsNEJBQTRCO1FBQzVCLDBCQUEwQjtRQUMxQiw2QkFBNkI7UUFDN0IsU0FBUztRQUNULGdEQUFnRDtRQUNoRCxnRUFBZ0U7UUFDaEUsZ0RBQWdEO1FBQ2hELG9CQUFvQjtRQUNwQixXQUFXO1FBQ1gsOENBQThDO1FBQzlDLHVDQUF1QztRQUN2Qyx1REFBdUQ7UUFDdkQsOEJBQThCO1FBQzlCLDRCQUE0QjtRQUM1QiwrQkFBK0I7UUFDL0IsV0FBVztRQUNYLGlEQUFpRDtRQUNqRCxnRUFBZ0U7UUFDaEUsaURBQWlEO1FBQ2pELHNCQUFzQjtRQUN0QixhQUFhO1FBQ2IsUUFBUTtRQUNSLGNBQWM7UUFDZCwwRUFBMEU7UUFDMUUsTUFBTTtRQUNOLElBQUk7SUFDTixDQUFDO0lBRUQsaUNBQWlDLENBQUMsVUFBc0IsRUFBRSxjQUF1QixJQUFJO1FBQ25GLE1BQU0sZUFBZSxHQUE2QixVQUFVLENBQUMsV0FBVyxDQUFDO1FBRXpFLElBQUksZUFBZSxFQUFFO1lBQ25CLElBQUksV0FBVyxFQUFFO2dCQUNmLDZFQUE2RTtnQkFDN0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyx5QkFBeUI7b0JBQy9ELENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDO29CQUNuRCxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FDdEMsZUFBZSxDQUFDLHlCQUF5QixFQUN6QyxlQUFlLENBQUMsdUJBQXVCLENBQ3hDLENBQUM7Z0JBRUYsSUFBSSxlQUFlLENBQUMsV0FBVyxLQUFLLHFCQUFxQixDQUFDLGFBQWEsRUFBRTtvQkFDdkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsdUJBQXVCO3dCQUM1RCxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQzt3QkFDakQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFFbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUNwQyxlQUFlLENBQUMsdUJBQXVCLEVBQ3ZDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FDdEMsQ0FBQztpQkFDSDthQUNGO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQztZQUM3QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZLEVBQUUsU0FBb0M7UUFDL0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN4RCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNqQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLEVBQUUsRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDRCQUE0QixDQUMxQixpQkFBdUMsRUFDdkMsT0FBZ0IsS0FBSztRQUVyQixJQUFJLElBQUksR0FBVSxFQUFFLENBQUM7UUFDckIsSUFBSSxpQkFBaUIsYUFBakIsaUJBQWlCLHVCQUFqQixpQkFBaUIsQ0FBRSxXQUFXLENBQUMsTUFBTSxFQUFFO1lBQ3pDLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNqRCxPQUFPO29CQUNMLFFBQVEsRUFBRSxJQUFJO3dCQUNaLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsTUFBTSxPQUFPLENBQUMsV0FBVyxNQUFNLE9BQU8sQ0FBQyxRQUFRLEVBQUU7d0JBQ2xGLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUTtvQkFDcEIsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGNBQWM7b0JBQ3pDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxNQUFNO29CQUNwQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGNBQWM7b0JBQ3ZDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxNQUFNO2lCQUNuQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCx3QkFBd0I7WUFDeEIscUNBQXFDO1lBQ3JDLDRCQUE0QjtZQUM1QixNQUFNO1NBQ1A7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxpQ0FBaUMsQ0FDL0IsaUJBQXVDLEVBQ3ZDLEtBQWEsRUFDYixRQUFpQixFQUNqQixLQUFhO1FBRWIsOERBQThEO1FBQzlELDREQUE0RDtRQUM1RCxJQUFJLElBQUksR0FBVSxFQUFFLENBQUM7UUFDckIsSUFBSSxpQkFBaUIsYUFBakIsaUJBQWlCLHVCQUFqQixpQkFBaUIsQ0FBRSxXQUFXLENBQUMsTUFBTSxFQUFFO1lBQ3pDLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNqRCxNQUFNLFlBQVksR0FBRztvQkFDbkIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO29CQUMxQixpQkFBaUIsRUFBRSxPQUFPLENBQUMsY0FBYztvQkFDekMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3BDLGVBQWUsRUFBRSxPQUFPLENBQUMsY0FBYztvQkFDdkMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLE1BQU07aUJBQ25DLENBQUM7Z0JBQ0YsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzdDLENBQUMsRUFBb0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQ25ELENBQUM7Z0JBQ0YsSUFBSSxZQUFZLEVBQUU7b0JBQ2hCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTt3QkFDZixJQUFJLFFBQVEsRUFBRTs0QkFDWixZQUFZLENBQUMsZUFBZSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUM7NEJBQzVELFlBQVksQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDO3lCQUM1RDs2QkFBTTs0QkFDTCxZQUFZLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDOzRCQUNoRSxZQUFZLENBQUMsb0JBQW9CLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQzt5QkFDOUQ7cUJBQ0Y7eUJBQU07d0JBQ0wsSUFBSSxRQUFRLEVBQUU7NEJBQ1osWUFBWSxDQUFDLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQzs0QkFDaEUsWUFBWSxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUM7eUJBQzlEOzZCQUFNOzRCQUNMLFlBQVksQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQzs0QkFDNUQsWUFBWSxDQUFDLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUM7eUJBQzVEO3FCQUNGO2lCQUNGO3FCQUFNO29CQUNMLFlBQVksQ0FBQyxlQUFlO3dCQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztvQkFDMUUsWUFBWSxDQUFDLGtCQUFrQjt3QkFDN0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7b0JBQ3RFLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO29CQUM1RSxZQUFZLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7aUJBQzFFO2dCQUVELE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFSyx3QkFBd0IsQ0FDNUIsU0FBaUIsRUFDakIsVUFBMEIsRUFDMUIsaUJBQXVDLEVBQ3ZDLFFBQTRCLEVBQzVCLGdCQUF5QixLQUFLLEVBQzlCLE9BQWdCLEtBQUssRUFDckIsTUFBZSxLQUFLOzs7WUFFcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHO2dCQUNwQixDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUE0QixDQUFDO2dCQUNuRCxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQTJCLFVBQWlCLENBQUMsQ0FBQztZQUUxRSxJQUFJLEdBQUcsRUFBRTtnQkFDUCxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztnQkFDOUUsU0FBUyxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7Z0JBQ3JDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUMxQixTQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQzthQUMvQjtZQUVELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUN2QixTQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQzthQUNoQztZQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUV2RCxJQUFJLElBQUksRUFBRTtnQkFDUiwyQ0FBMkM7Z0JBQzNDLE1BQU0sWUFBWSxHQUFxQixTQUFTLENBQUMsVUFBVSxDQUFDO2dCQUM1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDNUMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxJQUFJLFdBQVcsQ0FBQyxhQUFhLEtBQUssa0JBQWtCLENBQUMsS0FBSyxFQUFFO3dCQUMxRCxxRUFBcUU7d0JBQ3JFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDbkMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7cUJBQzlCO2lCQUNGO2dCQUNELHdEQUF3RDthQUN6RDtZQUVELElBQUksZUFBK0IsQ0FBQztZQUNwQyw4RUFBOEU7WUFDOUUsSUFBSSxNQUFBLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLFlBQVksMENBQUUsTUFBTSxFQUFFO2dCQUMzQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2pGO1lBRUQsc0NBQXNDO1lBQ3RDLG1DQUFtQztZQUNuQyxJQUFJO1lBQ0osTUFBTSxTQUFTLEdBQTRCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZGLE1BQU0sTUFBTSxHQUFHLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBRXhDLE1BQU0sWUFBWSxHQUFvQyxDQUFBLE1BQUEsTUFBQSxRQUFRLENBQUMsV0FBVywwQ0FBRSxLQUFLLDBDQUFFLE1BQU07Z0JBQ3ZGLENBQUMsQ0FBQyxNQUFBLE1BQUEsUUFBUSxDQUFDLFdBQVcsMENBQUUsS0FBSywwQ0FBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUU5QixNQUFNLFdBQVcsR0FBRyxNQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQywwQ0FBRSxJQUFJLENBQUM7WUFDbEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM3QyxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxXQUFXLENBQ1osQ0FBQztZQUNGLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFeEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQy9DLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFdEQsTUFBTSxVQUFVLEdBQW1CO29CQUNqQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsV0FBVztvQkFDNUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO29CQUNqQixPQUFPLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRTtvQkFDN0IsTUFBTSxFQUFFO3dCQUNOLFNBQVMsRUFBRSxNQUFBLFFBQVEsQ0FBQyxXQUFXLDBDQUFFLFNBQVM7d0JBQzFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTt3QkFDeEIsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ25ELENBQUMsSUFBcUIsRUFBbUIsRUFBRTs0QkFDekMsT0FBTztnQ0FDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0NBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dDQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTs2QkFDaEIsQ0FBQzt3QkFDSixDQUFDLENBQ0Y7d0JBQ0QsWUFBWSxFQUFFLENBQUMsaUJBQWlCLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDdEQsQ0FBQyxJQUFpQixFQUFnQixFQUFFOzRCQUNsQyxPQUFPO2dDQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQ0FDWCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7NkJBQzlCLENBQUM7d0JBQ0osQ0FBQyxDQUNGO3dCQUNELGFBQWEsRUFBRTs0QkFDYixlQUFlLEVBQUUsaUJBQWlCLENBQUMsY0FBYzs0QkFDakQsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRTs0QkFDeEMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsY0FBYzs0QkFDbkQsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs0QkFDNUMsZUFBZSxFQUFFO2dDQUNmO29DQUNFLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtvQ0FDbkMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLElBQUk7b0NBQ2hDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztvQ0FDckIsSUFBSTtvQ0FDSixxQkFBcUIsRUFBRSxRQUFRLENBQUMscUJBQXFCO29DQUNyRCxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO2lDQUM1Qzs2QkFDRjt5QkFDRjt3QkFDRCxxQkFBcUIsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLHFCQUFxQjt3QkFDakUsUUFBUSxFQUFFOzRCQUNSLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQjs0QkFDcEMsZUFBZSxFQUFFLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsUUFBUSwwQ0FBRSxNQUFNO2dDQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVE7Z0NBQ2xDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDOzRCQUN6QyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLGlCQUFpQjs0QkFDekQsV0FBVyxFQUFFLElBQUksQ0FBQyx5Q0FBeUMsQ0FDekQsaUJBQWlCLENBQUMsV0FBVyxDQUM5Qjs0QkFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUEsTUFBQSxRQUFRLENBQUMsV0FBVywwQ0FBRSxPQUFPLENBQUE7NEJBQ3hDLEtBQUssRUFBRSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxXQUFXLDBDQUFFLEtBQUs7NEJBQ25DLFdBQVcsRUFBRSxNQUFBLFFBQVEsQ0FBQyxXQUFXLDBDQUFFLFdBQVc7eUJBQy9DO3dCQUNELFlBQVksRUFBRSxrQkFBa0I7d0JBQ2hDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTt3QkFDbkMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO3dCQUM3QixjQUFjLEVBQ1osVUFBVSxDQUFDLGdCQUFnQixLQUFLLHFCQUFxQixDQUFDLGlCQUFpQixJQUFJLENBQUMsR0FBRzs0QkFDN0UsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNOzRCQUNuQixDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU07cUJBQ3hCO29CQUNELE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtvQkFDeEIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQzdELEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztvQkFDckIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUF3QjtvQkFDM0MsV0FBVyxFQUFFLFNBQVM7b0JBQ3RCLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxVQUFVO29CQUN4QyxlQUFlLEVBQUUsaUJBQWlCLENBQUMsZUFBZTtvQkFDbEQsWUFBWSxFQUFFLGlCQUFpQixDQUFDLGNBQWM7b0JBQzlDLFdBQVcsRUFDVCxZQUFZLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxZQUFZLEtBQUssUUFBUSxDQUFDLFFBQVE7d0JBQ3BFLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTTt3QkFDckIsQ0FBQyxDQUFDLElBQUk7b0JBQ1YsbUJBQW1CLEVBQ2pCLFlBQVksQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLFlBQVksS0FBSyxRQUFRLENBQUMsUUFBUTt3QkFDcEUsQ0FBQyxDQUFlLFlBQVksQ0FBQyxZQUFZO3dCQUN6QyxDQUFDLENBQUMsSUFBSTtvQkFDVix3QkFBd0IsRUFBRSxRQUFRLENBQUMsV0FBVztvQkFDOUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7aUJBQ3hDLENBQUM7Z0JBRUYsc0RBQXNEO2dCQUN0RCw2RUFBNkU7Z0JBQzdFLElBQUksZUFBZSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2xGLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUM7b0JBQzFELFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FDMUUsQ0FBQyxJQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FDbkQsQ0FBQztpQkFDSDtnQkFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFO29CQUN4QyxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQzFFLENBQUMsSUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FDN0QsQ0FBQztpQkFDSDtnQkFDRCxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBVyxVQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztnQkFDM0UsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDdkQsVUFBVSxFQUNWLFNBQVMsRUFDVCxJQUFJLENBQUMsYUFBYSxFQUNsQixVQUFVLEVBQ1YsUUFBUSxDQUFDLGtCQUFrQixFQUMzQixLQUFLLEVBQ0wsYUFBYSxDQUNkLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLENBQUEsTUFBQSxRQUFRLENBQUMsa0JBQWtCLDBDQUFFLE1BQU0sQ0FBQSxFQUFFO29CQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO2lCQUNqQztnQkFDRCxJQUFJLFlBQVksS0FBSyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUU7b0JBQzFELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2lCQUM1QjtnQkFDRCxPQUFPLFlBQVksQ0FBQzthQUNyQjtZQUNELE9BQU8sNEJBQTRCLENBQUMsTUFBTSxDQUFDOztLQUM1QztJQUVLLHdCQUF3QixDQUM1QixTQUFpQixFQUNqQixVQUFxRCxFQUNyRCxRQUE4QixFQUM5QixPQUE2QixFQUM3QixZQUFnQyxFQUNoQyxXQUErQixFQUMvQixnQkFBeUIsS0FBSyxFQUM5QixNQUFlLEtBQUs7OztZQUVwQiw2QkFBNkI7WUFDN0IsbUNBQW1DO1lBQ25DLElBQUk7WUFFSixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUc7Z0JBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQTRCLENBQUM7Z0JBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBMkIsVUFBc0MsQ0FBQyxDQUFDO1lBRS9GLElBQUksR0FBRyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2dCQUM5RSxTQUFTLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQztnQkFDckMsU0FBUyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQzFCLFNBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO2FBQy9CO1lBRUQsSUFBSSxZQUE0QixDQUFDO1lBRWpDLDhFQUE4RTtZQUU5RSxJQUFJLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFlBQVksMENBQUUsTUFBTSxFQUFFO2dCQUNsQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNyRTtZQUVELE1BQU0sU0FBUyxHQUE0QixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN2RixNQUFNLE1BQU0sR0FBRyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUV4QyxNQUFNLGdCQUFnQixHQUFvQyxDQUFBLE1BQUEsTUFBQSxZQUFZLENBQUMsV0FBVywwQ0FBRSxLQUFLLDBDQUNyRixNQUFNO2dCQUNSLENBQUMsQ0FBQyxNQUFBLE1BQUEsWUFBWSxDQUFDLFdBQVcsMENBQUUsS0FBSywwQ0FBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVsQyxNQUFNLGVBQWUsR0FBb0MsQ0FBQSxNQUFBLE1BQUEsV0FBVyxDQUFDLFdBQVcsMENBQUUsS0FBSywwQ0FBRSxNQUFNO2dCQUM3RixDQUFDLENBQUMsTUFBQSxNQUFBLFdBQVcsQ0FBQyxXQUFXLDBDQUFFLEtBQUssMENBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDeEUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFFakMsTUFBTSxXQUFXLEdBQUcsTUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsMENBQUUsSUFBSSxDQUFDO1lBRWxFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDN0MsWUFBWSxFQUNaLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLE9BQU8sRUFDUCxlQUFlLEVBQ2YsV0FBVyxDQUNaLENBQUM7WUFDRixJQUFJLE1BQU0sRUFBRTtnQkFDVixpRUFBaUU7Z0JBQ2pFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDL0MsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV0RCw0RUFBNEU7Z0JBQzVFLG1EQUFtRDtnQkFDbkQsTUFBTSxnQkFBZ0IsR0FDcEIsV0FBVyxLQUFLLGVBQWUsQ0FBQyxTQUFTLEtBQUksTUFBQSxXQUFXLENBQUMsV0FBVywwQ0FBRSxPQUFPLENBQUEsQ0FBQztnQkFFaEYsTUFBTSxXQUFXLEdBQVcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFFLE1BQU0sZUFBZSxHQUFXLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixNQUFNLFVBQVUsR0FBbUI7b0JBQ2pDLHNCQUFzQixFQUFFLFlBQVksQ0FBQyxXQUFXO29CQUNoRCxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ2pCLE9BQU8sRUFBRSxTQUFTO29CQUNsQixNQUFNLEVBQUU7d0JBQ04sU0FBUyxFQUFFLE1BQUEsWUFBWSxDQUFDLFdBQVcsMENBQUUsU0FBUzt3QkFDOUMsZUFBZSxFQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ3ZELENBQUMsSUFBcUIsRUFBbUIsRUFBRTs0QkFDekMsT0FBTztnQ0FDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0NBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dDQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTs2QkFDaEIsQ0FBQzt3QkFDSixDQUFDLENBQ0Y7d0JBQ0QsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFpQixFQUFnQixFQUFFOzRCQUNsRixPQUFPO2dDQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQ0FDWCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7NkJBQzlCLENBQUM7d0JBQ0osQ0FBQyxDQUFDO3dCQUNGLGFBQWEsRUFBRTs0QkFDYixlQUFlLEVBQUUsUUFBUSxDQUFDLGNBQWM7NEJBQ3hDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxFQUFFOzRCQUMvQixpQkFBaUIsRUFBRSxRQUFRLENBQUMsY0FBYzs0QkFDMUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLElBQUk7NEJBRW5DLGVBQWUsRUFBRTtnQ0FDZjtvQ0FDRSxZQUFZLEVBQUUsWUFBWSxDQUFDLFlBQVk7b0NBQ3ZDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxJQUFJO29DQUNwQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUs7b0NBQ3pCLElBQUksRUFBRSxZQUFZO29DQUNsQixxQkFBcUIsRUFBRSxZQUFZLENBQUMscUJBQXFCO29DQUN6RCxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsZ0JBQWdCO2lDQUNoRDs2QkFDRjt5QkFDRjt3QkFDRCxZQUFZLEVBQUU7NEJBQ1osZUFBZSxFQUFFLE9BQU8sQ0FBQyxjQUFjOzRCQUN2QyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsRUFBRTs0QkFDOUIsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGNBQWM7NEJBQ3pDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxJQUFJOzRCQUNsQyxlQUFlLEVBQUU7Z0NBQ2Y7b0NBQ0UsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO29DQUN0QyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsSUFBSTtvQ0FDbkMsSUFBSSxFQUFFLFdBQVc7b0NBQ2pCLHFCQUFxQixFQUFFLFdBQVcsQ0FBQyxxQkFBcUI7b0NBQ3hELGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxnQkFBZ0I7aUNBQy9DOzZCQUNGO3lCQUNGO3dCQUNELHFCQUFxQixFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMscUJBQXFCO3dCQUNyRSxRQUFRLEVBQUU7NEJBQ1IsT0FBTyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCOzRCQUN4QyxlQUFlLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQzs0QkFDMUQsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUI7NEJBQzdELFdBQVcsRUFBRSxJQUFJLENBQUMseUNBQXlDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQzs0QkFDakYsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFBLE1BQUEsWUFBWSxDQUFDLFdBQVcsMENBQUUsT0FBTyxDQUFBOzRCQUM1QyxLQUFLLEVBQUUsTUFBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsV0FBVywwQ0FBRSxLQUFLOzRCQUN2QyxXQUFXLEVBQUUsTUFBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsV0FBVywwQ0FBRSxXQUFXO3lCQUNwRDt3QkFDRCxtQkFBbUI7d0JBQ25CLE1BQU0sRUFBRTs0QkFDTixPQUFPLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0I7NEJBQ3ZDLGVBQWUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDOzRCQUN6RCxpQkFBaUIsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLGlCQUFpQjs0QkFDNUQsV0FBVyxFQUFFLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDOzRCQUNoRixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUEsTUFBQSxXQUFXLENBQUMsV0FBVywwQ0FBRSxPQUFPLENBQUE7NEJBQzNDLEtBQUssRUFBRSxNQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxXQUFXLDBDQUFFLEtBQUs7NEJBQ3RDLFdBQVcsRUFBRSxNQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxXQUFXLDBDQUFFLFdBQVc7eUJBQ25EO3dCQUNELFlBQVksRUFBRSxrQkFBa0I7d0JBQ2hDLFlBQVksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUN2QixZQUFZLENBQUMsWUFBWSxFQUN6QixXQUFXLENBQUMsWUFBWSxFQUN4QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQzdDO3dCQUNELFNBQVMsRUFBRSxZQUFZLENBQUMsU0FBUyxHQUFHLGVBQWU7d0JBQ25ELGNBQWMsRUFBRSxVQUFVLENBQUMsTUFBTTtxQkFDbEM7b0JBQ0QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO29CQUN4QixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7b0JBQzVCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVc7b0JBQ3ZDLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBd0I7b0JBQy9DLFdBQVcsRUFBRSxTQUFTO29CQUN0QixVQUFVLEVBQUUsQ0FBQyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxVQUFVLG1DQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsVUFBVSxtQ0FBSSxDQUFDLENBQUM7b0JBQ3BFLGVBQWUsRUFBRSxDQUFDLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGVBQWUsbUNBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxlQUFlLG1DQUFJLENBQUMsQ0FBQztvQkFDbkYsWUFBWSxFQUFFLFFBQVEsQ0FBQyxjQUFjO29CQUNyQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGNBQWM7b0JBQ25DLFdBQVcsRUFDVCxZQUFZLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxZQUFZLEtBQUssWUFBWSxDQUFDLFFBQVE7d0JBQ3hFLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTTt3QkFDckIsQ0FBQyxDQUFDLElBQUk7b0JBQ1YsbUJBQW1CLEVBQ2pCLFlBQVksQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLFlBQVksS0FBSyxZQUFZLENBQUMsUUFBUTt3QkFDeEUsQ0FBQyxDQUFlLFlBQVksQ0FBQyxZQUFZO3dCQUN6QyxDQUFDLENBQUMsSUFBSTtvQkFDVixVQUFVLEVBQUU7d0JBQ1YsR0FBRyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLENBQUM7d0JBQzFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDO3FCQUMxQztvQkFDRCx3QkFBd0IsRUFBRSxZQUFZLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxXQUFXO2lCQUM5RSxDQUFDO2dCQUNGLHNEQUFzRDtnQkFDdEQsNkVBQTZFO2dCQUM3RSxJQUFJLFlBQVksSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDeEIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztvQkFDdkQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUMxRSxDQUFDLElBQXFCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUNuRCxDQUFDO2lCQUNIO2dCQUVELElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLElBQUksQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUU7b0JBQ3ZGLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FDMUUsQ0FBQyxJQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUM3RCxDQUFDO2lCQUNIO2dCQUNELFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFXLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO2dCQUMzRSxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUN2RCxVQUFVLEVBQ1YsU0FBUyxFQUNULElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxVQUFVLEVBQ2YsWUFBWSxDQUFDLGtCQUFrQixJQUFJLFdBQVcsQ0FBQyxrQkFBa0IsRUFDakUsS0FBSyxFQUNMLGFBQWEsQ0FDZCxDQUFDO2dCQUNGLElBQUksQ0FBQyxDQUFBLE1BQUEsWUFBWSxDQUFDLGtCQUFrQiwwQ0FBRSxNQUFNLENBQUEsSUFBSSxDQUFDLENBQUEsTUFBQSxXQUFXLENBQUMsa0JBQWtCLDBDQUFFLE1BQU0sQ0FBQSxFQUFFO29CQUN2RixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO2lCQUNqQztnQkFDRCxJQUFJLFlBQVksS0FBSyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUU7b0JBQzFELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2lCQUM1QjtnQkFDRCxPQUFPLFlBQVksQ0FBQzthQUNyQjtZQUNELE9BQU8sNEJBQTRCLENBQUMsTUFBTSxDQUFDOztLQUM1QztJQUVELHlDQUF5QyxDQUFDLFFBQTBCO1FBQ2xFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pELE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sYUFBYSxDQUFDLGlCQUFpQixDQUFDO2FBQ3hDO1lBQ0QsbUNBQW1DO1lBQ25DLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQztTQUN0QjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrREFBa0QsQ0FDaEQsUUFBMEIsRUFDMUIsU0FBZ0IsRUFDaEIsU0FBaUIsRUFDakIsU0FBaUIsRUFDakIsUUFBaUI7UUFFakIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7WUFDOUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUM7WUFDaEQsR0FBRyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUM7WUFDekMsR0FBRyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUM7WUFDM0MsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQzVDLENBQUMsS0FBdUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQzdELENBQUM7WUFDRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pELE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sYUFBYSxDQUFDLGlCQUFpQixDQUFDO2FBQ3hDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDZCxJQUFJLFFBQVEsRUFBRTtvQkFDWixHQUFHLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUMxQyxDQUFDLEtBQXVCLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUNoRSxDQUFDO2lCQUNIO3FCQUFNO29CQUNMLEdBQUcsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQzFDLENBQUMsS0FBdUIsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxVQUFVLENBQ2hFLENBQUM7aUJBQ0g7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLFFBQVEsRUFBRTtvQkFDWixHQUFHLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUMxQyxDQUFDLEtBQXVCLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUNoRSxDQUFDO2lCQUNIO3FCQUFNO29CQUNMLEdBQUcsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQzFDLENBQUMsS0FBdUIsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxVQUFVLENBQ2hFLENBQUM7aUJBQ0g7YUFDRjtTQUNGO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELHdCQUF3QixDQUFDLGdCQUFtQztRQUMxRCxPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUM1QyxNQUFNLEtBQUssR0FDVCxJQUFJLENBQUMsWUFBWSxJQUFHLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxXQUFXLENBQUE7Z0JBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQztZQUNoRCxPQUFPO2dCQUNMLElBQUksRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ3RDLFFBQVEsRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLFFBQVE7Z0JBQzlDLElBQUksRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ3RDLEtBQUs7YUFDTixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsNkJBQTZCLENBQUMsV0FBOEI7UUFDMUQsT0FBTyxJQUFJLENBQUMsT0FBTzthQUNoQixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUM7YUFDekUsUUFBUSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxpQkFBaUI7UUFDZixNQUFNLFlBQVksR0FBc0IsSUFBSSxDQUFDO1FBRTdDLGtFQUFrRTtRQUNsRSw2Q0FBNkM7UUFDN0MsTUFBTTtRQUVOLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRU0sV0FBVyxDQUFDLGFBQWdDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ1MsWUFBWSxDQUFDLGFBQWdDOztRQUNyRCxJQUFJLE1BQUEsTUFBQSxNQUFBLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sMENBQUUsUUFBUSwwQ0FBRyxDQUFDLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUF1QixFQUFFLE9BQTZCLEVBQUUsRUFBRTtZQUM3RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQjtnQkFDMUIsQ0FBQyxDQUFDLENBQUMsWUFBa0MsRUFBRSxFQUFFO29CQUNyQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUF3QixFQUFFLEVBQUU7O3dCQUNuRCxJQUFJLENBQUMsSUFBSSxFQUFFOzRCQUNULE9BQU8sSUFBSSxDQUFDO3lCQUNiO3dCQUNELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN4RCx1Q0FDSyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixtQkFBTSxJQUFJLEdBQUk7NEJBQzlDLE1BQUEsbUJBQW1CLGFBQW5CLG1CQUFtQix1QkFBbkIsbUJBQW1CLENBQUcsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxJQUFJLENBQUMsUUFBUSxDQUFDLDBDQUNyRCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDOzRCQUMzQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsMENBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFDLElBQUk7eUJBQ3pFLENBQUMsS0FDRixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsTUFBSyxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLElBQUksQ0FBQyxRQUFRLENBQUEsRUFDOUQsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0NBQ3JDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUMzQixNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLElBQUksQ0FBQyxRQUFRLENBQ25DLDBDQUFFLFdBQVcsMENBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQ0FDekMsQ0FBQyxDQUFDLEtBQUssSUFDVDtvQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDLFlBQWtDLEVBQUUsRUFBRTtvQkFDckMsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBd0IsRUFBRSxFQUFFO3dCQUNuRCxJQUFJLENBQUMsSUFBSSxFQUFFOzRCQUNULE9BQU8sSUFBSSxDQUFDO3lCQUNiO3dCQUNELHVDQUNLLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLG1CQUMzQixJQUFJLEdBQ1QsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUN4RSxLQUNELFFBQVEsRUFBRSxLQUFLLEVBQ2YsVUFBVSxFQUFFLElBQUksSUFDaEI7b0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsQ0FDZixJQUF1QixFQUN2QixPQUE2QixFQUM3QixTQUFnQyxFQUNoQyxFQUFFO1lBQ0YsT0FBTyxDQUFDLFlBQWtDLEVBQXdCLEVBQUU7Z0JBQ2xFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDcEUsT0FBTyxZQUFZO3FCQUNoQixHQUFHLENBQUMsQ0FBQyxJQUF3QixFQUFzQixFQUFFO29CQUNwRCxJQUFJLENBQUMsSUFBSSxFQUFFO3dCQUNULE9BQU8sSUFBSSxDQUFDO3FCQUNiO29CQUNELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTTt3QkFDdEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyx3QkFBd0IsRUFDckQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUMvQyxjQUFjLENBQ2Y7d0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFFVCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU07d0JBQ3hFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsd0JBQXdCLEVBQ3JELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFDL0Msb0JBQW9CLENBQ3JCO3dCQUNILENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ1QsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTTt3QkFDckUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyx3QkFBd0IsRUFDckQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUMvQyxhQUFhLENBQ2Q7d0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFFVCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLGlDQUUvQixJQUFJLEtBQ1AsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBRXRGO3dCQUNFLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtxQkFDdEUsQ0FDRixDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFBO1lBQ04sQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU87YUFDeEIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDcEYsTUFBTSxDQUFDLENBQUMsS0FBMkIsRUFBRSxJQUF3QixFQUF3QixFQUFFO1lBQ3RGLE1BQU0sSUFBSSxtQ0FDTCxJQUFJLEtBQ1AsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ2pDLENBQUMsT0FBNkIsRUFBd0IsRUFBRTtvQkFDdEQsT0FBTyxnQ0FDRixPQUFPLEtBQ1Ysc0JBQXNCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQ3BDLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUNwRSxFQUNELGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNsQyxPQUFPLENBQUMsa0JBQWtCLElBQUksRUFBRSxFQUNoQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FDaEUsRUFDRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDbEMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFDaEMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQ2hFLEVBQ0Qsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQ3BDLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUNwRSxFQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDMUIsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQ3hCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FDeEQsR0FDc0IsQ0FBQztnQkFDNUIsQ0FBQyxDQUNGLEVBQ0QsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUE2QixFQUF3QixFQUFFO29CQUN0Rix1Q0FDSyxPQUFPLEtBQ1Ysa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2xDLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQ2hDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FDM0MsRUFDRCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDdEMsT0FBTyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFDcEMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxDQUMvQyxFQUNELGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNsQyxPQUFPLENBQUMsa0JBQWtCLElBQUksRUFBRSxFQUNoQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUNsRCxFQUNELHNCQUFzQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUN0QyxPQUFPLENBQUMsc0JBQXNCLElBQUksRUFBRSxFQUNwQyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUN0RCxFQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDMUIsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQ3hCLFdBQVcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQ25DLElBQ0Q7Z0JBQ0osQ0FBQyxDQUFDLEdBQ0gsQ0FBQztZQUNGLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFVCxJQUFJLGFBQWEsRUFBRTtZQUNqQixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFNBQVMsQ0FDUCxRQUE2QixFQUM3QixXQUFtQixFQUNuQixRQUErRDtRQUUvRCxLQUFLLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRTtZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM1Qix1REFBdUQ7Z0JBQ3ZELE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUVELG9HQUFvRztRQUNwRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUNoRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLFFBQVEsUUFBUSxFQUFFO2dCQUNoQixLQUFLLG9CQUFvQjtvQkFDdkIsT0FBTzt3QkFDTCxrQkFBa0IsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDO3dCQUNoRCxzQkFBc0IsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsc0JBQXNCO3FCQUNsRSxDQUFDO2dCQUNKLEtBQUssYUFBYTtvQkFDaEIsT0FBTzt3QkFDTCxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQzt3QkFDekMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGtCQUFrQjtxQkFDMUQsQ0FBQztnQkFDSixLQUFLLGNBQWM7b0JBQ2pCLE9BQU87d0JBQ0wsWUFBWSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUM7cUJBQzNDLENBQUM7Z0JBRUo7b0JBQ0UsTUFBTTthQUNUO1NBQ0Y7YUFBTTtZQUNMLHdEQUF3RDtZQUN4RCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FDYixZQUE2QixFQUM3QixRQUE4QixFQUM5QixnQkFBaUQsRUFDakQsV0FBNkIsRUFDN0IsT0FBOEIsRUFDOUIsZUFBaUQsRUFDakQsV0FBb0I7UUFFcEIsSUFBSSxhQUFhLENBQUM7UUFDbEIsSUFBSSxZQUFZLENBQUM7UUFDakIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFzQixFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFFbkQsSUFBSSxXQUFXLEtBQUssZUFBZSxDQUFDLFNBQVMsRUFBRTtZQUM3QyxzREFBc0Q7WUFDdEQsYUFBYSxHQUFHLENBQUMsQ0FBc0IsRUFBRSxFQUFFOztnQkFBQyxPQUFBO29CQUMxQzt3QkFDRSxJQUFJLEVBQUUsa0JBQWtCO3dCQUN4QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjO3FCQUM5QjtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsYUFBYTt3QkFDbkIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsK0JBQStCO3FCQUMvQztvQkFDRDt3QkFDRSxJQUFJLEVBQUUsa0JBQWtCO3dCQUN4QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlO3FCQUMvQjtvQkFDRDt3QkFDRSxJQUFJLEVBQUUseUJBQXlCO3dCQUMvQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxxQkFBcUI7cUJBQ3JDO29CQUNEO3dCQUNFLElBQUksRUFBRSwwQkFBMEI7d0JBQ2hDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHNCQUFzQjtxQkFDdEM7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLGFBQWE7d0JBQ25CLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVU7cUJBQzFCO29CQUNEO3dCQUNFLElBQUksRUFBRSxrQkFBa0I7d0JBQ3hCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWU7cUJBQy9CO29CQUNEO3dCQUNFLElBQUksRUFBRSxvQkFBb0I7d0JBQzFCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtxQkFDaEM7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLGtCQUFrQjt3QkFDeEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYztxQkFDOUI7b0JBQ0QsR0FBRyxDQUFDLENBQUEsTUFBQSxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQiwwQ0FBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN2QyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7d0JBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQyxXQUFXO3FCQUNyQixDQUFDLENBQUMsS0FBSSxFQUFFLENBQUM7b0JBQ1Y7d0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjt3QkFDekIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZTtxQkFDL0I7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLGdCQUFnQjt3QkFDdEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWTtxQkFDNUI7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjt3QkFDekIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZTtxQkFDL0I7aUJBQ0YsQ0FBQTthQUFBLENBQUM7U0FDSDthQUFNO1lBQ0wsYUFBYSxHQUFHLENBQUMsQ0FBc0IsRUFBRSxFQUFFLENBQUM7Z0JBQzFDO29CQUNFLElBQUksRUFBRSxtQkFBbUI7b0JBQ3pCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWU7aUJBQy9CO2dCQUNEO29CQUNFLElBQUksRUFBRSxvQ0FBb0M7b0JBQzFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLCtCQUErQjtpQkFDL0M7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZTtpQkFDL0I7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLGtCQUFrQjtvQkFDeEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYztpQkFDOUI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVU7aUJBQzFCO2dCQUNEO29CQUNFLElBQUksRUFBRSx5QkFBeUI7b0JBQy9CLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHFCQUFxQjtpQkFDckM7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCO2lCQUNoQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsa0JBQWtCO29CQUN4QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjO2lCQUM5QjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhO2lCQUM3QjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO2lCQUM1QjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxjQUFjO2lCQUMvQjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxjQUFjO2lCQUMvQjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsb0JBQW9CO29CQUMxQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7aUJBQ2hDO2dCQUNEO29CQUNFLElBQUksRUFBRSwwQkFBMEI7b0JBQ2hDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHNCQUFzQjtpQkFDdEM7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVc7aUJBQzNCO2dCQUNEO29CQUNFLElBQUksRUFBRSxlQUFlO29CQUNyQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO2lCQUM1QjtnQkFFRDtvQkFDRSxJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixLQUFLLEVBQUUsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGNBQWM7aUJBQy9CO2dCQUNEO29CQUNFLElBQUksRUFBRSxpQkFBaUI7b0JBQ3ZCLEtBQUssRUFBRSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsY0FBYztpQkFDL0I7YUFDRixDQUFDO1NBQ0g7UUFFRCxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0RixPQUFPO2dCQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixLQUFLLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQzthQUMzQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFdBQVcsRUFBRTtZQUNmLFlBQVksR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXBGLE9BQU87b0JBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07b0JBQ25CLEtBQUssRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDO2lCQUMzQixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU87WUFDTCxhQUFhO1lBQ2IsWUFBWTtTQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRTtZQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRCxNQUFNLG9CQUFvQixHQUF5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFaEYsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxFQUFFLEVBQUU7Z0JBQ3JDLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSTtnQkFDN0IsVUFBVSxFQUFFLG9CQUFvQjthQUNqQyxDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQztJQUNLLGNBQWMsQ0FBQyxHQUFROztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUM7S0FBQTtJQUVPLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxLQUFLOztRQUM3QyxNQUFNLFdBQVcsR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FNdkQsY0FBYyxDQUFDLDJCQUEyQixDQUFDLDBDQUFFLGVBQWUsS0FBSTtZQUNqRSxHQUFHLEVBQUUsS0FBSztZQUNWLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQXVCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDeEQ7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDbEU7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtZQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsSUFBSSxxQkFBcUIsR0FDdkIsQ0FBQSxNQUFBLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBRW5DLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQywwQ0FBRSxxQkFBcUIsS0FBSSxLQUFLLENBQUM7WUFDakYsSUFBSSxxQkFBcUIsS0FBSyxLQUFLLEVBQUU7Z0JBQ25DLHFCQUFxQixHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7YUFDdkM7WUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDNUIsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLHFCQUFxQixFQUFFO29CQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcscUJBQXFCLENBQUM7b0JBQy9DLE1BQU07aUJBQ1A7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQUEsT0FBTyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxLQUFLLENBQUM7aUJBQzVDO2FBQ0Y7U0FDRjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFSyw0QkFBNEIsQ0FBQyxXQUEwQzs7WUFDM0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDbkYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFFL0UsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBUyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNwRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQVMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sSUFBSSxDQUFDLGFBQWE7aUJBQ3JCLG1CQUFtQixDQUFDLGNBQWMsQ0FBQztpQkFDbkMsU0FBUyxFQUFFO2lCQUNYLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUNwQixzQkFBc0I7Z0JBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakUsQ0FBQyxDQUFDLENBQUM7WUFFTCxNQUFNLElBQUksQ0FBQyxhQUFhO2lCQUNyQixtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDckMsU0FBUyxFQUFFO2lCQUNYLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUNwQixzQkFBc0I7Z0JBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNyRSxDQUFDLENBQUMsQ0FBQztZQUVMLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLGFBQWEsQ0FBQzthQUM3RDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcscUJBQXFCLENBQUMsYUFBYSxDQUFDO2FBQzdEO1lBQ0QsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDcEMsQ0FBQztLQUFBO0lBRUsscUNBQXFDLENBQ3pDLFdBQTBDLEVBQzFDLGdCQUErQixFQUMvQixlQUE4QixFQUM5QixhQUFrQixFQUNsQixhQUFrQjs7WUFFbEIsNERBQTREO1lBQzVELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBRS9FLHNGQUFzRjtZQUN0RixnR0FBZ0c7WUFFaEcsTUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO1lBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUUzRCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEQsTUFBTSxZQUFZLEdBQ2hCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUxQixJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQztZQUVuQyxNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBRXpELE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwRCxNQUFNLGNBQWMsR0FDbEIsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRGLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUM7WUFFbkMsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFO2dCQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcscUJBQXFCLENBQUMsYUFBYSxDQUFDO2FBQzdEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQyxhQUFhLENBQUM7YUFDN0Q7WUFDRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNwQyxDQUFDO0tBQUE7SUFFTywwQkFBMEI7O1FBQ2hDLE1BQU0sV0FBVyxHQUFHLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLFdBQVcsMENBQUUsZUFBZSwwQ0FBRSxXQUFXLENBQUM7UUFDbkYsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsS0FBSyxJQUFJLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLFlBQW9CLEVBQUUsS0FBVTtRQUM1QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBZ0I7UUFDOUIsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFXLEVBQUUsV0FBb0I7O1FBQ2xELElBQUksTUFBTSxDQUFDLGNBQWMsSUFBSSxXQUFXLEVBQUU7WUFDeEMsV0FBVztnQkFDVCxDQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsSUFBSSxNQUFLLE1BQU0sQ0FBQyxjQUFjO29CQUNqRCxNQUFNLENBQUMsY0FBYyxNQUFLLE1BQUEsTUFBQSxJQUFJLENBQUMsWUFBWSwwQ0FBRSxXQUFXLDBDQUFFLFdBQVcsQ0FBQSxDQUFDO1NBQ3pFO1FBQ0QsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksV0FBVyxFQUFFO1lBQzFDLFdBQVc7Z0JBQ1QsQ0FBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLElBQUksTUFBSyxNQUFNLENBQUMsZ0JBQWdCO29CQUNyRCxNQUFNLENBQUMsZ0JBQWdCLE1BQUssTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLFdBQVcsMENBQUUsV0FBVyxDQUFBLENBQUM7U0FDN0U7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsZUFBK0I7UUFDaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDL0IsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQ3JELENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRO2dCQUM5QixDQUFDLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ2pDLFdBQVcsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ2hDLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLEtBQUssRUFBRSxXQUFXO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CLENBQUMsbUJBQXNDLEVBQUUsUUFBZ0I7UUFDMUUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQSxtQkFBbUIsYUFBbkIsbUJBQW1CLHVCQUFuQixtQkFBbUIsQ0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFBLENBQUM7UUFDOUYsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsV0FBbUI7UUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUM7UUFDbEUsSUFBSSxnQkFBZ0I7WUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNuRixTQUFTLENBQUMsQ0FBQyxPQUFjLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDO1lBQ25GLElBQUksT0FBTyxFQUFFO2dCQUNYLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQzthQUN0RDtRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCLENBQUMsV0FBbUIsRUFBRSxXQUFtQjtRQUN6RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEIsVUFBVSxDQUFDLDZCQUE2QixFQUN4QyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUN0QyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUN2RCxDQUFDO0lBQ0osQ0FBQztJQUVELHlHQUF5RztJQUN6RywwREFBMEQ7SUFDcEQsZ0JBQWdCLENBQUMsS0FBVSxFQUFFLGNBQXVCLEtBQUs7OztZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDdkMsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLHFCQUFxQixDQUFDLGlCQUFpQixFQUFFO2dCQUNqRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzthQUN4QjtZQUVELElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFO2dCQUMxQixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDO2dCQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQyxNQUFNLFVBQVUsR0FBRztvQkFDakIsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtvQkFDOUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtpQkFDM0MsQ0FBQztnQkFDRixJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDOUM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQTthQUNsQztZQUVELElBQUksQ0FBQyxjQUFjO2dCQUNqQixDQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGtCQUFrQiwwQ0FBRSxNQUFNO29CQUNqQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDOUIsQ0FBQyxDQUFDLElBQUk7b0JBQ04sQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNaLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7YUFDM0M7WUFFRCxNQUFNLGdCQUFnQixHQUFHLENBQU8sVUFBa0IsRUFBdUQsRUFBRTtnQkFDekcsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUN4RixPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3RELENBQUMsQ0FBQSxDQUFDO1lBRUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBRTtZQUUvRCxJQUFJO2dCQUNGLElBQUksQ0FBQSxNQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFdBQVcsMENBQUUsZUFBZSwwQ0FBRSxXQUFXLE1BQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO29CQUMzRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztpQkFDL0M7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7b0JBRTlDLGdEQUFnRDtvQkFDaEQsTUFBTSxnQkFBZ0IsR0FBcUIsS0FBSyxDQUFDLFVBQVUsQ0FBQztvQkFDNUQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUNmLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztvQkFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDaEQsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUU7NEJBQ25ELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDbkMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDOzRCQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQzs0QkFDaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzRCQUMzQyxRQUFRLEVBQUUsQ0FBQzt5QkFDWjs2QkFBTTs0QkFDTCxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7NEJBQ3BDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzs0QkFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7NEJBQ2hFLE1BQU0sRUFBRSxDQUFDO3lCQUNWO3FCQUNGO29CQUNELEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO29CQUN0QixLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztvQkFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7aUJBQy9DO2FBQ0Y7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxLQUFLLE1BQU0sQ0FBQyxDQUFDO2FBQ3BFO1lBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMzRyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDM0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzVGLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFFN0MsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUNwQzs7S0FDRjtJQUVELDBCQUEwQjtRQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQztRQUV4RSwyRUFBMkU7UUFDM0UsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7UUFDbEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsY0FBYywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7UUFDdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDOUIsTUFBTSxxQkFBcUIsR0FBdUI7Z0JBQ2hELElBQUksRUFBRSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hFLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztnQkFDOUMsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7Z0JBQ3hELG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLEVBQUU7Z0JBQ3hDLFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxXQUFXLEVBQUUsRUFBRTt3QkFDZixhQUFhLEVBQUUsRUFBRTt3QkFDakIscUJBQXFCLEVBQUUsS0FBSzt3QkFDNUIsY0FBYyxFQUFFLEVBQUU7d0JBQ2xCLGFBQWEsRUFBRSxFQUFFO3FCQUNsQjtpQkFDRjthQUNGLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztTQUN0RTtRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFXO1FBQ2hDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUVaLElBQUksR0FBRyxFQUFFO1lBQ1AsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6QyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEdBQVc7UUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVyQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxFQUFFO1lBQ3BCLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxHQUFHLElBQUksRUFBRSxFQUFFO1lBQ2IsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsd0JBQXdCLENBQUMsV0FBbUI7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQ3hELFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLG1CQUFtQixLQUFLLFdBQVcsQ0FDM0QsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFpQjtRQUNoQyxNQUFNLGlCQUFpQixHQUFpQjtZQUN0Qyx3QkFBd0IsRUFBRTtnQkFDeEIsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsU0FBUyxFQUFFLElBQUksQ0FBQyx3QkFBd0I7Z0JBQ3hDLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtZQUNELGlDQUFpQyxFQUFFO2dCQUNqQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGlDQUFpQztnQkFDNUMsU0FBUyxFQUFFLElBQUksQ0FBQyxxQ0FBcUM7Z0JBQ3JELElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtZQUNELGFBQWEsRUFBRTtnQkFDYixJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQ3hCLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtTQUNGLENBQUM7UUFFRixNQUFNLGdCQUFnQixtQkFDcEIsd0JBQXdCLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsd0JBQXdCO2dCQUNuQyxJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU07YUFDMUIsRUFDRCxjQUFjLEVBQUU7Z0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUN6QixJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU07YUFDMUIsRUFDRCxhQUFhLEVBQUU7Z0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUN4QixJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDM0IsSUFDRSxpQkFBaUIsQ0FDckIsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFpQjtZQUMvQixpQkFBaUIsRUFBRTtnQkFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7Z0JBQzVCLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtZQUNELGdCQUFnQixFQUFFO2dCQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDM0IsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPO2FBQzNCO1lBQ0QsZ0JBQWdCLEVBQUU7Z0JBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUMzQixJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDM0I7WUFDRCxjQUFjLEVBQUU7Z0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUN6QixJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU07YUFDMUI7U0FDRixDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQWlCO1lBQzlCLGVBQWUsRUFBRTtnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQzFCLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtZQUNELGtCQUFrQixFQUFFO2dCQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDN0IsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPO2FBQzNCO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDeEIsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNO2FBQzFCO1NBQ0YsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFpQjtZQUNqQyxRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUNuQixJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDM0I7U0FDRixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQWlCO1lBQzlCLGtDQUFrQyxFQUFFO2dCQUNsQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGtDQUFrQztnQkFDN0MsU0FBUyxFQUFFLElBQUksQ0FBQyxtQ0FBbUM7Z0JBQ25ELElBQUksRUFBRSxZQUFZLENBQUMsS0FBSzthQUN6QjtZQUNELGtCQUFrQixFQUFFO2dCQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDN0IsU0FBUyxFQUFFLElBQUksQ0FBQyxzQkFBc0I7Z0JBQ3RDLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtTQUNGLENBQUM7UUFDRixNQUFNLFFBQVEsNkRBQ1osc0JBQXNCLEVBQUU7Z0JBQ3RCLElBQUksRUFBRSxJQUFJLENBQUMsc0JBQXNCO2dCQUNqQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEtBQUs7YUFDekIsRUFDRCxXQUFXLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUN0QixJQUFJLEVBQUUsWUFBWSxDQUFDLEtBQUs7YUFDekIsSUFDRSxTQUFTLEtBQ1osZUFBZSxFQUFFO2dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZTtnQkFDMUIsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNO2FBQzFCLEVBQ0QsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdEIsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPO2FBQzNCLEVBQ0Qsd0JBQXdCLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsd0JBQXdCO2dCQUNuQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEtBQUs7YUFDekIsS0FDRSxZQUFZLEtBQ2YsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDM0IsR0FDRixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQWlCO1lBQ2pDLGtCQUFrQixFQUFFO2dCQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDN0IsU0FBUyxFQUFFLElBQUksQ0FBQywwQkFBMEI7Z0JBQzFDLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtTQUNGLENBQUM7UUFDRixNQUFNLFlBQVksR0FBaUI7WUFDakMsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdEIsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7Z0JBQ25DLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQ3JCLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtTQUNGLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBaUI7WUFDL0IsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdEIsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPO2FBQzNCO1NBQ0YsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLHVHQUN4QixrQkFBa0IsRUFBRTtnQkFDbEIsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7Z0JBQ2xDLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTTthQUMxQixFQUNELFdBQVcsRUFBRTtnQkFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQ3RCLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZTtnQkFDL0IsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPO2FBQzNCLElBQ0UsaUJBQWlCLEtBQ3BCLGtCQUFrQixFQUFFO2dCQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDN0IsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPO2FBQzNCLEtBQ0UsWUFBWSxHQUNaLFlBQVksR0FDWixVQUFVLEtBQ2IsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdEIsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPO2FBQzNCLEtBQ0UsWUFBWSxDQUNoQixDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBaUI7WUFDckMsbUJBQW1CLEVBQUU7Z0JBQ25CLElBQUksRUFBRSxJQUFJO2dCQUNWLFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUNuQyxJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDM0I7WUFDRCx1QkFBdUIsRUFBRTtnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyx1QkFBdUI7Z0JBQ2xDLFNBQVMsRUFBRSxJQUFJLENBQUMsMkJBQTJCO2dCQUMzQyxJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDM0I7WUFDRCx1QkFBdUIsRUFBRTtnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyx1QkFBdUI7Z0JBQ2xDLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTTthQUMxQjtZQUNELGlCQUFpQixFQUFFO2dCQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtnQkFDNUIsU0FBUyxFQUFFLElBQUksQ0FBQyxxQkFBcUI7Z0JBQ3JDLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtTQUNGLENBQUM7UUFDRixNQUFNLFNBQVMsbUNBQ1YsU0FBUyxLQUNaLHlCQUF5QixFQUFFO2dCQUN6QixJQUFJLEVBQUUsSUFBSTtnQkFDVixTQUFTLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtnQkFDekMsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNO2FBQzFCLEdBQ0YsQ0FBQztRQUNGLE1BQU0sZUFBZSxpQ0FDbkIsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDbEIsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPO2FBQzNCLElBQ0UsWUFBWSxLQUNmLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQ3JCLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQixHQUNGLENBQUM7UUFFRixNQUFNLFdBQVcsbUNBQ1osWUFBWSxLQUNmLGdCQUFnQixFQUFFO2dCQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxvQkFBb0I7Z0JBQ3BDLFVBQVUsRUFBRSxJQUFJLENBQUMsNEJBQTRCO2dCQUM3QyxJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDM0IsR0FDRixDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFFLE1BQU0sWUFBWSxHQUFHLEdBQUcsZ0JBQWdCLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLENBQUM7UUFDcEYsTUFBTSxXQUFXLEdBQWlCO1lBQ2hDLGVBQWUsRUFBRTtnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQzFCLFNBQVMsRUFBRSxZQUFZO2dCQUN2QixJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU07YUFDMUI7WUFDRCxtQkFBbUIsRUFBRTtnQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7Z0JBQzlCLElBQUksRUFBRSxZQUFZLENBQUMsS0FBSzthQUN6QjtZQUNELGFBQWEsRUFBRTtnQkFDYixJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQ3hCLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTTthQUMxQjtZQUNELFdBQVcsRUFBRTtnQkFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQ3RCLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtTQUNGLENBQUM7UUFDRixNQUFNLFlBQVksR0FBaUI7WUFDakMsR0FBRyxFQUFFO2dCQUNILElBQUksRUFBRSxJQUFJLENBQUMsR0FBRztnQkFDZCxJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDM0I7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUNuQixJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDM0I7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQzlCLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtZQUNELEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2hCLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTzthQUMzQjtTQUNGLENBQUM7UUFFRixNQUFNLFFBQVEsbUNBQ1QsVUFBVSxLQUNiLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN4QixJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDM0IsR0FDRixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQWlCO1lBQzlCLGtCQUFrQixFQUFFO2dCQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDN0IsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNO2FBQzFCO1lBQ0QsZ0JBQWdCLEVBQUU7Z0JBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUMzQixJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU07YUFDMUI7WUFDRCxvQkFBb0IsRUFBRTtnQkFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxvQkFBb0I7Z0JBQy9CLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTTthQUMxQjtZQUNELHFCQUFxQixFQUFFO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtnQkFDaEMsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPO2FBQzNCO1lBQ0QsZ0JBQWdCLEVBQUU7Z0JBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUMzQixJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDM0I7U0FDRixDQUFDO1FBRUYsT0FBTztZQUNMLGdCQUFnQixFQUFFLGdCQUFnQjtZQUNsQyxVQUFVLEVBQUUsVUFBVTtZQUN0QixTQUFTLEVBQUUsU0FBUztZQUNwQixRQUFRLEVBQUUsUUFBUTtZQUNsQixvQkFBb0IsRUFBRSxvQkFBb0I7WUFDMUMsZ0JBQWdCLEVBQUUsZ0JBQWdCO1lBQ2xDLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLGVBQWUsRUFBRSxlQUFlO1lBQ2hDLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFlBQVksRUFBRSxZQUFZO1lBQzFCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLE1BQWM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVLLHVCQUF1QixDQUMzQixTQUF3QixFQUN4QixPQUE2QixFQUM3QixRQUE0QixFQUM1QixRQUFnQixFQUNoQixPQUF5QixFQUN6QixZQUFxQixLQUFLLEVBQzFCLGdCQUF5QixJQUFJLEVBQzdCLE9BQWdCLEtBQUs7OztZQUVyQixNQUFNLFFBQVEsR0FBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsSUFBSSwwQ0FBRSxJQUFJLENBQUM7WUFDakQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQ2pELE1BQUEsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxPQUFPLDBDQUFFLFlBQVksRUFDMUMsUUFBUSxDQUNULENBQUM7WUFFRixJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNiLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDdEQ7WUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPO2FBQ1I7WUFDRCxJQUNFLElBQUksQ0FBQyxjQUFjO2dCQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDLFdBQVc7Z0JBQy9ELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsUUFBUSxFQUN2RDtnQkFDQSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDM0IsSUFBSSxhQUFhO29CQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdkMsT0FBTzthQUNSO1lBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMzQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FDaEUsY0FBYyxDQUFDLCtCQUErQixDQUMvQyxDQUFDO1lBQ0YsSUFDRSxjQUFjO2dCQUNkLENBQUMsU0FBUztnQkFDVixJQUFJLENBQUMsb0JBQW9CO2dCQUN6QixTQUFTLEtBQUssYUFBYSxDQUFDLE9BQU8sRUFDbkM7Z0JBQ0EsTUFBTSxHQUFHLEdBQXlCLGNBQWMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pELE1BQU0sR0FBRyxHQUF5QixPQUFPLENBQUM7Z0JBRTFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUMxQixPQUFPLEVBQ1AsSUFBSSxDQUNMLENBQUM7Z0JBQ0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FDdkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFDMUIsT0FBTyxFQUNQLElBQUksQ0FDTCxDQUFDO2dCQUNGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUM1QyxlQUFlLEdBQUcsaUJBQWlCLEVBQ25DLFlBQVksQ0FDYixDQUFDO2dCQUNGLElBQUksS0FBSyxFQUFFO29CQUNULElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDMUU7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLFdBQVcsR0FBbUIsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFFcEQsUUFBUSxPQUFPLEVBQUU7b0JBQ2YsS0FBSyxvQkFBb0I7d0JBQ3ZCLElBQUksU0FBUyxLQUFLLGFBQWEsQ0FBQyxRQUFRLEVBQUU7NEJBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUc7Z0NBQ3BCLE9BQU87Z0NBQ1AsSUFBSSxFQUFFLFFBQVE7NkJBQ2YsQ0FBQzt5QkFDSDt3QkFDRCxJQUNFLENBQUEsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSwwQ0FBRSxNQUFNLElBQUcsQ0FBQzs0QkFDakMsQ0FBQyxrQkFBa0I7NEJBQ25CLENBQUEsTUFBQSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssMENBQUUsUUFBUSxNQUFLLFlBQVksRUFDbEQ7NEJBQ0EsTUFBTSxZQUFZLEdBQXNCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ2xFLFVBQVUsQ0FBQywwQkFBMEIsRUFDckMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQzFFLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLENBQ3ZDLENBQUM7NEJBQ0YsSUFBSSxDQUFDLFlBQVksRUFBRTtnQ0FDakIsT0FBTzs2QkFDUjs0QkFDRCxPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7eUJBQ3pEOzZCQUFNLElBQUksQ0FBQSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLDBDQUFFLE1BQU0sS0FBSSxDQUFBLE1BQUEsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLDBDQUFFLFFBQVEsTUFBSyxZQUFZLEVBQUU7NEJBQzlGLE9BQU8sQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO3lCQUMzQjt3QkFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyw0QkFBNEIsQ0FDcEQsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsUUFBUSxFQUNSLEtBQUssRUFDTCxJQUFJLENBQ0wsQ0FBQzt3QkFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQzt3QkFDM0IsT0FBTyxNQUFNLENBQUM7aUJBQ2pCO2FBQ0Y7O0tBQ0Y7SUFFSyw0QkFBNEIsQ0FDaEMsU0FBaUIsRUFDakIsVUFBMEIsRUFDMUIsaUJBQXVDLEVBQ3ZDLFFBQTRCLEVBQzVCLGdCQUF5QixLQUFLLEVBQzlCLE9BQWdCLEtBQUs7OztZQUVyQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUVsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRWxELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUN2QixTQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQzthQUNoQztZQUVELElBQUksZUFBK0IsQ0FBQztZQUNwQyw4RUFBOEU7WUFDOUUsSUFBSSxNQUFBLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLFlBQVksMENBQUUsTUFBTSxFQUFFO2dCQUMzQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2pGO1lBRUQsc0NBQXNDO1lBQ3RDLG1DQUFtQztZQUNuQyxJQUFJO1lBQ0osTUFBTSxTQUFTLEdBQTRCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZGLE1BQU0sTUFBTSxHQUFHLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBRXhDLE1BQU0sWUFBWSxHQUFvQyxDQUFBLE1BQUEsTUFBQSxRQUFRLENBQUMsV0FBVywwQ0FBRSxLQUFLLDBDQUFFLE1BQU07Z0JBQ3ZGLENBQUMsQ0FBQyxNQUFBLE1BQUEsUUFBUSxDQUFDLFdBQVcsMENBQUUsS0FBSywwQ0FBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUU5QixNQUFNLFdBQVcsR0FBRyxNQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQywwQ0FBRSxJQUFJLENBQUM7WUFDbEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM3QyxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxXQUFXLENBQ1osQ0FBQztZQUNGLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFeEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQy9DLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFdEQsTUFBTSxVQUFVLEdBQW1CO29CQUNqQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsV0FBVztvQkFDNUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO29CQUNqQixPQUFPLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRTtvQkFDN0IsTUFBTSxFQUFFO3dCQUNOLFNBQVMsRUFBRSxNQUFBLFFBQVEsQ0FBQyxXQUFXLDBDQUFFLFNBQVM7d0JBQzFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTt3QkFDeEIsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ25ELENBQUMsSUFBcUIsRUFBbUIsRUFBRTs0QkFDekMsT0FBTztnQ0FDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0NBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dDQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTs2QkFDaEIsQ0FBQzt3QkFDSixDQUFDLENBQ0Y7d0JBQ0QsWUFBWSxFQUFFLENBQUMsaUJBQWlCLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDdEQsQ0FBQyxJQUFpQixFQUFnQixFQUFFOzRCQUNsQyxPQUFPO2dDQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQ0FDWCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7NkJBQzlCLENBQUM7d0JBQ0osQ0FBQyxDQUNGO3dCQUNELGFBQWEsRUFBRTs0QkFDYixlQUFlLEVBQUUsaUJBQWlCLENBQUMsY0FBYzs0QkFDakQsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRTs0QkFDeEMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsY0FBYzs0QkFDbkQsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs0QkFDNUMsZUFBZSxFQUFFO2dDQUNmO29DQUNFLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtvQ0FDbkMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLElBQUk7b0NBQ2hDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztvQ0FDckIsSUFBSTtvQ0FDSixxQkFBcUIsRUFBRSxRQUFRLENBQUMscUJBQXFCO29DQUNyRCxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO2lDQUM1Qzs2QkFDRjt5QkFDRjt3QkFDRCxxQkFBcUIsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLHFCQUFxQjt3QkFDakUsUUFBUSxFQUFFOzRCQUNSLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQjs0QkFDcEMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUM7NEJBQ3RELGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsaUJBQWlCOzRCQUN6RCxXQUFXLEVBQUUsSUFBSSxDQUFDLHlDQUF5QyxDQUN6RCxpQkFBaUIsQ0FBQyxXQUFXLENBQzlCOzRCQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQSxNQUFBLFFBQVEsQ0FBQyxXQUFXLDBDQUFFLE9BQU8sQ0FBQTs0QkFDeEMsS0FBSyxFQUFFLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFdBQVcsMENBQUUsS0FBSzs0QkFDbkMsV0FBVyxFQUFFLE1BQUEsUUFBUSxDQUFDLFdBQVcsMENBQUUsV0FBVzt5QkFDL0M7d0JBQ0QsWUFBWSxFQUFFLGtCQUFrQjt3QkFDaEMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO3dCQUNuQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7d0JBQzdCLGNBQWMsRUFDWixVQUFVLENBQUMsZ0JBQWdCLEtBQUsscUJBQXFCLENBQUMsaUJBQWlCOzRCQUNyRSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU07NEJBQ25CLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTTtxQkFDeEI7b0JBQ0QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO29CQUN4QixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztvQkFDN0QsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNyQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQXdCO29CQUMzQyxXQUFXLEVBQUUsU0FBUztvQkFDdEIsVUFBVSxFQUFFLGlCQUFpQixDQUFDLFVBQVU7b0JBQ3hDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxlQUFlO29CQUNsRCxZQUFZLEVBQUUsaUJBQWlCLENBQUMsY0FBYztvQkFDOUMsV0FBVyxFQUNULFlBQVksQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLFlBQVksS0FBSyxRQUFRLENBQUMsUUFBUTt3QkFDcEUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNO3dCQUNyQixDQUFDLENBQUMsSUFBSTtvQkFDVixtQkFBbUIsRUFDakIsWUFBWSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQyxRQUFRO3dCQUNwRSxDQUFDLENBQWUsWUFBWSxDQUFDLFlBQVk7d0JBQ3pDLENBQUMsQ0FBQyxJQUFJO29CQUNWLHdCQUF3QixFQUFFLFFBQVEsQ0FBQyxXQUFXO29CQUM5QyxVQUFVLEVBQUUsUUFBUSxDQUFDLGtCQUFrQjtpQkFDeEMsQ0FBQztnQkFFRixzREFBc0Q7Z0JBQ3RELElBQUksZUFBZSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQzFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUM7b0JBQzFELFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FDMUUsQ0FBQyxJQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FDbkQsQ0FBQztpQkFDSDtnQkFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFO29CQUN4QyxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQzFFLENBQUMsSUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FDN0QsQ0FBQztpQkFDSDtnQkFFRCxPQUFPLFVBQVUsQ0FBQzthQUNuQjs7S0FDRjtJQUVLLDJCQUEyQixDQUFDLE9BQTZCLEVBQUUsTUFBMEIsRUFBRSxLQUEyQixFQUFFLFdBQTRCLEVBQUUsUUFBZ0I7OztZQUN0SyxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE1BQU0sSUFBRyxDQUFDLEtBQUksTUFBQSxNQUFNLENBQUMsV0FBVywwQ0FBRSxPQUFPLENBQUEsRUFBRTtnQkFDcEQsTUFBTSxXQUFXLEdBQUcsTUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsMENBQUUsSUFBSSxDQUFDO2dCQUNqRSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMxQixVQUFVLENBQUMscUJBQXFCLEVBQ2hDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNsQjtvQkFDRSxxQkFBcUIsRUFBRSxLQUFLO29CQUM1QixhQUFhLEVBQUUsV0FBVyxDQUFDLEtBQUs7b0JBQ2hDLFNBQVMsRUFBRSxNQUFBLFdBQVcsQ0FBQyxXQUFXLDBDQUFHLENBQUMsQ0FBQztvQkFDdkMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNwQixXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ3ZCLFdBQVcsRUFBRSxXQUFXO2lCQUN6QixDQUNGLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMxQixVQUFVLENBQUMsc0JBQXNCLEVBQ2pDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNsQjtvQkFDRSxhQUFhLEVBQUUsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUcsQ0FBQyxDQUFDLDBDQUFFLEtBQUs7aUJBQ2pDLENBQ0YsQ0FBQzthQUNIOztLQUNGOztBQWo2SWUsMkNBQXNCLEdBQUcsYUFBYSxDQUFDO0FBQ3ZDLDRDQUF1QixHQUFHLGNBQWMsQ0FBQztBQUN6QyxrQ0FBYSxHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IG9mLCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xuaW1wb3J0IHtcbiAgQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXMsXG4gIENoZWFwZXN0UmFpbFByaWNlcyxcbiAgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucyxcbiAgTG9jYXRpb25UeXBlcyxcbiAgbWF4VHJhdmVsbGVyV2VsbGJlaW5nLFxuICBOZ2JEYXRlU3RydWN0LFxuICBPQlRSYWlsRmFyZSxcbiAgT0JUUmFpbEZhcmVUeXBlcyxcbiAgT0JUUmFpbEludGVybmFsRmFyZSxcbiAgT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbixcbiAgT0JUUmFpbEpvdXJuZXlGYXJlLFxuICBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgT0JUUmFpbFF1b3RlUmVzdWx0LFxuICBPQlRSYWlsUXVvdGVSZXN1bHRBcnJheSxcbiAgT0JUU3BsaXRSYWlsSm91cm5leUZhcmUsXG4gIFJhaWxXZWxsYmVpbmdPYmplY3RJbnRlcmZhY2UsXG4gIFJlY2VudFNlYXJjaCxcbiAgUmVjdXJzaXZlUGFydGlhbCxcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcbiAgU2NoZW1hRm9ybWF0LFxuICBTZXJ2aWNlUHJvdmlkZXIsXG4gIFdlbGxiZWluZ0VudW1cbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtcbiAgQmFza2V0SXRlbSxcbiAgUmFpbENsYXNzLFxuICBSYWlsSm91cm5leU9wdGlvbixcbiAgUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIsXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcbiAgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzLFxuICBTZXJ2aWNlVHlwZSxcbiAgUmFpbFRpY2tldEV4dHJhLFxuICBSYWlsU2VhcmNoSm91cm5leVR5cGUsXG4gIFJhaWxKb3VybmV5RmFyZSxcbiAgUmFpbFN0YXRpb24sXG4gIEN1cnJlbmN5Q29kZSxcbiAgUmFpbEFjY291bnQsXG4gIFJhaWxUaWNrZXRRdWV1ZSxcbiAgUmFpbEpvdXJuZXlMZWcsXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxuICBSYWlsQ2FsbGluZ1BvaW50LFxuICBSYWlsVGlja2V0VGVybXNMaXN0LFxuICBUcmF2ZWxsZXJJbnB1dCxcbiAgUGFzc2VuZ2VySW5wdXRUeXBlLFxuICBSYWlsQ2FyZFF1YWxpZmllcnMsXG4gIFJhaWxTZWFyY2hSZXN1bHQsXG4gIFRyYWluU2VhdE1hcFNlYXQsXG4gIFJhaWxJZGVudGlmaWVyc1xufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7IEJhc2VSYWlsUXVvdGVGZXRjaGVyLCBSYWlsUXVvdGVGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL3JhaWwtcXVvdGUtZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyLFxuICBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLXN0YXRpb24uZmV0Y2hlcic7XG5pbXBvcnQge1xuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7IEZ1bGxVc2VyRGV0YWlscywgVXNlclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgUmFpbEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXG4gIFJhaWxUZW1wUGFyYW1zXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXJhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgVHJhdmVsbGVyLCBhZ2VzIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcbmltcG9ydCB7IElSYWlsQWlycG9ydEV4cHJlc3NTdGF0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1haXJwb3J0LWV4cHJlc3Mtc3RhdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEFjY291bnRzTGlzdCxcbiAgSVRyYXZlbENhcmREZXRhaWwsXG4gIFJhaWxCYXNrZXRJdGVtLFxuICBUaWNrZXRFeHRyYXMsXG4gIFRpY2tldFF1ZXVlTGlzdCxcbiAgVGlja2V0VHlwZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtYmFza2V0LWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFJhaWxSZWNlbnRTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLXJlY2VudC1zZWFyY2gtYXJncy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmFpbFF1b3RlUmVzdWx0LCBSYWlsUXVvdGVSZXN1bHRBcnJheSB9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7IFJhaWxSdWxlRW5pdHksIFJhaWxSdWxlRW5pdHlLZXlzLCBSYWlsU3VtbWFyeSB9IGZyb20gJy4uL2ludGVyZmFjZXMvc3VtbWFyeS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVXNlckZhdm9ydXJpdGUgfSBmcm9tICcuL3VzZXItZmF2b3VyaXRlLmVudW0nO1xuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGFsLW9wZW5lci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuL21vZGFsLXR5cGVzLmVudW0nO1xuaW1wb3J0IHtcbiAgSVJhaWxTZWxlY3RlZE11bHRpRmFyZXMsXG4gIElSYWlsU2VsZWN0ZWRUaWNrZXRcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLXNlbGVjdGVkLXRpY2tldC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmFpbERpcmVjdGlvbiB9IGZyb20gJy4vcmFpbC1kaXJlY3Rpb24uZW51bSc7XG5pbXBvcnQgeyBSYWlsSW5kZXhUb1RpY2tldCB9IGZyb20gJy4vcmFpbC1pbmRleC10by10aWNrZXQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEFJUlRvUmFpbFVLIH0gZnJvbSAnLi4vZGF0YS9haXItdG8tcmFpbC11ayc7XG5pbXBvcnQgeyBUcmF2ZWxDYXJkTG9jYXRpb25zIH0gZnJvbSAnLi90cmF2ZWwtY2FyZC1sb2NhdGlvbnMuZW51bSc7XG5pbXBvcnQge1xuICBJUmFpbFN0YXRpb25JbmZvcm1hdGlvbixcbiAgSVN0YXRpb25JbmZvXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXJhaWwtc3RhdGlvbi1pbmZvcm1hdGlvbi5pbnRlcmZhY2UnO1xuXG5leHBvcnQgZW51bSBSYWlsU2VhcmNoQ3JpdGVyaWEge1xuICBEZXBhcnQgPSAnRGVwYXJ0IEFmdGVyJyxcbiAgQXJyaXZlID0gJ0Fycml2ZSBCZWZvcmUnXG59XG5cbmV4cG9ydCBlbnVtIFJhaWxKb3VybmV5RmFyZVR5cGUgeyAvLyBtYXkgbmVlZCB0byBiZSBleHBhbmRlZCBmb3IgZHVhbC9zcGxpdFxuICBSZXR1cm4gPSAnUmV0dXJuJyxcbiAgU2luZ2xlID0gJ1NpbmdsZSdcbn1cblxuZXhwb3J0IGVudW0gUmFpbEZhcmVUeXBlcyB7XG4gIGR1YWxTaW5nbGVKb3VybmV5RmFyZXMgPSAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcycsXG4gIHJldHVybkpvdXJuZXlGYXJlcyA9ICdyZXR1cm5Kb3VybmV5RmFyZXMnLFxuICBzaW5nbGVKb3VybmV5RmFyZXMgPSAnc2luZ2xlSm91cm5leUZhcmVzJyxcbiAgb3BlblJldHVybkpvdXJuZXlGYXJlcyA9ICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJyxcbiAgc3BsaXRGYXJlcyA9ICdzcGxpdEZhcmVzJ1xufVxuXG5leHBvcnQgZW51bSBUcmFpbmxpbmVTZWFyY2hDb25maWdUeXBlcyB7IC8vID8gV2hvIGNhbWUgdXAgd2l0aCB0aGUgY2FwaXRhbGlzYXRpb24gZm9ybWF0P1xuICBhbGxPZkV1cm9wZSA9ICdBbGxfb2ZfRXVyb3BlJyxcbiAgdWtPbmx5ID0gJ1VLX29ubHknLFxuICB1a0FuZEV1cm9wZSA9ICdVSyAmIEFsbCBvZiBFVSdcbn1cblxuaW50ZXJmYWNlIEhpZGVSYWlsQ2xhc3NJbnRlcmZhY2Uge1xuICBhbnk6IGJvb2xlYW47XG4gIHN0YW5kYXJkOiBib29sZWFuO1xuICBmaXJzdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbGxvd2VkUmFpbENsYXNzIHtcbiAgZGlzcGxheTogc3RyaW5nO1xuICB2YWx1ZTogUmFpbENsYXNzIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFpbmxpbmVUcmF2ZWxsZXIge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFnZVJhbmdlOiBzdHJpbmc7XG4gIGFnZTogbnVtYmVyO1xuICBvcmlnaW5hbFVzZXJHdWVzdElkOiBzdHJpbmc7XG4gIGxveWFsdGllczogVHJhaW5saW5lTG95YWx0eVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWlubGluZUxveWFsdHkge1xuICBsb3lhbHR5TnVtYmVyOiBzdHJpbmc7XG4gIGxveWFsdHlOdW1iZXJSZXF1aXJlZDogYm9vbGVhbjtcbiAgbG95YWx0eVBhdHRlcm46IHN0cmluZztcbiAgbG95YWx0eVByZWZpeDogc3RyaW5nO1xuICBsb3lhbHR5Q29kZTogc3RyaW5nO1xufVxuZXhwb3J0IGNsYXNzIFJhaWxFbnRlcnByaXNlU2VhcmNoPFxuICAgIFEgZXh0ZW5kcyBSYWlsUXVvdGVGZXRjaGVyVHlwZSxcbiAgICBHUlNfUSBleHRlbmRzIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcbiAgPlxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFJhaWxUZW1wUGFyYW1zLCBSYWlsUXVvdGVSZXN1bHRBcnJheSwgT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXk+XG4gIGltcGxlbWVudHMgUmFpbEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2VcbntcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUaWNrZXQ6IElSYWlsU2VsZWN0ZWRUaWNrZXQ7XG4gIHByaXZhdGUgX3NlbGVjdGVkSW5ib3VuZFRpY2tldDogSVJhaWxTZWxlY3RlZFRpY2tldDtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRTdW1tYXJ5OiBSYWlsUnVsZUVuaXR5O1xuICBwcml2YXRlIF9zZWxlY3RlZEluYm91bmRTdW1tYXJ5OiBSYWlsUnVsZUVuaXR5O1xuICBwcml2YXRlIF9zZWxlY3RlZFNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXM7XG4gIHByaXZhdGUgYWx0ZXJuYXRpdmVXZWxsYmVpbmc6IFJhaWxXZWxsYmVpbmdPYmplY3RJbnRlcmZhY2U7XG4gIHByaXZhdGUgX3RpY2tldFR5cGVzOiBSYWlsRmFyZVR5cGVzW10gPSBbXG4gICAgUmFpbEZhcmVUeXBlcy5kdWFsU2luZ2xlSm91cm5leUZhcmVzLFxuICAgIFJhaWxGYXJlVHlwZXMucmV0dXJuSm91cm5leUZhcmVzLFxuICAgIFJhaWxGYXJlVHlwZXMuc2luZ2xlSm91cm5leUZhcmVzLFxuICAgIFJhaWxGYXJlVHlwZXMub3BlblJldHVybkpvdXJuZXlGYXJlcyxcbiAgICBSYWlsRmFyZVR5cGVzLnNwbGl0RmFyZXNcbiAgXTtcblxuICBnZXQgdGlja2V0VHlwZXMoKTogUmFpbEZhcmVUeXBlc1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdGlja2V0VHlwZXM7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRTZWN0aW9uKCk6IE9CVFJhaWxGYXJlVHlwZXMge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFNlY3Rpb247XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRUaWNrZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGlja2V0O1xuICB9XG5cbiAgc2V0IHNlbGVjdGVkVGlja2V0KHNlbGVjdGVkVGlja2V0OiB7IGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uOyBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUgfSkge1xuICAgIHRoaXMuX3NlbGVjdGVkVGlja2V0ID0gc2VsZWN0ZWRUaWNrZXQ7XG4gICAgdGhpcy5zZWxlY3RlZFRpY2tldFNlbGVjdGVkLm5leHQoc2VsZWN0ZWRUaWNrZXQgPyB0cnVlIDogZmFsc2UpO1xuICAgIGlmICghdGhpcy5fc2VsZWN0ZWRUaWNrZXQpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeSA9IHRoaXMuX2ZpbmRTdW1tYXJ5KFxuICAgICAgICB0aGlzLl9zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxuICAgICAgICB0aGlzLnN1bW1hcnkub3V0Ym91bmQgfHwgW11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlbGVjdGVkSW5ib3VuZFRpY2tldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0O1xuICB9XG5cbiAgc2V0IHNlbGVjdGVkSW5ib3VuZFRpY2tldChzZWxlY3RlZFRpY2tldDogSVJhaWxTZWxlY3RlZFRpY2tldCkge1xuICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCA9IHNlbGVjdGVkVGlja2V0O1xuICAgIGlmICghdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0KSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFN1bW1hcnkgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRTdW1tYXJ5ID0gdGhpcy5zdW1tYXJ5LnJldHVybi5maW5kKCh2YWx1ZTogUmFpbFJ1bGVFbml0eSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUuam91cm5leUhhc2ggPT09IHRoaXMuX3NlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2g7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXQgdHJhbnNhY3Rpb25JZGVudGlmaWVyKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhbnNhY3Rpb25JZGVudGlmaWVyID0gaWQ7XG4gIH1cblxuICBnZXQgdHJhbnNhY3Rpb25JZGVudGlmaWVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXI7XG4gIH1cblxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfcmFpbCc7XG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyYWlsX3Jlc3VsdHMnO1xuICBzdGF0aWMgcmVhZG9ubHkgUEFTU0lOR19QT0lOVCA9ICdQYXNzaW5nJztcbiAgcHVibGljIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xuXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID0gUmFpbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XG5cbiAgcHVibGljIHNlYXJjaFR5cGVzID0gW1xuICAgIHsgZGlzcGxheTogJ1JldHVybicsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxuICAgIHsgZGlzcGxheTogJ09uZS1XYXknLCB2YWx1ZTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXkgfVxuICAgIC8vIHsgZGlzcGxheTogJ09wZW4gUmV0dXJuJywgdmFsdWU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leSB9LFxuICAgIC8vIHsgZGlzcGxheTogJ0R1YWwgU2luZ2xlcycsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuRHVhbFNpbmdsZUpvdXJuZXkgfSxcbiAgXTtcblxuICBjbGFzc1R5cGVzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZFJhaWxDbGFzc1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZFJhaWxDbGFzc1tdPihbXSk7XG4gIG5ld1NlYXRTZWxlY3RlZDogQmVoYXZpb3JTdWJqZWN0PFRyYWluU2VhdE1hcFNlYXQgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgbmV3UmV0dXJuU2VhdFNlbGVjdGVkOiBCZWhhdmlvclN1YmplY3Q8VHJhaW5TZWF0TWFwU2VhdCB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuXG4gIHB1YmxpYyBhaXJwb3J0RXhwcmVzc1N0YXRpb25zOiBJUmFpbEFpcnBvcnRFeHByZXNzU3RhdGlvbnNbXSA9IFtcbiAgICB7IGNvZGU6ICdIUDEtMycsIG5hbWU6ICdIZWF0aHJvdyBUMS0zIC0gUGFkZGluZ3RvbicgfSxcbiAgICB7IGNvZGU6ICdIUDQnLCBuYW1lOiAnSGVhdGhyb3cgVDQgLSBQYWRkaW5ndG9uJyB9LFxuICAgIHsgY29kZTogJ0hQNScsIG5hbWU6ICdIZWF0aHJvdyBUNSAtIFBhZGRpbmd0b24nIH0sXG4gICAgeyBjb2RlOiAnUEgxLTMnLCBuYW1lOiAnUGFkZGluZ3RvbiAtIEhlYXRocm93IFQxLTMnIH0sXG4gICAgeyBjb2RlOiAnUEg0JywgbmFtZTogJ1BhZGRpbmd0b24gLSBIZWF0aHJvdyBUNCcgfSxcbiAgICB7IGNvZGU6ICdQSDUnLCBuYW1lOiAnUGFkZGluZ3RvbiAtIEhlYXRocm93IFQ1JyB9LFxuICAgIHsgY29kZTogJ0dWJywgbmFtZTogJ0dhdHdpY2sgLSBWaWN0b3JpYScgfSxcbiAgICB7IGNvZGU6ICdWRycsIG5hbWU6ICdWaWN0b3JpYSAtIEdhdHdpY2snIH0sXG4gICAgeyBjb2RlOiAnU0wnLCBuYW1lOiAnU3RhbnN0ZWQgLSBMaXZlcnBvb2wgU3RyZWV0JyB9LFxuICAgIHsgY29kZTogJ0xTJywgbmFtZTogJ0xpdmVycG9vbCBTdHJlZXQgLSBTdGFuc3RlZCcgfVxuICBdO1xuXG4gIHB1YmxpYyBhaXJwb3J0RXhwcmVzc1N0YXRpb25zQ29kZXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7IGRlcDogc3RyaW5nOyBhcnI6IHN0cmluZyB9O1xuICB9ID0ge1xuICAgICdIUDEtMyc6IHsgZGVwOiAnSFhYJywgYXJyOiAnUEFEJyB9LFxuICAgICdQSDEtMyc6IHsgZGVwOiAnUEFEJywgYXJyOiAnSFhYJyB9LFxuICAgIEhQNDogeyBkZXA6ICdIQUYnLCBhcnI6ICdQQUQnIH0sXG4gICAgUEg0OiB7IGRlcDogJ1BBRCcsIGFycjogJ0hBRicgfSxcbiAgICBIUDU6IHsgZGVwOiAnSFdWJywgYXJyOiAnUEFEJyB9LFxuICAgIFBINTogeyBkZXA6ICdQQUQnLCBhcnI6ICdIV1YnIH0sXG4gICAgR1Y6IHsgZGVwOiAnR1RXJywgYXJyOiAnVklDJyB9LFxuICAgIFZHOiB7IGRlcDogJ1ZJQycsIGFycjogJ0dUVycgfSxcbiAgICBTTDogeyBkZXA6ICdTU0QnLCBhcnI6ICdMU1QnIH0sXG4gICAgTFM6IHsgZGVwOiAnTFNUJywgYXJyOiAnU1NEJyB9XG4gIH07XG5cbiAgcHVibGljIHJhaWxDcml0ZXJpYSA9IFtSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LCBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlXTtcblxuICBwdWJsaWMgdHJhdmVsQ2FyZHMgPSBbXG4gICAgeyBkaXNwbGF5OiAnWW91bmcgcGVyc29ucyByYWlsY2FyZCcsIHZhbHVlOiAnWU5HJyB9LFxuICAgIHsgZGlzcGxheTogJ0Rpc2FiaWxpdHkgcmFpbGNhcmQnLCB2YWx1ZTogJ0RJUycgfSxcbiAgICB7IGRpc3BsYXk6ICdGYW1pbHkgcmFpbGNhcmQnLCB2YWx1ZTogJ0ZBTScgfSxcbiAgICB7IGRpc3BsYXk6ICdGb3JjZXMgcmFpbGNhcmQnLCB2YWx1ZTogJ0hNRicgfSxcbiAgICB7IGRpc3BsYXk6ICdUcmF2ZWwgYWdlbmN5IGRpc2NvdW50JywgdmFsdWU6ICdUQUQnIH1cbiAgXTtcblxuICBwdWJsaWMgcmFpbExvY2F0aW9uID0gW1xuICAgIHsgZGlzcGxheTogJ1VLIFJhaWwnLCB2YWx1ZTogJ1VLJyB9LFxuICAgIHsgZGlzcGxheTogJ0VVIFJhaWwnLCB2YWx1ZTogJ0VVJyB9XG4gIF07XG5cbiAgcHJpdmF0ZSBfbG9jYXRpb24gPSAnVUsnO1xuXG4gIC8vIFRPRE8gLSBtYXkgaGF2ZSB0byBjaGFuZ2UgdGhlIHZhbHVlcyBvZiB0aGVzZSBkZXBlbmRpbmcgb24gd2hhdCBCYXJpcyBuZWVkcyB0byBwYXNzIHRvIHRyYWlubGluZVxuICBwcml2YXRlIF90cmFpbmxpbmVBZ2VSYW5nZXMgPSBbXG4gICAgeyBkaXNwbGF5OiAnWW91dGggKDAtMjUpJywgdmFsdWU6ICd5b3V0aCcgfSxcbiAgICB7IGRpc3BsYXk6ICdBZHVsdCAoMjYtNTkpJywgdmFsdWU6ICdhZHVsdCcgfSxcbiAgICB7IGRpc3BsYXk6ICdTZW5pb3IgKDYwKyknLCB2YWx1ZTogJ3NlbmlvcicgfVxuICBdO1xuXG4gIHB1YmxpYyB0cmFpbmxpbmVUcmF2ZWxsZXJzOiBUcmFpbmxpbmVUcmF2ZWxsZXJbXSA9IFtdO1xuXG4gIC8vIFlORzogXCJZb3VuZyBwZXJzb25zIHJhaWxjYXJkXCIsXG4gIC8vIERJUzogXCJEaXNhYmlsaXR5IHJhaWxjYXJkXCIsXG4gIC8vIEZBTTogXCJGYW1pbHkgcmFpbGNhcmRcIixcbiAgLy8gSE1GOiBcIkZvcmNlcyByYWlsY2FyZFwiLFxuICAvLyBUQUQ6IFwiVHJhdmVsIGFnZW5jeSBkaXNjb3VudFwiXG4gIHB1YmxpYyByZW1vdmVQYXNzaW5nUG9pbnRzRnJvbVJlc3VsdHMgPSB0cnVlO1xuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5SYWlsO1xuICBwdWJsaWMgYXZlcmFnZU91dGJvdW5kQ28yUGVySXRlbTogbnVtYmVyID0gbnVsbDtcbiAgcHVibGljIGF2ZXJhZ2VJbmJvdW5kQ28yUGVySXRlbTogbnVtYmVyID0gbnVsbDtcblxuICBwdWJsaWMgc2VsZWN0ZWRNdWx0aUZhcmVzOiBJUmFpbFNlbGVjdGVkTXVsdGlGYXJlcyA9IHtcbiAgICBvdXRib3VuZDogW10sXG4gICAgaW5ib3VuZDogW11cbiAgfTtcblxuICBwdWJsaWMgc2VsZWN0ZWRUaWNrZXRTZWxlY3RlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgbG9jYXRpb25DaGFuZ2U6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gIHByaXZhdGUgX2Jvb2tSYWlsRnJvbUxpdmUgPSBmYWxzZTtcbiAgcHVibGljIGNoZWFwZXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XG4gICAgb3V0Ym91bmRDaGVhcGVzdDogQ2hlYXBlc3RSYWlsUHJpY2VzO1xuICAgIGluYm91bmRDaGVhcGVzdDogQ2hlYXBlc3RSYWlsUHJpY2VzO1xuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXRSZXR1cm46IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXREdWFsOiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcbiAgICBjaGVhcGVzdFRpY2tldExvd0NvMk91dGJvdW5kOiBDaGVhcGVzdFJhaWxQcmljZXM7XG4gICAgY2hlYXBlc3RUaWNrZXRMb3dDbzJJbmJvdW5kOiBDaGVhcGVzdFJhaWxQcmljZXM7XG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldExvd0NvMjogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XG4gIH0+KHtcbiAgICBvdXRib3VuZENoZWFwZXN0OiB7XG4gICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgc3BsaXRGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XG4gICAgfSxcbiAgICBpbmJvdW5kQ2hlYXBlc3Q6IHtcbiAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBzcGxpdEZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cbiAgICB9LFxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IHtcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxuICAgIH0sXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldFJldHVybjoge1xuICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XG4gICAgfSxcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDoge1xuICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XG4gICAgfSxcbiAgICBjaGVhcGVzdFRpY2tldExvd0NvMk91dGJvdW5kOiB7XG4gICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgc3BsaXRGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XG4gICAgfSxcbiAgICBjaGVhcGVzdFRpY2tldExvd0NvMkluYm91bmQ6IHtcbiAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBzcGxpdEZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cbiAgICB9LFxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXRMb3dDbzI6IHtcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxuICAgIH1cbiAgfSk7XG5cbiAgZ2V0IHRyYWlubGluZUFnZVJhbmdlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYWlubGluZUFnZVJhbmdlcztcbiAgfVxuXG4gIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbjtcbiAgfVxuXG4gIHNldCBsb2NhdGlvbihuZXdMb2M6IHN0cmluZykge1xuICAgIHRoaXMuX2xvY2F0aW9uID0gbmV3TG9jO1xuXG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZy52YWx1ZSkge1xuICAgICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IG51bGw7XG4gICAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5sb2NhdGlvbkNoYW5nZS5uZXh0KG5ld0xvYyk7XG4gIH1cblxuICBnZXQgdWtSYWlsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbiA9PT0gJ1VLJztcbiAgfVxuXG4gIHNldCB1a1JhaWwoaXNVa1JhaWw6IGJvb2xlYW4pIHtcbiAgICBjb25zb2xlLmxvZyhgKysrIFNldHRpbmcgdWtyYWlsOiAke2lzVWtSYWlsfSArKytgKTtcbiAgICB0aGlzLl9sb2NhdGlvbiA9IGlzVWtSYWlsID8gJ1VLJyA6ICdFVSc7XG4gIH1cblxuICBnZXQgYm9va1JhaWxGcm9tTGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYm9va1JhaWxGcm9tTGl2ZTtcbiAgfVxuXG4gIHNldCBib29rUmFpbEZyb21MaXZlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYm9va1JhaWxGcm9tTGl2ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBtaW5PdXRib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxuICB9O1xuICBwdWJsaWMgbWluSW5ib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxuICB9O1xuICBwdWJsaWMgbWF4RGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcbiAgICAvLyBFTlQtMTU1NyAtIG1heCBFdm9sdmkgc2VhcmNoIGRhdGUgaXMgNiBtb250aHMgaW4gZnV0dXJlXG4gICAgeWVhcjogbW9tZW50KCkuYWRkKCdtb250aCcsIDYpLnllYXIoKSxcbiAgICBtb250aDogbW9tZW50KCkuYWRkKCdtb250aCcsIDYpLm1vbnRoKCksXG4gICAgZGF5OiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikuZGF0ZSgpXG4gIH07XG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5W107XG4gIHByaXZhdGUgX3RpbWVBcnJheVF1YXJ0ZXJBbkhvdXI6IFZhbHVlRGlzcGxheVtdO1xuICAvLyBwcml2YXRlIF9jaG9zZW5UaWNrZXRHcm91cDogUmFpbFRpY2tldEdyb3VwO1xuICBwcml2YXRlIF92aWFMb2NhdGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF90cmF2ZWxsaW5nRnJvbTogc3RyaW5nO1xuICBwcml2YXRlIF90cmF2ZWxsaW5nVG86IHN0cmluZztcbiAgcHJvdGVjdGVkIGRlY2xhcmUgX29yaWdpbmFsVXNlclNlYXJjaDogUmFpbFRlbXBQYXJhbXM7XG4gIHB1YmxpYyBzdW1tYXJ5OiBSYWlsU3VtbWFyeSA9IHt9O1xuXG4gIGdldCBvcGVuUmV0dXJuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5O1xuICB9XG5cbiAgc2V0IG9wZW5SZXR1cm4obmV3VmFsOiBib29sZWFuKSB7XG4gICAgaWYgKG5ld1ZhbCkge1xuICAgICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPSBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXk7XG4gICAgfVxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaG9zZW5TZWFyY2hUeXBlKCk6IFJhaWxTZWFyY2hKb3VybmV5VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlO1xuICB9XG5cbiAgc2V0IGNob3NlblNlYXJjaFR5cGUobmV3VHlwZTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPSBuZXdUeXBlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBub09mQWR1bHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5ub09mQWR1bHRzO1xuICB9XG5cbiAgc2V0IG5vT2ZBZHVsdHMoYWR1bHRzOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyA9IGFkdWx0cztcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgbm9PZkNoaWxkcmVuKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW47XG4gIH1cblxuICBzZXQgbm9PZkNoaWxkcmVuKGNoaWxkcmVuOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHRyYXZlbGxpbmdUbygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ1RvO1xuICB9XG5cbiAgc2V0IHRyYXZlbGxpbmdUbyh0dDogYW55KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbyA9IHR0O1xuXG4gICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gJyc7XG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHR0LnJhaWxzdGF0aW9uLmlkO1xuICAgIH0gZWxzZSBpZiAodHQ/LmlkKSB7XG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5pZDtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdHJhdmVsbGluZ0Zyb20oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdGcm9tO1xuICB9XG5cbiAgc2V0IHRyYXZlbGxpbmdGcm9tKHR0OiBhbnkpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20gPSB0dDtcbiAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9ICcnO1xuICAgIGlmICh0dD8ucmFpbHN0YXRpb24/LmlkKSB7XG4gICAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9IHR0LnJhaWxzdGF0aW9uLmlkO1xuICAgIH0gZWxzZSBpZiAodHQ/LmlkKSB7XG4gICAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9IHR0LmlkO1xuICAgIH1cblxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaG9zZW5SYWlsQ2xhc3MoKTogUmFpbENsYXNzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzO1xuICB9XG5cbiAgc2V0IGNob3NlblJhaWxDbGFzcyhuZXdDbGFzczogUmFpbENsYXNzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzID0gbmV3Q2xhc3M7XG4gIH1cblxuICBnZXQgY2hvc2VuU2VhcmNoQ2xhc3MoKTogUmFpbENsYXNzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzO1xuICB9XG5cbiAgc2V0IGNob3NlblNlYXJjaENsYXNzKGNsYXNzUjogUmFpbENsYXNzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzID0gY2xhc3NSO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBleHRyYVRpbWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5leHRyYVRpbWU7XG4gIH1cblxuICBzZXQgZXh0cmFUaW1lKGV4dHJhOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmV4dHJhVGltZSA9IGV4dHJhO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB2aWEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWE7XG4gIH1cblxuICBzZXQgdmlhKHZpYTogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy52aWEgPSB2aWE7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHZpYUxvY2F0aW9uKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbjtcbiAgfVxuXG4gIHNldCB2aWFMb2NhdGlvbih2aWFMb2NhdGlvbjogYW55KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYUxvY2F0aW9uID0gdmlhTG9jYXRpb247XG5cbiAgICB0aGlzLl92aWFMb2NhdGlvbiA9ICcnO1xuICAgIGlmICh2aWFMb2NhdGlvbj8ucmFpbHN0YXRpb24/LmlkKSB7XG4gICAgICB0aGlzLl92aWFMb2NhdGlvbiA9IHZpYUxvY2F0aW9uLnJhaWxzdGF0aW9uLmlkO1xuICAgIH1cblxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBvdXRCb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZTtcbiAgfVxuXG4gIHNldCBvdXRCb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcbiAgICAgIHRoaXMuX291dGJvdW5kX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxuICAgICAgICA6ICcwNzAwJztcbiAgICB9XG5cbiAgICB0aGlzLm1pbkluYm91bmREYXRlID0ge1xuICAgICAgeWVhcjogbmV3RGF0ZVRpbWUueWVhcigpLFxuICAgICAgbW9udGg6IG5ld0RhdGVUaW1lLm1vbnRoKCkgKyAxLFxuICAgICAgZGF5OiBuZXdEYXRlVGltZS5kYXRlKClcbiAgICB9O1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lICYmXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSAmJlxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lLmlzQWZ0ZXIodGhpcy5pbkJvdW5kRGF0ZVRpbWUpXG4gICAgKSB7XG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRoaXMuaW5Cb3VuZERhdGVUaW1lXG4gICAgICAgIC5zZXQoJ2RhdGUnLCBuZXdEYXRlVGltZS5kYXRlKCkpXG4gICAgICAgIC5zZXQoJ21vbnRoJywgbmV3RGF0ZVRpbWUubW9udGgoKSlcbiAgICAgICAgLnNldCgneWVhcicsIG5ld0RhdGVUaW1lLnllYXIoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IG91dGJvdW5kQ3JpdGVyaWEoKTogUmFpbFNlYXJjaENyaXRlcmlhIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWE7XG4gIH1cblxuICBzZXQgb3V0Ym91bmRDcml0ZXJpYShuZXdDcml0OiBSYWlsU2VhcmNoQ3JpdGVyaWEpIHtcbiAgICAvLyBjb25zb2xlLndhcm4oYCsrKyBTZXR0aW5nIE5ldyBDcml0ZXJpYTogJHtuZXdDcml0fSArKytgKTtcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmRDcml0ZXJpYSA9IG5ld0NyaXQ7XG5cbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgaW5Cb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lO1xuICB9XG5cbiAgc2V0IGluQm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XG4gICAgICB0aGlzLl9yZXR1cm5fdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXG4gICAgICAgIDogJzE2MDAnO1xuICAgIH1cbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICAvLyAhZGF0ZSBhbmQgdGltZSBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGZvciBMVVxuICBwcml2YXRlIF9vdXRib3VuZF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcblxuICBnZXQgb3V0Ym91bmRfZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfZGF0ZTtcbiAgfVxuXG4gIHNldCBvdXRib3VuZF9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XG4gICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX291dGJvdW5kX3RpbWU6IHN0cmluZyA9IG51bGw7XG4gIGdldCBvdXRib3VuZF90aW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX3RpbWU7XG4gIH1cblxuICBzZXQgb3V0Ym91bmRfdGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JldHVybl9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcblxuICBnZXQgcmV0dXJuX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl9kYXRlO1xuICB9XG5cbiAgc2V0IHJldHVybl9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XG4gICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmV0dXJuX3RpbWU6IHN0cmluZyA9IG51bGw7XG4gIGdldCByZXR1cm5fdGltZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fdGltZTtcbiAgfVxuXG4gIHNldCByZXR1cm5fdGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmV0dXJuX3RpbWUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xuICB9XG5cbiAgZ2V0IHJldHVybkNyaXRlcmlhKCk6IFJhaWxTZWFyY2hDcml0ZXJpYSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYTtcbiAgfVxuXG4gIHNldCByZXR1cm5Dcml0ZXJpYShuZXdDcml0OiBSYWlsU2VhcmNoQ3JpdGVyaWEpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWEgPSBuZXdDcml0O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjYXJuZXRUaWNrZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYXJuZXRUaWNrZXQ7XG4gIH1cblxuICBzZXQgY2FybmV0VGlja2V0KG5ld0Nhcm5ldDogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJuZXRUaWNrZXQgPSBuZXdDYXJuZXQ7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGV4Y2hhbmdlRGlyZWN0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5leGNoYW5nZURpcmVjdGlvbjtcbiAgfVxuXG4gIHNldCBleGNoYW5nZURpcmVjdGlvbihuZXdFeGNoYW5nZURpcmVjdGlvbjogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmV4Y2hhbmdlRGlyZWN0aW9uID0gbmV3RXhjaGFuZ2VEaXJlY3Rpb247XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGV4Y2hhbmdlRnJvbU9yZGVySUQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmV4Y2hhbmdlRGlyZWN0aW9uO1xuICB9XG5cbiAgc2V0IGV4Y2hhbmdlRnJvbU9yZGVySUQobmV3RXhjaGFuZ2VGcm9tT3JkZXJJRDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmV4Y2hhbmdlRnJvbU9yZGVySUQgPSBuZXdFeGNoYW5nZUZyb21PcmRlcklEO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlQXV0b0Rpc2NvdW50cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRpc2FibGVBdXRvRGlzY291bnRzO1xuICB9XG5cbiAgc2V0IGRpc2FibGVBdXRvRGlzY291bnRzKG5ld0RpczogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5kaXNhYmxlQXV0b0Rpc2NvdW50cyA9IG5ld0RpcztcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgcHJpb3JpdGlzZUJ5UHJpY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmlvcml0aXNlQnlQcmljZTtcbiAgfVxuXG4gIHNldCBwcmlvcml0aXNlQnlQcmljZShuZXdQcmlvcml0eTogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcmlvcml0aXNlQnlQcmljZSA9IG5ld1ByaW9yaXR5O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBhcHBseVJhaWxjYXJkcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFwcGx5UmFpbGNhcmRzO1xuICB9XG5cbiAgc2V0IGFwcGx5UmFpbGNhcmRzKGFwQ2FyZHM6IGJvb2xlYW4pIHtcbiAgICBpZiAoIWFwQ2FyZHMpIHtcbiAgICAgIHRoaXMucmFpbENhcmRzID0gW107XG4gICAgfVxuICAgIHRoaXMudGVtcFBhcmFtcy5hcHBseVJhaWxjYXJkcyA9IGFwQ2FyZHM7XG4gIH1cblxuICBnZXQgcmFpbENhcmRzKCk6IFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmFpbENhcmRzO1xuICB9XG5cbiAgc2V0IHJhaWxDYXJkcyh2YWx1ZTogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXJbXSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5yYWlsQ2FyZHMgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCk6IFZhbHVlRGlzcGxheVtdIHtcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XG4gICAgICBBcnJheSg0OClcbiAgICAgICAgLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDIpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXG4gICAgICAgICAgICBkaXNwbGF5OlxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gMilcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgICAgKChpbmRleCAlIDIpICogMzApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheVF1YXJ0ZXJBbkhvdXIoKTogVmFsdWVEaXNwbGF5W10ge1xuICAgIHRoaXMuX3RpbWVBcnJheVF1YXJ0ZXJBbkhvdXIgPVxuICAgICAgdGhpcy5fdGltZUFycmF5UXVhcnRlckFuSG91ciB8fFxuICAgICAgQXJyYXkoOTYpXG4gICAgICAgIC5maWxsKDApXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgKyAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxuICAgICAgICAgICAgZGlzcGxheTpcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXG4gICAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5UXVhcnRlckFuSG91cjtcbiAgfVxuXG4gIGdldEFpcnBvcnRFeHByZXNzU3RhdGlvbnMoKTogeyBjb2RlOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10ge1xuICAgIHJldHVybiB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbnM7XG4gIH1cblxuICBnZXQgYWlycG9ydEV4cHJlc3NTdGF0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0RXhwcmVzc1N0YXRpb247XG4gIH1cblxuICBzZXQgYWlycG9ydEV4cHJlc3NTdGF0aW9uKHN0YXRpb246IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0RXhwcmVzc1N0YXRpb24gPSBzdGF0aW9uO1xuICAgIHRoaXMuX3NldEFpcnBvcnRFeHByZXNzU3RhdGlvbnMoKTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgaXNBaXJwb3J0RXhwcmVzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmlzQWlycG9ydEV4cHJlc3M7XG4gIH1cblxuICBzZXQgaXNBaXJwb3J0RXhwcmVzcyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pc0FpcnBvcnRFeHByZXNzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9uSWRzKHN0YXRpb25JZHM6IHtcbiAgICBkZXBhcnR1cmVMb2NhdGlvbklkOiBzdHJpbmc7XG4gICAgYXJyaXZhbExvY2F0aW9uSWQ6IHN0cmluZztcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IHsgZGVwYXJ0dXJlTG9jYXRpb25JZCwgYXJyaXZhbExvY2F0aW9uSWQgfSA9IHN0YXRpb25JZHM7XG4gICAgaWYgKGRlcGFydHVyZUxvY2F0aW9uSWQgJiYgYXJyaXZhbExvY2F0aW9uSWQpIHtcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gZGVwYXJ0dXJlTG9jYXRpb25JZDtcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IGFycml2YWxMb2NhdGlvbklkO1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRTdW1tYXJ5KGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLCBzdW1tYXJ5OiBSYWlsUnVsZUVuaXR5W10pIHtcbiAgICByZXR1cm4gc3VtbWFyeS5maW5kKCh2YWx1ZTogUmFpbFJ1bGVFbml0eSk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuIHZhbHVlLmpvdXJuZXlIYXNoID09PSBqb3VybmV5LmpvdXJuZXlIYXNoO1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZENoZWFwZXN0VGlja2V0KCk7XG4gIH1cblxuICAvLyBUT0RPIC0gZXhwYW5kIHRoaXMgdG8gY2hlY2sgb3VyIG9yaWdpbmFsIHNlYXJjaCBpZiBhbnkgYW5kIHNldCBiYXNlZCBvbiB0aGVyZSBiZWZvcmUgY2hlY2tpbmcgVUZcbiAgc2V0RGVmYXVsdExvY2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdyZXN1bHRzOicsIHRoaXMucmVzdWx0cyk7XG4gICAgaWYgKFxuICAgICAgdGhpcy51c2VyU2VydmljZS51c2VySGFzU2VydmljZVByb3ZpZGVyKFNlcnZpY2VUeXBlLlJhaWwsIFNlcnZpY2VQcm92aWRlci5UcmFpbmxpbmUpICYmXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLmlzVXNlckZhdm9yaXRlU2V0KFVzZXJGYXZvcnVyaXRlLnRyYWlubGluZUVVU2VhcmNoRGVmYXVsdCkgJiZcbiAgICAgICF0aGlzLnJlc3VsdHMudmFsdWUubGVuZ3RoICYmXG4gICAgICAhdGhpcy51c2VyU2VydmljZS51c2VySGFzU2VydmljZVByb3ZpZGVyKFNlcnZpY2VUeXBlLlJhaWwsIFNlcnZpY2VQcm92aWRlci5Fdm9sdmkpXG4gICAgKSB7XG4gICAgICB0aGlzLl9sb2NhdGlvbiA9ICdFVSc7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBSYWlsZmV0Y2hlcjogQmFzZVJhaWxRdW90ZUZldGNoZXI8UT4sXG4gICAgcHJpdmF0ZSBnZXRSYWlsU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXI8R1JTX1E+LFxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlLCB1c2VyU2VydmljZSk7XG5cbiAgICBjb25zdCBkYXRhOiB7XG4gICAgICBxdWVyeToge307XG4gICAgICB0ZW1wUGFyYW1zOiBSYWlsVGVtcFBhcmFtcztcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogUmFpbFRlbXBQYXJhbXM7XG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMpIHx8IHtcbiAgICAgIHF1ZXJ5OiB7fSxcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIFJhaWxUZW1wUGFyYW1zLFxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBSYWlsVGVtcFBhcmFtc1xuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VSYWlsUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XG4gICAgZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2gudHJhbnNhY3Rpb25JZGVudGlmaWVyID0gbnVsbDtcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcblxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZSgodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcbiAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyh0cmF2ZWxsZXJzLCBTZXJ2aWNlVHlwZS5SYWlsKTtcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm5vT2ZBZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm5vT2ZDaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XG4gICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB1c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSgoX3VzZXI6IEZ1bGxVc2VyRGV0YWlscykgPT4ge1xuICAgICAgdGhpcy51cGRhdGVBdmFsaWFibGVDbGFzc2VzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXR1cFRyYWlubGluZUVVVHJhdmVsbGVycygpO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RmFyZVNlbGVjdGFibGVGcm9tQ2FuY2VsbGVkKFxuICAgIGZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSxcbiAgICBpc0NhbmNlbGxlZDogYm9vbGVhblxuICApOiBPQlRSYWlsSm91cm5leUZhcmVbXSB7XG4gICAgZm9yIChsZXQgZmFyZSBvZiBmYXJlcykge1xuICAgICAgZmFyZS5zZWxlY3RhYmxlID0gIWlzQ2FuY2VsbGVkO1xuICAgIH1cbiAgICByZXR1cm4gZmFyZXM7XG4gIH1cblxuICBwcml2YXRlIHNldEZhcmVTZWxlY3RhYmxlRnJvbUNhbmNlbGxlZFNwbGl0KFxuICAgIGZhcmVzOiBPQlRTcGxpdFJhaWxKb3VybmV5RmFyZVtdLFxuICAgIGlzQ2FuY2VsbGVkOiBib29sZWFuXG4gICk6IE9CVFNwbGl0UmFpbEpvdXJuZXlGYXJlW10ge1xuICAgIGZvciAobGV0IGZhcmUgb2YgZmFyZXMpIHtcbiAgICAgIGZhcmUuc2VsZWN0YWJsZSA9ICFpc0NhbmNlbGxlZDtcbiAgICB9XG4gICAgcmV0dXJuIGZhcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzKHJhd1Jlc3VsdHM6IFJhaWxRdW90ZVJlc3VsdEFycmF5KTogT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXkge1xuICAgIHRoaXMudXBkYXRlQXZhbGlhYmxlQ2xhc3Nlcyh0cnVlKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uSWRlbnRpZmllciA9IG51bGw7XG5cbiAgICBjb25zdCBzZXRGYXJlcyA9IChmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUpOiBPQlRSYWlsSm91cm5leUZhcmUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmFyZSxcbiAgICAgICAgdHlwZTogZmFyZT8udHlwZSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzZXRGYXJlc1NwbGl0ID0gKGZhcmU6IE9CVFNwbGl0UmFpbEpvdXJuZXlGYXJlKTogT0JUU3BsaXRSYWlsSm91cm5leUZhcmUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmFyZSxcbiAgICAgICAgdHlwZTogZmFyZT8udHlwZSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzb3J0RmFyZXMgPSAoXG4gICAgICBqb3VybmV5czogUmVjdXJzaXZlUGFydGlhbDxSYWlsSm91cm5leU9wdGlvbj5bXVxuICAgICk6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb25bXSA9PiB7XG4gICAgICBjb25zdCB0b1JldHVybiA9IHRoaXMuaGVscGVyc1xuICAgICAgICAuY2xvbmUoam91cm5leXMpXG4gICAgICAgIC5zb3J0KChmaXJzdDogUmFpbEpvdXJuZXlPcHRpb24sIHNlY29uZDogUmFpbEpvdXJuZXlPcHRpb24pOiBudW1iZXIgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpcnN0VGltZSA9IG1vbWVudChmaXJzdC5kZXBhcnREYXRlVGltZSk7XG4gICAgICAgICAgY29uc3Qgc2Vjb25kVGltZSA9IG1vbWVudChzZWNvbmQuZGVwYXJ0RGF0ZVRpbWUpO1xuICAgICAgICAgIGlmIChmaXJzdFRpbWUuaXNCZWZvcmUoc2Vjb25kVGltZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpcnN0VGltZS5pc0FmdGVyKHNlY29uZFRpbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKGpvdXJuZXk6IFJhaWxKb3VybmV5T3B0aW9uKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbiA9PiB7XG4gICAgICAgICAgY29uc3Qgc29ydCA9IChmaXJzdDogT0JUUmFpbEpvdXJuZXlGYXJlLCBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZSk6IG51bWJlciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZmlyc3QucHJpY2UgLSBzZWNvbmQucHJpY2U7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IHNvcnRTcGxpdCA9IChcbiAgICAgICAgICAgIGZpcnN0OiBPQlRTcGxpdFJhaWxKb3VybmV5RmFyZSxcbiAgICAgICAgICAgIHNlY29uZDogT0JUU3BsaXRSYWlsSm91cm5leUZhcmVcbiAgICAgICAgICApOiBudW1iZXIgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnByaWNlIC0gc2Vjb25kLnByaWNlO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBkdWFsU2luZ2xlSm91cm5leXMgPSAoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IFtdKVxuICAgICAgICAgICAgLnNvcnQoc29ydClcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xuICAgICAgICAgIGNvbnN0IG9wZW5SZXR1cm5Kb3VybmV5cyA9IChqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXG4gICAgICAgICAgICAuc29ydChzb3J0KVxuICAgICAgICAgICAgLm1hcChzZXRGYXJlcyk7XG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leXMgPSAoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pLnNvcnQoc29ydCkubWFwKHNldEZhcmVzKTtcbiAgICAgICAgICBjb25zdCBzaW5nbGVKb3VybmV5cyA9IChqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyB8fCBbXSkuc29ydChzb3J0KS5tYXAoc2V0RmFyZXMpO1xuICAgICAgICAgIGNvbnN0IHNwbGl0Sm91cm5leXMgPSAoam91cm5leS5zcGxpdEZhcmVzIHx8IFtdKS5zb3J0KHNvcnRTcGxpdCkubWFwKHNldEZhcmVzU3BsaXQpO1xuXG4gICAgICAgICAgY29uc3QgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10gPSB0aGlzLnNldEZhcmVTZWxlY3RhYmxlRnJvbUNhbmNlbGxlZChcbiAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5cy5tYXAoc2V0RmFyZXMpLFxuICAgICAgICAgICAgISFqb3VybmV5LmNhbmNlbGxlZFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgb3BlblJldHVybkpvdXJuZXlGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10gPSB0aGlzLnNldEZhcmVTZWxlY3RhYmxlRnJvbUNhbmNlbGxlZChcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5cy5tYXAoc2V0RmFyZXMpLFxuICAgICAgICAgICAgISFqb3VybmV5LmNhbmNlbGxlZFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IHRoaXMuc2V0RmFyZVNlbGVjdGFibGVGcm9tQ2FuY2VsbGVkKFxuICAgICAgICAgICAgcmV0dXJuSm91cm5leXMubWFwKHNldEZhcmVzKSxcbiAgICAgICAgICAgICEham91cm5leS5jYW5jZWxsZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHNpbmdsZUpvdXJuZXlGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10gPSB0aGlzLnNldEZhcmVTZWxlY3RhYmxlRnJvbUNhbmNlbGxlZChcbiAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlzLm1hcChzZXRGYXJlcyksXG4gICAgICAgICAgICAhIWpvdXJuZXkuY2FuY2VsbGVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBzcGxpdEpvdXJuZXlzRmFyZXM6IE9CVFNwbGl0UmFpbEpvdXJuZXlGYXJlW10gPVxuICAgICAgICAgICAgdGhpcy5zZXRGYXJlU2VsZWN0YWJsZUZyb21DYW5jZWxsZWRTcGxpdChcbiAgICAgICAgICAgICAgc3BsaXRKb3VybmV5cy5tYXAoc2V0RmFyZXNTcGxpdCksXG4gICAgICAgICAgICAgICEham91cm5leS5jYW5jZWxsZWRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB0b1JldHVybjEgPSB7XG4gICAgICAgICAgICAuLi5qb3VybmV5LFxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShkdWFsU2luZ2xlSm91cm5leUZhcmVzLCBbXG4gICAgICAgICAgICAgICd0eXBlJyxcbiAgICAgICAgICAgICAgWyd0ZXJtcy50aWNrZXRUeXBlQ29kZScsICdwcmljZSddXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkob3BlblJldHVybkpvdXJuZXlGYXJlcywgW1xuICAgICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAgIFsndGVybXMudGlja2V0VHlwZUNvZGUnLCAncHJpY2UnXVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkocmV0dXJuSm91cm5leUZhcmVzLCBbXG4gICAgICAgICAgICAgICd0eXBlJyxcbiAgICAgICAgICAgICAgWyd0ZXJtcy50aWNrZXRUeXBlQ29kZScsICdwcmljZSddXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShzaW5nbGVKb3VybmV5RmFyZXMsIFtcbiAgICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgICBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11cbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgc3BsaXRGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShzcGxpdEpvdXJuZXlzRmFyZXMsIFtcbiAgICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgICBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11cbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgfSBhcyBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uO1xuXG4gICAgICAgICAgcmV0dXJuIHRvUmV0dXJuMTtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfTtcblxuICAgIHJldHVybiByYXdSZXN1bHRzLm1hcCgocmFpbFJlc3VsdDogUmFpbFF1b3RlUmVzdWx0KTogT0JUUmFpbFF1b3RlUmVzdWx0ID0+IHtcbiAgICAgIHRoaXMuc3VtbWFyeSA9IHJhaWxSZXN1bHQuc3VtbWFyeTtcbiAgICAgIGNvbnN0IG91dGJvdW5kSW50ZXJuYWwgPSBzb3J0RmFyZXMocmFpbFJlc3VsdC5vdXRib3VuZCB8fCBbXSk7XG4gICAgICBjb25zdCBpbmJvdW5kSW50ZXJuYWwgPSBzb3J0RmFyZXMocmFpbFJlc3VsdC5yZXR1cm4gfHwgW10pO1xuXG4gICAgICBjb25zdCBpbmRleFRvVGlja2V0cyA9IHRoaXMubWFrZUZhcmVOYW1lcyhbb3V0Ym91bmRJbnRlcm5hbCB8fCBbXSwgaW5ib3VuZEludGVybmFsIHx8IFtdXSk7XG5cbiAgICAgIGNvbnN0IGNvbnZlcnRGYXJlcyA9IChcbiAgICAgICAgZmFyZXM6IE9CVFJhaWxJbnRlcm5hbEZhcmUsXG4gICAgICAgIHRpY2tldFR5cGU6IE9CVFJhaWxGYXJlVHlwZXNcbiAgICAgICk6IE9CVFJhaWxGYXJlID0+IHtcbiAgICAgICAgY29uc3QgcnRpID0gaW5kZXhUb1RpY2tldHNbdGlja2V0VHlwZV07XG4gICAgICAgIGNvbnN0IHRpY2tldFR5cGVzID0gcnRpLmdldFRpY2tldFR5cGVzKCk7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aWNrZXRUeXBlcykucmVkdWNlKFxuICAgICAgICAgIChjdXJyZW50OiBPQlRSYWlsRmFyZSwgW3R5cGUsIGNvdW50XTogW3N0cmluZywgbnVtYmVyXSkgPT4ge1xuICAgICAgICAgICAgY3VycmVudFt0eXBlXSA9IHJ0aS53b3Jrb3V0SW5kZXhlcyh0eXBlKS5tYXAoKGZpZWxkczogc3RyaW5nW10pOiBPQlRSYWlsSm91cm5leUZhcmUgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdChmYXJlcywgZmllbGRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7fVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbnZldFJhaWxKT3VybmV5ID0gKGpvdXJuZXk6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb24pOiBPQlRSYWlsSm91cm5leU9wdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uam91cm5leSxcbiAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IGNvbnZlcnRGYXJlcyhqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcywgJ3JldHVybkpvdXJuZXlGYXJlcycpLFxuICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IGNvbnZlcnRGYXJlcyhcbiAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyxcbiAgICAgICAgICAgICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJ1xuICAgICAgICAgICksXG4gICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxuICAgICAgICAgICAgam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzLFxuICAgICAgICAgICAgJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IGNvbnZlcnRGYXJlcyhqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcywgJ3NpbmdsZUpvdXJuZXlGYXJlcycpLFxuICAgICAgICAgIHNwbGl0RmFyZXM6IGNvbnZlcnRGYXJlcyhqb3VybmV5LnNwbGl0RmFyZXMsICdzcGxpdEZhcmVzJylcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG91dGJvdW5kID0gb3V0Ym91bmRJbnRlcm5hbC5tYXAoY29udmV0UmFpbEpPdXJuZXkpO1xuICAgICAgY29uc3QgaW5ib3VuZCA9IGluYm91bmRJbnRlcm5hbC5tYXAoY29udmV0UmFpbEpPdXJuZXkpO1xuXG4gICAgICBjb25zdCBvdXRQcmljZXMgPSB0aGlzLnVwZGF0ZVByaWNlcyhcbiAgICAgICAgb3V0Ym91bmQsXG4gICAgICAgIHtcbiAgICAgICAgICBjaGVhcGVzdFRpY2tldHM6IHtcbiAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBzcGxpdEZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IHtcbiAgICAgICAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDoge1xuICAgICAgICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaW5QcmljZXMgPSB0aGlzLnVwZGF0ZVByaWNlcyhcbiAgICAgICAgaW5ib3VuZCxcbiAgICAgICAge1xuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czoge1xuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIHNwbGl0RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogb3V0UHJpY2VzLmNoZWFwZXN0Q2xhc3NUaWNrZXQsXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogb3V0UHJpY2VzLmNoZWFwZXN0Q2xhc3NUaWNrZXRcbiAgICAgICAgfSxcblxuICAgICAgICB0cnVlXG4gICAgICApO1xuXG4gICAgICB0aGlzLmF2ZXJhZ2VPdXRib3VuZENvMlBlckl0ZW0gPSB0aGlzLmhlbHBlcnMuY2FsY3VsYXRlQXZlcmFnZUNvMlBlckl0ZW0ob3V0Ym91bmQpO1xuICAgICAgdGhpcy5hdmVyYWdlSW5ib3VuZENvMlBlckl0ZW0gPSB0aGlzLmhlbHBlcnMuY2FsY3VsYXRlQXZlcmFnZUNvMlBlckl0ZW0oaW5ib3VuZCk7XG5cbiAgICAgIC8vIGNvbnNvbGUud2FybihgKysrIENoZWFwZXN0IER1YWwgSW4gRm91bmQ6IGAsIGluUHJpY2VzKTtcbiAgICAgIC8vIGNvbnNvbGUud2FybihgKysrIENoZWFwZXN0IER1YWwgT3V0IEZvdW5kOiBgLCBvdXRQcmljZXMpO1xuXG4gICAgICBjb25zdCBjaGVhcGVzdER1YWxGYXJlID1cbiAgICAgICAgaW5QcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSB8fFxuICAgICAgICBpblByaWNlcy5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlO1xuXG4gICAgICBjb25zdCBvdXRib3VuZExvd2VzdENvMlZhbHVlID0gTWF0aC5taW4oLi4ub3V0Ym91bmQubWFwKGpvdXJuZXkgPT4gam91cm5leS5jbzJQZXJQYXNzZW5nZXIpKTtcbiAgICAgIGNvbnN0IGluYm91bmRMb3dlc3RDbzJWYWx1ZSA9IE1hdGgubWluKC4uLmluYm91bmQubWFwKGpvdXJuZXkgPT4gam91cm5leS5jbzJQZXJQYXNzZW5nZXIpKTtcblxuICAgICAgY29uc3Qgb3V0Ym91bmRMb3dlc3RDbzIgPSBvdXRib3VuZC5maWx0ZXIoam91cm5leSA9PiBqb3VybmV5LmNvMlBlclBhc3NlbmdlciA9PT0gb3V0Ym91bmRMb3dlc3RDbzJWYWx1ZSk7XG4gICAgICBjb25zdCBpbmJvdW5kTG93ZXN0Q28yID0gaW5ib3VuZC5maWx0ZXIoam91cm5leSA9PiBqb3VybmV5LmNvMlBlclBhc3NlbmdlciA9PT0gaW5ib3VuZExvd2VzdENvMlZhbHVlKTtcblxuICAgICAgY29uc3Qgb3V0UHJpY2VzTG93Q28yID0gdGhpcy51cGRhdGVQcmljZXMoXG4gICAgICAgIG91dGJvdW5kTG93ZXN0Q28yLFxuICAgICAgICB7XG4gICAgICAgICAgY2hlYXBlc3RUaWNrZXRzOiB7XG4gICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgc3BsaXRGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0OiB7XG4gICAgICAgICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgZmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG91dGJvdW5kQ2xhc3NUaWNrZXQ6IHtcbiAgICAgICAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGluUHJpY2VzTG93Q28yID0gdGhpcy51cGRhdGVQcmljZXMoXG4gICAgICAgIGluYm91bmRMb3dlc3RDbzIsXG4gICAgICAgIHtcbiAgICAgICAgICBjaGVhcGVzdFRpY2tldHM6IHtcbiAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBzcGxpdEZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IG91dFByaWNlc0xvd0NvMi5jaGVhcGVzdENsYXNzVGlja2V0LFxuICAgICAgICAgIG91dGJvdW5kQ2xhc3NUaWNrZXQ6IG91dFByaWNlc0xvd0NvMi5jaGVhcGVzdENsYXNzVGlja2V0XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcblxuICAgICAgdGhpcy5jaGVhcGVzdC5uZXh0KHtcbiAgICAgICAgb3V0Ym91bmRDaGVhcGVzdDogb3V0UHJpY2VzLmNoZWFwZXN0VGlja2V0cyxcbiAgICAgICAgaW5ib3VuZENoZWFwZXN0OiBpblByaWNlcy5jaGVhcGVzdFRpY2tldHMsXG4gICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IGluUHJpY2VzLmNoZWFwZXN0Q2xhc3NUaWNrZXQsXG4gICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXRSZXR1cm46IG91dFByaWNlcy5vdXRib3VuZENsYXNzVGlja2V0LFxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDpcbiAgICAgICAgICBjaGVhcGVzdER1YWxGYXJlLmZhcmU/LnNpbmdsZU9yUmV0dXJuICE9PSAnUmV0dXJuJyA/IGluUHJpY2VzLm91dGJvdW5kQ2xhc3NUaWNrZXQgOiBudWxsLFxuICAgICAgICBjaGVhcGVzdFRpY2tldExvd0NvMk91dGJvdW5kOiBvdXRQcmljZXNMb3dDbzIuY2hlYXBlc3RUaWNrZXRzLFxuICAgICAgICBjaGVhcGVzdFRpY2tldExvd0NvMkluYm91bmQ6IGluUHJpY2VzTG93Q28yLmNoZWFwZXN0VGlja2V0cyxcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldExvd0NvMjogb3V0UHJpY2VzTG93Q28yLmNoZWFwZXN0Q2xhc3NUaWNrZXRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucmFpbFJlc3VsdCxcbiAgICAgICAgb3V0Ym91bmQsXG4gICAgICAgIHJldHVybjogaW5ib3VuZFxuICAgICAgfSBhcyBPQlRSYWlsUXVvdGVSZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1ha2VGYXJlTmFtZXMoXG4gICAgam91cm5leXM6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb25bXVtdXG4gICk6IFJlY29yZDxPQlRSYWlsRmFyZVR5cGVzLCBSYWlsSW5kZXhUb1RpY2tldD4ge1xuICAgIHJldHVybiBbXG4gICAgICAncmV0dXJuSm91cm5leUZhcmVzJyxcbiAgICAgICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJyxcbiAgICAgICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJyxcbiAgICAgICdzaW5nbGVKb3VybmV5RmFyZXMnLFxuICAgICAgJ3NwbGl0RmFyZXMnXG4gICAgXS5yZWR1Y2UoXG4gICAgICAoXG4gICAgICAgIGFjY3VtOiBSZWNvcmQ8T0JUUmFpbEZhcmVUeXBlcywgUmFpbEluZGV4VG9UaWNrZXQ+LFxuICAgICAgICBuZXh0OiBPQlRSYWlsRmFyZVR5cGVzXG4gICAgICApOiBSZWNvcmQ8T0JUUmFpbEZhcmVUeXBlcywgUmFpbEluZGV4VG9UaWNrZXQ+ID0+IHtcbiAgICAgICAgYWNjdW1bbmV4dF0gPSB0aGlzLl9tYWtlRmFyZU5hbWVzKGpvdXJuZXlzLCBuZXh0KTtcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiBuZXcgUmFpbEluZGV4VG9UaWNrZXQoKSxcbiAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogbmV3IFJhaWxJbmRleFRvVGlja2V0KCksXG4gICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxuICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxuICAgICAgICBzcGxpdEZhcmVzOiBuZXcgUmFpbEluZGV4VG9UaWNrZXQoKVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9tYWtlRmFyZU5hbWVzKFxuICAgIGpvdXJuZXlzOiBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uW11bXSxcbiAgICBmaWVsZDogT0JUUmFpbEZhcmVUeXBlc1xuICApOiBSYWlsSW5kZXhUb1RpY2tldCB7XG4gICAgcmV0dXJuIF8uZmxhdHRlbihqb3VybmV5cyB8fCBbXSkucmVkdWNlKFxuICAgICAgKHJpdDogUmFpbEluZGV4VG9UaWNrZXQsIGpvdXJuZXk6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb24pOiBSYWlsSW5kZXhUb1RpY2tldCA9PiB7XG4gICAgICAgIGlmICgham91cm5leSkge1xuICAgICAgICAgIHJldHVybiByaXQ7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmVudHJpZXMoam91cm5leVtmaWVsZF0gfHwge30pLmZvckVhY2goXG4gICAgICAgICAgKFt0aWNrZXROYW1lLCBzdWJmYXJlc106IFtzdHJpbmcsIFJlY29yZDxzdHJpbmcsIE9CVFJhaWxKb3VybmV5RmFyZVtdPl0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN1YmZhcmVzKS5mb3JFYWNoKFxuICAgICAgICAgICAgICAoW3RpY2tldFR5cGUsIGZhcmVzXTogW3N0cmluZywgT0JUUmFpbEpvdXJuZXlGYXJlW11dKSA9PiB7XG4gICAgICAgICAgICAgICAgcml0LmFkZEZhcmVzKHRpY2tldE5hbWUsIHRpY2tldFR5cGUsIGZhcmVzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJpdC5uZXh0Sm91cm5leSgpO1xuICAgICAgICByZXR1cm4gcml0O1xuICAgICAgfSxcbiAgICAgIG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVByaWNlcyhcbiAgICBqb3VybmV5czogT0JUUmFpbEpvdXJuZXlPcHRpb25bXSxcbiAgICBwcmljZXM6IHtcbiAgICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xuICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XG4gICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcbiAgICB9LFxuICAgIGlzUmV0dXJuOiBib29sZWFuXG4gICk6IHtcbiAgICBjaGVhcGVzdFRpY2tldHM6IENoZWFwZXN0UmFpbFByaWNlcztcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcbiAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcbiAgfSB7XG4gICAgY29uc3QgbWluID0gKFxuICAgICAgY3VycmVudDoge1xuICAgICAgICBwcmljZTogbnVtYmVyO1xuICAgICAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbjtcbiAgICAgICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlO1xuICAgICAgfSxcbiAgICAgIGZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSxcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXG4gICAgKToge1xuICAgICAgcHJpY2U6IG51bWJlcjtcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uO1xuICAgICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlO1xuICAgIH0gPT4ge1xuICAgICAgaWYgKCFmYXJlcyB8fCBmYXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGxldCBjaGVhcGVzdCA9IGN1cnJlbnQ7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmFyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IGZhcmVzW2ldLnByaWNlO1xuICAgICAgICBpZiAoKGNoZWFwZXN0LnByaWNlID4gbmV4dCAmJiBuZXh0ID4gMCkgfHwgIWNoZWFwZXN0LnByaWNlKSB7XG4gICAgICAgICAgY2hlYXBlc3QgPSB7IHByaWNlOiBuZXh0LCBqb3VybmV5LCBmYXJlOiBmYXJlc1tpXSB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGVhcGVzdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcbiAgICAgIChcbiAgICAgICAgcHJpY2VzMToge1xuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xuICAgICAgICAgIG91dGJvdW5kQ2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xuICAgICAgICB9LFxuICAgICAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvblxuICAgICAgKToge1xuICAgICAgICBjaGVhcGVzdFRpY2tldHM6IENoZWFwZXN0UmFpbFByaWNlcztcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XG4gICAgICAgIG91dGJvdW5kQ2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xuICAgICAgfSA9PiB7XG4gICAgICAgIGNvbnN0IHNvcnQgPSAoZmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZSwgc2Vjb25kOiBPQlRSYWlsSm91cm5leUZhcmUpOiBudW1iZXIgPT4ge1xuICAgICAgICAgIHJldHVybiBmaXJzdC5wcmljZSAtIHNlY29uZC5wcmljZTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZHVhbFNpbmdsZVN0YW5kYXJkSm91cm5leXMgPSBfLmZsYXR0ZW4oXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMpXG4gICAgICAgICkuZmlsdGVyKGpvdXJuZXkxID0+IGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuU3RhbmRhcmQpO1xuXG4gICAgICAgIGNvbnN0IGR1YWxTaW5nbGVGaXJzdEpvdXJuZXlzID0gXy5mbGF0dGVuKFxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKVxuICAgICAgICApLmZpbHRlcigoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdCk7XG4gICAgICAgIGNvbnN0IG9wZW5SZXR1cm5TdGFuZGFyZEpvdXJuZXlzID0gXy5mbGF0dGVuKFxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKVxuICAgICAgICApLmZpbHRlcihcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBvcGVuUmV0dXJuRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcylcbiAgICAgICAgKS5maWx0ZXIoKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+IGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuRmlyc3QpO1xuICAgICAgICBjb25zdCByZXR1cm5TdGFuZGFyZEpvdXJuZXlzID0gXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpKS5maWx0ZXIoXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+IGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuU3RhbmRhcmRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmV0dXJuRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihPYmplY3QudmFsdWVzKGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzKSkuZmlsdGVyKFxuICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLkZpcnN0XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHNpbmdsZVN0YW5kYXJkSm91cm5leXMgPSBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcykpLmZpbHRlcihcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzaW5nbGVGaXJzdEpvdXJuZXlzID0gXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpKS5maWx0ZXIoXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+IGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuRmlyc3RcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBub0R1YWxTdGFuZGFyZDogT0JUUmFpbEpvdXJuZXlGYXJlW10gPSBbXG4gICAgICAgICAgLi4ub3BlblJldHVyblN0YW5kYXJkSm91cm5leXMsXG4gICAgICAgICAgLi4ucmV0dXJuU3RhbmRhcmRKb3VybmV5cyxcbiAgICAgICAgICAuLi5zaW5nbGVTdGFuZGFyZEpvdXJuZXlzXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGFsbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcbiAgICAgICAgICAuLi5kdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyxcbiAgICAgICAgICAuLi5ub0R1YWxTdGFuZGFyZFxuICAgICAgICBdLnNvcnQoc29ydCk7XG4gICAgICAgIGNvbnN0IG5vRHVhbEZpcnN0OiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcbiAgICAgICAgICAuLi5vcGVuUmV0dXJuRmlyc3RKb3VybmV5cyxcbiAgICAgICAgICAuLi5yZXR1cm5GaXJzdEpvdXJuZXlzLFxuICAgICAgICAgIC4uLnNpbmdsZUZpcnN0Sm91cm5leXNcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgYWxsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gWy4uLmR1YWxTaW5nbGVGaXJzdEpvdXJuZXlzLCAuLi5ub0R1YWxGaXJzdF0uc29ydChcbiAgICAgICAgICBzb3J0XG4gICAgICAgICk7XG4gICAgICAgIGlmICghaXNSZXR1cm4pIHtcbiAgICAgICAgICBub0R1YWxTdGFuZGFyZC5zb3J0KHNvcnQpO1xuICAgICAgICAgIGFsbEZpcnN0LnNvcnQoc29ydCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5kdWFsU2luZ2xlSm91cm5leUZhcmVzID0gbWluKFxuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLmR1YWxTaW5nbGVKb3VybmV5RmFyZXMsXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKSkuZmlsdGVyKFxuICAgICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+ICEham91cm5leTFcbiAgICAgICAgICApLFxuICAgICAgICAgIGpvdXJuZXlcbiAgICAgICAgKTtcbiAgICAgICAgcHJpY2VzMS5jaGVhcGVzdFRpY2tldHMub3BlblJldHVybkpvdXJuZXlGYXJlcyA9IG1pbihcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5vcGVuUmV0dXJuSm91cm5leUZhcmVzLFxuICAgICAgICAgIF8uZmxhdHRlbihPYmplY3QudmFsdWVzKGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcykpLmZpbHRlcihcbiAgICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiAhIWpvdXJuZXkxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBqb3VybmV5XG4gICAgICAgICk7XG5cbiAgICAgICAgcHJpY2VzMS5jaGVhcGVzdFRpY2tldHMucmV0dXJuSm91cm5leUZhcmVzID0gbWluKFxuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLnJldHVybkpvdXJuZXlGYXJlcyxcbiAgICAgICAgICBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcykpLmZpbHRlcihcbiAgICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiAhIWpvdXJuZXkxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBqb3VybmV5XG4gICAgICAgICk7XG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLnNwbGl0RmFyZXMgPSBtaW4oXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdFRpY2tldHMuc3BsaXRGYXJlcyxcbiAgICAgICAgICBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LnNwbGl0RmFyZXMpKS5maWx0ZXIoXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxuICAgICAgICAgICksXG4gICAgICAgICAgam91cm5leVxuICAgICAgICApO1xuICAgICAgICBpZiAoaXNSZXR1cm4pIHtcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcbiAgICAgICAgICAgIGFsbFN0YW5kYXJkLFxuICAgICAgICAgICAgam91cm5leVxuICAgICAgICAgICk7XG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IG1pbihcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUsXG4gICAgICAgICAgICBhbGxGaXJzdCxcbiAgICAgICAgICAgIGpvdXJuZXlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSA9IG1pbihcbiAgICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUsXG4gICAgICAgICAgICBub0R1YWxTdGFuZGFyZCxcbiAgICAgICAgICAgIGpvdXJuZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUgPSBtaW4oXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxuICAgICAgICAgICAgbm9EdWFsRmlyc3QsXG4gICAgICAgICAgICBqb3VybmV5XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBpc1N0YW5kYXJkQ2xhc3NTaW5nbGUgPVxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlPy5mYXJlPy5zaW5nbGVPclJldHVybiA9PT1cbiAgICAgICAgICAgIFJhaWxKb3VybmV5RmFyZVR5cGUuU2luZ2xlO1xuICAgICAgICAgIGlmIChpc1N0YW5kYXJkQ2xhc3NTaW5nbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluYm91bmRQcmljZSA9IG1pbihcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZVN0YW5kYXJkSm91cm5leXMsXG4gICAgICAgICAgICAgIGpvdXJuZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBvdXRib3VuZFRvdGFsUHJpY2UgPSBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUucHJpY2U7XG4gICAgICAgICAgICBpZiAob3V0Ym91bmRUb3RhbFByaWNlID4gcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlKSB7XG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSA9XG4gICAgICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgaW5ib3VuZFByaWNlLnByaWNlID4gcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZS5wcmljZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPSBpbmJvdW5kUHJpY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNGaXJzdENsYXNzU2luZ2xlID1cbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZT8uZmFyZT8uc2luZ2xlT3JSZXR1cm4gPT09XG4gICAgICAgICAgICBSYWlsSm91cm5leUZhcmVUeXBlLlNpbmdsZTtcbiAgICAgICAgICBpZiAoaXNGaXJzdENsYXNzU2luZ2xlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmJvdW5kUHJpY2UgPSBtaW4oXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUsXG4gICAgICAgICAgICAgIGR1YWxTaW5nbGVGaXJzdEpvdXJuZXlzLFxuICAgICAgICAgICAgICBqb3VybmV5XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgdG90YWxQcmljZSA9IHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZS5wcmljZTtcbiAgICAgICAgICAgIGlmICh0b3RhbFByaWNlID4gcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlLnByaWNlKSB7XG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZSA9XG4gICAgICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlO1xuICAgICAgICAgICAgICAvLyBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlID0ge1xuICAgICAgICAgICAgICAvLyAgIHByaWNlOiAwLFxuICAgICAgICAgICAgICAvLyAgIGpvdXJuZXk6IG51bGwsXG4gICAgICAgICAgICAgIC8vICAgZmFyZTogbnVsbFxuICAgICAgICAgICAgICAvLyB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgaW5ib3VuZFByaWNlLnByaWNlID4gcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZS5wcmljZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUgPSBpbmJvdW5kUHJpY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSA9IG1pbihcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSxcbiAgICAgICAgICAgIGFsbFN0YW5kYXJkLFxuICAgICAgICAgICAgam91cm5leVxuICAgICAgICAgICk7XG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlID0gbWluKFxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlLFxuICAgICAgICAgICAgYWxsRmlyc3QsXG4gICAgICAgICAgICBqb3VybmV5XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSA9IG1pbihcbiAgICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSxcbiAgICAgICAgICAgIG5vRHVhbFN0YW5kYXJkLFxuICAgICAgICAgICAgam91cm5leVxuICAgICAgICAgICk7XG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlID0gbWluKFxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlLFxuICAgICAgICAgICAgbm9EdWFsRmlyc3QsXG4gICAgICAgICAgICBqb3VybmV5XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJpY2VzMTtcbiAgICAgIH0sXG4gICAgICBwcmljZXNcbiAgICApO1xuICB9XG4gIGFzeW5jIHNlbGVjdFRpY2tldChcbiAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24sXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxuICAgIHNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXMsXG4gICAgd2VsbGJlaW5nOiBib29sZWFuID0gZmFsc2UsXG4gICAgcmVhcHBseUZpbHRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgaXNFdTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZhcmVUeXBlID0gdGhpcy5zZWxlY3RlZFRpY2tldD8uZmFyZT8udHlwZTtcbiAgICBjb25zdCBpZ25vcmVUaWNrZXRFeHRyYXMgPSB0aGlzLnRyYXZlbGNhcmRGYXJlQ2hlY2soXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0Py5qb3VybmV5Py50aWNrZXRFeHRyYXMsXG4gICAgICBmYXJlVHlwZVxuICAgICk7XG5cbiAgICBpZiAoIXNvdXJjZUlkKSB7XG4gICAgICBzb3VyY2VJZCA9IHRoaXMucmVzdWx0cy52YWx1ZVswXS5zb3VyY2VJZC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghcmFpbEZhcmUuc2VsZWN0YWJsZSkge1xuICAgICAgY29uc29sZS5lcnJvcignKysrIFJhaWwgRmFyZSBpcyBub3Qgc2VsZWN0YWJsZSArKysnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LmpvdXJuZXlIYXNoID09PSBqb3VybmV5LmpvdXJuZXlIYXNoICYmXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2ggPT09IHJhaWxGYXJlLmZhcmVIYXNoXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aUZhcmVzLm91dGJvdW5kID0gW107XG4gICAgICBpZiAocmVhcHBseUZpbHRlcikgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRUaWNrZXQgPSB0aGlzLnNlbGVjdGVkVGlja2V0O1xuICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcbiAgICAgIFVzZXJGYXZvcnVyaXRlLkFsdGVybmF0aXZlUmFpbEl0aW5lcmFyeUVuYWJsZWRcbiAgICApO1xuICAgIGlmIChcbiAgICAgIHNlbGVjdGVkVGlja2V0ICYmXG4gICAgICAhd2VsbGJlaW5nICYmXG4gICAgICB0aGlzLmFsdGVybmF0aXZlV2VsbGJlaW5nICYmXG4gICAgICBkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uSW5ib3VuZFxuICAgICkge1xuICAgICAgY29uc3Qgb3V0OiBPQlRSYWlsSm91cm5leU9wdGlvbiA9IHNlbGVjdGVkVGlja2V0LmpvdXJuZXk7XG4gICAgICBjb25zdCBpbkI6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0gam91cm5leTtcblxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzID0gbW9tZW50KG91dC5hcnJpdmVEYXRlVGltZSkuZGlmZihcbiAgICAgICAgbW9tZW50KG91dC5kZXBhcnREYXRlVGltZSksXG4gICAgICAgICdob3VycycsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBjb25zdCB0aW1lRGlmZkluSG91cnNJbiA9IG1vbWVudChpbkIuYXJyaXZlRGF0ZVRpbWUpLmRpZmYoXG4gICAgICAgIG1vbWVudChpbkIuZGVwYXJ0RGF0ZVRpbWUpLFxuICAgICAgICAnaG91cnMnLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgY29uc3QgZGF5RGlmZmVybmNlID0gbW9tZW50KGluQi5kZXBhcnREYXRlVGltZSkuZGlmZihtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSwgJ2RheScpO1xuICAgICAgY29uc3QgdG9BZGQgPSBhd2FpdCB0aGlzLmNoZWNrQWx0ZXJuYXRpdmVIb3VycyhcbiAgICAgICAgdGltZURpZmZJbkhvdXJzICsgdGltZURpZmZJbkhvdXJzSW4sXG4gICAgICAgIGRheURpZmZlcm5jZVxuICAgICAgKTtcbiAgICAgIGlmICh0b0FkZCkge1xuICAgICAgICB0aGlzLnNlbGVjdFRpY2tldChkaXJlY3Rpb24sIGpvdXJuZXksIHJhaWxGYXJlLCBzb3VyY2VJZCwgc2VjdGlvbiwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyA9IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoO1xuXG4gICAgICBzd2l0Y2ggKHNlY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnc2luZ2xlSm91cm5leUZhcmVzJzpcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xuICAgICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAhaWdub3JlVGlja2V0RXh0cmFzICYmXG4gICAgICAgICAgICAvLyBpZiBjYXRlZ29yeSBpcyB0cmF2ZWxjYXJkIHdlIGN1cnJlbnRseSBhZGQgYWxsIHRoZSB0cmF2ZWxjYXJkcyByYXRoZXIgdGhlbiB1c3Qgb25lLCBzaG91bGQgd2UgaW5zdGVhZCBhZGQgbm9uZT8gb3Igc3RpbGwgc2hvdyB0aGUgbW9kYWw/XG4gICAgICAgICAgICByYWlsRmFyZS50ZXJtc1swXS50ZXJtcz8uY2F0ZWdvcnkgIT09ICdUUkFWRUxDQVJEJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHdpbmRvd0NsYXNzOiAncmFpbC10aWNrZXRzLWRpYWxvZycsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IGpvdXJuZXkgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghdGlja2V0RXh0cmFzKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzID8gdGlja2V0RXh0cmFzIDogW107XG4gICAgICAgICAgICBcbiAgICAgICAgICB9IGVsc2UgaWYgKGpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoICYmIHJhaWxGYXJlLnRlcm1zWzBdLnRlcm1zPy5jYXRlZ29yeSA9PT0gJ1RSQVZFTENBUkQnKSB7XG4gICAgICAgICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcbiAgICAgICAgICAgIHNvdXJjZUlkLFxuICAgICAgICAgICAgc2VhcmNoUXVlcnksXG4gICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgcmFpbEZhcmUsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGlzRXVcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aUZhcmVzLm91dGJvdW5kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JldHVybkpvdXJuZXlGYXJlcyc6XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcbiAgICAgICAgICAgICAgam91cm5leSxcbiAgICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICFpZ25vcmVUaWNrZXRFeHRyYXMgJiZcbiAgICAgICAgICAgICAgcmFpbEZhcmUudGVybXNbMF0udGVybXM/LmNhdGVnb3J5ICE9PSAnVFJBVkVMQ0FSRCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB0aWNrZXRFeHRyYXM6IFJhaWxUaWNrZXRFeHRyYVtdID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHdpbmRvd0NsYXNzOiAncmFpbC10aWNrZXRzLWRpYWxvZycsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leSxcbiAgICAgICAgICAgICAgICAgIGluYm91bmRSYWlsSm91cm5leU9wdGlvbjogam91cm5leVxuICAgICAgICAgICAgICAgIH0gLy8gaW4gdGhpcyBjYXNlIGpvdXJuZXkgaXMgdGhlIGluYm91bmRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKCF0aWNrZXRFeHRyYXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRUaWNrZXQuam91cm5leS50aWNrZXRFeHRyYXMgPSB0aWNrZXRFeHRyYXMgPyB0aWNrZXRFeHRyYXMgOiBbXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCAmJiByYWlsRmFyZS50ZXJtc1swXS50ZXJtcz8uY2F0ZWdvcnkgPT09ICdUUkFWRUxDQVJEJykge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkudGlja2V0RXh0cmFzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcbiAgICAgICAgICAgICAgc291cmNlSWQsXG4gICAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXksXG4gICAgICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZSxcbiAgICAgICAgICAgICAgcmFpbEZhcmUsXG4gICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJzpcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xuICAgICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgIWlnbm9yZVRpY2tldEV4dHJhcyAmJlxuICAgICAgICAgICAgICByYWlsRmFyZS50ZXJtc1swXS50ZXJtcz8uY2F0ZWdvcnkgIT09ICdUUkFWRUxDQVJEJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgd2luZG93Q2xhc3M6ICdyYWlsLXRpY2tldHMtZGlhbG9nJywgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxuICAgICAgICAgICAgICAgICAgaW5ib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoIXRpY2tldEV4dHJhcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aWNrZXRFeHRyYXMpO1xuICAgICAgICAgICAgICBzZWxlY3RlZFRpY2tldC5qb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcyA/IHRpY2tldEV4dHJhcyA6IFtdO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoICYmIHJhaWxGYXJlLnRlcm1zWzBdLnRlcm1zPy5jYXRlZ29yeSA9PT0gJ1RSQVZFTENBUkQnKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leS50aWNrZXRFeHRyYXMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcrKysgQWRkaW5nIGluYm91bmQgZHVhbCBzaW5nbGUgdG8gYmFza2V0ICsrKycpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXG4gICAgICAgICAgICAgIHNvdXJjZUlkLFxuICAgICAgICAgICAgICBzZWFyY2hRdWVyeSxcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxuICAgICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUsXG4gICAgICAgICAgICAgIHJhaWxGYXJlLFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgaXNFdSxcbiAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aUZhcmVzLm91dGJvdW5kID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlGYXJlcy5pbmJvdW5kID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJzpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICFpZ25vcmVUaWNrZXRFeHRyYXMgJiZcbiAgICAgICAgICAgIHJhaWxGYXJlLnRlcm1zWzBdLnRlcm1zPy5jYXRlZ29yeSAhPT0gJ1RSQVZFTENBUkQnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCB0aWNrZXRFeHRyYXM6IFJhaWxUaWNrZXRFeHRyYVtdID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgd2luZG93Q2xhc3M6ICdyYWlsLXRpY2tldHMtZGlhbG9nJywgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICAgICAgICAgIC8vIG9ubHkgbmVlZCAxIGpvdXJuZXkgZm9yIG9wZW4gcmV0dXJuXG4gICAgICAgICAgICAgIHsgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogam91cm5leSB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCF0aWNrZXRFeHRyYXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2codGlja2V0RXh0cmFzKTtcbiAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzID8gdGlja2V0RXh0cmFzIDogW107XG4gICAgICAgICAgfSBlbHNlIGlmIChqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCAmJiByYWlsRmFyZS50ZXJtc1swXS50ZXJtcz8uY2F0ZWdvcnkgPT09ICdUUkFWRUxDQVJEJykge1xuICAgICAgICAgICAgam91cm5leS50aWNrZXRFeHRyYXMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGRPcGVuUmV0dXJuVG9CYXNrZXQoc291cmNlSWQsIHNlYXJjaFF1ZXJ5LCBqb3VybmV5LCByYWlsRmFyZSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NwbGl0RmFyZXMnOlxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gc3BsaXQgdGhpcyBqb3VybmV5IGJhY2sgdXAgaW50byBqb3VybmV5LTEgYW5kIGpvdW5yZXktMlxuICAgICAgICAgIC8vIHRoaXMgbWlnaHQgbm90IGJlIHRvbyBiYWRcbiAgICAgICAgICAvLyBvbmNlIGRvbmUgZG8gaWRlbnRpY2FsIHRvIGFkZCByZXR1cm4geCAyXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcbiAgICAgICAgICAgICAgam91cm5leSxcbiAgICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICFpZ25vcmVUaWNrZXRFeHRyYXMgJiZcbiAgICAgICAgICAgICAgcmFpbEZhcmUudGVybXNbMF0udGVybXM/LmNhdGVnb3J5ICE9PSAnVFJBVkVMQ0FSRCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB0aWNrZXRFeHRyYXM6IFJhaWxUaWNrZXRFeHRyYVtdID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHdpbmRvd0NsYXNzOiAncmFpbC10aWNrZXRzLWRpYWxvZycsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leSxcbiAgICAgICAgICAgICAgICAgIGluYm91bmRSYWlsSm91cm5leU9wdGlvbjogam91cm5leVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKCF0aWNrZXRFeHRyYXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc29sZS5sb2codGlja2V0RXh0cmFzKTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRUaWNrZXQuam91cm5leS50aWNrZXRFeHRyYXMgPSB0aWNrZXRFeHRyYXMgPyB0aWNrZXRFeHRyYXMgOiBbXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCAmJiByYWlsRmFyZS50ZXJtc1swXS50ZXJtcz8uY2F0ZWdvcnkgPT09ICdUUkFWRUxDQVJEJykge1xuICAgICAgICAgICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRSZXR1cm5Kb3VybmV5VG9CYXNrZXQoXG4gICAgICAgICAgICAgIHNvdXJjZUlkLFxuICAgICAgICAgICAgICBzZWFyY2hRdWVyeSxcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxuICAgICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUsXG4gICAgICAgICAgICAgIHJhaWxGYXJlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnN0IHRlbXA6IE9CVFJhaWxGYXJlVHlwZXMgPSBzZWN0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKHJlYXBwbHlGaWx0ZXIpIHRoaXMuX2FwcGx5RmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKGhvdXJEaWZmZXJlbmNlOiBudW1iZXIsIGRheURpZmZlcmVuY2U6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vICEgRU5ULTE0ODEgLSBDaGVjayBpZiB3ZSBhcmUgc2VhcmNoaW5nIHJldHVybiByYWlsIC0gYW5kIGFsdGVybmF0aXZlIHdlbGxiZWluZyBpcyBlbmFibGVkXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdO1xuICAgIGNvbnN0IGNoZWNrID1cbiAgICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuZW5hYmxlICYmXG4gICAgICBOdW1iZXIodGhpcy5hbHRlcm5hdGl2ZVdlbGxiZWluZy5ob3VycykgPiAwICYmXG4gICAgICBwYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkgJiZcbiAgICAgIGhvdXJEaWZmZXJlbmNlID49IE51bWJlcih0aGlzLmFsdGVybmF0aXZlV2VsbGJlaW5nLmhvdXJzKSAmJlxuICAgICAgZGF5RGlmZmVyZW5jZSA9PT0gMCAmJlxuICAgICAgdGhpcy5ub09mQWR1bHRzICsgdGhpcy5ub09mQ2hpbGRyZW4gPD0gbWF4VHJhdmVsbGVyV2VsbGJlaW5nO1xuICAgIGlmIChjaGVjaykge1xuICAgICAgY29uc3QgdmFsID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLkFsdGVybmF0aXZlUmFpbE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xuICAgICAgfSk7XG4gICAgICBpZiAodmFsKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xuICAgICAgICB0aGlzLnBlcmZvcm1BbHRlcm5hdGl2ZVJhaWxBbmRIb3RlbFNlYXJjaCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcGVyZm9ybUFsdGVybmF0aXZlUmFpbEFuZEhvdGVsU2VhcmNoKCk6IHZvaWQge1xuICAgIC8vIGFsdGVyIHRoZSBzZWFyY2ggcGFyYW1zXG4gICAgLy8gdGhlIGNhbGwgdGhlIHNlYXJjaCBmdW5jdGlvblxuXG4gICAgY29uc29sZS5sb2coJysrKyBDcmVhdGluZyB0aGUgQWx0ZXJuYXRpdmUgU2VhcmNoIFBhcmFtcyArKysnKTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNIb3RlbCA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF07XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zUmFpbCA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5SYWlsXTtcbiAgICBzZWFyY2hQYXJhbXNIb3RlbC5jaG9zZW4gPSB0cnVlO1xuICAgIHNlYXJjaFBhcmFtc1JhaWwuY2hvc2VuID0gdHJ1ZTtcbiAgICBzZWFyY2hQYXJhbXNIb3RlbC5wcmlvcml0eSA9IHNlYXJjaFBhcmFtc1JhaWwucHJpb3JpdHk7XG4gICAgY29uc3QgaG90ZWxQYXJhbXMgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdO1xuICAgIGNvbnN0IHJhaWxQYXJhbXMgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF07XG4gICAgLy8gRmlyc3Qgb2YgYWxsIC0gYWx0ZXIgdGhlIHJhaWwgaW5ib3VuZCBkYXRlIC0gYWRkIGEgZGF5XG4gICAgcmFpbFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0uaW5Cb3VuZERhdGVUaW1lXG4gICAgICAuYWRkKDEsICdkYXknKVxuICAgICAgLnNldCh7IGhvdXI6IDEwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSk7IC8vIHNldCAxMEFNIGFzIGRlZmF1bHRcbiAgICAvLyBub3cgY3JlYXRlIHRoZSBob3RlbCBzZWFyY2ggcGFyYW1zXG4gICAgaG90ZWxQYXJhbXMubG9jYXRpb25fdHlwZV9zZWxlY3QgPSBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbjtcbiAgICBob3RlbFBhcmFtcy5sb2NhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvO1xuICAgIGhvdGVsUGFyYW1zLnRyYWluc1N0YXRpb24gPSByYWlsUGFyYW1zLnRyYXZlbGxpbmdUby5yYWlsc3RhdGlvbjtcbiAgICBob3RlbFBhcmFtcy5jaGVja2luX2RhdGUgPSByYWlsUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWU7XG4gICAgaG90ZWxQYXJhbXMuY2hlY2tvdXRfZGF0ZSA9IHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lO1xuICAgIGhvdGVsUGFyYW1zLm5vX29mX29jY3VwYW50cyA9IHJhaWxQYXJhbXMubm9PZkFkdWx0cyArIHJhaWxQYXJhbXMubm9PZkNoaWxkcmVuO1xuICAgIGhvdGVsUGFyYW1zLm5vX29mX3Jvb21zID0gMTtcbiAgICBob3RlbFBhcmFtcy5kaXN0YW5jZSA9IDEwO1xuXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoV2VsbGJlaW5nRW51bS5XRUxMQkVJTkcpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0VGlja2V0Tm9BZGQoXG4gICAgZGlyZWN0aW9uOiBSYWlsRGlyZWN0aW9uLFxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXG4gICAgc291cmNlSWQ6IHN0cmluZyxcbiAgICBzZWN0aW9uOiBPQlRSYWlsRmFyZVR5cGVzXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghcmFpbEZhcmUuc2VsZWN0YWJsZSkge1xuICAgICAgY29uc29sZS53YXJuKCcrKysgUmFpbCBmYXJlIGlzIG5vdCBzZWxlY3RhYmxlICsrKycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzT3V0VGlja2V0U2VsZWN0ZWQgPVxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LmpvdXJuZXlIYXNoID09PSBqb3VybmV5LmpvdXJuZXlIYXNoICYmXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2ggPT09IHJhaWxGYXJlLmZhcmVIYXNoO1xuICAgIGNvbnN0IGlzSW5UaWNrZXRTZWxlY3RlZCA9XG4gICAgICBkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uSW5ib3VuZFxuICAgICAgICA/IHRoaXMuc2VsZWN0ZWRJbmJvdW5kVGlja2V0ICYmXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaCAmJlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmJvdW5kVGlja2V0LmZhcmUuZmFyZUhhc2ggPT09IHJhaWxGYXJlLmZhcmVIYXNoXG4gICAgICAgIDogZmFsc2U7XG5cbiAgICBpZiAoaXNPdXRUaWNrZXRTZWxlY3RlZCB8fCAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLkluYm91bmQgJiYgaXNJblRpY2tldFNlbGVjdGVkKSkge1xuICAgICAgY29uc29sZS53YXJuKCcrKysgSm91cm5leSBhbmQgZmFyZSBhcmUgYWxyZWFkeSBzZWxlY3RlZCAtIGJyZWFraW5nIG91dCArKysnKTtcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCA9IG51bGw7XG4gICAgICBpZiAoaXNPdXRUaWNrZXRTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICh0aGlzLl9zZWxlY3RlZFNlY3Rpb24gJiYgdGhpcy5fc2VsZWN0ZWRTZWN0aW9uICE9PSBzZWN0aW9uKSB8fFxuICAgICAgKHRoaXMuX3NlbGVjdGVkU2VjdGlvbiA9PT0gJ3JldHVybkpvdXJuZXlGYXJlcycgJiZcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldD8uZmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllciAhPT1cbiAgICAgICAgICByYWlsRmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcilcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9zZWxlY3RlZFNlY3Rpb24gPSBzZWN0aW9uO1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyA9IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoO1xuICAgIHN3aXRjaCAoc2VjdGlvbikge1xuICAgICAgY2FzZSAnc2luZ2xlSm91cm5leUZhcmVzJzpcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcbiAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXG4gICAgICAgIH07XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXR1cm5Kb3VybmV5RmFyZXMnOlxuICAgICAgY2FzZSAnc3BsaXRGYXJlcyc6XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xuICAgICAgICAgICAgam91cm5leSxcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQgPSB7XG4gICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyc6XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xuICAgICAgICAgICAgam91cm5leSxcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQgPSB7XG4gICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3BlblJldHVybkpvdXJuZXlGYXJlcyc6XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XG4gICAgICAgICAgam91cm5leSxcbiAgICAgICAgICBmYXJlOiByYWlsRmFyZVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnN0IHRlbXA6IE9CVFJhaWxGYXJlVHlwZXMgPSBzZWN0aW9uO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gYWRkIHRvIGJhc2tldCBmb3IgZ28yL3NjaW9uXG4gICAqIEBwYXJhbSBzb3VyY2VJZFxuICAgKiBAcGFyYW0gc2VhcmNoUXVlcnlcbiAgICogQHBhcmFtIGpvdXJuZXlcbiAgICogQHBhcmFtIHJhaWxGYXJlXG4gICAqIEBwYXJhbSBpbmJvdW5kUmFpbEZhcmVcbiAgICogQHBhcmFtIGluYm91bmRKb3VybmV5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyBhZGRUb0Jhc2tldChcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxuICAgIHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyxcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxuICAgIGluYm91bmRSYWlsRmFyZT86IE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgICBpbmJvdW5kSm91cm5leT86IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxuICAgIGluZ29yZUludm9rZWQgPSBmYWxzZSxcbiAgICBpZ25vcmVUaWNrZXRFeHRyYXMgPSBmYWxzZVxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICB0aGlzLmFsdGVybmF0aXZlV2VsbGJlaW5nID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3QoXG4gICAgICBVc2VyRmF2b3J1cml0ZS5BbHRlcm5hdGl2ZVJhaWxJdGluZXJhcnlFbmFibGVkXG4gICAgKTtcbiAgICBpZiAodGhpcy5hbHRlcm5hdGl2ZVdlbGxiZWluZyAmJiBpbmJvdW5kSm91cm5leSkge1xuICAgICAgY29uc3Qgb3V0OiBPQlRSYWlsSm91cm5leU9wdGlvbiA9IGpvdXJuZXk7XG4gICAgICBjb25zdCBpbkI6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0gaW5ib3VuZEpvdXJuZXk7XG5cbiAgICAgIGNvbnN0IHRpbWVEaWZmSW5Ib3VycyA9IG1vbWVudChvdXQuYXJyaXZlRGF0ZVRpbWUpLmRpZmYoXG4gICAgICAgIG1vbWVudChvdXQuZGVwYXJ0RGF0ZVRpbWUpLFxuICAgICAgICAnaG91cnMnLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzSW4gPSBtb21lbnQoaW5CLmFycml2ZURhdGVUaW1lKS5kaWZmKFxuICAgICAgICBtb21lbnQoaW5CLmRlcGFydERhdGVUaW1lKSxcbiAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRheURpZmZlcm5jZSA9IG1vbWVudChpbkIuZGVwYXJ0RGF0ZVRpbWUpLmRpZmYobW9tZW50KG91dC5kZXBhcnREYXRlVGltZSksICdkYXknKTtcbiAgICAgIGNvbnN0IHRvQWRkID0gYXdhaXQgdGhpcy5jaGVja0FsdGVybmF0aXZlSG91cnMoXG4gICAgICAgIHRpbWVEaWZmSW5Ib3VycyArIHRpbWVEaWZmSW5Ib3Vyc0luLFxuICAgICAgICBkYXlEaWZmZXJuY2VcbiAgICAgICk7XG5cbiAgICAgIGlmICghdG9BZGQpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBicmVhayBvdXRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICFpZ25vcmVUaWNrZXRFeHRyYXMgJiZcbiAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQuY29tcG9uZW50ICYmXG4gICAgICByYWlsRmFyZS50ZXJtc1swXS50ZXJtcz8uY2F0ZWdvcnkgIT09ICdUUkFWRUxDQVJEJ1xuICAgICkge1xuICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIHsgY2VudGVyZWQ6IHRydWUsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IGpvdXJuZXksIGluYm91bmRSYWlsSm91cm5leU9wdGlvbjogaW5ib3VuZEpvdXJuZXkgfVxuICAgICAgKTtcbiAgICAgIGlmICghdGlja2V0RXh0cmFzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzID8gdGlja2V0RXh0cmFzIDogW107XG4gICAgfSBlbHNlIGlmIChqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCAmJiByYWlsRmFyZS50ZXJtc1swXS50ZXJtcz8uY2F0ZWdvcnkgPT09ICdUUkFWRUxDQVJEJykge1xuICAgICAgam91cm5leS50aWNrZXRFeHRyYXMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHNlYXJjaFF1ZXJ5LmNob3NlblNlYXJjaFR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5KSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChzb3VyY2VJZCwgc2VhcmNoUXVlcnksIGpvdXJuZXksIHJhaWxGYXJlLCBpbmdvcmVJbnZva2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm93IGNoZWNrIGlmIHdlIGhhdmUgY2hvc2VuIGR1YWwgc2luZ2xlcyBvciByZXR1cm5zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gPT09ICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJykge1xuICAgICAgICBhd2FpdCB0aGlzLmFkZE9wZW5SZXR1cm5Ub0Jhc2tldChzb3VyY2VJZCwgc2VhcmNoUXVlcnksIGpvdXJuZXksIHJhaWxGYXJlLCBpbmdvcmVJbnZva2VkKTtcbiAgICAgIH0gZWxzZSBpZiAocmFpbEZhcmUuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcbiAgICAgICAgICBzb3VyY2VJZCxcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcbiAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgIGluYm91bmRKb3VybmV5LFxuICAgICAgICAgIHJhaWxGYXJlLFxuICAgICAgICAgIGluYm91bmRSYWlsRmFyZSxcbiAgICAgICAgICBpbmdvcmVJbnZva2VkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAhIC0gRHVhbCBTaW5nbGVzXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkRHVhbFNpbmdsZVRvQmFza2V0KFxuICAgICAgICAgIHNvdXJjZUlkLFxuICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxuICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgaW5ib3VuZEpvdXJuZXksXG4gICAgICAgICAgcmFpbEZhcmUsXG4gICAgICAgICAgaW5ib3VuZFJhaWxGYXJlLFxuICAgICAgICAgIGluZ29yZUludm9rZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XG4gIH1cblxuICBhc3luYyBhZGRPcGVuUmV0dXJuVG9CYXNrZXQoXG4gICAgc291cmNlSWQ6IHN0cmluZyxcbiAgICBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMsXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgICBpZ25vcmVJbnZva2VkOiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KHNvdXJjZUlkLCBzZWFyY2hRdWVyeSwgam91cm5leSwgcmFpbEZhcmUsIGlnbm9yZUludm9rZWQpO1xuICB9XG5cbiAgYXN5bmMgYWRkRHVhbFNpbmdsZVRvQmFza2V0KFxuICAgIHNlcnZpY2VJZDogc3RyaW5nLFxuICAgIHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyB8IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyxcbiAgICBvdXRib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXG4gICAgaW5ib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXG4gICAgb3V0Ym91bmRGYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXG4gICAgaW5ib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgICBpZ25vcmVJbnZva2VkOiBib29sZWFuID0gZmFsc2UsXG4gICAgaXNFdTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGdtdDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGNvbnN0IHJhaWxRdWVyeSA9ICFnbXRcbiAgICAgID8gdGhpcy5nZXRTZWFyY2hRdWVyeShzZWFyY2hRdWVyeSBhcyBSYWlsVGVtcFBhcmFtcylcbiAgICAgIDogdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcz4oc2VhcmNoUXVlcnkgYXMgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzKTtcbiAgICBjb25zdCB0cmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudHJhdmVsbGVycyk7XG4gICAgaWYgKGdtdCkge1xuICAgICAgY29uc3QgeyBhZHVsdHMsIGNoaWxkcmVuLCBuZXdUcmF2ZWxsZXJzIH0gPSB0aGlzLnByb2Nlc3NUcmFpbmxpbmVUcmF2ZWxsZXJzKCk7XG4gICAgICByYWlsUXVlcnkudHJhdmVsbGVycyA9IG5ld1RyYXZlbGxlcnM7XG4gICAgICByYWlsUXVlcnkuYWR1bHRzID0gYWR1bHRzO1xuICAgICAgcmFpbFF1ZXJ5LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgfVxuICAgIGlmIChpc0V1KSB7XG4gICAgICAvLyBjaGVjayB0aGUgdHJhdmVsbGVycyBhZ2UgdHlwZSBpcyBjb3JyZWN0XG4gICAgICBjb25zdCBldVRyYXZlbGxlcnMgPSA8VHJhdmVsbGVySW5wdXRbXT5yYWlsUXVlcnkudHJhdmVsbGVycztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXVUcmF2ZWxsZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGV1VHJhdmVsbGVyID0gZXVUcmF2ZWxsZXJzW2ldO1xuICAgICAgICBpZiAoZXVUcmF2ZWxsZXIucGFzc2VuZ2VyVHlwZSA9PT0gUGFzc2VuZ2VySW5wdXRUeXBlLllvdXRoKSB7XG4gICAgICAgICAgLy8gY2hhbmdlIHRoZSBhcHByb3ByaWF0ZSB0cmF2ZWxsZXIgdG8gY2hpbGQgLSBsZXRzIHNlZSBpZiB0aGlzIHdvcmtzXG4gICAgICAgICAgdHJhdmVsbGVyc1tpXS5hZ2VUeXBlID0gYWdlcy5DaGlsZDtcbiAgICAgICAgICB0cmF2ZWxsZXJzW2ldLmlzQ2hpbGQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBjb25zb2xlLmxvZyhgKysrIEVVIFRSQVZFTExFUlM6IGAsdHJhdmVsbGVycyxgICsrK2ApO1xuICAgIH1cblxuICAgIGlmICghcmFpbFF1ZXJ5LmNoaWxkcmVuKSB7XG4gICAgICByYWlsUXVlcnkuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbGV0IGluVGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcbiAgICBsZXQgb3V0VGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcblxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxuICAgIGlmIChpbmJvdW5kPy50aWNrZXRFeHRyYXM/Lmxlbmd0aCkge1xuICAgICAgaW5UaWNrZXRFeHRyYXMgPSB0aGlzLmNyZWF0ZVRpY2tldEV4dHJhc09iamVjdChpbmJvdW5kLnRpY2tldEV4dHJhcyk7XG4gICAgfVxuXG4gICAgaWYgKG91dGJvdW5kPy50aWNrZXRFeHRyYXM/Lmxlbmd0aCkge1xuICAgICAgb3V0VGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3Qob3V0Ym91bmQudGlja2V0RXh0cmFzKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XG5cbiAgICBjb25zdCBvdXRib3VuZEZhcmVMaXN0OiB7IGlkPzogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdID0gb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzPy5mYXJlc1xuICAgICAgPy5sZW5ndGhcbiAgICAgID8gb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzPy5mYXJlcz8ubWFwKHggPT4gKHsgaWQ6IHguaWQsIG5hbWU6IHgubmFtZSB9KSlcbiAgICAgIDogW3sgbmFtZTogb3V0Ym91bmRGYXJlLnR5cGUgfV07XG5cbiAgICBjb25zdCBpbmJvdW5kRmFyZUxpc3Q6IHsgaWQ/OiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10gPSBpbmJvdW5kRmFyZS5pZGVudGlmaWVycz8uZmFyZXM/Lmxlbmd0aFxuICAgICAgPyBpbmJvdW5kRmFyZS5pZGVudGlmaWVycz8uZmFyZXM/Lm1hcCh4ID0+ICh7IGlkOiB4LmlkLCBuYW1lOiB4Lm5hbWUgfSkpXG4gICAgICA6IFt7IG5hbWU6IGluYm91bmRGYXJlLnR5cGUgfV07XG5cbiAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHRoaXMudXNlclNlcnZpY2UuZmluZFNlcnZpY2Uoc2VydmljZUlkKT8ubmFtZTtcblxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxuICAgICAgb3V0Ym91bmRGYXJlLFxuICAgICAgb3V0Ym91bmQsXG4gICAgICBvdXRib3VuZEZhcmVMaXN0LFxuICAgICAgaW5ib3VuZEZhcmUsXG4gICAgICBpbmJvdW5kLFxuICAgICAgaW5ib3VuZEZhcmVMaXN0LFxuICAgICAgc2VydmljZU5hbWVcbiAgICApO1xuICAgIGlmIChiYXNrZXQpIHtcbiAgICAgIGNvbnN0IG91dGJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihvdXRib3VuZCwgaXNFdSk7XG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kLCBpc0V1KTtcbiAgICAgIGNvbnN0IGxvd2VzdFRpY2tldCA9IHRoaXMuZmluZENoZWFwZXN0VGlja2V0KCk7XG4gICAgICBsb3dlc3RUaWNrZXQuYW1vdW50ID0gK2xvd2VzdFRpY2tldC5hbW91bnQudG9GaXhlZCgyKTtcbiAgICAgIGxldCB0aWNrZXRRdWV1ZUxpc3Q6IFJhaWxUaWNrZXRRdWV1ZVtdID0gW107XG4gICAgICBpZiAob3V0Ym91bmRGYXJlLmVUaWNrZXRBdmFpbGFibGUgJiYgaW5ib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZSkge1xuICAgICAgICB0aWNrZXRRdWV1ZUxpc3QgPSBvdXRib3VuZEZhcmUudGlja2V0UXVldWVMaXN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGlja2V0UXVldWVMaXN0ID0gb3V0Ym91bmRGYXJlLnRpY2tldFF1ZXVlTGlzdD8uZmlsdGVyKFxuICAgICAgICAgIChpdGVtOiBSYWlsVGlja2V0UXVldWUpID0+IGl0ZW0udHlwZSAhPT0gJ2VUaWNrZXQnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcbiAgICAgICAgcmVxdWlyZXNPdmVycmlkZVJlYXNvbjogb3V0Ym91bmRGYXJlLnVuYXZhaWxhYmxlIHx8IGluYm91bmRGYXJlLnVuYXZhaWxhYmxlLFxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcbiAgICAgICAgc2VydmljZTogc2VydmljZUlkLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBleHBpcmVzQXQ6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycz8uZXhwaXJlc0F0LFxuICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdDogKHRpY2tldFF1ZXVlTGlzdCB8fCBbXSkubWFwKChpdGVtOiBSYWlsVGlja2V0UXVldWUpOiBUaWNrZXRRdWV1ZUxpc3QgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGFjY291bnRzTGlzdDogKG91dGJvdW5kLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKChpdGVtOiBSYWlsQWNjb3VudCk6IEFjY291bnRzTGlzdCA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogb3V0Ym91bmQudG8sXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWUsXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Ym91bmQuZnJvbSxcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBvdXRib3VuZEZhcmUucHJvdmlkZXJOYW1lLFxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBvdXRib3VuZEZhcmUudHlwZSxcbiAgICAgICAgICAgICAgICBwcmljZTogb3V0Ym91bmRGYXJlLnByaWNlLFxuICAgICAgICAgICAgICAgIGxlZ3M6IG91dGJvdW5kTGVncyxcbiAgICAgICAgICAgICAgICBwZXJtaXR0ZWREZXN0aW5hdGlvbnM6IG91dGJvdW5kRmFyZS5wZXJtaXR0ZWREZXN0aW5hdGlvbnMsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkT3JpZ2luczogb3V0Ym91bmRGYXJlLnBlcm1pdHRlZE9yaWdpbnNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW53YXJkRGV0YWlsOiB7XG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGluYm91bmQuYXJyaXZlRGF0ZVRpbWUsXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IGluYm91bmQudG8sXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogaW5ib3VuZC5kZXBhcnREYXRlVGltZSxcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBpbmJvdW5kLmZyb20sXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaW5ib3VuZEZhcmUucHJvdmlkZXJOYW1lLFxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBpbmJvdW5kRmFyZS50eXBlLFxuICAgICAgICAgICAgICAgIGxlZ3M6IGluYm91bmRMZWdzLFxuICAgICAgICAgICAgICAgIHBlcm1pdHRlZE9yaWdpbnM6IGluYm91bmRGYXJlLnBlcm1pdHRlZE9yaWdpbnMsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkRGVzdGluYXRpb25zOiBpbmJvdW5kRmFyZS5wZXJtaXR0ZWREZXN0aW5hdGlvbnNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxuICAgICAgICAgIG91dGJvdW5kOiB7XG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IHRoaXMuc2VsZWN0ZWRNdWx0aUZhcmVzPy5vdXRib3VuZD8ubGVuZ3RoXG4gICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZE11bHRpRmFyZXMub3V0Ym91bmRcbiAgICAgICAgICAgICAgOiBbb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcbiAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOiBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXG4gICAgICAgICAgICBpc0R1YWxTaW5nbGVSZXR1cm46IHRydWUsXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhvdXRib3VuZC5qb3VybmV5TGVncyksXG4gICAgICAgICAgICBlVGlja2V0OiAhIW91dGJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlLFxuICAgICAgICAgICAgaXNTcGxpdDogISFvdXRib3VuZEZhcmUuaWRlbnRpZmllcnM/LmlzU3BsaXQsXG4gICAgICAgICAgICBmYXJlczogb3V0Ym91bmRGYXJlPy5pZGVudGlmaWVycz8uZmFyZXMsXG4gICAgICAgICAgICBjb21wb3NpdGlvbjogb3V0Ym91bmRGYXJlPy5pZGVudGlmaWVycz8uY29tcG9zaXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIHRpY2tldFF1ZXVlTGlzdCxcbiAgICAgICAgICByZXR1cm46IHtcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogdGhpcy5zZWxlY3RlZE11bHRpRmFyZXM/LmluYm91bmQ/Lmxlbmd0aFxuICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRNdWx0aUZhcmVzLmluYm91bmRcbiAgICAgICAgICAgICAgOiBbaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IGluYm91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxuICAgICAgICAgICAgaXNEdWFsU2luZ2xlUmV0dXJuOiB0cnVlLFxuICAgICAgICAgICAgam91cm5leUxlZ3M6IHRoaXMucmVtb3ZlZFNjaGVkdWxlZFBsYXRmb3JtRnJvbUNhbGxpbmdQb2ludHMoaW5ib3VuZC5qb3VybmV5TGVncyksXG4gICAgICAgICAgICBlVGlja2V0OiAhIWluYm91bmRGYXJlLmVUaWNrZXRBdmFpbGFibGUsXG4gICAgICAgICAgICBpc1NwbGl0OiAhIWluYm91bmRGYXJlLmlkZW50aWZpZXJzPy5pc1NwbGl0LFxuICAgICAgICAgICAgZmFyZXM6IGluYm91bmRGYXJlPy5pZGVudGlmaWVycz8uZmFyZXMsXG4gICAgICAgICAgICBjb21wb3NpdGlvbjogaW5ib3VuZEZhcmU/LmlkZW50aWZpZXJzPy5jb21wb3NpdGlvblxuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNFVTogaXNFdSA/IGlzRXUgOiBudWxsLCAvLyAhc2V0IHRvIG51bGwgYXMgRXZvbHZpIGRvc2VuJ3QgaGF2ZSB0aGlzIGluIHRoZSBzY2hlbWFcbiAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9ucyxcbiAgICAgICAgICBkaXNjb3VudEluZm86IF8udW5pb25XaXRoKFxuICAgICAgICAgICAgb3V0Ym91bmRGYXJlLmRpc2NvdW50SW5mbyxcbiAgICAgICAgICAgIGluYm91bmRGYXJlLmRpc2NvdW50SW5mbyxcbiAgICAgICAgICAgIChhLCBiKSA9PiBhLmlkID09PSBiLmlkICYmIGEuY29kZSA9PT0gYi5jb2RlXG4gICAgICAgICAgKSxcbiAgICAgICAgICBmdWxsUHJpY2U6IE51bWJlcihOdW1iZXIob3V0Ym91bmRGYXJlLmZ1bGxQcmljZSArIGluYm91bmRGYXJlLmZ1bGxQcmljZSkudG9GaXhlZCgyKSksXG4gICAgICAgICAgc2luZ2xlT3JSZXR1cm46IFRpY2tldFR5cGUuU2luZ2xlXG4gICAgICAgIH0sXG4gICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcbiAgICAgICAgY2hpbGRyZW46IHJhaWxRdWVyeS5jaGlsZHJlbiA/IHJhaWxRdWVyeS5jaGlsZHJlbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJpY2U6IE51bWJlcihOdW1iZXIob3V0Ym91bmRGYXJlLnByaWNlICsgaW5ib3VuZEZhcmUucHJpY2UpLnRvRml4ZWQoMikpLFxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcbiAgICAgICAgc2VhcmNoUXVlcnk6IHJhaWxRdWVyeSxcbiAgICAgICAgY28yUGVySXRlbTogKG91dGJvdW5kPy5jbzJQZXJJdGVtID8/IDApICsgKGluYm91bmQ/LmNvMlBlckl0ZW0gPz8gMCksXG4gICAgICAgIGNvMlBlclBhc3NlbmdlcjogKG91dGJvdW5kPy5jbzJQZXJQYXNzZW5nZXIgPz8gMCkgKyAoaW5ib3VuZD8uY28yUGVyUGFzc2VuZ2VyID8/IDApLFxuICAgICAgICBvdXRib3VuZERhdGU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lLFxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5kZXBhcnREYXRlVGltZSxcbiAgICAgICAgbG93ZXN0UHJpY2U6XG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9PSBvdXRib3VuZEZhcmUuY3VycmVuY3lcbiAgICAgICAgICAgID8gbG93ZXN0VGlja2V0LmFtb3VudFxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OlxuICAgICAgICAgIGxvd2VzdFRpY2tldC5hbW91bnQgfHwgbG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZSAhPT0gb3V0Ym91bmRGYXJlLmN1cnJlbmN5XG4gICAgICAgICAgICA/IDxDdXJyZW5jeUNvZGU+bG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGU6IG91dGJvdW5kRmFyZS51bmF2YWlsYWJsZSB8fCBpbmJvdW5kRmFyZS51bmF2YWlsYWJsZSxcbiAgICAgICAgcmVhc29uS2V5czogW1xuICAgICAgICAgIC4uLihvdXRib3VuZEZhcmUucmVxdWlyZXNSZWFzb25LZXlzIHx8IFtdKSxcbiAgICAgICAgICAuLi4oaW5ib3VuZEZhcmUucmVxdWlyZXNSZWFzb25LZXlzIHx8IFtdKVxuICAgICAgICBdXG4gICAgICB9O1xuICAgICAgLy8gaWYgaW5UaWNrZXRFeHRyYXMgb3Igb3V0VGlja2V0RXh0cmFzIGV4aXN0cyBhZGQgdGhlIG9iamVjdCB0byBiYXNrZXRJdGVtXG4gICAgICAvLyBkb250IHNob3cgdGlja2V0RXh0cmFzIGZvciBHTVQuIFdlIHdpbGwgaGF2ZSBhIG5ldyB0aWNrZXQgZm9yIHRpY2tldEV4dHJhc1xuICAgICAgaWYgKGluVGlja2V0RXh0cmFzICYmICFnbXQpIHtcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwucmV0dXJuLnRpY2tldEV4dHJhcyA9IGluVGlja2V0RXh0cmFzO1xuICAgICAgfVxuICAgICAgaWYgKG91dFRpY2tldEV4dHJhcyAmJiAhZ210KSB7XG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLm91dGJvdW5kLnRpY2tldEV4dHJhcyA9IG91dFRpY2tldEV4dHJhcztcbiAgICAgIH1cblxuICAgICAgaWYgKGluVGlja2V0RXh0cmFzIHx8IG91dFRpY2tldEV4dHJhcykge1xuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QgPSBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QuZmlsdGVyKFxuICAgICAgICAgIChpdGVtOiBUaWNrZXRRdWV1ZUxpc3QpID0+IGl0ZW0udHlwZSAhPT0gJ2VUaWNrZXQnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghb3V0Ym91bmRGYXJlLnRpY2tldE9uRGVwYXJ0dXJlQXZhaWxhYmxlIHx8ICFpbmJvdW5kRmFyZS50aWNrZXRPbkRlcGFydHVyZUF2YWlsYWJsZSkge1xuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QgPSBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QuZmlsdGVyKFxuICAgICAgICAgIChpdGVtOiBUaWNrZXRRdWV1ZUxpc3QpID0+IGl0ZW0udHlwZSAhPT0gJ1RpY2tldE9uRGVwYXJ0dXJlJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYmFza2V0SXRlbS5kZXRhaWwuY291bnRyeUNvZGUgPSA8c3RyaW5nPmJhc2tldEl0ZW0uc2VhcmNoUXVlcnkuY291bnRyeUNvZGU7XG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXG4gICAgICAgIGJhc2tldEl0ZW0sXG4gICAgICAgIGludEJhc2tldCxcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxuICAgICAgICB0cmF2ZWxsZXJzLFxuICAgICAgICBvdXRib3VuZEZhcmUucmVxdWlyZXNSZWFzb25LZXlzIHx8IGluYm91bmRGYXJlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGlnbm9yZUludm9rZWRcbiAgICAgICk7XG4gICAgICBpZiAoIW91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbktleXM/Lmxlbmd0aCAmJiAhaW5ib3VuZEZhcmUucmVxdWlyZXNSZWFzb25LZXlzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRvZ2dsZU1lbnUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcbiAgICAgICAgdGhpcy5yZXNlYXJjaFdpdGhOZXdVc2VyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xuICAgIH1cbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jb250aW51ZTtcbiAgfVxuXG4gIGZpbmRDaGVhcGVzdFRpY2tldCgpOiBJQ2hlYXBlc3RQcmljZSB7XG4gICAgaWYgKCF0aGlzLmZ1bGxSZXN1bHRzLmxlbmd0aCkgcmV0dXJuIHsgYW1vdW50OiAwLCBjdXJyZW5jeUNvZGU6ICdHQlAnIH07XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmNob3NlblNlYXJjaFR5cGUgPT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXkpIHtcbiAgICAgICAgbGV0IGNoZWFwZXN0VGlja2V0OiBPQlRSYWlsSm91cm5leUZhcmU7XG4gICAgICAgIHRoaXMuZnVsbFJlc3VsdHNbMF0ub3V0Ym91bmQuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhlbGVtZW50LnNpbmdsZUpvdXJuZXlGYXJlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hlYXBlc3RPbkpvdXJuZXkgPSBlbGVtZW50LnNpbmdsZUpvdXJuZXlGYXJlc1trZXldXG4gICAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhICE9PSBudWxsKVxuICAgICAgICAgICAgICAuc29ydChhID0+IGEucHJpY2UpWzBdO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjaGVhcGVzdE9uSm91cm5leSAmJlxuICAgICAgICAgICAgICAoIWNoZWFwZXN0VGlja2V0IHx8IGNoZWFwZXN0VGlja2V0LnByaWNlID4gY2hlYXBlc3RPbkpvdXJuZXkucHJpY2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNoZWFwZXN0VGlja2V0ID0gY2hlYXBlc3RPbkpvdXJuZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFtb3VudDogY2hlYXBlc3RUaWNrZXQ/LnByaWNlIHx8IDAsXG4gICAgICAgICAgY3VycmVuY3lDb2RlOiBjaGVhcGVzdFRpY2tldD8uY3VycmVuY3kgfHwgJ0dCUCdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGxldCBjaGVhcGVzdE91dGJvdW5kVGlja2V0OiBPQlRSYWlsSm91cm5leUZhcmU7XG4gICAgICBsZXQgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0OiBPQlRSYWlsSm91cm5leUZhcmU7XG4gICAgICB0aGlzLmZ1bGxSZXN1bHRzWzBdLm91dGJvdW5kLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKGVsZW1lbnQuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoZWFwZXN0T25Kb3VybmV5ID0gZWxlbWVudC5kdWFsU2luZ2xlSm91cm5leUZhcmVzW2tleV1cbiAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhICE9IG51bGwpXG4gICAgICAgICAgICAuc29ydChhID0+IGEucHJpY2UpWzBdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoZWFwZXN0T25Kb3VybmV5ICYmXG4gICAgICAgICAgICAoIWNoZWFwZXN0T3V0Ym91bmRUaWNrZXQgfHwgY2hlYXBlc3RPdXRib3VuZFRpY2tldC5wcmljZSA+IGNoZWFwZXN0T25Kb3VybmV5LnByaWNlKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQgPSBjaGVhcGVzdE9uSm91cm5leTtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5rZXlzKGVsZW1lbnQucmV0dXJuSm91cm5leUZhcmVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hlYXBlc3RPbkpvdXJuZXkgPSBlbGVtZW50LnJldHVybkpvdXJuZXlGYXJlc1trZXldXG4gICAgICAgICAgICAuZmlsdGVyKGEgPT4gYSAhPSBudWxsKVxuICAgICAgICAgICAgLnNvcnQoYSA9PiBhLnByaWNlKVswXTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjaGVhcGVzdE9uSm91cm5leSAmJlxuICAgICAgICAgICAgKCFjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQgfHwgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0LnByaWNlID49IGNoZWFwZXN0T25Kb3VybmV5LnByaWNlKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGNoZWFwZXN0T3BlblJldHVyblRpY2tldCA9IGNoZWFwZXN0T25Kb3VybmV5O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgbGV0IGNoZWFwZXN0UmV0dXJuVGlja2V0OiBPQlRSYWlsSm91cm5leUZhcmU7XG4gICAgICBpZiAodGhpcy5mdWxsUmVzdWx0c1swXS5yZXR1cm4/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZ1bGxSZXN1bHRzWzBdLnJldHVybi5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIE9iamVjdC5rZXlzKGVsZW1lbnQuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hlYXBlc3RPbkpvdXJuZXkgPSBlbGVtZW50LmR1YWxTaW5nbGVKb3VybmV5RmFyZXNba2V5XVxuICAgICAgICAgICAgICAuZmlsdGVyKGEgPT4gYSAhPSBudWxsKVxuICAgICAgICAgICAgICAuc29ydChhID0+IGEucHJpY2UpWzBdO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjaGVhcGVzdE9uSm91cm5leSAmJlxuICAgICAgICAgICAgICAoIWNoZWFwZXN0UmV0dXJuVGlja2V0IHx8IGNoZWFwZXN0UmV0dXJuVGlja2V0LnByaWNlID4gY2hlYXBlc3RPbkpvdXJuZXkucHJpY2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNoZWFwZXN0UmV0dXJuVGlja2V0ID0gY2hlYXBlc3RPbkpvdXJuZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5yZXR1cm5Kb3VybmV5RmFyZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWFwZXN0T25Kb3VybmV5ID0gZWxlbWVudC5yZXR1cm5Kb3VybmV5RmFyZXNba2V5XVxuICAgICAgICAgICAgICAuZmlsdGVyKGEgPT4gYSAhPSBudWxsKVxuICAgICAgICAgICAgICAuc29ydChhID0+IGEucHJpY2UpWzBdO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjaGVhcGVzdE9uSm91cm5leSAmJlxuICAgICAgICAgICAgICAoIWNoZWFwZXN0T3BlblJldHVyblRpY2tldCB8fFxuICAgICAgICAgICAgICAgIGNoZWFwZXN0T3BlblJldHVyblRpY2tldC5wcmljZSA+IGNoZWFwZXN0T25Kb3VybmV5LnByaWNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQgPSBjaGVhcGVzdE9uSm91cm5leTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0Py5wcmljZSkge1xuICAgICAgICBpZiAoY2hlYXBlc3RSZXR1cm5UaWNrZXQ/LnByaWNlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2hlYXBlc3RPdXRib3VuZFRpY2tldC5wcmljZSArIGNoZWFwZXN0UmV0dXJuVGlja2V0LnByaWNlIDxcbiAgICAgICAgICAgICAgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0LnByaWNlICYmXG4gICAgICAgICAgICBjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQucHJpY2UgJiZcbiAgICAgICAgICAgIGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQuY3VycmVuY3kgPT0gY2hlYXBlc3RSZXR1cm5UaWNrZXQuY3VycmVuY3lcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGFtb3VudDogY2hlYXBlc3RPdXRib3VuZFRpY2tldC5wcmljZSArIGNoZWFwZXN0UmV0dXJuVGlja2V0LnByaWNlLFxuICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQuY3VycmVuY3lcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQ/LnByaWNlIDwgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0LnByaWNlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFtb3VudDogY2hlYXBlc3RPdXRib3VuZFRpY2tldC5wcmljZSxcbiAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogY2hlYXBlc3RPdXRib3VuZFRpY2tldC5jdXJyZW5jeVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhbW91bnQ6IGNoZWFwZXN0T3BlblJldHVyblRpY2tldC5wcmljZSxcbiAgICAgICAgICBjdXJyZW5jeUNvZGU6IGNoZWFwZXN0T3BlblJldHVyblRpY2tldC5jdXJyZW5jeVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChjaGVhcGVzdFJldHVyblRpY2tldD8ucHJpY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhbW91bnQ6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQucHJpY2UgKyBjaGVhcGVzdFJldHVyblRpY2tldC5wcmljZSxcbiAgICAgICAgICBjdXJyZW5jeUNvZGU6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQuY3VycmVuY3lcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFtb3VudDogY2hlYXBlc3RPdXRib3VuZFRpY2tldD8ucHJpY2UgfHwgMCxcbiAgICAgICAgY3VycmVuY3lDb2RlOiBjaGVhcGVzdE91dGJvdW5kVGlja2V0Py5jdXJyZW5jeSB8fCAnR0JQJ1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4geyBhbW91bnQ6IDAsIGN1cnJlbmN5Q29kZTogJ0dCUCcgfTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VSYWlsUXVlcnkoKSk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpIHtcbiAgICBjb25zdCBwYXJzZWRTdGF0aW9uID0gdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb25zQ29kZXNbdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb25dO1xuICAgIGNvbnNvbGUubG9nKCctLS0gUGFyc2VkIFN0YXRpb24gaXMgOicsIHBhcnNlZFN0YXRpb24pO1xuICAgIGlmIChwYXJzZWRTdGF0aW9uKSB7XG4gICAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9IHBhcnNlZFN0YXRpb24uZGVwO1xuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gcGFyc2VkU3RhdGlvbi5hcnI7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLCB7XG4gICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xuICAgIHRoaXMudmFsaWRhdGlvbkZhdm91cml0ZU1lc3NhZ2VzID0gW107XG4gICAgY29uc3Qgbm93ID0gbW9tZW50KCk7XG5cbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdGcm9tKSB7XG4gICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQbGVhc2UgRW50ZXIgYSBGcm9tIExvY2F0aW9uJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl90cmF2ZWxsaW5nVG8pIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBFbnRlciBhIFRvIExvY2F0aW9uJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3RyYXZlbGxpbmdUbyA9PT0gdGhpcy5fdHJhdmVsbGluZ0Zyb20pIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gc3RhdGlvbiBjYW5ub3QgYmUgdGhlIHNhbWUnLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdXRCb3VuZERhdGVUaW1lPy5pc0JlZm9yZShub3cpKSB7XG4gICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdEZXBhcnR1cmUgRGF0ZS9UaW1lIGNhbm5vdCBiZSBpbiB0aGUgcGFzdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNob3NlblNlYXJjaFR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5KSB7XG4gICAgICAvLyBjaGVjayBmb3IgcmV0dXJuIHNwZWNpZmljIHZhbGlkYXRpb25zIGluIGhlcmVcblxuICAgICAgaWYgKHRoaXMuaW5Cb3VuZERhdGVUaW1lPy5pc1NhbWVPckJlZm9yZSh0aGlzLm91dEJvdW5kRGF0ZVRpbWUpKSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1JldHVybiBEYXRlL1RpbWUgbXVzdCBiZSBhZnRlciBEZXBhcnR1cmUgRGF0ZS9UaW1lJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlhKSB7XG4gICAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbikge1xuICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdQbGVhc2UgZW50ZXIgYSB2aWEgbG9jYXRpb24nLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAhIC0gVHJhaW5saW5lIEVVIFZhbGlkYXRpb25cbiAgICBpZiAoIXRoaXMudWtSYWlsKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmNvbmNhdCh0aGlzLmNoZWNrRXVUcmF2ZWxsZXJzKCkpO1xuICAgIH1cblxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XG4gICAgdGhpcy5pc0Zhdm91cml0ZVZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uRmF2b3VyaXRlTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xuICB9XG5cbiAgY2hlY2tFdVRyYXZlbGxlcnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnNvbGUubG9nKCcrKysgQ2hlY2tpbmcgRVUgVHJhdmVsbGVycyArKysnKTtcbiAgICBjb25zdCBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRoaXMudHJhaW5saW5lVHJhdmVsbGVycy5mb3JFYWNoKHRyYXZlbGxlciA9PiB7XG4gICAgICBpZiAoIXRyYXZlbGxlci5uYW1lKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTUlTU0lORyBUUkFWRUxMRVInKTtcbiAgICAgICAgbWVzc2FnZXMucHVzaCgnTWlzc2luZyB0cmF2ZWxsZXIgbmFtZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRyYXZlbGxlci5hZ2VSYW5nZSkge1xuICAgICAgICBtZXNzYWdlcy5wdXNoKCdNaXNzaW5nIHRyYXZlbGxlciBhZ2UgcmFuZ2UuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmF2ZWxsZXIuYWdlUmFuZ2UgPT09ICd5b3V0aCcgJiYgdHJhdmVsbGVyLmFnZSAhPT0gMCAmJiAhdHJhdmVsbGVyLmFnZSkge1xuICAgICAgICBtZXNzYWdlcy5wdXNoKCdZb3V0aCB0cmF2ZWxsZXJzIG11c3QgaGF2ZSBhbiBleGFjdCBhZ2UgcHJvdmlkZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYXZlbGxlci5hZ2VSYW5nZSA9PT0gJ3lvdXRoJyAmJiB0cmF2ZWxsZXIuYWdlID4gMjUpIHtcbiAgICAgICAgbWVzc2FnZXMucHVzaCgnWW91dGggdHJhdmVsbGVycyBtdXN0IGJlIDI1IG9yIHlvdW5nZXIuJyk7XG4gICAgICB9XG5cbiAgICAgIHRyYXZlbGxlci5sb3lhbHRpZXMuZm9yRWFjaChsb3lhbCA9PiB7XG4gICAgICAgIGlmIChsb3lhbC5sb3lhbHR5TnVtYmVyUmVxdWlyZWQgJiYgIWxveWFsLmxveWFsdHlOdW1iZXIpIHtcbiAgICAgICAgICBtZXNzYWdlcy5wdXNoKCdMb3lhbHR5IG51bWJlciBpcyByZXF1aXJlZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGArKysgTG95YWx0eSBwYXR0ZXJuIHRvIG1hdGNoOiAke2xveWFsLmxveWFsdHlQYXR0ZXJufSwgfCBgLCBsb3lhbCAsYCArKytgKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxveWFsLmxveWFsdHlQYXR0ZXJuICYmXG4gICAgICAgICAgIWxveWFsLmxveWFsdHlOdW1iZXIubWF0Y2gobG95YWwubG95YWx0eVBhdHRlcm4pICYmXG4gICAgICAgICAgbG95YWwubG95YWx0eU51bWJlclxuICAgICAgICApIHtcbiAgICAgICAgICBtZXNzYWdlcy5wdXNoKCdMb3lhbHR5IE51bWJlciBkb2VzIG5vdCBtYXRjaCByZXF1aXJlZCBwYXR0ZXJuOiAnLCBsb3lhbC5sb3lhbHR5UGF0dGVybik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xuICB9XG5cbiAgdHJhdmVsbGVyc1VwZGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XG4gICAgICAvL0NsZWFyIHRoaXMgZm9yIHJlZ3VsYXIgc2VhcmNoZXNcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5leGNoYW5nZURpcmVjdGlvbiA9IG51bGw7XG4gICAgICB0aGlzLnRlbXBQYXJhbXMuZXhjaGFuZ2VGcm9tT3JkZXJJRCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSh0aGlzLnRlbXBQYXJhbXMpO1xuICAgICAgdGhpcy50ZW1wUGFyYW1zLnRyYW5zYWN0aW9uSWRlbnRpZmllciA9IG51bGw7XG5cbiAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIEZyb20vVG8gZm9yIEFpcnBvcnQgRXhwcmVzcyBzZWFyY2hcbiAgICAgIGlmICh0aGlzLmlzQWlycG9ydEV4cHJlc3MpIHtcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdGcm9tID0gbnVsbDtcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUodGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcykpO1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLCB7XG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKHRoaXMuUmFpbGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGV2b2x2aUV4Y2hhbmdlU2VhcmNoKG91dGJvdW5kSWQ6IHN0cmluZywgaW5ib3VuZElkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxSYWlsUXVvdGVSZXN1bHRBcnJheT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSh0aGlzLnRlbXBQYXJhbXMpO1xuICAgIHF1ZXJ5LmRlcGFydHVyZUxvY2F0aW9uSWQgPSBvdXRib3VuZElkO1xuICAgIHF1ZXJ5LmFycml2YWxMb2NhdGlvbklkID0gaW5ib3VuZElkID8gaW5ib3VuZElkIDogbnVsbDtcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhbnNhY3Rpb25JZGVudGlmaWVyID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5SYWlsZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xuICB9XG5cbiAgcHJvY2Vzc0V4Y2hhbmdlU2VhcmNoKHJlc3VsdDogUmFpbFF1b3RlUmVzdWx0QXJyYXkpOiBPQlRSYWlsUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3VsdHMocmVzdWx0KTtcbiAgfVxuXG4gIGdtdFNlYXJjaChxdWVyeTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzKTogT2JzZXJ2YWJsZTxSYWlsUXVvdGVSZXN1bHRBcnJheT4ge1xuICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2UuZ3V0VHJhdmVsbGVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5uZXh0KFt0aGlzLnNlYXJjaFNlcnZpY2UuZ3V0VHJhdmVsbGVyc1swXV0pO1xuICAgICAgdGhpcy50cmFpbmxpbmVUcmF2ZWxsZXJzID0gW107XG4gICAgICB0aGlzLnNldHVwVHJhaW5saW5lRVVUcmF2ZWxsZXJzKCk7XG4gICAgfVxuICAgIGNvbnN0IHsgYWR1bHRzLCBjaGlsZHJlbiwgbmV3VHJhdmVsbGVycyB9ID0gdGhpcy5wcm9jZXNzVHJhaW5saW5lVHJhdmVsbGVycygpO1xuICAgIHF1ZXJ5LnRyYXZlbGxlcnMgPSBuZXdUcmF2ZWxsZXJzO1xuICAgIHF1ZXJ5LmFkdWx0cyA9IGFkdWx0cztcbiAgICBxdWVyeS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMuYm9sdFNlYXJjaFF1ZXJ5LnB1c2gocXVlcnkpO1xuICAgIHJldHVybiB0aGlzLlJhaWxmZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XG4gIH1cblxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeTogUmFpbFJlY2VudFNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5SYWlsLFxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuZm9ybWF0KCksXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycywgdGhpcy51c2VyU2VydmljZS5ib2JvPy5pZClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMpOiBSYWlsUmVjZW50U2VhcmNoQXJncyB7XG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IFJhaWxSZWNlbnRTZWFyY2hBcmdzID0gcXVlcnk7XG5cbiAgICBpZiAodGhpcy5pc0FpcnBvcnRFeHByZXNzKSB7XG4gICAgICBzZWFyY2hRdWVyeS5pc0FpcnBvcnRFeHByZXNzID0gdGhpcy5pc0FpcnBvcnRFeHByZXNzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbikge1xuICAgICAgc2VhcmNoUXVlcnkuYWlycG9ydEV4cHJlc3NTdGF0aW9uID0gdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb247XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhdmVsbGluZ0Zyb20gJiYgIXRoaXMuaXNBaXJwb3J0RXhwcmVzcykge1xuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ0Zyb20gPSB0aGlzLnRyYXZlbGxpbmdGcm9tO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdUbyAmJiAhdGhpcy5pc0FpcnBvcnRFeHByZXNzKSB7XG4gICAgICBzZWFyY2hRdWVyeS50cmF2ZWxsaW5nVG8gPSB0aGlzLnRyYXZlbGxpbmdUbztcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWFMb2NhdGlvbikge1xuICAgICAgc2VhcmNoUXVlcnkudmlhTG9jYXRpb24gPSB0aGlzLnZpYUxvY2F0aW9uO1xuICAgIH1cbiAgICBzZWFyY2hRdWVyeS5vdXRib3VuZFN0YXRpb25Db2RlID0gdGhpcy50cmF2ZWxsaW5nRnJvbT8ucmFpbHN0YXRpb24/LnN0YXRpb25Db2RlO1xuXG4gICAgc2VhcmNoUXVlcnkuaW5ib3VuZFN0YXRpb25Db2RlID0gdGhpcy50cmF2ZWxsaW5nVG8/LnJhaWxzdGF0aW9uPy5zdGF0aW9uQ29kZTtcblxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCcrKysgU3RhcnRpbmcgc2VhcmNoIGZyb20gcmVjZW50IHNlYXJjaDogJywgcmVjZW50U2VhcmNoLCAnICsrKycpO1xuICAgIC8vIGdldCBvdXRCb3VuZERhdGVUaW1lLCBpbkJvdW5kRGF0ZVRpbWUgYW5kIG91dGJvdW5kQ3JpdGVyaWEgLHJldHVybkNyaXRlcmlhXG4gICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZVxuICAgICAgPyBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSlcbiAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lKTtcbiAgICB0aGlzLm91dGJvdW5kQ3JpdGVyaWEgPSB0aGlzLmdldENyaXRlcmlhKFxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSxcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lXG4gICAgKTtcblxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkpIHtcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWVcbiAgICAgICAgPyBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUpXG4gICAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxEYXRlVGltZSk7XG5cbiAgICAgIHRoaXMucmV0dXJuQ3JpdGVyaWEgPSB0aGlzLmdldENyaXRlcmlhKFxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSxcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuQXJyaXZhbERhdGVUaW1lXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbHlTZWFyY2hRdWVyeShyZWNlbnRTZWFyY2guc2VhcmNoQXJncywgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vdXRib3VuZF9kYXRlICYmIHRoaXMuX291dGJvdW5kX3RpbWUpIHtcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fb3V0Ym91bmRfZGF0ZSwgdGhpcy5fb3V0Ym91bmRfdGltZSk7XG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZXR1cm5fZGF0ZSAmJiB0aGlzLl9yZXR1cm5fdGltZSkge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9yZXR1cm5fZGF0ZSwgdGhpcy5fcmV0dXJuX3RpbWUpO1xuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zID0gdGhpcy50ZW1wUGFyYW1zKTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzIHtcbiAgICBpZiAodGhpcy5pc0FpcnBvcnRFeHByZXNzICYmIHRoaXMub3BlblJldHVybikge1xuICAgICAgdGhpcy5vcGVuUmV0dXJuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnk6IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiAnR0InLFxuICAgICAgam91cm5leVR5cGU6IHRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSxcbiAgICAgIGFkdWx0czogdGVtcFBhcmFtcy5ub09mQWR1bHRzLFxuICAgICAgYXJyaXZhbExvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ1RvPy5yYWlsc3RhdGlvbj8uaWQsXG4gICAgICBkZXBhcnR1cmVMb2NhdGlvbklkOiB0ZW1wUGFyYW1zLnRyYXZlbGxpbmdGcm9tPy5yYWlsc3RhdGlvbj8uaWQsXG4gICAgICBjaGlsZHJlbjogdGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4sXG4gICAgICBjbGFzczogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyxcbiAgICAgIGV4dHJhVGltZVRvQ2hhbmdlOiB0ZW1wUGFyYW1zLmV4dHJhVGltZSxcbiAgICAgIGNhcm5ldFRpY2tldDogdGVtcFBhcmFtcy5jYXJuZXRUaWNrZXQsXG4gICAgICBvdXRib3VuZEFycml2YWxEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZSh0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWUpLFxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZSh0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWUpLFxuICAgICAgcmV0dXJuQXJyaXZhbERhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lKSxcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lKSxcbiAgICAgIHZpYUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudmlhTG9jYXRpb24/LnJhaWxzdGF0aW9uPy5pZCxcbiAgICAgIHJhaWxDYXJkUXVhbGlmaWVyczogdGVtcFBhcmFtcy5yYWlsQ2FyZHNcbiAgICAgICAgPy5maWx0ZXIoeCA9PiB4KVxuICAgICAgICA/Lm1hcCgocmFpbENhcmQ6IFJhaWxDYXJkUXVhbGlmaWVycykgPT4ge1xuICAgICAgICAgIHJldHVybiB7IGNvZGU6IHJhaWxDYXJkLmNvZGUsIG51bWJlcjogcmFpbENhcmQuY29kZSwgdXNlcklkOiByYWlsQ2FyZC51c2VySWQgfTtcbiAgICAgICAgfSksXG4gICAgICBleGNoYW5nZURpcmVjdGlvbjogdGVtcFBhcmFtcy5leGNoYW5nZURpcmVjdGlvbixcbiAgICAgIGV4Y2hhbmdlRnJvbU9yZGVySUQ6IHRlbXBQYXJhbXMuZXhjaGFuZ2VGcm9tT3JkZXJJRCxcbiAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogdGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXJcbiAgICB9O1xuXG4gICAgcXVlcnkuY291bnRyeUNvZGUgPSB0aGlzLnVrUmFpbFxuICAgICAgPyAnR0InXG4gICAgICA6IHRlbXBQYXJhbXMudHJhdmVsbGluZ1RvPy5yYWlsc3RhdGlvbj8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSB8fCAnR0InO1xuXG4gICAgaWYgKHRlbXBQYXJhbXMubm9PZkNoaWxkcmVuID09PSAwKSB7XG4gICAgICBxdWVyeS5jaGlsZHJlbiA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZpYUxvY2F0aW9uID09PSAnJykge1xuICAgICAgcXVlcnkudmlhTG9jYXRpb25JZCA9IG51bGw7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWEpIHtcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydDpcbiAgICAgICAgcXVlcnkub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWUgPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZTpcbiAgICAgICAgcXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGArKysgVW5rbm93biBDcml0ZXJpYTogJHt0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmRDcml0ZXJpYX0gKysrYCk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhKSB7XG4gICAgICBjYXNlIFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ6XG4gICAgICAgIHF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlOlxuICAgICAgICBxdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGArKysgVW5rbm93biBDcml0ZXJpYTogJHt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWF9ICsrK2ApO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlKSB7XG4gICAgICBjYXNlIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5OlxuICAgICAgY2FzZSBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXk6XG4gICAgICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcbiAgICAgICAgcXVlcnkucmV0dXJuQXJyaXZhbERhdGVUaW1lID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcykge1xuICAgICAgcXVlcnkuYXJyaXZhbExvY2F0aW9uSWQgPSB0aGlzLl90cmF2ZWxsaW5nVG87XG4gICAgICBxdWVyeS5kZXBhcnR1cmVMb2NhdGlvbklkID0gdGhpcy5fdHJhdmVsbGluZ0Zyb207XG4gICAgfVxuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdHJhdmVsbGVycyBhbmQgY29udmVydCB0aGVtIGludG8gdGhlIHJlcXVpcmVkIGZvcm1hdFxuICAgIGlmICghdGhpcy51a1JhaWwpIHtcbiAgICAgIGNvbnN0IG5ld0NhcmRzOiBhbnlbXSA9IFtdO1xuXG4gICAgICB0aGlzLnRyYWlubGluZVRyYXZlbGxlcnMuZm9yRWFjaCh0cmF2ID0+IHtcbiAgICAgICAgdHJhdi5sb3lhbHRpZXMuZm9yRWFjaChsb3lhbCA9PiB7XG4gICAgICAgICAgaWYgKGxveWFsLmxveWFsdHlDb2RlKSB7XG4gICAgICAgICAgICBuZXdDYXJkcy5wdXNoKHtcbiAgICAgICAgICAgICAgY29kZTogbG95YWwubG95YWx0eUNvZGUsXG4gICAgICAgICAgICAgIG51bWJlcjogbG95YWwubG95YWx0eVByZWZpeCArIGxveWFsLmxveWFsdHlOdW1iZXIsXG4gICAgICAgICAgICAgIHVzZXJJZDogdHJhdi5vcmlnaW5hbFVzZXJHdWVzdElkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBxdWVyeS5yYWlsQ2FyZFF1YWxpZmllcnMgPSBuZXdDYXJkcztcbiAgICB9XG5cbiAgICBjb25zdCB7IGFkdWx0cywgY2hpbGRyZW4sIG5ld1RyYXZlbGxlcnMgfSA9IHRoaXMucHJvY2Vzc1RyYWlubGluZVRyYXZlbGxlcnMoKTtcbiAgICBxdWVyeS50cmF2ZWxsZXJzID0gbmV3VHJhdmVsbGVycztcbiAgICBxdWVyeS5hZHVsdHMgPSBhZHVsdHM7XG4gICAgcXVlcnkuY2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzPihxdWVyeSk7XG4gIH1cblxuICBwdWJsaWMgcHJvY2Vzc1RyYWlubGluZVRyYXZlbGxlcnMoKTogeyBhZHVsdHM6IG51bWJlcjsgY2hpbGRyZW46IG51bWJlcjsgbmV3VHJhdmVsbGVyczogYW55W10gfSB7XG4gICAgbGV0IGFkdWx0cyA9IDA7XG4gICAgbGV0IGNoaWxkcmVuID0gMDtcbiAgICBjb25zdCBuZXdUcmF2ZWxsZXJzOiBhbnlbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyYWlubGluZVRyYXZlbGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRyYXZlbGxlciA9IHRoaXMudHJhaW5saW5lVHJhdmVsbGVyc1tpXTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsUGFzc2VuZ2VyVHlwZSA9IHRoaXMudHJhdmVsbGVycy5maW5kKFxuICAgICAgICB4ID0+IHguaWQgPT09IHRyYXZlbGxlci5vcmlnaW5hbFVzZXJHdWVzdElkXG4gICAgICApPy5pc0NoaWxkXG4gICAgICAgID8gUGFzc2VuZ2VySW5wdXRUeXBlLllvdXRoXG4gICAgICAgIDogUGFzc2VuZ2VySW5wdXRUeXBlLkFkdWx0O1xuXG4gICAgICBjb25zdCBuZXdUcmF2ZWxsZXIgPSB7XG4gICAgICAgIHBhc3NlbmdlclR5cGU6IHRoaXMudWtSYWlsXG4gICAgICAgICAgPyBvcmlnaW5hbFBhc3NlbmdlclR5cGVcbiAgICAgICAgICA6IHRoaXMuX2FnZVJhbmdlVG9QYXNzZW5nZXJUeXBlKHRyYXZlbGxlci5hZ2VSYW5nZSksXG4gICAgICAgIGFnZTogTnVtYmVyKHRyYXZlbGxlci5hZ2UpIHx8IDAsXG4gICAgICAgIGRvYjogJycsXG4gICAgICAgIGlkOiB0cmF2ZWxsZXIub3JpZ2luYWxVc2VyR3Vlc3RJZFxuICAgICAgfTtcblxuICAgICAgaWYgKG5ld1RyYXZlbGxlci5wYXNzZW5nZXJUeXBlID09PSBQYXNzZW5nZXJJbnB1dFR5cGUuWW91dGgpIHtcbiAgICAgICAgY2hpbGRyZW4rKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkdWx0cysrO1xuICAgICAgfVxuXG4gICAgICBuZXdUcmF2ZWxsZXJzLnB1c2gobmV3VHJhdmVsbGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBhZHVsdHMsIGNoaWxkcmVuLCBuZXdUcmF2ZWxsZXJzIH07XG4gIH1cblxuICBwcml2YXRlIF9hZ2VSYW5nZVRvUGFzc2VuZ2VyVHlwZShhZ2VSYW5nZTogc3RyaW5nKTogUGFzc2VuZ2VySW5wdXRUeXBlIHtcbiAgICBpZiAoYWdlUmFuZ2UudG9Mb3dlckNhc2UoKSA9PT0gJ3lvdXRoJykge1xuICAgICAgcmV0dXJuIFBhc3NlbmdlcklucHV0VHlwZS5Zb3V0aDtcbiAgICB9XG5cbiAgICBpZiAoYWdlUmFuZ2UudG9Mb3dlckNhc2UoKSA9PT0gJ2FkdWx0Jykge1xuICAgICAgcmV0dXJuIFBhc3NlbmdlcklucHV0VHlwZS5BZHVsdDtcbiAgICB9XG5cbiAgICBpZiAoYWdlUmFuZ2UudG9Mb3dlckNhc2UoKSA9PT0gJ3NlbmlvcicpIHtcbiAgICAgIHJldHVybiBQYXNzZW5nZXJJbnB1dFR5cGUuU2VuaW9yO1xuICAgIH1cbiAgfVxuXG4gIGdldENyaXRlcmlhKGRlcGFydHVyZURhdGVUaW1lOiBzdHJpbmcsIGFycml2YWxEYXRlVGltZTogc3RyaW5nKTogUmFpbFNlYXJjaENyaXRlcmlhIHtcbiAgICBpZiAoZGVwYXJ0dXJlRGF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0O1xuICAgIH0gZWxzZSBpZiAoYXJyaXZhbERhdGVUaW1lKSB7XG4gICAgICByZXR1cm4gUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZTtcbiAgICB9XG4gICAge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMocHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPik6IHZvaWQge1xuICAgIC8vIG5vdCBuZWVkZWQgcmlnaHQgbm93LCBtaWdodCBuZWVkIHVuY29tbWVudGluZyBhbmQgdGltZSBzdHVmZiBmaWluZ1xuICAgIC8vIGNvbnNvbGUubG9nKHByZXZpb3VzSXRlbXMpO1xuICAgIC8vIGlmIChwcmV2aW91c0l0ZW1zLkZMSUdIVCkge1xuICAgIC8vICAgdHJ5IHtcbiAgICAvLyAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gbW9tZW50KFxuICAgIC8vICAgICAgIChwcmV2aW91c0l0ZW1zLkZMSUdIVC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKVxuICAgIC8vICAgICAgICAgLnJlcGxhY2UoJ1QnLCAnJylcbiAgICAvLyAgICAgICAgIC5zcGxpdCgnLicpWzBdLFxuICAgIC8vICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgLy8gICAgICk7XG4gICAgLy8gICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZVRpbWUubWludXRlcygpICUgMzApXG4gICAgLy8gICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGhpcy5vdXRCb3VuZERhdGVUaW1lLnN1YnRyYWN0KFxuICAgIC8vICAgICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lLm1pbnV0ZXMoKSAlIDMwLFxuICAgIC8vICAgICAgICAgJ21pbnV0ZXMnXG4gICAgLy8gICAgICAgKTtcbiAgICAvLyAgICAgaWYgKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlKSB7XG4gICAgLy8gICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSBtb21lbnQoXG4gICAgLy8gICAgICAgICAocHJldmlvdXNJdGVtcy5GTElHSFQuaW5ib3VuZERhdGUgYXMgc3RyaW5nKVxuICAgIC8vICAgICAgICAgICAucmVwbGFjZSgnVCcsICcnKVxuICAgIC8vICAgICAgICAgICAuc3BsaXQoJy4nKVswXSxcbiAgICAvLyAgICAgICAgICdZWVlZLU1NLUREaGg6bW06c3MnXG4gICAgLy8gICAgICAgKTtcbiAgICAvLyAgICAgICBpZiAodGhpcy5pbkJvdW5kRGF0ZVRpbWUubWludXRlcygpICUgMzApXG4gICAgLy8gICAgICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRoaXMuaW5Cb3VuZERhdGVUaW1lLnN1YnRyYWN0KFxuICAgIC8vICAgICAgICAgICB0aGlzLmluQm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMCxcbiAgICAvLyAgICAgICAgICAgJ21pbnV0ZXMnXG4gICAgLy8gICAgICAgICApO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9IGNhdGNoIHtcbiAgICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIFJhaWwgZnJvbSBmbGlnaHQgaXRlbScpO1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLCBzZXREYXRlVGltZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hSYWlsUXVlcnk6IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyA9IGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XG5cbiAgICBpZiAoc2VhcmNoUmFpbFF1ZXJ5KSB7XG4gICAgICBpZiAoc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgLy8gZ2V0IG91dEJvdW5kRGF0ZVRpbWUsIGluQm91bmREYXRlVGltZSBhbmQgb3V0Ym91bmRDcml0ZXJpYSAscmV0dXJuQ3JpdGVyaWFcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gc2VhcmNoUmFpbFF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWVcbiAgICAgICAgICA/IG1vbWVudChzZWFyY2hSYWlsUXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSlcbiAgICAgICAgICA6IG1vbWVudChzZWFyY2hSYWlsUXVlcnkub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWUpO1xuICAgICAgICB0aGlzLm91dGJvdW5kQ3JpdGVyaWEgPSB0aGlzLmdldENyaXRlcmlhKFxuICAgICAgICAgIHNlYXJjaFJhaWxRdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lLFxuICAgICAgICAgIHNlYXJjaFJhaWxRdWVyeS5vdXRib3VuZEFycml2YWxEYXRlVGltZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChzZWFyY2hSYWlsUXVlcnkuam91cm5leVR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5KSB7XG4gICAgICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSBzZWFyY2hSYWlsUXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWVcbiAgICAgICAgICAgID8gbW9tZW50KHNlYXJjaFJhaWxRdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSlcbiAgICAgICAgICAgIDogbW9tZW50KHNlYXJjaFJhaWxRdWVyeS5yZXR1cm5BcnJpdmFsRGF0ZVRpbWUpO1xuXG4gICAgICAgICAgdGhpcy5yZXR1cm5Dcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXG4gICAgICAgICAgICBzZWFyY2hSYWlsUXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUsXG4gICAgICAgICAgICBzZWFyY2hSYWlsUXVlcnkucmV0dXJuQXJyaXZhbERhdGVUaW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5ub09mQWR1bHRzID0gc2VhcmNoUmFpbFF1ZXJ5LmFkdWx0cztcbiAgICAgIHRoaXMubm9PZkNoaWxkcmVuID0gc2VhcmNoUmFpbFF1ZXJ5LmNoaWxkcmVuO1xuICAgICAgdGhpcy5zZXRRdWVyeUZyb21CYXNrZXRJdGVtKGJhc2tldEl0ZW0pO1xuICAgIH1cbiAgICB0aGlzLmFkZFRyYXZlbGxlcnNGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtKTtcbiAgfVxuXG4gIGdldFJhaWxTdGF0aW9uKGNvZGU6IHN0cmluZywgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KTogT2JzZXJ2YWJsZTxSYWlsU3RhdGlvbj4ge1xuICAgIGlmIChjb2RlLmxlbmd0aCA9PT0gMykge1xuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyLmZldGNoTGlzdCh7IGNvZGUgfSkucGlwZShcbiAgICAgICAgdGFwKCgpID0+IGlzTG9hZGluZz8ubmV4dChmYWxzZSkpLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZWxlY3RlZFJhaWxKb3VybmV5RmFyZSgpOiBSYWlsSm91cm5leUZhcmUge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihcbiAgICByYWlsSm91cm5leU9wdGlvbjogT0JUUmFpbEpvdXJuZXlPcHRpb24sXG4gICAgaXNFVTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGFueVtdIHtcbiAgICBsZXQgbGVnczogYW55W10gPSBbXTtcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LmpvdXJuZXlMZWdzLmxlbmd0aCkge1xuICAgICAgbGVncyA9IHJhaWxKb3VybmV5T3B0aW9uLmpvdXJuZXlMZWdzLm1hcChzZWdtZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvcGVyYXRvcjogaXNFVVxuICAgICAgICAgICAgPyBgJHtzZWdtZW50LnRyYW5zcG9ydERlc2lnbmF0aW9ufSDigKIgJHtzZWdtZW50LnRpbWV0YWJsZUlkfSDigKIgJHtzZWdtZW50Lm9wZXJhdG9yfWBcbiAgICAgICAgICAgIDogc2VnbWVudC5vcGVyYXRvcixcbiAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogc2VnbWVudC5kZXBhcnREYXRlVGltZSxcbiAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogc2VnbWVudC5kZXBhcnQsXG4gICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBzZWdtZW50LmFycml2ZURhdGVUaW1lLFxuICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogc2VnbWVudC5hcnJpdmVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBsZWdzLmZvckVhY2gobGVnID0+IHtcbiAgICAgIC8vICAgZGVsZXRlIGxlZy50cmFuc3BvcnREZXNpZ25hdGlvbjtcbiAgICAgIC8vICAgZGVsZXRlIGxlZy50aW1ldGFibGVJZDtcbiAgICAgIC8vIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGVncztcbiAgfVxuXG4gIGdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb25TcGxpdChcbiAgICByYWlsSm91cm5leU9wdGlvbjogT0JUUmFpbEpvdXJuZXlPcHRpb24sXG4gICAgc3BsaXQ6IHN0cmluZyxcbiAgICBvdXRib3VuZDogYm9vbGVhbixcbiAgICBpbmRleDogbnVtYmVyXG4gICk6IGFueVtdIHtcbiAgICAvLyBzbyB0aGUgZmlyc3QgaW5kZXggd2lsbCBiZSBhIHJldHVybiBmcm9tIGxlZWRzIHRvIGRvbmNhc3RlclxuICAgIC8vIGFsdGhvdWdoIHRoaXMgZnVjbnRpbiB3b3VsZCBncmFiIHRoZSBmdWxsIGxlZWRzIHRvIGtpbmdzWFxuICAgIGxldCBsZWdzOiBhbnlbXSA9IFtdO1xuICAgIGlmIChyYWlsSm91cm5leU9wdGlvbj8uam91cm5leUxlZ3MubGVuZ3RoKSB7XG4gICAgICBsZWdzID0gcmFpbEpvdXJuZXlPcHRpb24uam91cm5leUxlZ3MubWFwKHNlZ21lbnQgPT4ge1xuICAgICAgICBjb25zdCByZXR1cm5PYmplY3QgPSB7XG4gICAgICAgICAgb3BlcmF0b3I6IHNlZ21lbnQub3BlcmF0b3IsXG4gICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHNlZ21lbnQuZGVwYXJ0RGF0ZVRpbWUsXG4gICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHNlZ21lbnQuZGVwYXJ0LFxuICAgICAgICAgIGFycml2YWxEYXRlVGltZTogc2VnbWVudC5hcnJpdmVEYXRlVGltZSxcbiAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHNlZ21lbnQuYXJyaXZlXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNwbGl0U3RhdGlvbiA9IHNlZ21lbnQuY2FsbGluZ1BvaW50cy5maW5kKFxuICAgICAgICAgIChjcDogUmFpbENhbGxpbmdQb2ludCkgPT4gY3Auc3RhdGlvbkNvZGUgPT09IHNwbGl0XG4gICAgICAgICk7XG4gICAgICAgIGlmIChzcGxpdFN0YXRpb24pIHtcbiAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIGlmIChvdXRib3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID0gc3BsaXRTdGF0aW9uLmFycml2YWxEYXRlVGltZTtcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmFycml2YWxTdGF0aW9uTmFtZSA9IHNwbGl0U3RhdGlvbi5zdGF0aW9uTmFtZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5kZXBhcnR1cmVEYXRlVGltZSA9IHNwbGl0U3RhdGlvbi5kZXBhcnR1cmVEYXRlVGltZTtcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmRlcGFydHVyZVN0YXRpb25OYW1lID0gc3BsaXRTdGF0aW9uLnN0YXRpb25OYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAob3V0Ym91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmRlcGFydHVyZURhdGVUaW1lID0gc3BsaXRTdGF0aW9uLmRlcGFydHVyZURhdGVUaW1lO1xuICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZGVwYXJ0dXJlU3RhdGlvbk5hbWUgPSBzcGxpdFN0YXRpb24uc3RhdGlvbk5hbWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID0gc3BsaXRTdGF0aW9uLmFycml2YWxEYXRlVGltZTtcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmFycml2YWxTdGF0aW9uTmFtZSA9IHNwbGl0U3RhdGlvbi5zdGF0aW9uTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmFycml2YWxEYXRlVGltZSA9XG4gICAgICAgICAgICBzZWdtZW50LmNhbGxpbmdQb2ludHNbc2VnbWVudC5jYWxsaW5nUG9pbnRzLmxlbmd0aCAtIDFdLmFycml2YWxEYXRlVGltZTtcbiAgICAgICAgICByZXR1cm5PYmplY3QuYXJyaXZhbFN0YXRpb25OYW1lID1cbiAgICAgICAgICAgIHNlZ21lbnQuY2FsbGluZ1BvaW50c1tzZWdtZW50LmNhbGxpbmdQb2ludHMubGVuZ3RoIC0gMV0uc3RhdGlvbk5hbWU7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmRlcGFydHVyZURhdGVUaW1lID0gc2VnbWVudC5jYWxsaW5nUG9pbnRzWzBdLmRlcGFydHVyZURhdGVUaW1lO1xuICAgICAgICAgIHJldHVybk9iamVjdC5kZXBhcnR1cmVTdGF0aW9uTmFtZSA9IHNlZ21lbnQuY2FsbGluZ1BvaW50c1swXS5zdGF0aW9uTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXR1cm5PYmplY3Q7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZ3M7XG4gIH1cblxuICBhc3luYyBhZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXG4gICAgdGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXMsXG4gICAgcmFpbEpvdXJuZXlPcHRpb246IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXG4gICAgaW5nb3JlSW52b2tlZDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGlzRXU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBnbXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICBjb25zb2xlLmxvZygnYWRkaW5nOiAnLCByYWlsRmFyZSk7XG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gIWdtdFxuICAgICAgPyB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXMgYXMgUmFpbFRlbXBQYXJhbXMpXG4gICAgICA6IHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXM+KHRlbXBQYXJhbXMgYXMgYW55KTtcblxuICAgIGlmIChnbXQpIHtcbiAgICAgIGNvbnN0IHsgYWR1bHRzLCBjaGlsZHJlbiwgbmV3VHJhdmVsbGVycyB9ID0gdGhpcy5wcm9jZXNzVHJhaW5saW5lVHJhdmVsbGVycygpO1xuICAgICAgcmFpbFF1ZXJ5LnRyYXZlbGxlcnMgPSBuZXdUcmF2ZWxsZXJzO1xuICAgICAgcmFpbFF1ZXJ5LmFkdWx0cyA9IGFkdWx0cztcbiAgICAgIHJhaWxRdWVyeS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIH1cblxuICAgIGlmICghcmFpbFF1ZXJ5LmNoaWxkcmVuKSB7XG4gICAgICByYWlsUXVlcnkuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhdmVsbGVycyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRyYXZlbGxlcnMpO1xuXG4gICAgaWYgKGlzRXUpIHtcbiAgICAgIC8vIGNoZWNrIHRoZSB0cmF2ZWxsZXJzIGFnZSB0eXBlIGlzIGNvcnJlY3RcbiAgICAgIGNvbnN0IGV1VHJhdmVsbGVycyA9IDxUcmF2ZWxsZXJJbnB1dFtdPnJhaWxRdWVyeS50cmF2ZWxsZXJzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldVRyYXZlbGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXVUcmF2ZWxsZXIgPSBldVRyYXZlbGxlcnNbaV07XG4gICAgICAgIGlmIChldVRyYXZlbGxlci5wYXNzZW5nZXJUeXBlID09PSBQYXNzZW5nZXJJbnB1dFR5cGUuWW91dGgpIHtcbiAgICAgICAgICAvLyBjaGFuZ2UgdGhlIGFwcHJvcHJpYXRlIHRyYXZlbGxlciB0byBjaGlsZCAtIGxldHMgc2VlIGlmIHRoaXMgd29ya3NcbiAgICAgICAgICB0cmF2ZWxsZXJzW2ldLmFnZVR5cGUgPSBhZ2VzLkNoaWxkO1xuICAgICAgICAgIHRyYXZlbGxlcnNbaV0uaXNDaGlsZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNvbnNvbGUubG9nKGArKysgRVUgVFJBVkVMTEVSUzogYCx0cmF2ZWxsZXJzLGAgKysrYCk7XG4gICAgfVxuXG4gICAgbGV0IG91dFRpY2tldEV4dHJhczogVGlja2V0RXh0cmFzW107XG4gICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBjcmVhdGUgVGlja2V0RXh0cmFzT2JqZWN0IGFuZCBhZGRlZCBpdCB0byB0aGUgYmFza2V0XG4gICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uPy50aWNrZXRFeHRyYXM/Lmxlbmd0aCkge1xuICAgICAgb3V0VGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QocmFpbEpvdXJuZXlPcHRpb24udGlja2V0RXh0cmFzKTtcbiAgICB9XG5cbiAgICAvLyBpZiAocmFpbEpvdXJuZXlPcHRpb24udW5zZWxsYWJsZSkge1xuICAgIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgLy8gfVxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcblxuICAgIGNvbnN0IHJhaWxGYXJlTGlzdDogeyBpZD86IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSA9IHJhaWxGYXJlLmlkZW50aWZpZXJzPy5mYXJlcz8ubGVuZ3RoXG4gICAgICA/IHJhaWxGYXJlLmlkZW50aWZpZXJzPy5mYXJlcz8ubWFwKHggPT4gKHsgaWQ6IHguaWQsIG5hbWU6IHgubmFtZSB9KSlcbiAgICAgIDogW3sgbmFtZTogcmFpbEZhcmUudHlwZSB9XTtcblxuICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShzZXJ2aWNlSWQpPy5uYW1lO1xuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxuICAgICAgcmFpbEZhcmUsXG4gICAgICByYWlsSm91cm5leU9wdGlvbixcbiAgICAgIHJhaWxGYXJlTGlzdCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHNlcnZpY2VOYW1lXG4gICAgKTtcbiAgICBpZiAoYmFza2V0KSB7XG4gICAgICBjb25zdCBsZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uLCBpc0V1KTtcblxuICAgICAgY29uc3QgbG93ZXN0VGlja2V0ID0gdGhpcy5maW5kQ2hlYXBlc3RUaWNrZXQoKTtcbiAgICAgIGxvd2VzdFRpY2tldC5hbW91bnQgPSArbG93ZXN0VGlja2V0LmFtb3VudC50b0ZpeGVkKDIpO1xuXG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcbiAgICAgICAgcmVxdWlyZXNPdmVycmlkZVJlYXNvbjogcmFpbEZhcmUudW5hdmFpbGFibGUsXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQudG9TdHJpbmcoKSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgZXhwaXJlc0F0OiByYWlsRmFyZS5pZGVudGlmaWVycz8uZXhwaXJlc0F0LFxuICAgICAgICAgIGlzRVU6IGlzRXUgPyBpc0V1IDogbnVsbCwgLy8gIXNldCB0byBudWxsIGFzIEV2b2x2aSBkb3Nlbid0IGhhdmUgdGhpcyBpbiB0aGUgc2NoZW1hXG4gICAgICAgICAgdGlja2V0UXVldWVMaXN0OiAocmFpbEZhcmUudGlja2V0UXVldWVMaXN0IHx8IFtdKS5tYXAoXG4gICAgICAgICAgICAoaXRlbTogUmFpbFRpY2tldFF1ZXVlKTogVGlja2V0UXVldWVMaXN0ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSxcbiAgICAgICAgICBhY2NvdW50c0xpc3Q6IChyYWlsSm91cm5leU9wdGlvbi5hY2NvdW50c0xpc3QgfHwgW10pLm1hcChcbiAgICAgICAgICAgIChpdGVtOiBSYWlsQWNjb3VudCk6IEFjY291bnRzTGlzdCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLFxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogcmFpbEpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHJhaWxKb3VybmV5T3B0aW9uLnRvLFxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHJhaWxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHJhaWxKb3VybmV5T3B0aW9uLmZyb20sXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogcmFpbEZhcmUucHJvdmlkZXJOYW1lLFxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiByYWlsRmFyZS50eXBlLFxuICAgICAgICAgICAgICAgIHByaWNlOiByYWlsRmFyZS5wcmljZSxcbiAgICAgICAgICAgICAgICBsZWdzLFxuICAgICAgICAgICAgICAgIHBlcm1pdHRlZERlc3RpbmF0aW9uczogcmFpbEZhcmUucGVybWl0dGVkRGVzdGluYXRpb25zLFxuICAgICAgICAgICAgICAgIHBlcm1pdHRlZE9yaWdpbnM6IHJhaWxGYXJlLnBlcm1pdHRlZE9yaWdpbnNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiByYWlsRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhcmFpbEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogdGhpcy5zZWxlY3RlZE11bHRpRmFyZXM/Lm91dGJvdW5kPy5sZW5ndGhcbiAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkTXVsdGlGYXJlcy5vdXRib3VuZFxuICAgICAgICAgICAgICA6IFtyYWlsRmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcl0sXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogcmFpbEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcbiAgICAgICAgICAgICAgcmFpbEpvdXJuZXlPcHRpb24uam91cm5leUxlZ3NcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc1NwbGl0OiAhIXJhaWxGYXJlLmlkZW50aWZpZXJzPy5pc1NwbGl0LFxuICAgICAgICAgICAgZmFyZXM6IHJhaWxGYXJlPy5pZGVudGlmaWVycz8uZmFyZXMsXG4gICAgICAgICAgICBjb21wb3NpdGlvbjogcmFpbEZhcmUuaWRlbnRpZmllcnM/LmNvbXBvc2l0aW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9ucyxcbiAgICAgICAgICBkaXNjb3VudEluZm86IHJhaWxGYXJlLmRpc2NvdW50SW5mbyxcbiAgICAgICAgICBmdWxsUHJpY2U6IHJhaWxGYXJlLmZ1bGxQcmljZSxcbiAgICAgICAgICBzaW5nbGVPclJldHVybjpcbiAgICAgICAgICAgIHRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5IHx8ICFnbXRcbiAgICAgICAgICAgICAgPyBUaWNrZXRUeXBlLlJldHVyblxuICAgICAgICAgICAgICA6IFRpY2tldFR5cGUuU2luZ2xlXG4gICAgICAgIH0sXG4gICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcbiAgICAgICAgY2hpbGRyZW46IHJhaWxRdWVyeS5jaGlsZHJlbiA/IHJhaWxRdWVyeS5jaGlsZHJlbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJpY2U6IHJhaWxGYXJlLnByaWNlLFxuICAgICAgICBjdXJyZW5jeTogcmFpbEZhcmUuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxuICAgICAgICBjbzJQZXJJdGVtOiByYWlsSm91cm5leU9wdGlvbi5jbzJQZXJJdGVtLFxuICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IHJhaWxKb3VybmV5T3B0aW9uLmNvMlBlclBhc3NlbmdlcixcbiAgICAgICAgb3V0Ym91bmREYXRlOiByYWlsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcbiAgICAgICAgbG93ZXN0UHJpY2U6XG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9PSByYWlsRmFyZS5jdXJyZW5jeVxuICAgICAgICAgICAgPyBsb3dlc3RUaWNrZXQuYW1vdW50XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6XG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9PSByYWlsRmFyZS5jdXJyZW5jeVxuICAgICAgICAgICAgPyA8Q3VycmVuY3lDb2RlPmxvd2VzdFRpY2tldC5jdXJyZW5jeUNvZGVcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgYWdlbnRPdmVycm9kZVVuYXZhaWxhYmxlOiByYWlsRmFyZS51bmF2YWlsYWJsZSxcbiAgICAgICAgcmVhc29uS2V5czogcmFpbEZhcmUucmVxdWlyZXNSZWFzb25LZXlzXG4gICAgICB9O1xuXG4gICAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cbiAgICAgIC8vIGRvbnQgc2hvdyB0aWNrZXRFeHRyYXMgZm9yIERURC4gV2Ugd2lsbCBoYXZlIGEgbmV3IHRpY2tldCBmb3IgdGlja2V0RXh0cmFzXG4gICAgICBpZiAob3V0VGlja2V0RXh0cmFzICYmICFyYWlsRmFyZS50eXBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3RyYXZlbGNhcmQnKSAmJiAhZ210KSB7XG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLm91dGJvdW5kLnRpY2tldEV4dHJhcyA9IG91dFRpY2tldEV4dHJhcztcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwudGlja2V0UXVldWVMaXN0ID0gYmFza2V0SXRlbS5kZXRhaWwudGlja2V0UXVldWVMaXN0LmZpbHRlcihcbiAgICAgICAgICAoaXRlbTogVGlja2V0UXVldWVMaXN0KSA9PiBpdGVtLnR5cGUgIT09ICdlVGlja2V0J1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJhaWxGYXJlLnRpY2tldE9uRGVwYXJ0dXJlQXZhaWxhYmxlKSB7XG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLnRpY2tldFF1ZXVlTGlzdCA9IGJhc2tldEl0ZW0uZGV0YWlsLnRpY2tldFF1ZXVlTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW06IFRpY2tldFF1ZXVlTGlzdCkgPT4gaXRlbS50eXBlICE9PSAnVGlja2V0T25EZXBhcnR1cmUnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBiYXNrZXRJdGVtLmRldGFpbC5jb3VudHJ5Q29kZSA9IDxzdHJpbmc+YmFza2V0SXRlbS5zZWFyY2hRdWVyeS5jb3VudHJ5Q29kZTtcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcbiAgICAgICAgYmFza2V0SXRlbSxcbiAgICAgICAgaW50QmFza2V0LFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICAgIHRyYXZlbGxlcnMsXG4gICAgICAgIHJhaWxGYXJlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGluZ29yZUludm9rZWRcbiAgICAgICk7XG4gICAgICBpZiAoIXJhaWxGYXJlLnJlcXVpcmVzUmVhc29uS2V5cz8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuYmFza2V0U2VydmljZS50b2dnbGVNZW51KCk7XG4gICAgICB9XG4gICAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XG4gICAgICAgIHRoaXMucmVzZWFyY2hXaXRoTmV3VXNlcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdoYXRIYXBwZW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xuICB9XG5cbiAgYXN5bmMgYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxuICAgIHNlcnZpY2VJZDogc3RyaW5nLFxuICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zIHwgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzLFxuICAgIG91dGJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICBpbmJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICBvdXRib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgICBpbmJvdW5kRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxuICAgIGluZ29yZUludm9rZWQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBnbXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICAvLyBpZiAob3V0Ym91bmQudW5zZWxsYWJsZSkge1xuICAgIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gIWdtdFxuICAgICAgPyB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXMgYXMgUmFpbFRlbXBQYXJhbXMpXG4gICAgICA6IHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXM+KHRlbXBQYXJhbXMgYXMgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzKTtcblxuICAgIGlmIChnbXQpIHtcbiAgICAgIGNvbnN0IHsgYWR1bHRzLCBjaGlsZHJlbiwgbmV3VHJhdmVsbGVycyB9ID0gdGhpcy5wcm9jZXNzVHJhaW5saW5lVHJhdmVsbGVycygpO1xuICAgICAgcmFpbFF1ZXJ5LnRyYXZlbGxlcnMgPSBuZXdUcmF2ZWxsZXJzO1xuICAgICAgcmFpbFF1ZXJ5LmFkdWx0cyA9IGFkdWx0cztcbiAgICAgIHJhaWxRdWVyeS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIH1cblxuICAgIGxldCB0aWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xuXG4gICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBjcmVhdGUgVGlja2V0RXh0cmFzT2JqZWN0IGFuZCBhZGRlZCBpdCB0byB0aGUgYmFza2V0XG5cbiAgICBpZiAob3V0Ym91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XG4gICAgICB0aWNrZXRFeHRyYXMgPSB0aGlzLmNyZWF0ZVRpY2tldEV4dHJhc09iamVjdChvdXRib3VuZC50aWNrZXRFeHRyYXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcblxuICAgIGNvbnN0IG91dGJvdW5kRmFyZUxpc3Q6IHsgaWQ/OiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10gPSBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnM/LmZhcmVzXG4gICAgICA/Lmxlbmd0aFxuICAgICAgPyBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnM/LmZhcmVzPy5tYXAoeCA9PiAoeyBpZDogeC5pZCwgbmFtZTogeC5uYW1lIH0pKVxuICAgICAgOiBbeyBuYW1lOiBvdXRib3VuZEZhcmUudHlwZSB9XTtcblxuICAgIGNvbnN0IGluYm91bmRGYXJlTGlzdDogeyBpZD86IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSA9IGluYm91bmRGYXJlLmlkZW50aWZpZXJzPy5mYXJlcz8ubGVuZ3RoXG4gICAgICA/IGluYm91bmRGYXJlLmlkZW50aWZpZXJzPy5mYXJlcz8ubWFwKHggPT4gKHsgaWQ6IHguaWQsIG5hbWU6IHgubmFtZSB9KSlcbiAgICAgIDogW3sgbmFtZTogaW5ib3VuZEZhcmUudHlwZSB9XTtcblxuICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShzZXJ2aWNlSWQpPy5uYW1lO1xuXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoXG4gICAgICBvdXRib3VuZEZhcmUsXG4gICAgICBvdXRib3VuZCxcbiAgICAgIG91dGJvdW5kRmFyZUxpc3QsXG4gICAgICBpbmJvdW5kRmFyZSxcbiAgICAgIGluYm91bmQsXG4gICAgICBpbmJvdW5kRmFyZUxpc3QsXG4gICAgICBzZXJ2aWNlTmFtZVxuICAgICk7XG4gICAgaWYgKGJhc2tldCkge1xuICAgICAgLy8gbWF0Y2ggam91cm5leS0xIGFuZCBkbyB0aGUgYmVsb3cgYW5kIHRoZW4gam91cm5leSAyLCBzaW1wbGVzPz9cbiAgICAgIGNvbnN0IG91dGJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihvdXRib3VuZCk7XG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcbiAgICAgIGNvbnN0IGxvd2VzdFRpY2tldCA9IHRoaXMuZmluZENoZWFwZXN0VGlja2V0KCk7XG4gICAgICBsb3dlc3RUaWNrZXQuYW1vdW50ID0gK2xvd2VzdFRpY2tldC5hbW91bnQudG9GaXhlZCgyKTtcblxuICAgICAgLy8gKiBSZXR1cm4gcHJpY2UgYW5kIGZ1bGwgcHJpY2UgYXJlIG9ubHkgYXBwbGllZCB0byBUcmFpbmxpbmUgc3BsaXQgdGlja2V0c1xuICAgICAgLy8gKiBSZXR1cm4gZmFyZXMgc29tZXRpbWVzIGNvbWViYWNrIHdpdGggdGhlIHByaWNlXG4gICAgICBjb25zdCBhcHBseVJldHVyblByaWNlID1cbiAgICAgICAgc2VydmljZU5hbWUgPT09IFNlcnZpY2VQcm92aWRlci5UcmFpbmxpbmUgJiYgaW5ib3VuZEZhcmUuaWRlbnRpZmllcnM/LmlzU3BsaXQ7XG5cbiAgICAgIGNvbnN0IHJldHVyblByaWNlOiBudW1iZXIgPSBhcHBseVJldHVyblByaWNlID8gaW5ib3VuZEZhcmUucHJpY2UgfHwgMCA6IDA7XG4gICAgICBjb25zdCByZXR1cm5GdWxsUHJpY2U6IG51bWJlciA9IGFwcGx5UmV0dXJuUHJpY2UgPyBpbmJvdW5kRmFyZS5mdWxsUHJpY2UgfHwgMCA6IDA7XG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcbiAgICAgICAgcmVxdWlyZXNPdmVycmlkZVJlYXNvbjogb3V0Ym91bmRGYXJlLnVuYXZhaWxhYmxlLCAvLyAhIC0gc2hvdWxkIGJlIHRoZSBzYW1lIG9uIGJvdGggc28gb25seSBuZWVkIHRvIGNoZWNrIG9uZVxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcbiAgICAgICAgc2VydmljZTogc2VydmljZUlkLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBleHBpcmVzQXQ6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycz8uZXhwaXJlc0F0LFxuICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdDogKG91dGJvdW5kRmFyZS50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcbiAgICAgICAgICAgIChpdGVtOiBSYWlsVGlja2V0UXVldWUpOiBUaWNrZXRRdWV1ZUxpc3QgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLFxuICAgICAgICAgIGFjY291bnRzTGlzdDogKG91dGJvdW5kLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKChpdGVtOiBSYWlsQWNjb3VudCk6IEFjY291bnRzTGlzdCA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogb3V0Ym91bmQudG8sXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWUsXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Ym91bmQuZnJvbSxcblxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IG91dGJvdW5kRmFyZS5wcm92aWRlck5hbWUsXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IG91dGJvdW5kRmFyZS50eXBlLFxuICAgICAgICAgICAgICAgIHByaWNlOiBvdXRib3VuZEZhcmUucHJpY2UsXG4gICAgICAgICAgICAgICAgbGVnczogb3V0Ym91bmRMZWdzLFxuICAgICAgICAgICAgICAgIHBlcm1pdHRlZERlc3RpbmF0aW9uczogb3V0Ym91bmRGYXJlLnBlcm1pdHRlZERlc3RpbmF0aW9ucyxcbiAgICAgICAgICAgICAgICBwZXJtaXR0ZWRPcmlnaW5zOiBvdXRib3VuZEZhcmUucGVybWl0dGVkT3JpZ2luc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbndhcmREZXRhaWw6IHtcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZSxcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogaW5ib3VuZC50byxcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGluYm91bmQuZnJvbSxcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBpbmJvdW5kRmFyZS5wcm92aWRlck5hbWUsXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IGluYm91bmRGYXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgbGVnczogaW5ib3VuZExlZ3MsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkRGVzdGluYXRpb25zOiBpbmJvdW5kRmFyZS5wZXJtaXR0ZWREZXN0aW5hdGlvbnMsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkT3JpZ2luczogaW5ib3VuZEZhcmUucGVybWl0dGVkT3JpZ2luc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhb3V0Ym91bmRGYXJlLmVUaWNrZXRBdmFpbGFibGUsXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcixcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKG91dGJvdW5kLmpvdXJuZXlMZWdzKSxcbiAgICAgICAgICAgIGlzU3BsaXQ6ICEhb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzPy5pc1NwbGl0LFxuICAgICAgICAgICAgZmFyZXM6IG91dGJvdW5kRmFyZT8uaWRlbnRpZmllcnM/LmZhcmVzLFxuICAgICAgICAgICAgY29tcG9zaXRpb246IG91dGJvdW5kRmFyZT8uaWRlbnRpZmllcnM/LmNvbXBvc2l0aW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyB0aWNrZXRRdWV1ZUxpc3QsXG4gICAgICAgICAgcmV0dXJuOiB7XG4gICAgICAgICAgICBlVGlja2V0OiAhIWluYm91bmRGYXJlLmVUaWNrZXRBdmFpbGFibGUsXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtpbmJvdW5kRmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcl0sXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhpbmJvdW5kLmpvdXJuZXlMZWdzKSxcbiAgICAgICAgICAgIGlzU3BsaXQ6ICEhaW5ib3VuZEZhcmUuaWRlbnRpZmllcnM/LmlzU3BsaXQsXG4gICAgICAgICAgICBmYXJlczogaW5ib3VuZEZhcmU/LmlkZW50aWZpZXJzPy5mYXJlcyxcbiAgICAgICAgICAgIGNvbXBvc2l0aW9uOiBpbmJvdW5kRmFyZT8uaWRlbnRpZmllcnM/LmNvbXBvc2l0aW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9ucyxcbiAgICAgICAgICBkaXNjb3VudEluZm86IF8udW5pb25XaXRoKFxuICAgICAgICAgICAgb3V0Ym91bmRGYXJlLmRpc2NvdW50SW5mbyxcbiAgICAgICAgICAgIGluYm91bmRGYXJlLmRpc2NvdW50SW5mbyxcbiAgICAgICAgICAgIChhLCBiKSA9PiBhLmlkID09PSBiLmlkICYmIGEuY29kZSA9PT0gYi5jb2RlXG4gICAgICAgICAgKSxcbiAgICAgICAgICBmdWxsUHJpY2U6IG91dGJvdW5kRmFyZS5mdWxsUHJpY2UgKyByZXR1cm5GdWxsUHJpY2UsXG4gICAgICAgICAgc2luZ2xlT3JSZXR1cm46IFRpY2tldFR5cGUuUmV0dXJuXG4gICAgICAgIH0sXG4gICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcbiAgICAgICAgY2hpbGRyZW46IHJhaWxRdWVyeS5jaGlsZHJlbixcbiAgICAgICAgcHJpY2U6IG91dGJvdW5kRmFyZS5wcmljZSArIHJldHVyblByaWNlLFxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcbiAgICAgICAgc2VhcmNoUXVlcnk6IHJhaWxRdWVyeSxcbiAgICAgICAgY28yUGVySXRlbTogKG91dGJvdW5kPy5jbzJQZXJJdGVtID8/IDApICsgKGluYm91bmQ/LmNvMlBlckl0ZW0gPz8gMCksXG4gICAgICAgIGNvMlBlclBhc3NlbmdlcjogKG91dGJvdW5kPy5jbzJQZXJQYXNzZW5nZXIgPz8gMCkgKyAoaW5ib3VuZD8uY28yUGVyUGFzc2VuZ2VyID8/IDApLFxuICAgICAgICBvdXRib3VuZERhdGU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lLFxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5kZXBhcnREYXRlVGltZSxcbiAgICAgICAgbG93ZXN0UHJpY2U6XG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9PSBvdXRib3VuZEZhcmUuY3VycmVuY3lcbiAgICAgICAgICAgID8gbG93ZXN0VGlja2V0LmFtb3VudFxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OlxuICAgICAgICAgIGxvd2VzdFRpY2tldC5hbW91bnQgfHwgbG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZSAhPT0gb3V0Ym91bmRGYXJlLmN1cnJlbmN5XG4gICAgICAgICAgICA/IDxDdXJyZW5jeUNvZGU+bG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICByZWFzb25LZXlzOiBbXG4gICAgICAgICAgLi4uKG91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbktleXMgfHwgW10pLFxuICAgICAgICAgIC4uLihpbmJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbktleXMgfHwgW10pXG4gICAgICAgIF0sXG4gICAgICAgIGFnZW50T3ZlcnJvZGVVbmF2YWlsYWJsZTogb3V0Ym91bmRGYXJlLnVuYXZhaWxhYmxlIHx8IGluYm91bmRGYXJlLnVuYXZhaWxhYmxlXG4gICAgICB9O1xuICAgICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBhZGQgdGhlIG9iamVjdCB0byBiYXNrZXRJdGVtXG4gICAgICAvLyBkb250IHNob3cgdGlja2V0RXh0cmFzIGZvciBEVEQuIFdlIHdpbGwgaGF2ZSBhIG5ldyB0aWNrZXQgZm9yIHRpY2tldEV4dHJhc1xuICAgICAgaWYgKHRpY2tldEV4dHJhcyAmJiAhZ210KSB7XG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLm91dGJvdW5kLnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcztcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwudGlja2V0UXVldWVMaXN0ID0gYmFza2V0SXRlbS5kZXRhaWwudGlja2V0UXVldWVMaXN0LmZpbHRlcihcbiAgICAgICAgICAoaXRlbTogVGlja2V0UXVldWVMaXN0KSA9PiBpdGVtLnR5cGUgIT09ICdlVGlja2V0J1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW91dGJvdW5kRmFyZS50aWNrZXRPbkRlcGFydHVyZUF2YWlsYWJsZSB8fCAhaW5ib3VuZEZhcmUudGlja2V0T25EZXBhcnR1cmVBdmFpbGFibGUpIHtcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwudGlja2V0UXVldWVMaXN0ID0gYmFza2V0SXRlbS5kZXRhaWwudGlja2V0UXVldWVMaXN0LmZpbHRlcihcbiAgICAgICAgICAoaXRlbTogVGlja2V0UXVldWVMaXN0KSA9PiBpdGVtLnR5cGUgIT09ICdUaWNrZXRPbkRlcGFydHVyZSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLmNvdW50cnlDb2RlID0gPHN0cmluZz5iYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5LmNvdW50cnlDb2RlO1xuICAgICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxuICAgICAgICBiYXNrZXRJdGVtLFxuICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxuICAgICAgICBvdXRib3VuZEZhcmUucmVxdWlyZXNSZWFzb25LZXlzIHx8IGluYm91bmRGYXJlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGluZ29yZUludm9rZWRcbiAgICAgICk7XG4gICAgICBpZiAoIW91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbktleXM/Lmxlbmd0aCAmJiAhaW5ib3VuZEZhcmUucmVxdWlyZXNSZWFzb25LZXlzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRvZ2dsZU1lbnUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcbiAgICAgICAgdGhpcy5yZXNlYXJjaFdpdGhOZXdVc2VyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xuICAgIH1cbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XG4gIH1cblxuICByZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhyYWlsTGVnczogUmFpbEpvdXJuZXlMZWdbXSk6IFJhaWxKb3VybmV5TGVnW10ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFpbExlZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGxlZyA9IHJhaWxMZWdzW2ldO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlZy5jYWxsaW5nUG9pbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGNhbGxpbmdQb2ludHMgPSBsZWcuY2FsbGluZ1BvaW50c1tqXTtcbiAgICAgICAgZGVsZXRlIGNhbGxpbmdQb2ludHMuc2NoZWR1bGVkUGxhdGZvcm07XG4gICAgICB9XG4gICAgICAvLyBkZWxldGUgbGVnLnRyYW5zcG9ydERlc2lnbmF0aW9uO1xuICAgICAgZGVsZXRlIGxlZy5jYW5jZWxsZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhaWxMZWdzO1xuICB9XG5cbiAgcmVtb3ZlZFNjaGVkdWxlZFBsYXRmb3JtRnJvbUNhbGxpbmdQb2ludHNBbmRTcGxpdHMoXG4gICAgcmFpbExlZ3M6IFJhaWxKb3VybmV5TGVnW10sXG4gICAgc3BsaXRMZWdzOiBhbnlbXSxcbiAgICBzcGxpdENvZGU6IHN0cmluZyxcbiAgICBsZWdOdW1iZXI6IG51bWJlcixcbiAgICBvdXRib3VuZDogYm9vbGVhblxuICApOiBSYWlsSm91cm5leUxlZ1tdIHtcbiAgICBjb25zdCByYWlsTGVnc0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJhaWxMZWdzKSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYWlsTGVnc0NvcHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNwbGl0TGVnID0gc3BsaXRMZWdzW2ldO1xuICAgICAgY29uc3QgbGVnID0gcmFpbExlZ3NDb3B5W2ldO1xuICAgICAgbGVnLmFycml2ZURhdGVUaW1lID0gc3BsaXRMZWcuYXJyaXZhbERhdGVUaW1lO1xuICAgICAgbGVnLmRlcGFydERhdGVUaW1lID0gc3BsaXRMZWcuZGVwYXJ0dXJlRGF0ZVRpbWU7XG4gICAgICBsZWcuYXJyaXZlID0gc3BsaXRMZWcuYXJyaXZhbFN0YXRpb25OYW1lO1xuICAgICAgbGVnLmRlcGFydCA9IHNwbGl0TGVnLmRlcGFydHVyZVN0YXRpb25OYW1lO1xuICAgICAgY29uc3Qgc3BsaXRJbmRleCA9IGxlZy5jYWxsaW5nUG9pbnRzLmZpbmRJbmRleChcbiAgICAgICAgKHBvaW50OiBSYWlsQ2FsbGluZ1BvaW50KSA9PiBwb2ludC5zdGF0aW9uQ29kZSA9PT0gc3BsaXRDb2RlXG4gICAgICApO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZWcuY2FsbGluZ1BvaW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBjYWxsaW5nUG9pbnRzID0gbGVnLmNhbGxpbmdQb2ludHNbal07XG4gICAgICAgIGRlbGV0ZSBjYWxsaW5nUG9pbnRzLnNjaGVkdWxlZFBsYXRmb3JtO1xuICAgICAgfVxuICAgICAgaWYgKCFsZWdOdW1iZXIpIHtcbiAgICAgICAgaWYgKG91dGJvdW5kKSB7XG4gICAgICAgICAgbGVnLmNhbGxpbmdQb2ludHMgPSBsZWcuY2FsbGluZ1BvaW50cy5maWx0ZXIoXG4gICAgICAgICAgICAocG9pbnQ6IFJhaWxDYWxsaW5nUG9pbnQsIGluZGV4OiBudW1iZXIpID0+IGluZGV4IDw9IHNwbGl0SW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZy5jYWxsaW5nUG9pbnRzID0gbGVnLmNhbGxpbmdQb2ludHMuZmlsdGVyKFxuICAgICAgICAgICAgKHBvaW50OiBSYWlsQ2FsbGluZ1BvaW50LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA+PSBzcGxpdEluZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG91dGJvdW5kKSB7XG4gICAgICAgICAgbGVnLmNhbGxpbmdQb2ludHMgPSBsZWcuY2FsbGluZ1BvaW50cy5maWx0ZXIoXG4gICAgICAgICAgICAocG9pbnQ6IFJhaWxDYWxsaW5nUG9pbnQsIGluZGV4OiBudW1iZXIpID0+IGluZGV4ID49IHNwbGl0SW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZy5jYWxsaW5nUG9pbnRzID0gbGVnLmNhbGxpbmdQb2ludHMuZmlsdGVyKFxuICAgICAgICAgICAgKHBvaW50OiBSYWlsQ2FsbGluZ1BvaW50LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA8PSBzcGxpdEluZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmFpbExlZ3NDb3B5O1xuICB9XG5cbiAgY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KHJhaWxUaWNrZXRFeHRyYXM6IFJhaWxUaWNrZXRFeHRyYVtdKTogVGlja2V0RXh0cmFzW10ge1xuICAgIHJldHVybiByYWlsVGlja2V0RXh0cmFzLm1hcChyYWlsVGlja2V0RXh0cmEgPT4ge1xuICAgICAgY29uc3QgcHJpY2UgPVxuICAgICAgICB0aGlzLm5vT2ZDaGlsZHJlbiAqIHJhaWxUaWNrZXRFeHRyYT8uY2hpbGRBbW91bnQgK1xuICAgICAgICB0aGlzLm5vT2ZBZHVsdHMgKiByYWlsVGlja2V0RXh0cmEuYWR1bHRBbW91bnQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiByYWlsVGlja2V0RXh0cmEuaWRlbnRpZmllcnMudHlwZSxcbiAgICAgICAgbG9jYXRpb246IHJhaWxUaWNrZXRFeHRyYS5pZGVudGlmaWVycy5sb2NhdGlvbixcbiAgICAgICAgZGF0ZTogcmFpbFRpY2tldEV4dHJhLmlkZW50aWZpZXJzLmRhdGUsXG4gICAgICAgIHByaWNlXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgY2FsY3VsYXRlVGltZURpZmZlcmVuY2VJbk1pbnMocmFpbEpvdXJuZXk6IFJhaWxKb3VybmV5T3B0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzXG4gICAgICAuZ2V0VGltZURpZmZlcmVuY2UocmFpbEpvdXJuZXkuYXJyaXZlRGF0ZVRpbWUsIHJhaWxKb3VybmV5LmRlcGFydERhdGVUaW1lKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZGV0ZXJtaW5lIGlmIGEgdGlja2V0IGlzIGFuIGVUaWNrZXRcbiAgICogQHBhcmFtIHRpY2tldCAtIHRoZSB0aWNrZXQgd2Ugd2FudCB0byB0byBjaGVja1xuICAgKiBAcmV0dXJucyAtIGJvb2xlYW5cbiAgICovXG4gIHRpY2tldElzQW5FVGlja2V0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvdW5kRVRpY2tldDogUmFpbEpvdXJuZXlPcHRpb24gPSBudWxsO1xuXG4gICAgLy8gZm91bmRFVGlja2V0ID0gdGlja2V0LnRpY2tldFF1ZXVlTGlzdC5maW5kKChxdWV1ZUxpc3RJdGVtKSA9PiB7XG4gICAgLy8gICByZXR1cm4gcXVldWVMaXN0SXRlbS50eXBlID09PSAnZVRpY2tldCc7XG4gICAgLy8gfSk7XG5cbiAgICByZXR1cm4gZm91bmRFVGlja2V0ID8gdHJ1ZSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlGaWx0ZXIocmV0dXJuUmVzdWx0cz86IFJhaWxTZWFyY2hSZXN1bHQpOiBPQlRSYWlsUXVvdGVSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGx5RmlsdGVyKHJldHVyblJlc3VsdHMpO1xuICB9XG4gIHByb3RlY3RlZCBfYXBwbHlGaWx0ZXIocmV0dXJuUmVzdWx0cz86IFJhaWxTZWFyY2hSZXN1bHQpOiBPQlRSYWlsUXVvdGVSZXN1bHRbXSB7XG4gICAgaWYgKHJldHVyblJlc3VsdHM/LnJlc3VsdHNbMF0/LnN1bW1hcnk/Lm91dGJvdW5kPy5bMF0pIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeSA9IHJldHVyblJlc3VsdHMucmVzdWx0c1swXS5zdW1tYXJ5Lm91dGJvdW5kWzBdO1xuICAgIH1cblxuICAgIGNvbnN0IHNldFNlbGVjdGVkID0gKHR5cGU6IFJhaWxSdWxlRW5pdHlLZXlzLCBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMuX2ZpbmRTdW1tYXJ5KGpvdXJuZXksIHRoaXMuc3VtbWFyeS5yZXR1cm4pO1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkU3VtbWFyeVxuICAgICAgICA/IChncm91cGVkRmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBlZEZhcmVzLm1hcCgoZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghZmFyZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkU3VtbWFyeVR5cGUgPSB0aGlzLl9zZWxlY3RlZFN1bW1hcnlbdHlwZV07XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5oZWxwZXJzLmFkZFJhaWxBY3Rpb25SdWxlcyh7IC4uLmZhcmUgfSwgW1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTdW1tYXJ5VHlwZT8uW3RoaXMuc2VsZWN0ZWRUaWNrZXQ/LmZhcmUuZmFyZUhhc2hdXG4gICAgICAgICAgICAgICAgICAgID8ucnVsZURhdGFXaGVuU2VsZWN0ZWRXaXRoW2ZhcmUuZmFyZUhhc2hdLFxuICAgICAgICAgICAgICAgICAgc3VtbWFyeSA/IHN1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0/LnJ1bGVEYXRhV2hlblNlbGVjdGVkQWxvbmUgOiBudWxsXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhcmUuZmFyZUhhc2ggPT09IHRoaXMuc2VsZWN0ZWRUaWNrZXQ/LmZhcmUuZmFyZUhhc2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5W3R5cGVdXG4gICAgICAgICAgICAgICAgICA/ICEhdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5W3R5cGVdW1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQ/LmZhcmUuZmFyZUhhc2hcbiAgICAgICAgICAgICAgICAgICAgXT8uYWxsb3dlZFdpdGg/LmluY2x1ZGVzKGZhcmUuZmFyZUhhc2gpXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIDogKGdyb3VwZWRGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBncm91cGVkRmFyZXMubWFwKChmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFmYXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmhlbHBlcnMuYWRkUmFpbEFjdGlvblJ1bGVzKFxuICAgICAgICAgICAgICAgICAgeyAuLi5mYXJlIH0sXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5ID8gW3N1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0ucnVsZURhdGFXaGVuU2VsZWN0ZWRBbG9uZV0gOiBbXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNldFJ1bGVzID0gKFxuICAgICAgdHlwZTogUmFpbFJ1bGVFbml0eUtleXMsXG4gICAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICAgIGRpcmVjdGlvbjogJ291dGJvdW5kJyB8ICdyZXR1cm4nXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gKGdyb3VwZWRGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10pOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9PiB7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLl9maW5kU3VtbWFyeShqb3VybmV5LCB0aGlzLnN1bW1hcnlbZGlyZWN0aW9uXSk7XG4gICAgICAgIHJldHVybiBncm91cGVkRmFyZXNcbiAgICAgICAgICAubWFwKChmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUpOiBPQlRSYWlsSm91cm5leUZhcmUgPT4ge1xuICAgICAgICAgICAgaWYgKCFmYXJlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVzdWx0UnVsZSA9IHN1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0uYWxsb3dlZFdpdGgubGVuZ3RoXG4gICAgICAgICAgICAgID8gdGhpcy5jaGVja1J1bGUoXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdLnJ1bGVEYXRhV2hlblNlbGVjdGVkV2l0aCxcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0uYWxsb3dlZFdpdGgubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgJ3JlbW92ZVJlc3VsdCdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAgICAgY29uc3QgcmVxdWlyZXNSZWFzb25SdWxlID0gc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5hbGxvd2VkV2l0aC5sZW5ndGhcbiAgICAgICAgICAgICAgPyB0aGlzLmNoZWNrUnVsZShcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0ucnVsZURhdGFXaGVuU2VsZWN0ZWRXaXRoLFxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5hbGxvd2VkV2l0aC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAncmVxdWlyZXNSZWFzb25LZXlzJ1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgdW5hdmFpbGFibGVSdWxlID0gc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5hbGxvd2VkV2l0aC5sZW5ndGhcbiAgICAgICAgICAgICAgPyB0aGlzLmNoZWNrUnVsZShcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0ucnVsZURhdGFXaGVuU2VsZWN0ZWRXaXRoLFxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5hbGxvd2VkV2l0aC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAndW5hdmFpbGFibGUnXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlbHBlcnMuYWRkUmFpbEFjdGlvblJ1bGVzKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uZmFyZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZFRpY2tldCAmJiBmYXJlLmZhcmVIYXNoID09PSB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2hcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHJlbW92ZVJlc3VsdFJ1bGUsXG4gICAgICAgICAgICAgICAgcmVxdWlyZXNSZWFzb25SdWxlLFxuICAgICAgICAgICAgICAgIHVuYXZhaWxhYmxlUnVsZSxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5ID8gc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5ydWxlRGF0YVdoZW5TZWxlY3RlZEFsb25lIDogW11cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5oZWxwZXJzXG4gICAgICAuY2xvbmUocmV0dXJuUmVzdWx0cyA/IHRoaXMucHJvY2Vzc1Jlc3VsdHMocmV0dXJuUmVzdWx0cy5yZXN1bHRzKSA6IHRoaXMuZnVsbFJlc3VsdHMpXG4gICAgICAucmVkdWNlKChhY2N1bTogT0JUUmFpbFF1b3RlUmVzdWx0W10sIG5leHQ6IE9CVFJhaWxRdW90ZVJlc3VsdCk6IE9CVFJhaWxRdW90ZVJlc3VsdFtdID0+IHtcbiAgICAgICAgY29uc3QgdGVtcCA9IHtcbiAgICAgICAgICAuLi5uZXh0LFxuICAgICAgICAgIG91dGJvdW5kOiAobmV4dC5vdXRib3VuZCB8fCBbXSkubWFwKFxuICAgICAgICAgICAgKGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uKTogT0JUUmFpbEpvdXJuZXlPcHRpb24gPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmpvdXJuZXksXG4gICAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcbiAgICAgICAgICAgICAgICAgIGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcbiAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdkdWFsU2luZ2xlSm91cm5leUZhcmVzJywgam91cm5leSwgUmFpbERpcmVjdGlvbi5PdXRib3VuZClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcbiAgICAgICAgICAgICAgICAgIGpvdXJuZXkuc2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoJ3NpbmdsZUpvdXJuZXlGYXJlcycsIGpvdXJuZXksIFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXG4gICAgICAgICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyB8fCB7fSxcbiAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdyZXR1cm5Kb3VybmV5RmFyZXMnLCBqb3VybmV5LCBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcbiAgICAgICAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyB8fCB7fSxcbiAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdvcGVuUmV0dXJuSm91cm5leUZhcmVzJywgam91cm5leSwgUmFpbERpcmVjdGlvbi5PdXRib3VuZClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHNwbGl0RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXG4gICAgICAgICAgICAgICAgICBqb3VybmV5LnNwbGl0RmFyZXMgfHwge30sXG4gICAgICAgICAgICAgICAgICBzZXRSdWxlcygnc3BsaXRGYXJlcycsIGpvdXJuZXksIFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9IGFzIE9CVFJhaWxKb3VybmV5T3B0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgcmV0dXJuOiAobmV4dC5yZXR1cm4gfHwgW10pLm1hcCgoam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBPQlRSYWlsSm91cm5leU9wdGlvbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5qb3VybmV5LFxuICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXG4gICAgICAgICAgICAgICAgam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoJ3JldHVybkpvdXJuZXlGYXJlcycsIGpvdXJuZXkpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXG4gICAgICAgICAgICAgICAgam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKCdkdWFsU2luZ2xlSm91cm5leUZhcmVzJywgam91cm5leSlcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxuICAgICAgICAgICAgICAgIGpvdXJuZXkuc2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxuICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdzaW5nbGVKb3VybmV5RmFyZXMnLCBqb3VybmV5LCAncmV0dXJuJylcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcbiAgICAgICAgICAgICAgICBqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXG4gICAgICAgICAgICAgICAgc2V0UnVsZXMoJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLCBqb3VybmV5LCAncmV0dXJuJylcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc3BsaXRGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcbiAgICAgICAgICAgICAgICBqb3VybmV5LnNwbGl0RmFyZXMgfHwge30sXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoJ3NwbGl0RmFyZXMnLCBqb3VybmV5KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICAgIGFjY3VtLnB1c2godGVtcCk7XG4gICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgIH0sIFtdKTtcblxuICAgIGlmIChyZXR1cm5SZXN1bHRzKSB7XG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIHRoaXMucmVzdWx0cy5uZXh0KG91dHB1dCk7XG4gIH1cblxuICBjaGVja1J1bGUoXG4gICAgcnVsZURhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgYWxsb3dlZFdpdGg6IG51bWJlcixcbiAgICBydWxlVHlwZTogJ3JlcXVpcmVzUmVhc29uS2V5cycgfCAndW5hdmFpbGFibGUnIHwgJ3JlbW92ZVJlc3VsdCdcbiAgKTogYW55IHtcbiAgICBmb3IgKGxldCBrZXkgaW4gcnVsZURhdGEpIHtcbiAgICAgIGlmICghcnVsZURhdGFba2V5XVtydWxlVHlwZV0pIHtcbiAgICAgICAgLy8gSWYgdGhlIHJ1bGVUeXBlIGlzIGZhbHNlIGZvciBhbnkgb2JqZWN0LCByZXR1cm4gbnVsbFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBhbGwgb2JqZWN0cyBoYXZlIHRoZSBydWxlVHlwZSB0cnVlIGFuZCB0aGUgbGVuZ3RoIG1hdGNoZXMgYWxsb3dlZFdpdGgsIHJldHVybiB0aGUgZmlyc3Qgb2JqZWN0XG4gICAgaWYgKE9iamVjdC5rZXlzKHJ1bGVEYXRhKS5sZW5ndGggPT09IGFsbG93ZWRXaXRoKSB7XG4gICAgICBjb25zdCBmaXJzdEtleSA9IE9iamVjdC5rZXlzKHJ1bGVEYXRhKVswXTtcbiAgICAgIHN3aXRjaCAocnVsZVR5cGUpIHtcbiAgICAgICAgY2FzZSAncmVxdWlyZXNSZWFzb25LZXlzJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVxdWlyZXNSZWFzb25LZXlzOiBydWxlRGF0YVtmaXJzdEtleV1bcnVsZVR5cGVdLFxuICAgICAgICAgICAgcmVxdWlyZXNSZWFzb25NZXNzYWdlczogcnVsZURhdGFbZmlyc3RLZXldLnJlcXVpcmVzUmVhc29uTWVzc2FnZXNcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlICd1bmF2YWlsYWJsZSc6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVuYXZhaWxhYmxlOiBydWxlRGF0YVtmaXJzdEtleV1bcnVsZVR5cGVdLFxuICAgICAgICAgICAgdW5hdmFpbGFibGVNZXNzYWdlOiBydWxlRGF0YVtmaXJzdEtleV0udW5hdmFpbGFibGVNZXNzYWdlXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAncmVtb3ZlUmVzdWx0JzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVtb3ZlUmVzdWx0OiBydWxlRGF0YVtmaXJzdEtleV1bcnVsZVR5cGVdXG4gICAgICAgICAgfTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGFsbG93ZWRXaXRoLCByZXR1cm4gbnVsbFxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGVybXNBbmRDb25kKFxuICAgIG91dGJvdW5kRmFyZTogUmFpbEpvdXJuZXlGYXJlLFxuICAgIG91dGJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICBvdXRib3VuZEZhcmVMaXN0OiB7IGlkPzogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdLFxuICAgIGluYm91bmRGYXJlPzogUmFpbEpvdXJuZXlGYXJlLFxuICAgIGluYm91bmQ/OiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICBpbmJvdW5kRmFyZUxpc3Q/OiB7IGlkPzogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdLFxuICAgIHNlcnZpY2VOYW1lPzogc3RyaW5nXG4gICkge1xuICAgIGxldCBvdXRib3VuZFRlcm1zO1xuICAgIGxldCBpbmJvdW5kVGVybXM7XG4gICAgbGV0IGdlbmVyYXRlVGVybXMgPSAoZjogUmFpbFRpY2tldFRlcm1zTGlzdCkgPT4ge307XG5cbiAgICBpZiAoc2VydmljZU5hbWUgPT09IFNlcnZpY2VQcm92aWRlci5UcmFpbmxpbmUpIHtcbiAgICAgIC8vICEgU3RyaWN0bHkgZm9sbG93IFRyYWlubGluZSBUZXJtcyBhbmQgQ29uZCBvcmRlcmluZ1xuICAgICAgZ2VuZXJhdGVUZXJtcyA9IChmOiBSYWlsVGlja2V0VGVybXNMaXN0KSA9PiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVGlja2V0IFR5cGUgTmFtZScsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMudGlja2V0VHlwZU5hbWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdEZXNjcmlwdGlvbicsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMudGlja2V0VHlwZUNvbmRpdGlvbnNEZXNjcmlwdGlvblxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0dlbmVyYWwgVmFsaWRpdHknLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLmdlbmVyYWxWYWxpZGl0eVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1ByZSBCb29raW5nIFJlcXVpcmVtZW50JyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy5wcmVCb29raW5nUmVxdWlyZW1lbnRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdSZWZ1bmQgQ2FuY2VsbGF0aW9uIFJ1bGUnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnJlZnVuZENhbmNlbGxhdGlvblJ1bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDaGFuZ2UgUnVsZScsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMuY2hhbmdlUnVsZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0dlbmVyYWwgRGlzY291bnQnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLmdlbmVyYWxEaXNjb3VudFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0pvdXJuZXkgQnJlYWsgUnVsZScsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMuam91cm5leUJyZWFrUnVsZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENvZGUnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnRpY2tldFR5cGVDb2RlXG4gICAgICAgIH0sXG4gICAgICAgIC4uLihmLnRlcm1zLmR5bmFtaWNDb25kaXRpb25zPy5tYXAoeCA9PiAoe1xuICAgICAgICAgIG5hbWU6IHgubmFtZSxcbiAgICAgICAgICB2YWx1ZTogeC5kZXNjcmlwdGlvblxuICAgICAgICB9KSkgfHwgW10pLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENsYXNzJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy50aWNrZXRUeXBlQ2xhc3NcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdWYWxpZCBPdXQgUnVsZScsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMudmFsaWRPdXRSdWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVmFsaWQgUmV0dXJuIFJ1bGUnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnZhbGlkUmV0dXJuUnVsZVxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5lcmF0ZVRlcm1zID0gKGY6IFJhaWxUaWNrZXRUZXJtc0xpc3QpID0+IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDbGFzcycsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMudGlja2V0VHlwZUNsYXNzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVGlja2V0IFR5cGUgQ29uZGl0aW9ucyBEZXNjcmlwdGlvbicsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMudGlja2V0VHlwZUNvbmRpdGlvbnNEZXNjcmlwdGlvblxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1ZhbGlkIFJldHVybiBSdWxlJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy52YWxpZFJldHVyblJ1bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBOYW1lJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy50aWNrZXRUeXBlTmFtZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0NoYW5nZSBSdWxlJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy5jaGFuZ2VSdWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnUHJlIEJvb2tpbmcgUmVxdWlyZW1lbnQnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnByZUJvb2tpbmdSZXF1aXJlbWVudFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1JhaWxjYXJkIERpc2NvdW50JyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy5yYWlsY2FyZERpc2NvdW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVGlja2V0IFR5cGUgQ29kZScsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMudGlja2V0VHlwZUNvZGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDaGlsZCBEaXNjb3VudCcsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMuY2hpbGREaXNjb3VudFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1ZhbGlkIE91dCBSdWxlJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy52YWxpZE91dFJ1bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdTdGFydCBEYXRlJyxcbiAgICAgICAgICB2YWx1ZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFbmQgRGF0ZScsXG4gICAgICAgICAgdmFsdWU6IG91dGJvdW5kLmFycml2ZURhdGVUaW1lXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnSm91cm5leSBCcmVhayBSdWxlJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy5qb3VybmV5QnJlYWtSdWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnUmVmdW5kIENhbmNlbGxhdGlvbiBSdWxlJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy5yZWZ1bmRDYW5jZWxsYXRpb25SdWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnSm91cm5leSBUeXBlJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy5qb3VybmV5VHlwZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RvZCBBdmFpbGFibGUnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnRvZEF2YWlsYWJsZVxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnUmV0dXJuIFN0YXJ0IERhdGUnLFxuICAgICAgICAgIHZhbHVlOiBpbmJvdW5kPy5kZXBhcnREYXRlVGltZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1JldHVybiBFbmQgRGF0ZScsXG4gICAgICAgICAgdmFsdWU6IGluYm91bmQ/LmFycml2ZURhdGVUaW1lXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuXG4gICAgb3V0Ym91bmRUZXJtcyA9IG91dGJvdW5kRmFyZUxpc3QubWFwKGYgPT4ge1xuICAgICAgY29uc3QgZmFyZSA9IG91dGJvdW5kRmFyZS50ZXJtcy5maW5kKHggPT4geC5mYXJlSWQgPT09IGYuaWQpIHx8IG91dGJvdW5kRmFyZS50ZXJtc1swXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmFyZU5hbWU6IGZhcmUuZmFyZU5hbWUsXG4gICAgICAgIGZhcmVJZDogZmFyZS5mYXJlSWQsXG4gICAgICAgIHRlcm1zOiBnZW5lcmF0ZVRlcm1zKGZhcmUpXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgaWYgKGluYm91bmRGYXJlKSB7XG4gICAgICBpbmJvdW5kVGVybXMgPSBpbmJvdW5kRmFyZUxpc3QubWFwKGYgPT4ge1xuICAgICAgICBjb25zdCBmYXJlID0gaW5ib3VuZEZhcmUudGVybXMuZmluZCh4ID0+IHguZmFyZUlkID09PSBmLmlkKSB8fCBpbmJvdW5kRmFyZS50ZXJtc1swXTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZhcmVOYW1lOiBmYXJlLmZhcmVOYW1lLFxuICAgICAgICAgIGZhcmVJZDogZmFyZS5mYXJlSWQsXG4gICAgICAgICAgdGVybXM6IGdlbmVyYXRlVGVybXMoZmFyZSlcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvdXRib3VuZFRlcm1zLFxuICAgICAgaW5ib3VuZFRlcm1zXG4gICAgfTtcbiAgfVxuXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XG4gICAgaWYgKHRoaXMuaXNGYXZvdXJpdGVWYWxpZC52YWx1ZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRoaXMudGVtcFBhcmFtcyk7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogUmFpbFJlY2VudFNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xuICAgICAgICBuYW1lOiBgJHt0aGlzLl9sb2NhdGlvbn0tJHttb21lbnQoKX1gLFxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuUmFpbCxcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKSwgMzApOyBcbiAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKDEpLCAzMCk7XG4gICAgdGhpcy5hcHBseVNlYXJjaFF1ZXJ5KGZhdik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUF2YWxpYWJsZUNsYXNzZXMoaXNTZWFyY2ggPSBmYWxzZSkge1xuICAgIGNvbnN0IGhpZGVDbGFzc2VzID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgaGlkZVJhaWxDbGFzc2VzOiB7XG4gICAgICAgIGFueTogYm9vbGVhbjtcbiAgICAgICAgc3RhbmRhcmQ6IGJvb2xlYW47XG4gICAgICAgIGZpcnN0OiBib29sZWFuO1xuICAgICAgfTtcbiAgICB9PihVc2VyRmF2b3J1cml0ZS5SYWlsU2VhcmNoRm9ybUNvbmZpZ3VyYXRpb24pPy5oaWRlUmFpbENsYXNzZXMgfHwge1xuICAgICAgYW55OiBmYWxzZSxcbiAgICAgIHN0YW5kYXJkOiBmYWxzZSxcbiAgICAgIGZpcnN0OiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zOiBBbGxvd2VkUmFpbENsYXNzW10gPSBbXTtcbiAgICBpZiAoIWhpZGVDbGFzc2VzLmFueSkge1xuICAgICAgb3B0aW9ucy5wdXNoKHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBSYWlsQ2xhc3MuQWxsIH0pO1xuICAgIH1cbiAgICBpZiAoIWhpZGVDbGFzc2VzLnN0YW5kYXJkKSB7XG4gICAgICBvcHRpb25zLnB1c2goeyBkaXNwbGF5OiAnU3RhbmRhcmQnLCB2YWx1ZTogUmFpbENsYXNzLlN0YW5kYXJkIH0pO1xuICAgIH1cblxuICAgIGlmICghaGlkZUNsYXNzZXMuZmlyc3QpIHtcbiAgICAgIG9wdGlvbnMucHVzaCh7IGRpc3BsYXk6ICdGaXJzdCcsIHZhbHVlOiBSYWlsQ2xhc3MuRmlyc3QgfSk7XG4gICAgfVxuICAgIGlmICghaXNTZWFyY2gpIHtcbiAgICAgIGxldCBkZWZhdWx0Q2xhc3NTZWxlY3Rpb246IFJhaWxDbGFzcyB8IHN0cmluZyA9XG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PHtcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NTZWxlY3Rpb246IFJhaWxDbGFzcztcbiAgICAgICAgfT4oVXNlckZhdm9ydXJpdGUuUmFpbFNlYXJjaEZvcm1Db25maWd1cmF0aW9uKT8uZGVmYXVsdENsYXNzU2VsZWN0aW9uIHx8ICdBbnknO1xuICAgICAgaWYgKGRlZmF1bHRDbGFzc1NlbGVjdGlvbiA9PT0gJ0FueScpIHtcbiAgICAgICAgZGVmYXVsdENsYXNzU2VsZWN0aW9uID0gUmFpbENsYXNzLkFsbDtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSBkZWZhdWx0Q2xhc3NTZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmNob3NlblNlYXJjaENsYXNzID0gZGVmYXVsdENsYXNzU2VsZWN0aW9uO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBvcHRpb25zWzBdPy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsYXNzVHlwZXMubmV4dChvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGdlbmVyYXRlUXVlcnlGcm9tRmxpZ2h0UXVlcnkoZmxpZ2h0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5vdXRib3VuZF9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudChmbGlnaHRRdWVyeS5vdXRib3VuZERhdGUpKTtcbiAgICB0aGlzLnJldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudChmbGlnaHRRdWVyeS5yZXR1cm5EYXRlKSk7XG5cbiAgICBjb25zdCB0b0xvY2F0aW9uQ29kZSA9IHRoaXMuZ2V0UmFpbExvY2F0aW9uKDxzdHJpbmc+ZmxpZ2h0UXVlcnkuZGVzdGluYXRpb25BaXJwb3J0KTtcbiAgICBjb25zdCBmcm9tTG9jYXRpb25Db2RlID0gdGhpcy5nZXRSYWlsTG9jYXRpb24oPHN0cmluZz5mbGlnaHRRdWVyeS5vcmlnaW5BaXJwb3J0KTtcbiAgICBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgIC5nZXRTdGF0aW9uTG9jYXRpb25zKHRvTG9jYXRpb25Db2RlKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IHRoaXMubWF0Y2hSYWlsQ29kZSh0b0xvY2F0aW9uQ29kZSwgcmVzdWx0KTtcbiAgICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAuZ2V0U3RhdGlvbkxvY2F0aW9ucyhmcm9tTG9jYXRpb25Db2RlKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gdGhpcy5tYXRjaFJhaWxDb2RlKGZyb21Mb2NhdGlvbkNvZGUsIHJlc3VsdCk7XG4gICAgICB9KTtcblxuICAgIGlmIChmbGlnaHRRdWVyeS5yZXR1cm5UcmlwKSB7XG4gICAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVWtSYWlsQmFzZWRPbkNvdW50cnkoKTtcbiAgfVxuXG4gIGFzeW5jIGdlbmVyYXRlUXVlcnlGcm9tRmxpZ2h0UXVlcnlUcmFpbmxpbmUoXG4gICAgZmxpZ2h0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxuICAgIG91dGJvdW5kU3RhdGlvbnM6IFJhaWxTdGF0aW9uW10sXG4gICAgaW5ib3VuZFN0YXRpb25zOiBSYWlsU3RhdGlvbltdLFxuICAgIGRlcGFydEFpcnBvcnQ6IGFueSxcbiAgICBhcnJpdmVBaXJwb3J0OiBhbnlcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY29uc29sZS53YXJuKCcrKysgR0VORVJBVElORyBTRUFSQ0ggRlJPTSBUUkFJTkxJTkUgKysrJyk7XG4gICAgdGhpcy5vdXRib3VuZF9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudChmbGlnaHRRdWVyeS5vdXRib3VuZERhdGUpKTtcbiAgICB0aGlzLnJldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudChmbGlnaHRRdWVyeS5yZXR1cm5EYXRlKSk7XG5cbiAgICAvLyBzZWFyY2ggdGhyb3VnaCB0aGUgc3RhdGlvbnMgZm9yIGEgaHViIC0gaWYgb25lIG5vdCBmb3VuZCwganVzdCBwaWNrIHRoZSB0b3AgcmVzdWx0LlxuICAgIC8vIHByb2JhYmx5IGJlc3QgdG8gZmluZCB0aGUgb25lIHdoaWNoIG1hdGNoZXMgdGhlIHNob3J0aGFuZCBkZXN0aW5hdGlvbiBmcm9tIHRoZSBhaXJwb3J0IHN0cmluZ1xuXG4gICAgY29uc3Qgb3V0Ym91bmRHZW5lcmljTG9jID0gZGVwYXJ0QWlycG9ydC5kZXN0aW5hdGlvbjtcbiAgICBjb25zb2xlLmxvZygnb3V0Ym91bmQgZ2VuZXJ0aWMgbG9jOiAnLCBvdXRib3VuZEdlbmVyaWNMb2MpO1xuXG4gICAgY29uc3Qgb3V0U3BsaXROYW1lID0gb3V0Ym91bmRHZW5lcmljTG9jLnNwbGl0KCcsJylbMF07XG5cbiAgICBjb25zdCBmb3VuZFN0YXRpb24gPVxuICAgICAgb3V0Ym91bmRTdGF0aW9ucy5maW5kKHN0YXRpb24gPT4gc3RhdGlvbi5uYW1lID09PSBvdXRTcGxpdE5hbWUpIHx8IG91dGJvdW5kU3RhdGlvbnNbMF07XG5cbiAgICBjb25zb2xlLmxvZyhmb3VuZFN0YXRpb24pO1xuXG4gICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IGZvdW5kU3RhdGlvbjtcblxuICAgIGNvbnN0IGluYm91bmRHZW5lcmljTG9jID0gYXJyaXZlQWlycG9ydC5kZXN0aW5hdGlvbjtcbiAgICBjb25zb2xlLmxvZygnaW5ib3VuZCBnZW5lcnRpYyBsb2M6ICcsIGluYm91bmRHZW5lcmljTG9jKTtcblxuICAgIGNvbnN0IGluU3BsaXROYW1lID0gaW5ib3VuZEdlbmVyaWNMb2Muc3BsaXQoJywnKVswXTtcblxuICAgIGNvbnN0IGZvdW5kU3RhdGlvbkluID1cbiAgICAgIGluYm91bmRTdGF0aW9ucy5maW5kKHN0YXRpb24gPT4gc3RhdGlvbi5uYW1lID09PSBpblNwbGl0TmFtZSkgfHwgaW5ib3VuZFN0YXRpb25zWzBdO1xuXG4gICAgY29uc29sZS5sb2coZm91bmRTdGF0aW9uSW4pO1xuXG4gICAgdGhpcy50cmF2ZWxsaW5nVG8gPSBmb3VuZFN0YXRpb25JbjtcblxuICAgIGlmIChmbGlnaHRRdWVyeS5yZXR1cm5UcmlwKSB7XG4gICAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVWtSYWlsQmFzZWRPbkNvdW50cnkoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVWtSYWlsQmFzZWRPbkNvdW50cnkoKTogdm9pZCB7XG4gICAgY29uc3QgY291bnRyeUNvZGUgPSB0aGlzLnRyYXZlbGxpbmdGcm9tPy5yYWlsc3RhdGlvbj8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZTtcbiAgICBpZiAoY291bnRyeUNvZGUpIHtcbiAgICAgIHRoaXMudWtSYWlsID0gY291bnRyeUNvZGUgPT09ICdHQic7XG4gICAgfVxuICB9XG5cbiAgbWF0Y2hSYWlsQ29kZShsb2NhdGlvbkNvZGU6IHN0cmluZywgcmFpbHM6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHJhaWxzLmZpbmQoKHJhaWw6IGFueSkgPT4gcmFpbC5yYWlsc3RhdGlvbi5zdGF0aW9uQ29kZSA9PT0gbG9jYXRpb25Db2RlKTtcbiAgfVxuXG4gIGdldFJhaWxMb2NhdGlvbihsb2NhdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQUlSVG9SYWlsVUtbbG9jYXRpb25dIHx8ICcnO1xuICB9XG5cbiAgbWVzc2FnZUNvbmZpZ0NoZWNrKGNvbmZpZzogYW55LCBpc0NoZWNrUGFzczogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmIChjb25maWcuYXJyaXZhbFN0YXRpb24gJiYgaXNDaGVja1Bhc3MpIHtcbiAgICAgIGlzQ2hlY2tQYXNzID1cbiAgICAgICAgdGhpcy50cmF2ZWxsaW5nVG8/Lm5hbWUgPT09IGNvbmZpZy5hcnJpdmFsU3RhdGlvbiB8fFxuICAgICAgICBjb25maWcuYXJyaXZhbFN0YXRpb24gPT09IHRoaXMudHJhdmVsbGluZ1RvPy5yYWlsc3RhdGlvbj8uc3RhdGlvbkNvZGU7XG4gICAgfVxuICAgIGlmIChjb25maWcuZGVwYXJ0dXJlU3RhdGlvbiAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgaXNDaGVja1Bhc3MgPVxuICAgICAgICB0aGlzLnRyYXZlbGxpbmdGcm9tPy5uYW1lID09PSBjb25maWcuZGVwYXJ0dXJlU3RhdGlvbiB8fFxuICAgICAgICBjb25maWcuZGVwYXJ0dXJlU3RhdGlvbiA9PT0gdGhpcy50cmF2ZWxsaW5nRnJvbT8ucmFpbHN0YXRpb24/LnN0YXRpb25Db2RlO1xuICAgIH1cbiAgICByZXR1cm4gaXNDaGVja1Bhc3M7XG4gIH1cblxuICB0cmF2ZWxDYXJkTG9jYXRpb24odHJhdmVsQ2FyZFpvbmVzOiBUaWNrZXRFeHRyYXNbXSk6IElUcmF2ZWxDYXJkRGV0YWlsIHtcbiAgICBjb25zdCB0cmF2ZWxDYXJkcyA9IHRoaXMuaGVscGVycy5jbG9uZSh0cmF2ZWxDYXJkWm9uZXMpO1xuICAgIGxldCBleHRyYXNQcmljZSA9IDA7XG4gICAgdHJhdmVsQ2FyZHMuZm9yRWFjaCh0cmF2ZWxDYXJkID0+IHtcbiAgICAgIHRyYXZlbENhcmQubG9jYXRpb24gPSB0cmF2ZWxDYXJkLmxvY2F0aW9uLmluY2x1ZGVzKCc0JylcbiAgICAgICAgPyBUcmF2ZWxDYXJkTG9jYXRpb25zLnpvbmUxVG80XG4gICAgICAgIDogVHJhdmVsQ2FyZExvY2F0aW9ucy56b25lMVRvNjtcbiAgICAgIGV4dHJhc1ByaWNlICs9IHRyYXZlbENhcmQucHJpY2U7XG4gICAgICByZXR1cm4gdHJhdmVsQ2FyZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0cmF2ZWxjYXJkOiB0cmF2ZWxDYXJkcyxcbiAgICAgIHByaWNlOiBleHRyYXNQcmljZVxuICAgIH07XG4gIH1cblxuICB0cmF2ZWxjYXJkRmFyZUNoZWNrKGpvdXJuZXlUaWNrZXRFeHRyYXM6IFJhaWxUaWNrZXRFeHRyYVtdLCBmYXJlVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNUcmF2ZWxjYXJkRmFyZSA9ICEham91cm5leVRpY2tldEV4dHJhcz8uZmluZChleHRyYSA9PiBleHRyYS5kZXNjcmlwdGlvbiA9PT0gZmFyZVR5cGUpO1xuICAgIGlmIChpc1RyYXZlbGNhcmRGYXJlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkudGlja2V0RXh0cmFzID0gW107XG4gICAgfVxuICAgIHJldHVybiBpc1RyYXZlbGNhcmRGYXJlO1xuICB9XG5cbiAgY2hlY2tTdGF0aW9uSXNUb2RPZmZpY2Uoc3RhdGlvbkNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGlzQWlycG9ydEV4cHJlc3MgPSB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5pc0FpcnBvcnRFeHByZXNzO1xuICAgIGlmIChpc0FpcnBvcnRFeHByZXNzKSByZXR1cm4gb2YoZmFsc2UpO1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0U3RhdGlvbkxvY2F0aW9ucyhzdGF0aW9uQ29kZSwgdGhpcy5pc0xvYWRpbmcsIHRydWUpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlc3VsdHM6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgIGNvbnN0IHN0YXRpb24gPSByZXN1bHRzLmZpbmQoaXRlbSA9PiBpdGVtLnJhaWxzdGF0aW9uLnN0YXRpb25Db2RlID09PSBzdGF0aW9uQ29kZSk7XG4gICAgICAgIGlmIChzdGF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHN0YXRpb24ucmFpbHN0YXRpb24udG9kT25seU9uVGlja2V0T2ZmaWNlKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdmlld1RvZEVycm9yRGlhbG9nKHN0YXRpb25Db2RlOiBzdHJpbmcsIHN0YXRpb25OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgTW9kYWxUeXBlcy5Ub2RCb29raW5nRXJyb3JNb2RhbENvbXBvbmVudCxcbiAgICAgIHsgY2VudGVyZWQ6IHRydWUsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgeyBzdGF0aW9uQ29kZTogc3RhdGlvbkNvZGUsIHN0YXRpb25OYW1lOiBzdGF0aW9uTmFtZSB9XG4gICAgKTtcbiAgfVxuXG4gIC8vIFdlIHVzZSB0aGlzIG1ldGhvZCBmb3IgZmVhdHVyZXM6IFJlY2VudFNlYXJjaCwgRmF2b3VyaXRlU2VhcmNoLCBFeHBpcmVkQmFza2V0LCBDb3B5QmFza2V0LCBDbG9uZUJhc2tldFxuICAvLyBOb3RlOiBEbyBub3QgaW5jbHVkZSBkYXRlcyBhbmQgdGF2ZWxsZXJzIGluIHRoaXMgbWV0aG9kXG4gIGFzeW5jIGFwcGx5U2VhcmNoUXVlcnkocXVlcnk6IGFueSwgc3RhcnRTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IHF1ZXJ5LmpvdXJuZXlUeXBlO1xuICAgIHRoaXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBxdWVyeS5jbGFzcztcbiAgICB0aGlzLmV4dHJhVGltZSA9IHF1ZXJ5LmV4dHJhVGltZVRvQ2hhbmdlO1xuICAgIHRoaXMuY2FybmV0VGlja2V0ID0gcXVlcnkuY2FybmV0VGlja2V0O1xuICAgIGlmIChxdWVyeS5qb3VybmV5VHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5KSB7XG4gICAgICB0aGlzLm9wZW5SZXR1cm4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChxdWVyeS5pc0FpcnBvcnRFeHByZXNzKSB7XG4gICAgICB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IHF1ZXJ5LmFpcnBvcnRFeHByZXNzU3RhdGlvbjtcbiAgICAgIHRoaXMuaXNBaXJwb3J0RXhwcmVzcyA9IHF1ZXJ5LmlzQWlycG9ydEV4cHJlc3M7XG4gICAgICBjb25zdCBzdGF0aW9uSWRzID0ge1xuICAgICAgICBkZXBhcnR1cmVMb2NhdGlvbklkOiBxdWVyeS5kZXBhcnR1cmVMb2NhdGlvbklkLFxuICAgICAgICBhcnJpdmFsTG9jYXRpb25JZDogcXVlcnkuYXJyaXZhbExvY2F0aW9uSWRcbiAgICAgIH07XG4gICAgICB0aGlzLnNldEFpcnBvcnRFeHByZXNzU3RhdGlvbklkcyhzdGF0aW9uSWRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0FpcnBvcnRFeHByZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzLmFwcGx5UmFpbGNhcmRzID1cbiAgICAgIHF1ZXJ5Py5yYWlsQ2FyZFF1YWxpZmllcnM/Lmxlbmd0aCAgJiZcbiAgICAgIHF1ZXJ5LnJhaWxDYXJkUXVhbGlmaWVyc1swXS5jb2RlXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlO1xuICAgIGlmICh0aGlzLmFwcGx5UmFpbGNhcmRzKSB7XG4gICAgICB0aGlzLnJhaWxDYXJkcyA9IHF1ZXJ5LnJhaWxDYXJkUXVhbGlmaWVycztcbiAgICB9XG5cbiAgICBjb25zdCBmZXRjaFJhaWxTdGF0aW9uID0gYXN5bmMgKGxvY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHJhaWxzdGF0aW9uOiBSYWlsU3RhdGlvbiB9PiA9PiB7XG4gICAgICBjb25zdCBzdGF0aW9uID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5zZWFyY2hTZXJ2aWNlLmdldFJhaWxTdGF0aW9uQnlJZChsb2NhdGlvbklkKSk7XG4gICAgICByZXR1cm4geyBuYW1lOiBzdGF0aW9uLm5hbWUsIHJhaWxzdGF0aW9uOiBzdGF0aW9uIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc2lOID0gYXdhaXQgZmV0Y2hSYWlsU3RhdGlvbihxdWVyeS5hcnJpdmFsTG9jYXRpb25JZCkgO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChyZXNpTj8ucmFpbHN0YXRpb24/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGUgPT09ICdHQicgfHwgcXVlcnkuY291bnRyeUNvZGUgPT09ICdHQicpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbiA9ICdVSyc7XG4gICAgICAgIHRoaXMudWtSYWlsID0gdHJ1ZTtcbiAgICAgICAgY29uc29sZS5sb2coJysrKyBTZXR0aW5nIExvY2F0aW9uIHRvIFVLICsrKycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbiA9ICdFVSc7XG4gICAgICAgIHRoaXMudWtSYWlsID0gZmFsc2U7XG4gICAgICAgIGNvbnNvbGUubG9nKCcrKysgU2V0dGluZyBMb2NhdGlvbiB0byBFVSArKysnKTtcblxuICAgICAgICAvLyBpdCdzIEVVIHNvIGdvIG92ZXIgdGhlIHRyYXZlbGxlcnMgYW5kIGNvcnJlY3RcbiAgICAgICAgY29uc3Qgc2VhcmNoVHJhdmVsbGVycyA9IDxUcmF2ZWxsZXJJbnB1dFtdPnF1ZXJ5LnRyYXZlbGxlcnM7XG4gICAgICAgIGxldCBhZHVsdHMgPSAwO1xuICAgICAgICBsZXQgY2hpbGRyZW4gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaFRyYXZlbGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB0cmF2ID0gc2VhcmNoVHJhdmVsbGVyc1tpXTtcbiAgICAgICAgICBpZiAodHJhdi5wYXNzZW5nZXJUeXBlID09PSBQYXNzZW5nZXJJbnB1dFR5cGUuWW91dGgpIHtcbiAgICAgICAgICAgIHF1ZXJ5LnRyYXZlbGxlcnNbaV0uaXNDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBxdWVyeS50cmF2ZWxsZXJzW2ldLmFnZVR5cGUgPSAnQ2hpbGQnO1xuICAgICAgICAgICAgdGhpcy50cmFpbmxpbmVUcmF2ZWxsZXJzW2ldLmFnZVJhbmdlID0gUGFzc2VuZ2VySW5wdXRUeXBlLllvdXRoO1xuICAgICAgICAgICAgdGhpcy50cmFpbmxpbmVUcmF2ZWxsZXJzW2ldLmFnZSA9IHRyYXYuYWdlO1xuICAgICAgICAgICAgY2hpbGRyZW4rKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnkudHJhdmVsbGVyc1tpXS5pc0NoaWxkID0gZmFsc2U7XG4gICAgICAgICAgICBxdWVyeS50cmF2ZWxsZXJzW2ldLmFnZVR5cGUgPSAnQWR1bHQnO1xuICAgICAgICAgICAgdGhpcy50cmFpbmxpbmVUcmF2ZWxsZXJzW2ldLmFnZVJhbmdlID0gUGFzc2VuZ2VySW5wdXRUeXBlLkFkdWx0O1xuICAgICAgICAgICAgYWR1bHRzKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5LmFkdWx0cyA9IGFkdWx0cztcbiAgICAgICAgcXVlcnkuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgY29uc29sZS5sb2coJ3RsdDonLCB0aGlzLnRyYWlubGluZVRyYXZlbGxlcnMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGArKysgZXJyb3IgZGV0ZXJtZW5pbmcgcmFpbCBsb2NhdGlvbjogJHtlcnJvcn0gKysrYCk7XG4gICAgfVxuXG4gICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IHF1ZXJ5LmRlcGFydHVyZUxvY2F0aW9uSWQgPyBhd2FpdCBmZXRjaFJhaWxTdGF0aW9uKHF1ZXJ5LmRlcGFydHVyZUxvY2F0aW9uSWQpIDogbnVsbDtcbiAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IHF1ZXJ5LmFycml2YWxMb2NhdGlvbklkID8gcmVzaU4gOiBudWxsO1xuICAgIHRoaXMudmlhTG9jYXRpb24gPSBxdWVyeS52aWFMb2NhdGlvbklkID8gYXdhaXQgZmV0Y2hSYWlsU3RhdGlvbihxdWVyeS52aWFMb2NhdGlvbklkKSA6IG51bGw7XG4gICAgdGhpcy52aWEgPSBxdWVyeS52aWFMb2NhdGlvbklkPyB0cnVlIDogZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRTZWFyY2gpIHtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0dXBUcmFpbmxpbmVFVVRyYXZlbGxlcnMoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2codGhpcy5zZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnZhbHVlKTtcbiAgICBjb25zdCBjdXJyZW50VHJhdmVsbGVycyA9IHRoaXMuc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi52YWx1ZTtcblxuICAgIC8vIGNvbXBhcmUgdGhlIGxlbmd0aHMgb2YgdGhlIHRyYWlubGluZXRyYXZlbGxlcnMgYW5kIHRoZSBub3JtYWwgdHJhdmVsbGVyc1xuICAgIGNvbnN0IHNpemVEaWZmZXJlbmNlID0gY3VycmVudFRyYXZlbGxlcnMubGVuZ3RoIC0gdGhpcy50cmFpbmxpbmVUcmF2ZWxsZXJzLmxlbmd0aDtcbiAgICBjb25zb2xlLmxvZyhgKysrIFdlIG5lZWQgdG8gYWRkICR7c2l6ZURpZmZlcmVuY2V9IG5ldyB0cmFpbmxpbmUgdHJhdmVsbGVycyArKytgKTtcbiAgICBjb25zdCBzdGFydGluZ0xlbmd0aCA9IHRoaXMudHJhaW5saW5lVHJhdmVsbGVycy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplRGlmZmVyZW5jZTsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50VHJhdmVsbGVyID0gY3VycmVudFRyYXZlbGxlcnNbc3RhcnRpbmdMZW5ndGggKyBpXTtcbiAgICAgIGNvbnNvbGUubG9nKGN1cnJlbnRUcmF2ZWxsZXIpO1xuICAgICAgY29uc3QgbmV3VHJhaW5saW5lVHJhdmVsbGVyOiBUcmFpbmxpbmVUcmF2ZWxsZXIgPSB7XG4gICAgICAgIG5hbWU6IGAke2N1cnJlbnRUcmF2ZWxsZXIuZm9yZW5hbWV9ICR7Y3VycmVudFRyYXZlbGxlci5zdXJuYW1lfWAsXG4gICAgICAgIGFnZTogdGhpcy5fZ2V0QWdlRnJvbURvYihjdXJyZW50VHJhdmVsbGVyLmRvYiksXG4gICAgICAgIGFnZVJhbmdlOiB0aGlzLl9nZXRBZ2VSYW5nZUZyb21Eb2IoY3VycmVudFRyYXZlbGxlci5kb2IpLFxuICAgICAgICBvcmlnaW5hbFVzZXJHdWVzdElkOiBjdXJyZW50VHJhdmVsbGVyLmlkLFxuICAgICAgICBsb3lhbHRpZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsb3lhbHR5Q29kZTogJycsXG4gICAgICAgICAgICBsb3lhbHR5TnVtYmVyOiAnJyxcbiAgICAgICAgICAgIGxveWFsdHlOdW1iZXJSZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBsb3lhbHR5UGF0dGVybjogJycsXG4gICAgICAgICAgICBsb3lhbHR5UHJlZml4OiAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICAgIGNvbnNvbGUubG9nKCdOZXcgdHJhaW5saW5lIHRyYXZlbGxlcjogJywgbmV3VHJhaW5saW5lVHJhdmVsbGVyKTtcbiAgICAgIHRoaXMudHJhaW5saW5lVHJhdmVsbGVyc1tzdGFydGluZ0xlbmd0aCArIGldID0gbmV3VHJhaW5saW5lVHJhdmVsbGVyO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdhbGwgdHJhaW5saW5lIHRyYXZlbGxlcnM6ICcsIHRoaXMudHJhaW5saW5lVHJhdmVsbGVycyk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRBZ2VGcm9tRG9iKGRvYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgYWdlID0gMDtcblxuICAgIGlmIChkb2IpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSBtb21lbnQoKS5kaWZmKGRvYiwgJ3llYXJzJyk7XG4gICAgICBhZ2UgPSBNYXRoLmZsb29yKGRpZmYpO1xuICAgIH1cblxuICAgIHJldHVybiBhZ2U7XG4gIH1cblxuICBwcml2YXRlIF9nZXRBZ2VSYW5nZUZyb21Eb2IoZG9iOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFnZSA9IHRoaXMuX2dldEFnZUZyb21Eb2IoZG9iKTtcblxuICAgIGlmIChhZ2UgJiYgYWdlIDw9IDI1KSB7XG4gICAgICByZXR1cm4gJ3lvdXRoJztcbiAgICB9XG5cbiAgICBpZiAoYWdlIDw9IDU5KSB7XG4gICAgICByZXR1cm4gJ2FkdWx0JztcbiAgICB9XG5cbiAgICByZXR1cm4gJ3Nlbmlvcic7XG4gIH1cblxuICByZW1vdmVUcmFpbmxpbmVUcmF2ZWxsZXIodHJhdmVsbGVySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudHJhaW5saW5lVHJhdmVsbGVycyA9IHRoaXMudHJhaW5saW5lVHJhdmVsbGVycy5maWx0ZXIoXG4gICAgICB0cmF2ZWxsZXIgPT4gdHJhdmVsbGVyLm9yaWdpbmFsVXNlckd1ZXN0SWQgIT09IHRyYXZlbGxlcklkXG4gICAgKTtcbiAgfVxuXG4gIGdyb3VwU3RhdGlvbkluZm8oaW5mbzogUmFpbFN0YXRpb24pOiBJUmFpbFN0YXRpb25JbmZvcm1hdGlvbiB7XG4gICAgY29uc3QgdGlja2V0T2ZmaWNlU2hhcmU6IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIGFjY2Vzc2libGVUaWNrZXRNYWNoaW5lczoge1xuICAgICAgICBpbmZvOiBudWxsLFxuICAgICAgICBleHRyYUluZm86IGluZm8uYWNjZXNzaWJsZVRpY2tldE1hY2hpbmVzLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIGhlaWdodEFkanVzdGVkVGlja2V0T2ZmaWNlQ291bnRlcjoge1xuICAgICAgICBpbmZvOiBpbmZvLmhlaWdodEFkanVzdGVkVGlja2V0T2ZmaWNlQ291bnRlcixcbiAgICAgICAgZXh0cmFJbmZvOiBpbmZvLmhlaWdodEFkanVzdGVkVGlja2V0T2ZmaWNlQ291bnRlckluZm8sXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9LFxuICAgICAgaW5kdWN0aW9uTG9vcDoge1xuICAgICAgICBpbmZvOiBpbmZvLmluZHVjdGlvbkxvb3AsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHRpY2tldE9mZmljZUluZm86IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIHRpY2tldE9mZmljZU9wZW5pbmdUaW1lczoge1xuICAgICAgICBpbmZvOiBpbmZvLnRpY2tldE9mZmljZU9wZW5pbmdUaW1lcyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LnN0cmluZ1xuICAgICAgfSxcbiAgICAgIHRyYXZlbENhcmRab25lOiB7XG4gICAgICAgIGluZm86IGluZm8udHJhdmVsQ2FyZFpvbmUsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5zdHJpbmdcbiAgICAgIH0sXG4gICAgICB0aWNrZXRNYWNoaW5lOiB7XG4gICAgICAgIGluZm86IGluZm8udGlja2V0TWFjaGluZSxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICAuLi50aWNrZXRPZmZpY2VTaGFyZVxuICAgIH07XG5cbiAgICBjb25zdCBveXN0ZXJDYXJkOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICBveXN0ZXJDYXJkc0lzc3VlZDoge1xuICAgICAgICBpbmZvOiBpbmZvLm95c3RlckNhcmRzSXNzdWVkLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIG95c3RlckNhcmRzVG9wVXA6IHtcbiAgICAgICAgaW5mbzogaW5mby5veXN0ZXJDYXJkc1RvcFVwLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIG95c3RlckNhcmRVc2FibGU6IHtcbiAgICAgICAgaW5mbzogaW5mby5veXN0ZXJDYXJkVXNhYmxlLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIG95c3RlckNhcmRJbmZvOiB7XG4gICAgICAgIGluZm86IGluZm8ub3lzdGVyQ2FyZEluZm8sXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5zdHJpbmdcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc21hcnRDYXJkOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICBzbWFydENhcmRJc3N1ZWQ6IHtcbiAgICAgICAgaW5mbzogaW5mby5zbWFydENhcmRJc3N1ZWQsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9LFxuICAgICAgc21hcnRDYXJkVmFsaWRhdG9yOiB7XG4gICAgICAgIGluZm86IGluZm8uc21hcnRDYXJkVmFsaWRhdG9yLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIHNtYXJ0Q2FyZEluZm86IHtcbiAgICAgICAgaW5mbzogaW5mby5zbWFydENhcmRJbmZvLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuc3RyaW5nXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0cm9sbGV5U2hhcmU6IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIHRyb2xsZXlzOiB7XG4gICAgICAgIGluZm86IGluZm8udHJvbGxleXMsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoZWxwU2hhcmU6IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIGFjY2Vzc2liaWxpdHlTdGFmZkhlbHBPcGVuaW5nVGltZXM6IHtcbiAgICAgICAgaW5mbzogaW5mby5hY2Nlc3NpYmlsaXR5U3RhZmZIZWxwT3BlbmluZ1RpbWVzLFxuICAgICAgICBleHRyYUluZm86IGluZm8uYWNjZXNzaWJpbGl0eVN0YWZmSGVscEF2YWlsYWJsZUluZm8sXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5hcnJheVxuICAgICAgfSxcbiAgICAgIGN1c3RvbWVySGVscFBvaW50czoge1xuICAgICAgICBpbmZvOiBpbmZvLmN1c3RvbWVySGVscFBvaW50cyxcbiAgICAgICAgZXh0cmFJbmZvOiBpbmZvLmN1c3RvbWVySGVscFBvaW50c0luZm8sXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoZWxwSW5mbzogSVN0YXRpb25JbmZvID0ge1xuICAgICAgaW5mb0F2YWlsYWJsZUZyb21TdGFmZjoge1xuICAgICAgICBpbmZvOiBpbmZvLmluZm9BdmFpbGFibGVGcm9tU3RhZmYsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5hcnJheVxuICAgICAgfSxcbiAgICAgIGluZm9TeXN0ZW1zOiB7XG4gICAgICAgIGluZm86IGluZm8uaW5mb1N5c3RlbXMsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5hcnJheVxuICAgICAgfSxcbiAgICAgIC4uLmhlbHBTaGFyZSxcbiAgICAgIGN1c3RvbWVyU2VydmljZToge1xuICAgICAgICBpbmZvOiBpbmZvLmN1c3RvbWVyU2VydmljZSxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LnN0cmluZ1xuICAgICAgfSxcbiAgICAgIGxlZnRMdWdnYWdlOiB7XG4gICAgICAgIGluZm86IGluZm8ubGVmdEx1Z2dhZ2UsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9LFxuICAgICAgbG9zdFByb3BlcnR5T3BlbmluZ1RpbWVzOiB7XG4gICAgICAgIGluZm86IGluZm8ubG9zdFByb3BlcnR5T3BlbmluZ1RpbWVzLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYXJyYXlcbiAgICAgIH0sXG4gICAgICAuLi50cm9sbGV5U2hhcmUsXG4gICAgICBjY3R2OiB7XG4gICAgICAgIGluZm86IGluZm8uY2N0dixcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHRvaWxldHNTaGFyZTogSVN0YXRpb25JbmZvID0ge1xuICAgICAgbmF0aW9uYWxLZXlUb2lsZXRzOiB7XG4gICAgICAgIGluZm86IGluZm8ubmF0aW9uYWxLZXlUb2lsZXRzLFxuICAgICAgICBleHRyYUluZm86IGluZm8ubmF0aW9uYWxLZXlUb2lsZXRzTG9jYXRpb24sXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBsb3VuZ2VzU2hhcmU6IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIHdhaXRpbmdSb29tOiB7XG4gICAgICAgIGluZm86IGluZm8ud2FpdGluZ1Jvb20sXG4gICAgICAgIGV4dHJhSW5mbzogaW5mby53YWl0aW5nUm9vbUxvY2F0aW9uLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIHNlYXRlZEFyZWE6IHtcbiAgICAgICAgaW5mbzogaW5mby5zZWF0ZWRBcmVhLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBwaG9uZVNoYXJlOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICBwdWJsaWNQaG9uZToge1xuICAgICAgICBpbmZvOiBpbmZvLnB1YmxpY1Bob25lLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBzdGF0aW9uQWNjZXNzaWJpbGl0eTogSVN0YXRpb25JbmZvID0ge1xuICAgICAgc3RlcEZyZWVBY2Nlc3NJbmZvOiB7XG4gICAgICAgIGluZm86IG51bGwsXG4gICAgICAgIGV4dHJhSW5mbzogaW5mby5zdGVwRnJlZUFjY2Vzc0luZm8sXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5zdHJpbmdcbiAgICAgIH0sXG4gICAgICB0aWNrZXRHYXRlczoge1xuICAgICAgICBpbmZvOiBpbmZvLnRpY2tldEdhdGVzLFxuICAgICAgICBleHRyYUluZm86IGluZm8udGlja2V0R2F0ZXNJbmZvLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIC4uLnRpY2tldE9mZmljZVNoYXJlLFxuICAgICAgcmFtcEZvclRyYWluQWNjZXNzOiB7XG4gICAgICAgIGluZm86IGluZm8ucmFtcEZvclRyYWluQWNjZXNzLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIC4uLnRvaWxldHNTaGFyZSxcbiAgICAgIC4uLmxvdW5nZXNTaGFyZSxcbiAgICAgIC4uLnBob25lU2hhcmUsXG4gICAgICB3aGVlbGNoYWlyczoge1xuICAgICAgICBpbmZvOiBpbmZvLndoZWVsY2hhaXJzLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIC4uLnRyb2xsZXlTaGFyZVxuICAgIH07XG4gICAgY29uc3QgZ2V0dGluZ1RvU3RhdGlvbjogSVN0YXRpb25JbmZvID0ge1xuICAgICAgYWNjZXNzaWJsZVRheGlzSW5mbzoge1xuICAgICAgICBpbmZvOiBudWxsLFxuICAgICAgICBleHRyYUluZm86IGluZm8uYWNjZXNzaWJsZVRheGlzSW5mbyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICBpbXBhaXJlZE1vYmlsaXR5U2V0RG93bjoge1xuICAgICAgICBpbmZvOiBpbmZvLmltcGFpcmVkTW9iaWxpdHlTZXREb3duLFxuICAgICAgICBleHRyYUluZm86IGluZm8uaW1wYWlyZWRNb2JpbGl0eVNldERvd25JbmZvLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIGNhclBhcmtBY2Nlc3NpYmxlU3BhY2VzOiB7XG4gICAgICAgIGluZm86IGluZm8uY2FyUGFya0FjY2Vzc2libGVTcGFjZXMsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5zdHJpbmdcbiAgICAgIH0sXG4gICAgICBjYXJQYXJrQWNjZXNzaWJsZToge1xuICAgICAgICBpbmZvOiBpbmZvLmNhclBhcmtBY2Nlc3NpYmxlLFxuICAgICAgICBleHRyYUluZm86IGluZm8uY2FyUGFya0FjY2Vzc2libGVJbmZvLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3RhZmZIZWxwOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICAuLi5oZWxwU2hhcmUsXG4gICAgICBhY2Nlc3NpYmlsaXR5SGVscGxpbmVJbmZvOiB7XG4gICAgICAgIGluZm86IG51bGwsXG4gICAgICAgIGV4dHJhSW5mbzogaW5mby5hY2Nlc3NpYmlsaXR5SGVscGxpbmVJbmZvLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuc3RyaW5nXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0b2lsZXRzQmFieUluZm86IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIHRvaWxldHM6IHtcbiAgICAgICAgaW5mbzogaW5mby50b2lsZXRzLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIC4uLnRvaWxldHNTaGFyZSxcbiAgICAgIGJhYnlDaGFuZ2U6IHtcbiAgICAgICAgaW5mbzogaW5mby5iYWJ5Q2hhbmdlLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBsb3VuZ2VzSW5mbzogSVN0YXRpb25JbmZvID0ge1xuICAgICAgLi4ubG91bmdlc1NoYXJlLFxuICAgICAgZmlyc3RDbGFzc0xvdW5nZToge1xuICAgICAgICBpbmZvOiBpbmZvLmZpcnN0Q2xhc3NMb3VuZ2UsXG4gICAgICAgIGV4dHJhSW5mbzogaW5mby5maXJzdENsYXNzTG91bmdlSW5mbyxcbiAgICAgICAgaW5mb0RldGFpbDogaW5mby5maXJzdENsYXNzTG91bmdlT3BlbmluZ1RpbWVzLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY2FyUGFya1RlbGVwaG9uZSA9IGluZm8uY2FyUGFya1RlbGVwaG9uZSA/IGAke2luZm8uY2FyUGFya1RlbGVwaG9uZX08YnIvPmAgOiAnJztcbiAgICBjb25zdCBjYXJQYXJrRW1haWwgPSBpbmZvLmNhclBhcmtFbWFpbCA/IGAke2luZm8uY2FyUGFya0VtYWlsfTxici8+YCA6ICcnO1xuICAgIGNvbnN0IHBhcmtpbmdFeHRyYSA9IGAke2NhclBhcmtUZWxlcGhvbmV9ICR7Y2FyUGFya0VtYWlsfSAke2luZm8uY2FyUGFya1VSTCB8fCAnJ31gO1xuICAgIGNvbnN0IHBhcmtpbmdJbmZvOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICBjYXJQYXJrT3BlcmF0b3I6IHtcbiAgICAgICAgaW5mbzogaW5mby5jYXJQYXJrT3BlcmF0b3IsXG4gICAgICAgIGV4dHJhSW5mbzogcGFya2luZ0V4dHJhLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuc3RyaW5nXG4gICAgICB9LFxuICAgICAgY2FyUGFya09wZW5pbmdUaW1lczoge1xuICAgICAgICBpbmZvOiBpbmZvLmNhclBhcmtPcGVuaW5nVGltZXMsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5hcnJheVxuICAgICAgfSxcbiAgICAgIGNhclBhcmtTcGFjZXM6IHtcbiAgICAgICAgaW5mbzogaW5mby5jYXJQYXJrU3BhY2VzLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuc3RyaW5nXG4gICAgICB9LFxuICAgICAgY2FyUGFya0NDVFY6IHtcbiAgICAgICAgaW5mbzogaW5mby5jYXJQYXJrQ0NUVixcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNob3BwaW5nSW5mbzogSVN0YXRpb25JbmZvID0ge1xuICAgICAgYXRtOiB7XG4gICAgICAgIGluZm86IGluZm8uYXRtLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIGZ4QnVyZWF1OiB7XG4gICAgICAgIGluZm86IGluZm8uZnhCdXJlYXUsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9LFxuICAgICAgYnVmZmV0OiB7XG4gICAgICAgIGluZm86IGluZm8uYnVmZmV0LFxuICAgICAgICBleHRyYUluZm86IGluZm8uYnVmZmV0TG9jYXRpb24sXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9LFxuICAgICAgU2hvcHM6IHtcbiAgICAgICAgaW5mbzogaW5mby5zaG9wcyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgd0lGSUluZm86IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIC4uLnBob25lU2hhcmUsXG4gICAgICB3aUZpOiB7XG4gICAgICAgIGluZm86IGluZm8ud2lGaSxcbiAgICAgICAgZXh0cmFJbmZvOiBpbmZvLndpRmlJbmZvLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY3ljbGVJbmZvOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICBjeWNsZVN0b3JhZ2VTcGFjZXM6IHtcbiAgICAgICAgaW5mbzogaW5mby5jeWNsZVN0b3JhZ2VTcGFjZXMsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5zdHJpbmdcbiAgICAgIH0sXG4gICAgICBjeWNsZVN0b3JhZ2VUeXBlOiB7XG4gICAgICAgIGluZm86IGluZm8uY3ljbGVTdG9yYWdlVHlwZSxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LnN0cmluZ1xuICAgICAgfSxcbiAgICAgIGN5Y2xlU3RvcmFnZUxvY2F0aW9uOiB7XG4gICAgICAgIGluZm86IGluZm8uY3ljbGVTdG9yYWdlTG9jYXRpb24sXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5zdHJpbmdcbiAgICAgIH0sXG4gICAgICBjeWNsZVN0b3JhZ2VTaGVsdGVyZWQ6IHtcbiAgICAgICAgaW5mbzogaW5mby5jeWNsZVN0b3JhZ2VTaGVsdGVyZWQsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9LFxuICAgICAgY3ljbGVTdG9yYWdlQ0NUVjoge1xuICAgICAgICBpbmZvOiBpbmZvLmN5Y2xlU3RvcmFnZUNDVFYsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICB0aWNrZXRPZmZpY2VJbmZvOiB0aWNrZXRPZmZpY2VJbmZvLFxuICAgICAgb3lzdGVyQ2FyZDogb3lzdGVyQ2FyZCxcbiAgICAgIHNtYXJ0Q2FyZDogc21hcnRDYXJkLFxuICAgICAgaGVscEluZm86IGhlbHBJbmZvLFxuICAgICAgc3RhdGlvbkFjY2Vzc2liaWxpdHk6IHN0YXRpb25BY2Nlc3NpYmlsaXR5LFxuICAgICAgZ2V0dGluZ1RvU3RhdGlvbjogZ2V0dGluZ1RvU3RhdGlvbixcbiAgICAgIHN0YWZmSGVscDogc3RhZmZIZWxwLFxuICAgICAgdG9pbGV0c0JhYnlJbmZvOiB0b2lsZXRzQmFieUluZm8sXG4gICAgICBsb3VuZ2VzSW5mbzogbG91bmdlc0luZm8sXG4gICAgICBwYXJraW5nSW5mbzogcGFya2luZ0luZm8sXG4gICAgICBzaG9wcGluZ0luZm86IHNob3BwaW5nSW5mbyxcbiAgICAgIHdJRklJbmZvOiB3SUZJSW5mbyxcbiAgICAgIGN5Y2xlSW5mbzogY3ljbGVJbmZvXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBjaGFuZ2UgdGhlIGxvY2F0aW9uIHdpdGhvdXQgcmVzZXRpbmcgdGhlIHRyYXZlbHRvL2Zyb21cbiAgICogQHBhcmFtIG5ld0xvY1xuICAgKi9cbiAgY2hhbmdlTG9jYXRpb24obmV3TG9jOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2NhdGlvbiA9IG5ld0xvYztcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdFRpY2tldEZvckV4Y2hhbmdlKFxuICAgIGRpcmVjdGlvbjogUmFpbERpcmVjdGlvbixcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxuICAgIHNvdXJjZUlkOiBzdHJpbmcsXG4gICAgc2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcyxcbiAgICB3ZWxsYmVpbmc6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICByZWFwcGx5RmlsdGVyOiBib29sZWFuID0gdHJ1ZSxcbiAgICBpc0V1OiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxSYWlsQmFza2V0SXRlbT4ge1xuICAgIGNvbnN0IGZhcmVUeXBlID0gdGhpcy5zZWxlY3RlZFRpY2tldD8uZmFyZT8udHlwZTtcbiAgICBjb25zdCBpZ25vcmVUaWNrZXRFeHRyYXMgPSB0aGlzLnRyYXZlbGNhcmRGYXJlQ2hlY2soXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0Py5qb3VybmV5Py50aWNrZXRFeHRyYXMsXG4gICAgICBmYXJlVHlwZVxuICAgICk7XG5cbiAgICBpZiAoIXNvdXJjZUlkKSB7XG4gICAgICBzb3VyY2VJZCA9IHRoaXMucmVzdWx0cy52YWx1ZVswXS5zb3VyY2VJZC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghcmFpbEZhcmUuc2VsZWN0YWJsZSkge1xuICAgICAgY29uc29sZS5lcnJvcignKysrIFJhaWwgRmFyZSBpcyBub3Qgc2VsZWN0YWJsZSArKysnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LmpvdXJuZXlIYXNoID09PSBqb3VybmV5LmpvdXJuZXlIYXNoICYmXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2ggPT09IHJhaWxGYXJlLmZhcmVIYXNoXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcbiAgICAgIGlmIChyZWFwcGx5RmlsdGVyKSB0aGlzLl9hcHBseUZpbHRlcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZFRpY2tldCA9IHRoaXMuc2VsZWN0ZWRUaWNrZXQ7XG4gICAgdGhpcy5hbHRlcm5hdGl2ZVdlbGxiZWluZyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFxuICAgICAgVXNlckZhdm9ydXJpdGUuQWx0ZXJuYXRpdmVSYWlsSXRpbmVyYXJ5RW5hYmxlZFxuICAgICk7XG4gICAgaWYgKFxuICAgICAgc2VsZWN0ZWRUaWNrZXQgJiZcbiAgICAgICF3ZWxsYmVpbmcgJiZcbiAgICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcgJiZcbiAgICAgIGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5JbmJvdW5kXG4gICAgKSB7XG4gICAgICBjb25zdCBvdXQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0gc2VsZWN0ZWRUaWNrZXQuam91cm5leTtcbiAgICAgIGNvbnN0IGluQjogT0JUUmFpbEpvdXJuZXlPcHRpb24gPSBqb3VybmV5O1xuXG4gICAgICBjb25zdCB0aW1lRGlmZkluSG91cnMgPSBtb21lbnQob3V0LmFycml2ZURhdGVUaW1lKS5kaWZmKFxuICAgICAgICBtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSxcbiAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRpbWVEaWZmSW5Ib3Vyc0luID0gbW9tZW50KGluQi5hcnJpdmVEYXRlVGltZSkuZGlmZihcbiAgICAgICAgbW9tZW50KGluQi5kZXBhcnREYXRlVGltZSksXG4gICAgICAgICdob3VycycsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBjb25zdCBkYXlEaWZmZXJuY2UgPSBtb21lbnQoaW5CLmRlcGFydERhdGVUaW1lKS5kaWZmKG1vbWVudChvdXQuZGVwYXJ0RGF0ZVRpbWUpLCAnZGF5Jyk7XG4gICAgICBjb25zdCB0b0FkZCA9IGF3YWl0IHRoaXMuY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxuICAgICAgICB0aW1lRGlmZkluSG91cnMgKyB0aW1lRGlmZkluSG91cnNJbixcbiAgICAgICAgZGF5RGlmZmVybmNlXG4gICAgICApO1xuICAgICAgaWYgKHRvQWRkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0VGlja2V0KGRpcmVjdGlvbiwgam91cm5leSwgcmFpbEZhcmUsIHNvdXJjZUlkLCBzZWN0aW9uLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zID0gdGhpcy50ZW1wUGFyYW1zO1xuXG4gICAgICBzd2l0Y2ggKHNlY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnc2luZ2xlSm91cm5leUZhcmVzJzpcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xuICAgICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAhaWdub3JlVGlja2V0RXh0cmFzICYmXG4gICAgICAgICAgICByYWlsRmFyZS50ZXJtc1swXS50ZXJtcz8uY2F0ZWdvcnkgIT09ICdUUkFWRUxDQVJEJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHdpbmRvd0NsYXNzOiAncmFpbC10aWNrZXRzLWRpYWxvZycsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IGpvdXJuZXkgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghdGlja2V0RXh0cmFzKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzID8gdGlja2V0RXh0cmFzIDogW107XG4gICAgICAgICAgfSBlbHNlIGlmIChqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCAmJiByYWlsRmFyZS50ZXJtc1swXS50ZXJtcz8uY2F0ZWdvcnkgPT09ICdUUkFWRUxDQVJEJykge1xuICAgICAgICAgICAgam91cm5leS50aWNrZXRFeHRyYXMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVTaW5nbGVCYXNrZXRJdGVtRGV0YWlsKFxuICAgICAgICAgICAgc291cmNlSWQsXG4gICAgICAgICAgICBzZWFyY2hRdWVyeSxcbiAgICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgICByYWlsRmFyZSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgaXNFdVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGJhc2tldDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVTaW5nbGVCYXNrZXRJdGVtRGV0YWlsKFxuICAgIHNlcnZpY2VJZDogc3RyaW5nLFxuICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zLFxuICAgIHJhaWxKb3VybmV5T3B0aW9uOiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxuICAgIGluZ29yZUludm9rZWQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpc0V1OiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxSYWlsQmFza2V0SXRlbT4ge1xuICAgIGNvbnNvbGUubG9nKCdhZGRpbmc6ICcsIHJhaWxGYXJlKTtcblxuICAgIGNvbnN0IHJhaWxRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGVtcFBhcmFtcyk7XG5cbiAgICBpZiAoIXJhaWxRdWVyeS5jaGlsZHJlbikge1xuICAgICAgcmFpbFF1ZXJ5LmNoaWxkcmVuID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGxldCBvdXRUaWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxuICAgIGlmIChyYWlsSm91cm5leU9wdGlvbj8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcbiAgICAgIG91dFRpY2tldEV4dHJhcyA9IHRoaXMuY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KHJhaWxKb3VybmV5T3B0aW9uLnRpY2tldEV4dHJhcyk7XG4gICAgfVxuXG4gICAgLy8gaWYgKHJhaWxKb3VybmV5T3B0aW9uLnVuc2VsbGFibGUpIHtcbiAgICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIC8vIH1cbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XG5cbiAgICBjb25zdCByYWlsRmFyZUxpc3Q6IHsgaWQ/OiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10gPSByYWlsRmFyZS5pZGVudGlmaWVycz8uZmFyZXM/Lmxlbmd0aFxuICAgICAgPyByYWlsRmFyZS5pZGVudGlmaWVycz8uZmFyZXM/Lm1hcCh4ID0+ICh7IGlkOiB4LmlkLCBuYW1lOiB4Lm5hbWUgfSkpXG4gICAgICA6IFt7IG5hbWU6IHJhaWxGYXJlLnR5cGUgfV07XG5cbiAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHRoaXMudXNlclNlcnZpY2UuZmluZFNlcnZpY2Uoc2VydmljZUlkKT8ubmFtZTtcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChcbiAgICAgIHJhaWxGYXJlLFxuICAgICAgcmFpbEpvdXJuZXlPcHRpb24sXG4gICAgICByYWlsRmFyZUxpc3QsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBzZXJ2aWNlTmFtZVxuICAgICk7XG4gICAgaWYgKGJhc2tldCkge1xuICAgICAgY29uc3QgbGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbiwgaXNFdSk7XG5cbiAgICAgIGNvbnN0IGxvd2VzdFRpY2tldCA9IHRoaXMuZmluZENoZWFwZXN0VGlja2V0KCk7XG4gICAgICBsb3dlc3RUaWNrZXQuYW1vdW50ID0gK2xvd2VzdFRpY2tldC5hbW91bnQudG9GaXhlZCgyKTtcblxuICAgICAgY29uc3QgYmFza2V0SXRlbTogUmFpbEJhc2tldEl0ZW0gPSB7XG4gICAgICAgIHJlcXVpcmVzT3ZlcnJpZGVSZWFzb246IHJhaWxGYXJlLnVuYXZhaWxhYmxlLFxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcbiAgICAgICAgc2VydmljZTogc2VydmljZUlkLnRvU3RyaW5nKCksXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIGV4cGlyZXNBdDogcmFpbEZhcmUuaWRlbnRpZmllcnM/LmV4cGlyZXNBdCxcbiAgICAgICAgICBpc0VVOiBpc0V1ID8gaXNFdSA6IG51bGwsIC8vICFzZXQgdG8gbnVsbCBhcyBFdm9sdmkgZG9zZW4ndCBoYXZlIHRoaXMgaW4gdGhlIHNjaGVtYVxuICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdDogKHJhaWxGYXJlLnRpY2tldFF1ZXVlTGlzdCB8fCBbXSkubWFwKFxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgYWNjb3VudHNMaXN0OiAocmFpbEpvdXJuZXlPcHRpb24uYWNjb3VudHNMaXN0IHx8IFtdKS5tYXAoXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSxcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHJhaWxKb3VybmV5T3B0aW9uLmFycml2ZURhdGVUaW1lLFxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiByYWlsSm91cm5leU9wdGlvbi50byxcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiByYWlsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiByYWlsSm91cm5leU9wdGlvbi5mcm9tLFxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IHJhaWxGYXJlLnByb3ZpZGVyTmFtZSxcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogcmFpbEZhcmUudHlwZSxcbiAgICAgICAgICAgICAgICBwcmljZTogcmFpbEZhcmUucHJpY2UsXG4gICAgICAgICAgICAgICAgbGVncyxcbiAgICAgICAgICAgICAgICBwZXJtaXR0ZWREZXN0aW5hdGlvbnM6IHJhaWxGYXJlLnBlcm1pdHRlZERlc3RpbmF0aW9ucyxcbiAgICAgICAgICAgICAgICBwZXJtaXR0ZWRPcmlnaW5zOiByYWlsRmFyZS5wZXJtaXR0ZWRPcmlnaW5zXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogcmFpbEZhcmUuaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxuICAgICAgICAgIG91dGJvdW5kOiB7XG4gICAgICAgICAgICBlVGlja2V0OiAhIXJhaWxGYXJlLmVUaWNrZXRBdmFpbGFibGUsXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtyYWlsRmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcl0sXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogcmFpbEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcbiAgICAgICAgICAgICAgcmFpbEpvdXJuZXlPcHRpb24uam91cm5leUxlZ3NcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc1NwbGl0OiAhIXJhaWxGYXJlLmlkZW50aWZpZXJzPy5pc1NwbGl0LFxuICAgICAgICAgICAgZmFyZXM6IHJhaWxGYXJlPy5pZGVudGlmaWVycz8uZmFyZXMsXG4gICAgICAgICAgICBjb21wb3NpdGlvbjogcmFpbEZhcmUuaWRlbnRpZmllcnM/LmNvbXBvc2l0aW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9ucyxcbiAgICAgICAgICBkaXNjb3VudEluZm86IHJhaWxGYXJlLmRpc2NvdW50SW5mbyxcbiAgICAgICAgICBmdWxsUHJpY2U6IHJhaWxGYXJlLmZ1bGxQcmljZSxcbiAgICAgICAgICBzaW5nbGVPclJldHVybjpcbiAgICAgICAgICAgIHRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XG4gICAgICAgICAgICAgID8gVGlja2V0VHlwZS5SZXR1cm5cbiAgICAgICAgICAgICAgOiBUaWNrZXRUeXBlLlNpbmdsZVxuICAgICAgICB9LFxuICAgICAgICBhZHVsdHM6IHJhaWxRdWVyeS5hZHVsdHMsXG4gICAgICAgIGNoaWxkcmVuOiByYWlsUXVlcnkuY2hpbGRyZW4gPyByYWlsUXVlcnkuY2hpbGRyZW4gOiB1bmRlZmluZWQsXG4gICAgICAgIHByaWNlOiByYWlsRmFyZS5wcmljZSxcbiAgICAgICAgY3VycmVuY3k6IHJhaWxGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcbiAgICAgICAgc2VhcmNoUXVlcnk6IHJhaWxRdWVyeSxcbiAgICAgICAgY28yUGVySXRlbTogcmFpbEpvdXJuZXlPcHRpb24uY28yUGVySXRlbSxcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiByYWlsSm91cm5leU9wdGlvbi5jbzJQZXJQYXNzZW5nZXIsXG4gICAgICAgIG91dGJvdW5kRGF0ZTogcmFpbEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWUsXG4gICAgICAgIGxvd2VzdFByaWNlOlxuICAgICAgICAgIGxvd2VzdFRpY2tldC5hbW91bnQgfHwgbG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZSAhPT0gcmFpbEZhcmUuY3VycmVuY3lcbiAgICAgICAgICAgID8gbG93ZXN0VGlja2V0LmFtb3VudFxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OlxuICAgICAgICAgIGxvd2VzdFRpY2tldC5hbW91bnQgfHwgbG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZSAhPT0gcmFpbEZhcmUuY3VycmVuY3lcbiAgICAgICAgICAgID8gPEN1cnJlbmN5Q29kZT5sb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGFnZW50T3ZlcnJvZGVVbmF2YWlsYWJsZTogcmFpbEZhcmUudW5hdmFpbGFibGUsXG4gICAgICAgIHJlYXNvbktleXM6IHJhaWxGYXJlLnJlcXVpcmVzUmVhc29uS2V5c1xuICAgICAgfTtcblxuICAgICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBhZGQgdGhlIG9iamVjdCB0byBiYXNrZXRJdGVtXG4gICAgICBpZiAob3V0VGlja2V0RXh0cmFzICYmICFyYWlsRmFyZS50eXBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3RyYXZlbGNhcmQnKSkge1xuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZC50aWNrZXRFeHRyYXMgPSBvdXRUaWNrZXRFeHRyYXM7XG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLnRpY2tldFF1ZXVlTGlzdCA9IGJhc2tldEl0ZW0uZGV0YWlsLnRpY2tldFF1ZXVlTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW06IFRpY2tldFF1ZXVlTGlzdCkgPT4gaXRlbS50eXBlICE9PSAnZVRpY2tldCdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyYWlsRmFyZS50aWNrZXRPbkRlcGFydHVyZUF2YWlsYWJsZSkge1xuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QgPSBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QuZmlsdGVyKFxuICAgICAgICAgIChpdGVtOiBUaWNrZXRRdWV1ZUxpc3QpID0+IGl0ZW0udHlwZSAhPT0gJ1RpY2tldE9uRGVwYXJ0dXJlJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFza2V0SXRlbTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvcGVuUmFpbFRpY2tldERldGFpbHNEaWFsb2coam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sIHRpY2tldDogT0JUUmFpbEpvdXJuZXlGYXJlLCB0ZXJtczpSYWlsVGlja2V0VGVybXNMaXN0W10sIGlkZW50aWZpZXJzOiBSYWlsSWRlbnRpZmllcnMsIHNvdXJjZUlkOiBzdHJpbmcpe1xuICAgIGlmICh0ZXJtcz8ubGVuZ3RoID4gMSAmJiB0aWNrZXQuaWRlbnRpZmllcnM/LmlzU3BsaXQpIHtcbiAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShzb3VyY2VJZCk/Lm5hbWU7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICBNb2RhbFR5cGVzLlJhaWxGYXJlTGlzdENvbXBvbmVudCxcbiAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3V0Ym91bmRGYXJlVGVybXNMaXN0OiB0ZXJtcyxcbiAgICAgICAgICBvdXRib3VuZEZhcmVzOiBpZGVudGlmaWVycy5mYXJlcyxcbiAgICAgICAgICBzcGxpdFR5cGU6IGlkZW50aWZpZXJzLmNvbXBvc2l0aW9uPy5bMF0sXG4gICAgICAgICAgb3JpZ2luOiBqb3VybmV5LmZyb20sXG4gICAgICAgICAgZGVzdGluYXRpb246IGpvdXJuZXkudG8sXG4gICAgICAgICAgc2VydmljZU5hbWU6IHNlcnZpY2VOYW1lXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgIE1vZGFsVHlwZXMuUmFpbEZhcmVUZXJtc0NvbXBvbmVudCxcbiAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGlja2V0RGV0YWlsczogdGVybXM/LlswXT8udGVybXNcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
3498
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFpbC1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9yYWlsLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJekQsT0FBTyxFQUdMLDRCQUE0QixFQUM1QixhQUFhLEVBQ2IscUJBQXFCLEVBZXJCLFlBQVksRUFDWixlQUFlLEVBQ2YsYUFBYSxFQUNkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUVMLFNBQVMsRUFLVCxXQUFXLEVBRVgscUJBQXFCLEVBV3JCLGtCQUFrQixFQUtuQixNQUFNLHdCQUF3QixDQUFDO0FBZ0JoQyxPQUFPLEVBQWEsSUFBSSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsT0FBTyxFQU1MLFVBQVUsRUFDWCxNQUFNLDBDQUEwQyxDQUFDO0FBSWxELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFLaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7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QUM7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMxQixVQUFVLENBQUMsc0JBQXNCLEVBQ2pDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNsQjtvQkFDRSxhQUFhLEVBQUUsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUcsQ0FBQyxDQUFDLDBDQUFFLEtBQUs7aUJBQ2pDLENBQ0YsQ0FBQzthQUNIOztLQUNGOztBQXg2SWUsMkNBQXNCLEdBQUcsYUFBYSxDQUFDO0FBQ3ZDLDRDQUF1QixHQUFHLGNBQWMsQ0FBQztBQUN6QyxrQ0FBYSxHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IG9mLCBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XG5pbXBvcnQge1xuICBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcyxcbiAgQ2hlYXBlc3RSYWlsUHJpY2VzLFxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLFxuICBMb2NhdGlvblR5cGVzLFxuICBtYXhUcmF2ZWxsZXJXZWxsYmVpbmcsXG4gIE5nYkRhdGVTdHJ1Y3QsXG4gIE9CVFJhaWxGYXJlLFxuICBPQlRSYWlsRmFyZVR5cGVzLFxuICBPQlRSYWlsSW50ZXJuYWxGYXJlLFxuICBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uLFxuICBPQlRSYWlsSm91cm5leUZhcmUsXG4gIE9CVFJhaWxKb3VybmV5T3B0aW9uLFxuICBPQlRSYWlsUXVvdGVSZXN1bHQsXG4gIE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5LFxuICBPQlRTcGxpdFJhaWxKb3VybmV5RmFyZSxcbiAgUmFpbFdlbGxiZWluZ09iamVjdEludGVyZmFjZSxcbiAgUmVjZW50U2VhcmNoLFxuICBSZWN1cnNpdmVQYXJ0aWFsLFxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxuICBTY2hlbWFGb3JtYXQsXG4gIFNlcnZpY2VQcm92aWRlcixcbiAgV2VsbGJlaW5nRW51bVxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge1xuICBCYXNrZXRJdGVtLFxuICBSYWlsQ2xhc3MsXG4gIFJhaWxKb3VybmV5T3B0aW9uLFxuICBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcixcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxuICBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXG4gIFNlcnZpY2VUeXBlLFxuICBSYWlsVGlja2V0RXh0cmEsXG4gIFJhaWxTZWFyY2hKb3VybmV5VHlwZSxcbiAgUmFpbEpvdXJuZXlGYXJlLFxuICBSYWlsU3RhdGlvbixcbiAgQ3VycmVuY3lDb2RlLFxuICBSYWlsQWNjb3VudCxcbiAgUmFpbFRpY2tldFF1ZXVlLFxuICBSYWlsSm91cm5leUxlZyxcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXG4gIFJhaWxDYWxsaW5nUG9pbnQsXG4gIFJhaWxUaWNrZXRUZXJtc0xpc3QsXG4gIFRyYXZlbGxlcklucHV0LFxuICBQYXNzZW5nZXJJbnB1dFR5cGUsXG4gIFJhaWxDYXJkUXVhbGlmaWVycyxcbiAgUmFpbFNlYXJjaFJlc3VsdCxcbiAgVHJhaW5TZWF0TWFwU2VhdCxcbiAgUmFpbElkZW50aWZpZXJzXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHsgQmFzZVJhaWxRdW90ZUZldGNoZXIsIFJhaWxRdW90ZUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvcmFpbC1xdW90ZS1mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXIsXG4gIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtc3RhdGlvbi5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnVsbFVzZXJEZXRhaWxzLCBVc2VyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XG5pbXBvcnQge1xuICBSYWlsRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcbiAgUmFpbFRlbXBQYXJhbXNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcmFpbC1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBUcmF2ZWxsZXIsIGFnZXMgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xuaW1wb3J0IHsgSVJhaWxBaXJwb3J0RXhwcmVzc1N0YXRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLWFpcnBvcnQtZXhwcmVzcy1zdGF0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQWNjb3VudHNMaXN0LFxuICBJVHJhdmVsQ2FyZERldGFpbCxcbiAgUmFpbEJhc2tldEl0ZW0sXG4gIFRpY2tldEV4dHJhcyxcbiAgVGlja2V0UXVldWVMaXN0LFxuICBUaWNrZXRUeXBlXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1iYXNrZXQtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmFpbFJlY2VudFNlYXJjaEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtcmVjZW50LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSYWlsUXVvdGVSZXN1bHQsIFJhaWxRdW90ZVJlc3VsdEFycmF5IH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgUmFpbFJ1bGVFbml0eSwgUmFpbFJ1bGVFbml0eUtleXMsIFJhaWxTdW1tYXJ5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdW1tYXJ5LWludGVyZmFjZSc7XG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4vbW9kYWwtdHlwZXMuZW51bSc7XG5pbXBvcnQge1xuICBJUmFpbFNlbGVjdGVkTXVsdGlGYXJlcyxcbiAgSVJhaWxTZWxlY3RlZFRpY2tldFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtc2VsZWN0ZWQtdGlja2V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSYWlsRGlyZWN0aW9uIH0gZnJvbSAnLi9yYWlsLWRpcmVjdGlvbi5lbnVtJztcbmltcG9ydCB7IFJhaWxJbmRleFRvVGlja2V0IH0gZnJvbSAnLi9yYWlsLWluZGV4LXRvLXRpY2tldCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQUlSVG9SYWlsVUsgfSBmcm9tICcuLi9kYXRhL2Fpci10by1yYWlsLXVrJztcbmltcG9ydCB7IFRyYXZlbENhcmRMb2NhdGlvbnMgfSBmcm9tICcuL3RyYXZlbC1jYXJkLWxvY2F0aW9ucy5lbnVtJztcbmltcG9ydCB7XG4gIElSYWlsU3RhdGlvbkluZm9ybWF0aW9uLFxuICBJU3RhdGlvbkluZm9cbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcmFpbC1zdGF0aW9uLWluZm9ybWF0aW9uLmludGVyZmFjZSc7XG5cbmV4cG9ydCBlbnVtIFJhaWxTZWFyY2hDcml0ZXJpYSB7XG4gIERlcGFydCA9ICdEZXBhcnQgQWZ0ZXInLFxuICBBcnJpdmUgPSAnQXJyaXZlIEJlZm9yZSdcbn1cblxuZXhwb3J0IGVudW0gUmFpbEpvdXJuZXlGYXJlVHlwZSB7IC8vIG1heSBuZWVkIHRvIGJlIGV4cGFuZGVkIGZvciBkdWFsL3NwbGl0XG4gIFJldHVybiA9ICdSZXR1cm4nLFxuICBTaW5nbGUgPSAnU2luZ2xlJ1xufVxuXG5leHBvcnQgZW51bSBSYWlsRmFyZVR5cGVzIHtcbiAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyA9ICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJyxcbiAgcmV0dXJuSm91cm5leUZhcmVzID0gJ3JldHVybkpvdXJuZXlGYXJlcycsXG4gIHNpbmdsZUpvdXJuZXlGYXJlcyA9ICdzaW5nbGVKb3VybmV5RmFyZXMnLFxuICBvcGVuUmV0dXJuSm91cm5leUZhcmVzID0gJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLFxuICBzcGxpdEZhcmVzID0gJ3NwbGl0RmFyZXMnXG59XG5cbmV4cG9ydCBlbnVtIFRyYWlubGluZVNlYXJjaENvbmZpZ1R5cGVzIHsgLy8gPyBXaG8gY2FtZSB1cCB3aXRoIHRoZSBjYXBpdGFsaXNhdGlvbiBmb3JtYXQ/XG4gIGFsbE9mRXVyb3BlID0gJ0FsbF9vZl9FdXJvcGUnLFxuICB1a09ubHkgPSAnVUtfb25seScsXG4gIHVrQW5kRXVyb3BlID0gJ1VLICYgQWxsIG9mIEVVJ1xufVxuXG5pbnRlcmZhY2UgSGlkZVJhaWxDbGFzc0ludGVyZmFjZSB7XG4gIGFueTogYm9vbGVhbjtcbiAgc3RhbmRhcmQ6IGJvb2xlYW47XG4gIGZpcnN0OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFsbG93ZWRSYWlsQ2xhc3Mge1xuICBkaXNwbGF5OiBzdHJpbmc7XG4gIHZhbHVlOiBSYWlsQ2xhc3MgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWlubGluZVRyYXZlbGxlciB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWdlUmFuZ2U6IHN0cmluZztcbiAgYWdlOiBudW1iZXI7XG4gIG9yaWdpbmFsVXNlckd1ZXN0SWQ6IHN0cmluZztcbiAgbG95YWx0aWVzOiBUcmFpbmxpbmVMb3lhbHR5W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhaW5saW5lTG95YWx0eSB7XG4gIGxveWFsdHlOdW1iZXI6IHN0cmluZztcbiAgbG95YWx0eU51bWJlclJlcXVpcmVkOiBib29sZWFuO1xuICBsb3lhbHR5UGF0dGVybjogc3RyaW5nO1xuICBsb3lhbHR5UHJlZml4OiBzdHJpbmc7XG4gIGxveWFsdHlDb2RlOiBzdHJpbmc7XG59XG5leHBvcnQgY2xhc3MgUmFpbEVudGVycHJpc2VTZWFyY2g8XG4gICAgUSBleHRlbmRzIFJhaWxRdW90ZUZldGNoZXJUeXBlLFxuICAgIEdSU19RIGV4dGVuZHMgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZVxuICA+XG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8UmFpbFRlbXBQYXJhbXMsIFJhaWxRdW90ZVJlc3VsdEFycmF5LCBPQlRSYWlsUXVvdGVSZXN1bHRBcnJheT5cbiAgaW1wbGVtZW50cyBSYWlsRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxue1xuICBwcml2YXRlIF9zZWxlY3RlZFRpY2tldDogSVJhaWxTZWxlY3RlZFRpY2tldDtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJbmJvdW5kVGlja2V0OiBJUmFpbFNlbGVjdGVkVGlja2V0O1xuICBwcml2YXRlIF9zZWxlY3RlZFN1bW1hcnk6IFJhaWxSdWxlRW5pdHk7XG4gIHByaXZhdGUgX3NlbGVjdGVkSW5ib3VuZFN1bW1hcnk6IFJhaWxSdWxlRW5pdHk7XG4gIHByaXZhdGUgX3NlbGVjdGVkU2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcztcbiAgcHJpdmF0ZSBhbHRlcm5hdGl2ZVdlbGxiZWluZzogUmFpbFdlbGxiZWluZ09iamVjdEludGVyZmFjZTtcbiAgcHJpdmF0ZSBfdGlja2V0VHlwZXM6IFJhaWxGYXJlVHlwZXNbXSA9IFtcbiAgICBSYWlsRmFyZVR5cGVzLmR1YWxTaW5nbGVKb3VybmV5RmFyZXMsXG4gICAgUmFpbEZhcmVUeXBlcy5yZXR1cm5Kb3VybmV5RmFyZXMsXG4gICAgUmFpbEZhcmVUeXBlcy5zaW5nbGVKb3VybmV5RmFyZXMsXG4gICAgUmFpbEZhcmVUeXBlcy5vcGVuUmV0dXJuSm91cm5leUZhcmVzLFxuICAgIFJhaWxGYXJlVHlwZXMuc3BsaXRGYXJlc1xuICBdO1xuXG4gIGdldCB0aWNrZXRUeXBlcygpOiBSYWlsRmFyZVR5cGVzW10ge1xuICAgIHJldHVybiB0aGlzLl90aWNrZXRUeXBlcztcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFNlY3Rpb24oKTogT0JUUmFpbEZhcmVUeXBlcyB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkU2VjdGlvbjtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFRpY2tldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUaWNrZXQ7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRUaWNrZXQoc2VsZWN0ZWRUaWNrZXQ6IHsgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb247IGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSB9KSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRUaWNrZXQgPSBzZWxlY3RlZFRpY2tldDtcbiAgICB0aGlzLnNlbGVjdGVkVGlja2V0U2VsZWN0ZWQubmV4dChzZWxlY3RlZFRpY2tldCA/IHRydWUgOiBmYWxzZSk7XG4gICAgaWYgKCF0aGlzLl9zZWxlY3RlZFRpY2tldCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5ID0gdGhpcy5fZmluZFN1bW1hcnkoXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGlja2V0LmpvdXJuZXksXG4gICAgICAgIHRoaXMuc3VtbWFyeS5vdXRib3VuZCB8fCBbXVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRJbmJvdW5kVGlja2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQ7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRJbmJvdW5kVGlja2V0KHNlbGVjdGVkVGlja2V0OiBJUmFpbFNlbGVjdGVkVGlja2V0KSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0ID0gc2VsZWN0ZWRUaWNrZXQ7XG4gICAgaWYgKCF0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFN1bW1hcnkgPSB0aGlzLnN1bW1hcnkucmV0dXJuLmZpbmQoKHZhbHVlOiBSYWlsUnVsZUVuaXR5KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5qb3VybmV5SGFzaCA9PT0gdGhpcy5fc2VsZWN0ZWRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldCB0cmFuc2FjdGlvbklkZW50aWZpZXIoaWQ6IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXIgPSBpZDtcbiAgfVxuXG4gIGdldCB0cmFuc2FjdGlvbklkZW50aWZpZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYW5zYWN0aW9uSWRlbnRpZmllcjtcbiAgfVxuXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9yYWlsJztcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3JhaWxfcmVzdWx0cyc7XG4gIHN0YXRpYyByZWFkb25seSBQQVNTSU5HX1BPSU5UID0gJ1Bhc3NpbmcnO1xuICBwdWJsaWMgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XG5cbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPSBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcblxuICBwdWJsaWMgc2VhcmNoVHlwZXMgPSBbXG4gICAgeyBkaXNwbGF5OiAnUmV0dXJuJywgdmFsdWU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5IH0sXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuU2luZ2xlSm91cm5leSB9XG4gICAgLy8geyBkaXNwbGF5OiAnT3BlbiBSZXR1cm4nLCB2YWx1ZTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5IH0sXG4gICAgLy8geyBkaXNwbGF5OiAnRHVhbCBTaW5nbGVzJywgdmFsdWU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5EdWFsU2luZ2xlSm91cm5leSB9LFxuICBdO1xuXG4gIGNsYXNzVHlwZXM6IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkUmFpbENsYXNzW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkUmFpbENsYXNzW10+KFtdKTtcbiAgbmV3U2VhdFNlbGVjdGVkOiBCZWhhdmlvclN1YmplY3Q8VHJhaW5TZWF0TWFwU2VhdCB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuICBuZXdSZXR1cm5TZWF0U2VsZWN0ZWQ6IEJlaGF2aW9yU3ViamVjdDxUcmFpblNlYXRNYXBTZWF0IHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgcHVibGljIGFpcnBvcnRFeHByZXNzU3RhdGlvbnM6IElSYWlsQWlycG9ydEV4cHJlc3NTdGF0aW9uc1tdID0gW1xuICAgIHsgY29kZTogJ0hQMS0zJywgbmFtZTogJ0hlYXRocm93IFQxLTMgLSBQYWRkaW5ndG9uJyB9LFxuICAgIHsgY29kZTogJ0hQNCcsIG5hbWU6ICdIZWF0aHJvdyBUNCAtIFBhZGRpbmd0b24nIH0sXG4gICAgeyBjb2RlOiAnSFA1JywgbmFtZTogJ0hlYXRocm93IFQ1IC0gUGFkZGluZ3RvbicgfSxcbiAgICB7IGNvZGU6ICdQSDEtMycsIG5hbWU6ICdQYWRkaW5ndG9uIC0gSGVhdGhyb3cgVDEtMycgfSxcbiAgICB7IGNvZGU6ICdQSDQnLCBuYW1lOiAnUGFkZGluZ3RvbiAtIEhlYXRocm93IFQ0JyB9LFxuICAgIHsgY29kZTogJ1BINScsIG5hbWU6ICdQYWRkaW5ndG9uIC0gSGVhdGhyb3cgVDUnIH0sXG4gICAgeyBjb2RlOiAnR1YnLCBuYW1lOiAnR2F0d2ljayAtIFZpY3RvcmlhJyB9LFxuICAgIHsgY29kZTogJ1ZHJywgbmFtZTogJ1ZpY3RvcmlhIC0gR2F0d2ljaycgfSxcbiAgICB7IGNvZGU6ICdTTCcsIG5hbWU6ICdTdGFuc3RlZCAtIExpdmVycG9vbCBTdHJlZXQnIH0sXG4gICAgeyBjb2RlOiAnTFMnLCBuYW1lOiAnTGl2ZXJwb29sIFN0cmVldCAtIFN0YW5zdGVkJyB9XG4gIF07XG5cbiAgcHVibGljIGFpcnBvcnRFeHByZXNzU3RhdGlvbnNDb2Rlczoge1xuICAgIFtrZXk6IHN0cmluZ106IHsgZGVwOiBzdHJpbmc7IGFycjogc3RyaW5nIH07XG4gIH0gPSB7XG4gICAgJ0hQMS0zJzogeyBkZXA6ICdIWFgnLCBhcnI6ICdQQUQnIH0sXG4gICAgJ1BIMS0zJzogeyBkZXA6ICdQQUQnLCBhcnI6ICdIWFgnIH0sXG4gICAgSFA0OiB7IGRlcDogJ0hBRicsIGFycjogJ1BBRCcgfSxcbiAgICBQSDQ6IHsgZGVwOiAnUEFEJywgYXJyOiAnSEFGJyB9LFxuICAgIEhQNTogeyBkZXA6ICdIV1YnLCBhcnI6ICdQQUQnIH0sXG4gICAgUEg1OiB7IGRlcDogJ1BBRCcsIGFycjogJ0hXVicgfSxcbiAgICBHVjogeyBkZXA6ICdHVFcnLCBhcnI6ICdWSUMnIH0sXG4gICAgVkc6IHsgZGVwOiAnVklDJywgYXJyOiAnR1RXJyB9LFxuICAgIFNMOiB7IGRlcDogJ1NTRCcsIGFycjogJ0xTVCcgfSxcbiAgICBMUzogeyBkZXA6ICdMU1QnLCBhcnI6ICdTU0QnIH1cbiAgfTtcblxuICBwdWJsaWMgcmFpbENyaXRlcmlhID0gW1JhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQsIFJhaWxTZWFyY2hDcml0ZXJpYS5BcnJpdmVdO1xuXG4gIHB1YmxpYyB0cmF2ZWxDYXJkcyA9IFtcbiAgICB7IGRpc3BsYXk6ICdZb3VuZyBwZXJzb25zIHJhaWxjYXJkJywgdmFsdWU6ICdZTkcnIH0sXG4gICAgeyBkaXNwbGF5OiAnRGlzYWJpbGl0eSByYWlsY2FyZCcsIHZhbHVlOiAnRElTJyB9LFxuICAgIHsgZGlzcGxheTogJ0ZhbWlseSByYWlsY2FyZCcsIHZhbHVlOiAnRkFNJyB9LFxuICAgIHsgZGlzcGxheTogJ0ZvcmNlcyByYWlsY2FyZCcsIHZhbHVlOiAnSE1GJyB9LFxuICAgIHsgZGlzcGxheTogJ1RyYXZlbCBhZ2VuY3kgZGlzY291bnQnLCB2YWx1ZTogJ1RBRCcgfVxuICBdO1xuXG4gIHB1YmxpYyByYWlsTG9jYXRpb24gPSBbXG4gICAgeyBkaXNwbGF5OiAnVUsgUmFpbCcsIHZhbHVlOiAnVUsnIH0sXG4gICAgeyBkaXNwbGF5OiAnRVUgUmFpbCcsIHZhbHVlOiAnRVUnIH1cbiAgXTtcblxuICBwcml2YXRlIF9sb2NhdGlvbiA9ICdVSyc7XG5cbiAgLy8gVE9ETyAtIG1heSBoYXZlIHRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIHRoZXNlIGRlcGVuZGluZyBvbiB3aGF0IEJhcmlzIG5lZWRzIHRvIHBhc3MgdG8gdHJhaW5saW5lXG4gIHByaXZhdGUgX3RyYWlubGluZUFnZVJhbmdlcyA9IFtcbiAgICB7IGRpc3BsYXk6ICdZb3V0aCAoMC0yNSknLCB2YWx1ZTogJ3lvdXRoJyB9LFxuICAgIHsgZGlzcGxheTogJ0FkdWx0ICgyNi01OSknLCB2YWx1ZTogJ2FkdWx0JyB9LFxuICAgIHsgZGlzcGxheTogJ1NlbmlvciAoNjArKScsIHZhbHVlOiAnc2VuaW9yJyB9XG4gIF07XG5cbiAgcHVibGljIHRyYWlubGluZVRyYXZlbGxlcnM6IFRyYWlubGluZVRyYXZlbGxlcltdID0gW107XG5cbiAgLy8gWU5HOiBcIllvdW5nIHBlcnNvbnMgcmFpbGNhcmRcIixcbiAgLy8gRElTOiBcIkRpc2FiaWxpdHkgcmFpbGNhcmRcIixcbiAgLy8gRkFNOiBcIkZhbWlseSByYWlsY2FyZFwiLFxuICAvLyBITUY6IFwiRm9yY2VzIHJhaWxjYXJkXCIsXG4gIC8vIFRBRDogXCJUcmF2ZWwgYWdlbmN5IGRpc2NvdW50XCJcbiAgcHVibGljIHJlbW92ZVBhc3NpbmdQb2ludHNGcm9tUmVzdWx0cyA9IHRydWU7XG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLlJhaWw7XG4gIHB1YmxpYyBhdmVyYWdlT3V0Ym91bmRDbzJQZXJJdGVtOiBudW1iZXIgPSBudWxsO1xuICBwdWJsaWMgYXZlcmFnZUluYm91bmRDbzJQZXJJdGVtOiBudW1iZXIgPSBudWxsO1xuXG4gIHB1YmxpYyBzZWxlY3RlZE11bHRpRmFyZXM6IElSYWlsU2VsZWN0ZWRNdWx0aUZhcmVzID0ge1xuICAgIG91dGJvdW5kOiBbXSxcbiAgICBpbmJvdW5kOiBbXVxuICB9O1xuXG4gIHB1YmxpYyBzZWxlY3RlZFRpY2tldFNlbGVjdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBsb2NhdGlvbkNoYW5nZTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcbiAgcHJpdmF0ZSBfYm9va1JhaWxGcm9tTGl2ZSA9IGZhbHNlO1xuICBwdWJsaWMgY2hlYXBlc3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcbiAgICBvdXRib3VuZENoZWFwZXN0OiBDaGVhcGVzdFJhaWxQcmljZXM7XG4gICAgaW5ib3VuZENoZWFwZXN0OiBDaGVhcGVzdFJhaWxQcmljZXM7XG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldFJldHVybjogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldER1YWw6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xuICAgIGNoZWFwZXN0VGlja2V0TG93Q28yT3V0Ym91bmQ6IENoZWFwZXN0UmFpbFByaWNlcztcbiAgICBjaGVhcGVzdFRpY2tldExvd0NvMkluYm91bmQ6IENoZWFwZXN0UmFpbFByaWNlcztcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0TG93Q28yOiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcbiAgfT4oe1xuICAgIG91dGJvdW5kQ2hlYXBlc3Q6IHtcbiAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBzcGxpdEZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cbiAgICB9LFxuICAgIGluYm91bmRDaGVhcGVzdDoge1xuICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIHNwbGl0RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxuICAgIH0sXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xuICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XG4gICAgfSxcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiB7XG4gICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgZmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cbiAgICB9LFxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXREdWFsOiB7XG4gICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgZmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cbiAgICB9LFxuICAgIGNoZWFwZXN0VGlja2V0TG93Q28yT3V0Ym91bmQ6IHtcbiAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBzcGxpdEZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cbiAgICB9LFxuICAgIGNoZWFwZXN0VGlja2V0TG93Q28ySW5ib3VuZDoge1xuICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIHNwbGl0RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxuICAgIH0sXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldExvd0NvMjoge1xuICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XG4gICAgfVxuICB9KTtcblxuICBnZXQgdHJhaW5saW5lQWdlUmFuZ2VzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhaW5saW5lQWdlUmFuZ2VzO1xuICB9XG5cbiAgZ2V0IGxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uO1xuICB9XG5cbiAgc2V0IGxvY2F0aW9uKG5ld0xvYzogc3RyaW5nKSB7XG4gICAgdGhpcy5fbG9jYXRpb24gPSBuZXdMb2M7XG5cbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gbnVsbDtcbiAgICAgIHRoaXMudHJhdmVsbGluZ1RvID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmxvY2F0aW9uQ2hhbmdlLm5leHQobmV3TG9jKTtcbiAgfVxuXG4gIGdldCB1a1JhaWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uID09PSAnVUsnO1xuICB9XG5cbiAgc2V0IHVrUmFpbChpc1VrUmFpbDogYm9vbGVhbikge1xuICAgIGNvbnNvbGUubG9nKGArKysgU2V0dGluZyB1a3JhaWw6ICR7aXNVa1JhaWx9ICsrK2ApO1xuICAgIHRoaXMuX2xvY2F0aW9uID0gaXNVa1JhaWwgPyAnVUsnIDogJ0VVJztcbiAgfVxuXG4gIGdldCBib29rUmFpbEZyb21MaXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9ib29rUmFpbEZyb21MaXZlO1xuICB9XG5cbiAgc2V0IGJvb2tSYWlsRnJvbUxpdmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9ib29rUmFpbEZyb21MaXZlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIG1pbk91dGJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXG4gIH07XG4gIHB1YmxpYyBtaW5JbmJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXG4gIH07XG4gIHB1YmxpYyBtYXhEYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xuICAgIC8vIEVOVC0xNTU3IC0gbWF4IEV2b2x2aSBzZWFyY2ggZGF0ZSBpcyA2IG1vbnRocyBpbiBmdXR1cmVcbiAgICB5ZWFyOiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikueWVhcigpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikubW9udGgoKSxcbiAgICBkYXk6IG1vbWVudCgpLmFkZCgnbW9udGgnLCA2KS5kYXRlKClcbiAgfTtcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXlbXTtcbiAgcHJpdmF0ZSBfdGltZUFycmF5UXVhcnRlckFuSG91cjogVmFsdWVEaXNwbGF5W107XG4gIC8vIHByaXZhdGUgX2Nob3NlblRpY2tldEdyb3VwOiBSYWlsVGlja2V0R3JvdXA7XG4gIHByaXZhdGUgX3ZpYUxvY2F0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX3RyYXZlbGxpbmdGcm9tOiBzdHJpbmc7XG4gIHByaXZhdGUgX3RyYXZlbGxpbmdUbzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZGVjbGFyZSBfb3JpZ2luYWxVc2VyU2VhcmNoOiBSYWlsVGVtcFBhcmFtcztcbiAgcHVibGljIHN1bW1hcnk6IFJhaWxTdW1tYXJ5ID0ge307XG5cbiAgZ2V0IG9wZW5SZXR1cm4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXk7XG4gIH1cblxuICBzZXQgb3BlblJldHVybihuZXdWYWw6IGJvb2xlYW4pIHtcbiAgICBpZiAobmV3VmFsKSB7XG4gICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leTtcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XG4gIH1cblxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZShuZXdUeXBlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IG5ld1R5cGU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IG5vT2ZBZHVsdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm5vT2ZBZHVsdHM7XG4gIH1cblxuICBzZXQgbm9PZkFkdWx0cyhhZHVsdHM6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQWR1bHRzID0gYWR1bHRzO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBub09mQ2hpbGRyZW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm5vT2ZDaGlsZHJlbjtcbiAgfVxuXG4gIHNldCBub09mQ2hpbGRyZW4oY2hpbGRyZW46IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdHJhdmVsbGluZ1RvKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmF2ZWxsaW5nVG87XG4gIH1cblxuICBzZXQgdHJhdmVsbGluZ1RvKHR0OiBhbnkpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ1RvID0gdHQ7XG5cbiAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSAnJztcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gdHQucmFpbHN0YXRpb24uaWQ7XG4gICAgfSBlbHNlIGlmICh0dD8uaWQpIHtcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHR0LmlkO1xuICAgIH1cblxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB0cmF2ZWxsaW5nRnJvbSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb207XG4gIH1cblxuICBzZXQgdHJhdmVsbGluZ0Zyb20odHQ6IGFueSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy50cmF2ZWxsaW5nRnJvbSA9IHR0O1xuICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gJyc7XG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gdHQucmFpbHN0YXRpb24uaWQ7XG4gICAgfSBlbHNlIGlmICh0dD8uaWQpIHtcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gdHQuaWQ7XG4gICAgfVxuXG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNob3NlblJhaWxDbGFzcygpOiBSYWlsQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3M7XG4gIH1cblxuICBzZXQgY2hvc2VuUmFpbENsYXNzKG5ld0NsYXNzOiBSYWlsQ2xhc3MpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBuZXdDbGFzcztcbiAgfVxuXG4gIGdldCBjaG9zZW5TZWFyY2hDbGFzcygpOiBSYWlsQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3M7XG4gIH1cblxuICBzZXQgY2hvc2VuU2VhcmNoQ2xhc3MoY2xhc3NSOiBSYWlsQ2xhc3MpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBjbGFzc1I7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGV4dHJhVGltZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmV4dHJhVGltZTtcbiAgfVxuXG4gIHNldCBleHRyYVRpbWUoZXh0cmE6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZXh0cmFUaW1lID0gZXh0cmE7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHZpYSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnZpYTtcbiAgfVxuXG4gIHNldCB2aWEodmlhOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYSA9IHZpYTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdmlhTG9jYXRpb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnZpYUxvY2F0aW9uO1xuICB9XG5cbiAgc2V0IHZpYUxvY2F0aW9uKHZpYUxvY2F0aW9uOiBhbnkpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb24gPSB2aWFMb2NhdGlvbjtcblxuICAgIHRoaXMuX3ZpYUxvY2F0aW9uID0gJyc7XG4gICAgaWYgKHZpYUxvY2F0aW9uPy5yYWlsc3RhdGlvbj8uaWQpIHtcbiAgICAgIHRoaXMuX3ZpYUxvY2F0aW9uID0gdmlhTG9jYXRpb24ucmFpbHN0YXRpb24uaWQ7XG4gICAgfVxuXG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IG91dEJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lO1xuICB9XG5cbiAgc2V0IG91dEJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xuICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXG4gICAgICAgIDogJzA3MDAnO1xuICAgIH1cblxuICAgIHRoaXMubWluSW5ib3VuZERhdGUgPSB7XG4gICAgICB5ZWFyOiBuZXdEYXRlVGltZS55ZWFyKCksXG4gICAgICBtb250aDogbmV3RGF0ZVRpbWUubW9udGgoKSArIDEsXG4gICAgICBkYXk6IG5ld0RhdGVUaW1lLmRhdGUoKVxuICAgIH07XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgJiZcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lICYmXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuaXNBZnRlcih0aGlzLmluQm91bmREYXRlVGltZSlcbiAgICApIHtcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5pbkJvdW5kRGF0ZVRpbWVcbiAgICAgICAgLnNldCgnZGF0ZScsIG5ld0RhdGVUaW1lLmRhdGUoKSlcbiAgICAgICAgLnNldCgnbW9udGgnLCBuZXdEYXRlVGltZS5tb250aCgpKVxuICAgICAgICAuc2V0KCd5ZWFyJywgbmV3RGF0ZVRpbWUueWVhcigpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgb3V0Ym91bmRDcml0ZXJpYSgpOiBSYWlsU2VhcmNoQ3JpdGVyaWEge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmRDcml0ZXJpYTtcbiAgfVxuXG4gIHNldCBvdXRib3VuZENyaXRlcmlhKG5ld0NyaXQ6IFJhaWxTZWFyY2hDcml0ZXJpYSkge1xuICAgIC8vIGNvbnNvbGUud2FybihgKysrIFNldHRpbmcgTmV3IENyaXRlcmlhOiAke25ld0NyaXR9ICsrK2ApO1xuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhID0gbmV3Q3JpdDtcblxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBpbkJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWU7XG4gIH1cblxuICBzZXQgaW5Cb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmluQm91bmREYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuX3JldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcbiAgICAgIHRoaXMuX3JldHVybl90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcbiAgICAgICAgOiAnMTYwMCc7XG4gICAgfVxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXG4gIHByaXZhdGUgX291dGJvdW5kX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xuXG4gIGdldCBvdXRib3VuZF9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZF9kYXRlO1xuICB9XG5cbiAgc2V0IG91dGJvdW5kX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdmFsdWU7XG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb3V0Ym91bmRfdGltZTogc3RyaW5nID0gbnVsbDtcbiAgZ2V0IG91dGJvdW5kX3RpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfdGltZTtcbiAgfVxuXG4gIHNldCBvdXRib3VuZF90aW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gdmFsdWU7XG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmV0dXJuX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xuXG4gIGdldCByZXR1cm5fZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuX2RhdGU7XG4gIH1cblxuICBzZXQgcmV0dXJuX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXR1cm5fdGltZTogc3RyaW5nID0gbnVsbDtcbiAgZ2V0IHJldHVybl90aW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl90aW1lO1xuICB9XG5cbiAgc2V0IHJldHVybl90aW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yZXR1cm5fdGltZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XG4gIH1cblxuICBnZXQgcmV0dXJuQ3JpdGVyaWEoKTogUmFpbFNlYXJjaENyaXRlcmlhIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhO1xuICB9XG5cbiAgc2V0IHJldHVybkNyaXRlcmlhKG5ld0NyaXQ6IFJhaWxTZWFyY2hDcml0ZXJpYSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYSA9IG5ld0NyaXQ7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNhcm5ldFRpY2tldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhcm5ldFRpY2tldDtcbiAgfVxuXG4gIHNldCBjYXJuZXRUaWNrZXQobmV3Q2FybmV0OiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhcm5ldFRpY2tldCA9IG5ld0Nhcm5ldDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgZXhjaGFuZ2VEaXJlY3Rpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmV4Y2hhbmdlRGlyZWN0aW9uO1xuICB9XG5cbiAgc2V0IGV4Y2hhbmdlRGlyZWN0aW9uKG5ld0V4Y2hhbmdlRGlyZWN0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZXhjaGFuZ2VEaXJlY3Rpb24gPSBuZXdFeGNoYW5nZURpcmVjdGlvbjtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgZXhjaGFuZ2VGcm9tT3JkZXJJRCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZXhjaGFuZ2VEaXJlY3Rpb247XG4gIH1cblxuICBzZXQgZXhjaGFuZ2VGcm9tT3JkZXJJRChuZXdFeGNoYW5nZUZyb21PcmRlcklEOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZXhjaGFuZ2VGcm9tT3JkZXJJRCA9IG5ld0V4Y2hhbmdlRnJvbU9yZGVySUQ7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVBdXRvRGlzY291bnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGlzYWJsZUF1dG9EaXNjb3VudHM7XG4gIH1cblxuICBzZXQgZGlzYWJsZUF1dG9EaXNjb3VudHMobmV3RGlzOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmRpc2FibGVBdXRvRGlzY291bnRzID0gbmV3RGlzO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBwcmlvcml0aXNlQnlQcmljZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByaW9yaXRpc2VCeVByaWNlO1xuICB9XG5cbiAgc2V0IHByaW9yaXRpc2VCeVByaWNlKG5ld1ByaW9yaXR5OiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByaW9yaXRpc2VCeVByaWNlID0gbmV3UHJpb3JpdHk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGFwcGx5UmFpbGNhcmRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYXBwbHlSYWlsY2FyZHM7XG4gIH1cblxuICBzZXQgYXBwbHlSYWlsY2FyZHMoYXBDYXJkczogYm9vbGVhbikge1xuICAgIGlmICghYXBDYXJkcykge1xuICAgICAgdGhpcy5yYWlsQ2FyZHMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy50ZW1wUGFyYW1zLmFwcGx5UmFpbGNhcmRzID0gYXBDYXJkcztcbiAgfVxuXG4gIGdldCByYWlsQ2FyZHMoKTogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yYWlsQ2FyZHM7XG4gIH1cblxuICBzZXQgcmFpbENhcmRzKHZhbHVlOiBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcltdKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnJhaWxDYXJkcyA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKTogVmFsdWVEaXNwbGF5W10ge1xuICAgIHRoaXMuX3RpbWVBcnJheSA9XG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcbiAgICAgIEFycmF5KDQ4KVxuICAgICAgICAuZmlsbCgwKVxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gMilcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICsgKChpbmRleCAlIDIpICogMzApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcbiAgICAgICAgICAgIGRpc3BsYXk6XG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xuICAgICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVBcnJheTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5UXVhcnRlckFuSG91cigpOiBWYWx1ZURpc3BsYXlbXSB7XG4gICAgdGhpcy5fdGltZUFycmF5UXVhcnRlckFuSG91ciA9XG4gICAgICB0aGlzLl90aW1lQXJyYXlRdWFydGVyQW5Ib3VyIHx8XG4gICAgICBBcnJheSg5NilcbiAgICAgICAgLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXG4gICAgICAgICAgICBkaXNwbGF5OlxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXlRdWFydGVyQW5Ib3VyO1xuICB9XG5cbiAgZ2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpOiB7IGNvZGU6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSB7XG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9ucztcbiAgfVxuXG4gIGdldCBhaXJwb3J0RXhwcmVzc1N0YXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFpcnBvcnRFeHByZXNzU3RhdGlvbjtcbiAgfVxuXG4gIHNldCBhaXJwb3J0RXhwcmVzc1N0YXRpb24oc3RhdGlvbjogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IHN0YXRpb247XG4gICAgdGhpcy5fc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBpc0FpcnBvcnRFeHByZXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcztcbiAgfVxuXG4gIHNldCBpc0FpcnBvcnRFeHByZXNzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmlzQWlycG9ydEV4cHJlc3MgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBzZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25JZHMoc3RhdGlvbklkczoge1xuICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHN0cmluZztcbiAgICBhcnJpdmFsTG9jYXRpb25JZDogc3RyaW5nO1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgeyBkZXBhcnR1cmVMb2NhdGlvbklkLCBhcnJpdmFsTG9jYXRpb25JZCB9ID0gc3RhdGlvbklkcztcbiAgICBpZiAoZGVwYXJ0dXJlTG9jYXRpb25JZCAmJiBhcnJpdmFsTG9jYXRpb25JZCkge1xuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSBkZXBhcnR1cmVMb2NhdGlvbklkO1xuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gYXJyaXZhbExvY2F0aW9uSWQ7XG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFN1bW1hcnkoam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sIHN1bW1hcnk6IFJhaWxSdWxlRW5pdHlbXSkge1xuICAgIHJldHVybiBzdW1tYXJ5LmZpbmQoKHZhbHVlOiBSYWlsUnVsZUVuaXR5KTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gdmFsdWUuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2g7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBPQlRSYWlsUXVvdGVSZXN1bHRBcnJheSk6IElDaGVhcGVzdFByaWNlIHtcbiAgICByZXR1cm4gdGhpcy5maW5kQ2hlYXBlc3RUaWNrZXQoKTtcbiAgfVxuXG4gIC8vIFRPRE8gLSBleHBhbmQgdGhpcyB0byBjaGVjayBvdXIgb3JpZ2luYWwgc2VhcmNoIGlmIGFueSBhbmQgc2V0IGJhc2VkIG9uIHRoZXJlIGJlZm9yZSBjaGVja2luZyBVRlxuICBzZXREZWZhdWx0TG9jYXRpb24oKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ3Jlc3VsdHM6JywgdGhpcy5yZXN1bHRzKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJIYXNTZXJ2aWNlUHJvdmlkZXIoU2VydmljZVR5cGUuUmFpbCwgU2VydmljZVByb3ZpZGVyLlRyYWlubGluZSkgJiZcbiAgICAgIHRoaXMudXNlclNlcnZpY2UuaXNVc2VyRmF2b3JpdGVTZXQoVXNlckZhdm9ydXJpdGUudHJhaW5saW5lRVVTZWFyY2hEZWZhdWx0KSAmJlxuICAgICAgIXRoaXMucmVzdWx0cy52YWx1ZS5sZW5ndGggJiZcbiAgICAgICF0aGlzLnVzZXJTZXJ2aWNlLnVzZXJIYXNTZXJ2aWNlUHJvdmlkZXIoU2VydmljZVR5cGUuUmFpbCwgU2VydmljZVByb3ZpZGVyLkV2b2x2aSlcbiAgICApIHtcbiAgICAgIHRoaXMuX2xvY2F0aW9uID0gJ0VVJztcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIFJhaWxmZXRjaGVyOiBCYXNlUmFpbFF1b3RlRmV0Y2hlcjxRPixcbiAgICBwcml2YXRlIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcbiAgICB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJhc2VNb2RhbE9wZW5lclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcblxuICAgIGNvbnN0IGRhdGE6IHtcbiAgICAgIHF1ZXJ5OiB7fTtcbiAgICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zO1xuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBSYWlsVGVtcFBhcmFtcztcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oUmFpbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUykgfHwge1xuICAgICAgcXVlcnk6IHt9LFxuICAgICAgdGVtcFBhcmFtczoge30gYXMgUmFpbFRlbXBQYXJhbXMsXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIFJhaWxUZW1wUGFyYW1zXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcbiAgICBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaC50cmFuc2FjdGlvbklkZW50aWZpZXIgPSBudWxsO1xuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xuXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xuICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xuICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnMsIFNlcnZpY2VUeXBlLlJhaWwpO1xuICAgICAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xuICAgICAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcbiAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHVzZXJTZXJ2aWNlLmNoYW5nZVVzZXIuc3Vic2NyaWJlKChfdXNlcjogRnVsbFVzZXJEZXRhaWxzKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUF2YWxpYWJsZUNsYXNzZXMoKTtcbiAgICB9KTtcbiAgICB0aGlzLnNldHVwVHJhaW5saW5lRVVUcmF2ZWxsZXJzKCk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGYXJlU2VsZWN0YWJsZUZyb21DYW5jZWxsZWQoXG4gICAgZmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdLFxuICAgIGlzQ2FuY2VsbGVkOiBib29sZWFuXG4gICk6IE9CVFJhaWxKb3VybmV5RmFyZVtdIHtcbiAgICBmb3IgKGxldCBmYXJlIG9mIGZhcmVzKSB7XG4gICAgICBmYXJlLnNlbGVjdGFibGUgPSAhaXNDYW5jZWxsZWQ7XG4gICAgfVxuICAgIHJldHVybiBmYXJlcztcbiAgfVxuXG4gIHByaXZhdGUgc2V0RmFyZVNlbGVjdGFibGVGcm9tQ2FuY2VsbGVkU3BsaXQoXG4gICAgZmFyZXM6IE9CVFNwbGl0UmFpbEpvdXJuZXlGYXJlW10sXG4gICAgaXNDYW5jZWxsZWQ6IGJvb2xlYW5cbiAgKTogT0JUU3BsaXRSYWlsSm91cm5leUZhcmVbXSB7XG4gICAgZm9yIChsZXQgZmFyZSBvZiBmYXJlcykge1xuICAgICAgZmFyZS5zZWxlY3RhYmxlID0gIWlzQ2FuY2VsbGVkO1xuICAgIH1cbiAgICByZXR1cm4gZmFyZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMocmF3UmVzdWx0czogUmFpbFF1b3RlUmVzdWx0QXJyYXkpOiBPQlRSYWlsUXVvdGVSZXN1bHRBcnJheSB7XG4gICAgdGhpcy51cGRhdGVBdmFsaWFibGVDbGFzc2VzKHRydWUpO1xuICAgIHRoaXMudHJhbnNhY3Rpb25JZGVudGlmaWVyID0gbnVsbDtcblxuICAgIGNvbnN0IHNldEZhcmVzID0gKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5mYXJlLFxuICAgICAgICB0eXBlOiBmYXJlPy50eXBlLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNldEZhcmVzU3BsaXQgPSAoZmFyZTogT0JUU3BsaXRSYWlsSm91cm5leUZhcmUpOiBPQlRTcGxpdFJhaWxKb3VybmV5RmFyZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5mYXJlLFxuICAgICAgICB0eXBlOiBmYXJlPy50eXBlLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNvcnRGYXJlcyA9IChcbiAgICAgIGpvdXJuZXlzOiBSZWN1cnNpdmVQYXJ0aWFsPFJhaWxKb3VybmV5T3B0aW9uPltdXG4gICAgKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdID0+IHtcbiAgICAgIGNvbnN0IHRvUmV0dXJuID0gdGhpcy5oZWxwZXJzXG4gICAgICAgIC5jbG9uZShqb3VybmV5cylcbiAgICAgICAgLnNvcnQoKGZpcnN0OiBSYWlsSm91cm5leU9wdGlvbiwgc2Vjb25kOiBSYWlsSm91cm5leU9wdGlvbik6IG51bWJlciA9PiB7XG4gICAgICAgICAgY29uc3QgZmlyc3RUaW1lID0gbW9tZW50KGZpcnN0LmRlcGFydERhdGVUaW1lKTtcbiAgICAgICAgICBjb25zdCBzZWNvbmRUaW1lID0gbW9tZW50KHNlY29uZC5kZXBhcnREYXRlVGltZSk7XG4gICAgICAgICAgaWYgKGZpcnN0VGltZS5pc0JlZm9yZShzZWNvbmRUaW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlyc3RUaW1lLmlzQWZ0ZXIoc2Vjb25kVGltZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgoam91cm5leTogUmFpbEpvdXJuZXlPcHRpb24pOiBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uID0+IHtcbiAgICAgICAgICBjb25zdCBzb3J0ID0gKGZpcnN0OiBPQlRSYWlsSm91cm5leUZhcmUsIHNlY29uZDogT0JUUmFpbEpvdXJuZXlGYXJlKTogbnVtYmVyID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmaXJzdC5wcmljZSAtIHNlY29uZC5wcmljZTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3Qgc29ydFNwbGl0ID0gKFxuICAgICAgICAgICAgZmlyc3Q6IE9CVFNwbGl0UmFpbEpvdXJuZXlGYXJlLFxuICAgICAgICAgICAgc2Vjb25kOiBPQlRTcGxpdFJhaWxKb3VybmV5RmFyZVxuICAgICAgICAgICk6IG51bWJlciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZmlyc3QucHJpY2UgLSBzZWNvbmQucHJpY2U7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IGR1YWxTaW5nbGVKb3VybmV5cyA9IChqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMgfHwgW10pXG4gICAgICAgICAgICAuc29ydChzb3J0KVxuICAgICAgICAgICAgLm1hcChzZXRGYXJlcyk7XG4gICAgICAgICAgY29uc3Qgb3BlblJldHVybkpvdXJuZXlzID0gKGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyB8fCBbXSlcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXG4gICAgICAgICAgICAubWFwKHNldEZhcmVzKTtcbiAgICAgICAgICBjb25zdCByZXR1cm5Kb3VybmV5cyA9IChqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyB8fCBbXSkuc29ydChzb3J0KS5tYXAoc2V0RmFyZXMpO1xuICAgICAgICAgIGNvbnN0IHNpbmdsZUpvdXJuZXlzID0gKGpvdXJuZXkuc2luZ2xlSm91cm5leUZhcmVzIHx8IFtdKS5zb3J0KHNvcnQpLm1hcChzZXRGYXJlcyk7XG4gICAgICAgICAgY29uc3Qgc3BsaXRKb3VybmV5cyA9IChqb3VybmV5LnNwbGl0RmFyZXMgfHwgW10pLnNvcnQoc29ydFNwbGl0KS5tYXAoc2V0RmFyZXNTcGxpdCk7XG5cbiAgICAgICAgICBjb25zdCBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IHRoaXMuc2V0RmFyZVNlbGVjdGFibGVGcm9tQ2FuY2VsbGVkKFxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzLm1hcChzZXRGYXJlcyksXG4gICAgICAgICAgICAhIWpvdXJuZXkuY2FuY2VsbGVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IHRoaXMuc2V0RmFyZVNlbGVjdGFibGVGcm9tQ2FuY2VsbGVkKFxuICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlzLm1hcChzZXRGYXJlcyksXG4gICAgICAgICAgICAhIWpvdXJuZXkuY2FuY2VsbGVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCByZXR1cm5Kb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gdGhpcy5zZXRGYXJlU2VsZWN0YWJsZUZyb21DYW5jZWxsZWQoXG4gICAgICAgICAgICByZXR1cm5Kb3VybmV5cy5tYXAoc2V0RmFyZXMpLFxuICAgICAgICAgICAgISFqb3VybmV5LmNhbmNlbGxlZFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgc2luZ2xlSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IHRoaXMuc2V0RmFyZVNlbGVjdGFibGVGcm9tQ2FuY2VsbGVkKFxuICAgICAgICAgICAgc2luZ2xlSm91cm5leXMubWFwKHNldEZhcmVzKSxcbiAgICAgICAgICAgICEham91cm5leS5jYW5jZWxsZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHNwbGl0Sm91cm5leXNGYXJlczogT0JUU3BsaXRSYWlsSm91cm5leUZhcmVbXSA9XG4gICAgICAgICAgICB0aGlzLnNldEZhcmVTZWxlY3RhYmxlRnJvbUNhbmNlbGxlZFNwbGl0KFxuICAgICAgICAgICAgICBzcGxpdEpvdXJuZXlzLm1hcChzZXRGYXJlc1NwbGl0KSxcbiAgICAgICAgICAgICAgISFqb3VybmV5LmNhbmNlbGxlZFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IHRvUmV0dXJuMSA9IHtcbiAgICAgICAgICAgIC4uLmpvdXJuZXksXG4gICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMuYXJyYXlUb09iamVjdEFycmF5KGR1YWxTaW5nbGVKb3VybmV5RmFyZXMsIFtcbiAgICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgICBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11cbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShvcGVuUmV0dXJuSm91cm5leUZhcmVzLCBbXG4gICAgICAgICAgICAgICd0eXBlJyxcbiAgICAgICAgICAgICAgWyd0ZXJtcy50aWNrZXRUeXBlQ29kZScsICdwcmljZSddXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShyZXR1cm5Kb3VybmV5RmFyZXMsIFtcbiAgICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgICBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11cbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMuYXJyYXlUb09iamVjdEFycmF5KHNpbmdsZUpvdXJuZXlGYXJlcywgW1xuICAgICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAgIFsndGVybXMudGlja2V0VHlwZUNvZGUnLCAncHJpY2UnXVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBzcGxpdEZhcmVzOiB0aGlzLmhlbHBlcnMuYXJyYXlUb09iamVjdEFycmF5KHNwbGl0Sm91cm5leXNGYXJlcywgW1xuICAgICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAgIFsndGVybXMudGlja2V0VHlwZUNvZGUnLCAncHJpY2UnXVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9IGFzIE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb247XG5cbiAgICAgICAgICByZXR1cm4gdG9SZXR1cm4xO1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJhd1Jlc3VsdHMubWFwKChyYWlsUmVzdWx0OiBSYWlsUXVvdGVSZXN1bHQpOiBPQlRSYWlsUXVvdGVSZXN1bHQgPT4ge1xuICAgICAgdGhpcy5zdW1tYXJ5ID0gcmFpbFJlc3VsdC5zdW1tYXJ5O1xuICAgICAgY29uc3Qgb3V0Ym91bmRJbnRlcm5hbCA9IHNvcnRGYXJlcyhyYWlsUmVzdWx0Lm91dGJvdW5kIHx8IFtdKTtcbiAgICAgIGNvbnN0IGluYm91bmRJbnRlcm5hbCA9IHNvcnRGYXJlcyhyYWlsUmVzdWx0LnJldHVybiB8fCBbXSk7XG5cbiAgICAgIGNvbnN0IGluZGV4VG9UaWNrZXRzID0gdGhpcy5tYWtlRmFyZU5hbWVzKFtvdXRib3VuZEludGVybmFsIHx8IFtdLCBpbmJvdW5kSW50ZXJuYWwgfHwgW11dKTtcblxuICAgICAgY29uc3QgY29udmVydEZhcmVzID0gKFxuICAgICAgICBmYXJlczogT0JUUmFpbEludGVybmFsRmFyZSxcbiAgICAgICAgdGlja2V0VHlwZTogT0JUUmFpbEZhcmVUeXBlc1xuICAgICAgKTogT0JUUmFpbEZhcmUgPT4ge1xuICAgICAgICBjb25zdCBydGkgPSBpbmRleFRvVGlja2V0c1t0aWNrZXRUeXBlXTtcbiAgICAgICAgY29uc3QgdGlja2V0VHlwZXMgPSBydGkuZ2V0VGlja2V0VHlwZXMoKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRpY2tldFR5cGVzKS5yZWR1Y2UoXG4gICAgICAgICAgKGN1cnJlbnQ6IE9CVFJhaWxGYXJlLCBbdHlwZSwgY291bnRdOiBbc3RyaW5nLCBudW1iZXJdKSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdID0gcnRpLndvcmtvdXRJbmRleGVzKHR5cGUpLm1hcCgoZmllbGRzOiBzdHJpbmdbXSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmhlbHBlcnMuZmllbGRGcm9tT2JqZWN0KGZhcmVzLCBmaWVsZHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9XG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgY29uc3QgY29udmV0UmFpbEpPdXJuZXkgPSAoam91cm5leTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbik6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5qb3VybmV5LFxuICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzLCAncmV0dXJuSm91cm5leUZhcmVzJyksXG4gICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxuICAgICAgICAgICAgam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzLFxuICAgICAgICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiBjb252ZXJ0RmFyZXMoXG4gICAgICAgICAgICBqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMsXG4gICAgICAgICAgICAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcydcbiAgICAgICAgICApLFxuICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKGpvdXJuZXkuc2luZ2xlSm91cm5leUZhcmVzLCAnc2luZ2xlSm91cm5leUZhcmVzJyksXG4gICAgICAgICAgc3BsaXRGYXJlczogY29udmVydEZhcmVzKGpvdXJuZXkuc3BsaXRGYXJlcywgJ3NwbGl0RmFyZXMnKVxuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3V0Ym91bmQgPSBvdXRib3VuZEludGVybmFsLm1hcChjb252ZXRSYWlsSk91cm5leSk7XG4gICAgICBjb25zdCBpbmJvdW5kID0gaW5ib3VuZEludGVybmFsLm1hcChjb252ZXRSYWlsSk91cm5leSk7XG5cbiAgICAgIGNvbnN0IG91dFByaWNlcyA9IHRoaXMudXBkYXRlUHJpY2VzKFxuICAgICAgICBvdXRib3VuZCxcbiAgICAgICAge1xuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czoge1xuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIHNwbGl0RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xuICAgICAgICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiB7XG4gICAgICAgICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgZmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBjb25zdCBpblByaWNlcyA9IHRoaXMudXBkYXRlUHJpY2VzKFxuICAgICAgICBpbmJvdW5kLFxuICAgICAgICB7XG4gICAgICAgICAgY2hlYXBlc3RUaWNrZXRzOiB7XG4gICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgc3BsaXRGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBvdXRQcmljZXMuY2hlYXBlc3RDbGFzc1RpY2tldCxcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBvdXRQcmljZXMuY2hlYXBlc3RDbGFzc1RpY2tldFxuICAgICAgICB9LFxuXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuYXZlcmFnZU91dGJvdW5kQ28yUGVySXRlbSA9IHRoaXMuaGVscGVycy5jYWxjdWxhdGVBdmVyYWdlQ28yUGVySXRlbShvdXRib3VuZCk7XG4gICAgICB0aGlzLmF2ZXJhZ2VJbmJvdW5kQ28yUGVySXRlbSA9IHRoaXMuaGVscGVycy5jYWxjdWxhdGVBdmVyYWdlQ28yUGVySXRlbShpbmJvdW5kKTtcblxuICAgICAgLy8gY29uc29sZS53YXJuKGArKysgQ2hlYXBlc3QgRHVhbCBJbiBGb3VuZDogYCwgaW5QcmljZXMpO1xuICAgICAgLy8gY29uc29sZS53YXJuKGArKysgQ2hlYXBlc3QgRHVhbCBPdXQgRm91bmQ6IGAsIG91dFByaWNlcyk7XG5cbiAgICAgIGNvbnN0IGNoZWFwZXN0RHVhbEZhcmUgPVxuICAgICAgICBpblByaWNlcy5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlIHx8XG4gICAgICAgIGluUHJpY2VzLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmU7XG5cbiAgICAgIGNvbnN0IG91dGJvdW5kTG93ZXN0Q28yVmFsdWUgPSBNYXRoLm1pbiguLi5vdXRib3VuZC5tYXAoam91cm5leSA9PiBqb3VybmV5LmNvMlBlclBhc3NlbmdlcikpO1xuICAgICAgY29uc3QgaW5ib3VuZExvd2VzdENvMlZhbHVlID0gTWF0aC5taW4oLi4uaW5ib3VuZC5tYXAoam91cm5leSA9PiBqb3VybmV5LmNvMlBlclBhc3NlbmdlcikpO1xuXG4gICAgICBjb25zdCBvdXRib3VuZExvd2VzdENvMiA9IG91dGJvdW5kLmZpbHRlcihqb3VybmV5ID0+IGpvdXJuZXkuY28yUGVyUGFzc2VuZ2VyID09PSBvdXRib3VuZExvd2VzdENvMlZhbHVlKTtcbiAgICAgIGNvbnN0IGluYm91bmRMb3dlc3RDbzIgPSBpbmJvdW5kLmZpbHRlcihqb3VybmV5ID0+IGpvdXJuZXkuY28yUGVyUGFzc2VuZ2VyID09PSBpbmJvdW5kTG93ZXN0Q28yVmFsdWUpO1xuXG4gICAgICBjb25zdCBvdXRQcmljZXNMb3dDbzIgPSB0aGlzLnVwZGF0ZVByaWNlcyhcbiAgICAgICAgb3V0Ym91bmRMb3dlc3RDbzIsXG4gICAgICAgIHtcbiAgICAgICAgICBjaGVhcGVzdFRpY2tldHM6IHtcbiAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBzcGxpdEZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IHtcbiAgICAgICAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDoge1xuICAgICAgICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaW5QcmljZXNMb3dDbzIgPSB0aGlzLnVwZGF0ZVByaWNlcyhcbiAgICAgICAgaW5ib3VuZExvd2VzdENvMixcbiAgICAgICAge1xuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czoge1xuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxuICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcbiAgICAgICAgICAgIHNwbGl0RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogb3V0UHJpY2VzTG93Q28yLmNoZWFwZXN0Q2xhc3NUaWNrZXQsXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogb3V0UHJpY2VzTG93Q28yLmNoZWFwZXN0Q2xhc3NUaWNrZXRcbiAgICAgICAgfSxcblxuICAgICAgICB0cnVlXG4gICAgICApO1xuXG4gICAgICB0aGlzLmNoZWFwZXN0Lm5leHQoe1xuICAgICAgICBvdXRib3VuZENoZWFwZXN0OiBvdXRQcmljZXMuY2hlYXBlc3RUaWNrZXRzLFxuICAgICAgICBpbmJvdW5kQ2hlYXBlc3Q6IGluUHJpY2VzLmNoZWFwZXN0VGlja2V0cyxcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogaW5QcmljZXMuY2hlYXBlc3RDbGFzc1RpY2tldCxcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldFJldHVybjogb3V0UHJpY2VzLm91dGJvdW5kQ2xhc3NUaWNrZXQsXG4gICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXREdWFsOlxuICAgICAgICAgIGNoZWFwZXN0RHVhbEZhcmUuZmFyZT8uc2luZ2xlT3JSZXR1cm4gIT09ICdSZXR1cm4nID8gaW5QcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldCA6IG51bGwsXG4gICAgICAgIGNoZWFwZXN0VGlja2V0TG93Q28yT3V0Ym91bmQ6IG91dFByaWNlc0xvd0NvMi5jaGVhcGVzdFRpY2tldHMsXG4gICAgICAgIGNoZWFwZXN0VGlja2V0TG93Q28ySW5ib3VuZDogaW5QcmljZXNMb3dDbzIuY2hlYXBlc3RUaWNrZXRzLFxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0TG93Q28yOiBvdXRQcmljZXNMb3dDbzIuY2hlYXBlc3RDbGFzc1RpY2tldFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5yYWlsUmVzdWx0LFxuICAgICAgICBvdXRib3VuZCxcbiAgICAgICAgcmV0dXJuOiBpbmJvdW5kXG4gICAgICB9IGFzIE9CVFJhaWxRdW90ZVJlc3VsdDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUZhcmVOYW1lcyhcbiAgICBqb3VybmV5czogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdW11cbiAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdyZXR1cm5Kb3VybmV5RmFyZXMnLFxuICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLFxuICAgICAgJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnLFxuICAgICAgJ3NpbmdsZUpvdXJuZXlGYXJlcycsXG4gICAgICAnc3BsaXRGYXJlcydcbiAgICBdLnJlZHVjZShcbiAgICAgIChcbiAgICAgICAgYWNjdW06IFJlY29yZDxPQlRSYWlsRmFyZVR5cGVzLCBSYWlsSW5kZXhUb1RpY2tldD4sXG4gICAgICAgIG5leHQ6IE9CVFJhaWxGYXJlVHlwZXNcbiAgICAgICk6IFJlY29yZDxPQlRSYWlsRmFyZVR5cGVzLCBSYWlsSW5kZXhUb1RpY2tldD4gPT4ge1xuICAgICAgICBhY2N1bVtuZXh0XSA9IHRoaXMuX21ha2VGYXJlTmFtZXMoam91cm5leXMsIG5leHQpO1xuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxuICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBuZXcgUmFpbEluZGV4VG9UaWNrZXQoKSxcbiAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogbmV3IFJhaWxJbmRleFRvVGlja2V0KCksXG4gICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogbmV3IFJhaWxJbmRleFRvVGlja2V0KCksXG4gICAgICAgIHNwbGl0RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX21ha2VGYXJlTmFtZXMoXG4gICAgam91cm5leXM6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb25bXVtdLFxuICAgIGZpZWxkOiBPQlRSYWlsRmFyZVR5cGVzXG4gICk6IFJhaWxJbmRleFRvVGlja2V0IHtcbiAgICByZXR1cm4gXy5mbGF0dGVuKGpvdXJuZXlzIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAocml0OiBSYWlsSW5kZXhUb1RpY2tldCwgam91cm5leTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbik6IFJhaWxJbmRleFRvVGlja2V0ID0+IHtcbiAgICAgICAgaWYgKCFqb3VybmV5KSB7XG4gICAgICAgICAgcmV0dXJuIHJpdDtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZW50cmllcyhqb3VybmV5W2ZpZWxkXSB8fCB7fSkuZm9yRWFjaChcbiAgICAgICAgICAoW3RpY2tldE5hbWUsIHN1YmZhcmVzXTogW3N0cmluZywgUmVjb3JkPHN0cmluZywgT0JUUmFpbEpvdXJuZXlGYXJlW10+XSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3ViZmFyZXMpLmZvckVhY2goXG4gICAgICAgICAgICAgIChbdGlja2V0VHlwZSwgZmFyZXNdOiBbc3RyaW5nLCBPQlRSYWlsSm91cm5leUZhcmVbXV0pID0+IHtcbiAgICAgICAgICAgICAgICByaXQuYWRkRmFyZXModGlja2V0TmFtZSwgdGlja2V0VHlwZSwgZmFyZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcml0Lm5leHRKb3VybmV5KCk7XG4gICAgICAgIHJldHVybiByaXQ7XG4gICAgICB9LFxuICAgICAgbmV3IFJhaWxJbmRleFRvVGlja2V0KClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUHJpY2VzKFxuICAgIGpvdXJuZXlzOiBPQlRSYWlsSm91cm5leU9wdGlvbltdLFxuICAgIHByaWNlczoge1xuICAgICAgY2hlYXBlc3RUaWNrZXRzOiBDaGVhcGVzdFJhaWxQcmljZXM7XG4gICAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcbiAgICAgIG91dGJvdW5kQ2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xuICAgIH0sXG4gICAgaXNSZXR1cm46IGJvb2xlYW5cbiAgKToge1xuICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xuICAgIG91dGJvdW5kQ2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xuICB9IHtcbiAgICBjb25zdCBtaW4gPSAoXG4gICAgICBjdXJyZW50OiB7XG4gICAgICAgIHByaWNlOiBudW1iZXI7XG4gICAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uO1xuICAgICAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmU7XG4gICAgICB9LFxuICAgICAgZmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdLFxuICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb25cbiAgICApOiB7XG4gICAgICBwcmljZTogbnVtYmVyO1xuICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb247XG4gICAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmU7XG4gICAgfSA9PiB7XG4gICAgICBpZiAoIWZhcmVzIHx8IGZhcmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cblxuICAgICAgbGV0IGNoZWFwZXN0ID0gY3VycmVudDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmYXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuZXh0ID0gZmFyZXNbaV0ucHJpY2U7XG4gICAgICAgIGlmICgoY2hlYXBlc3QucHJpY2UgPiBuZXh0ICYmIG5leHQgPiAwKSB8fCAhY2hlYXBlc3QucHJpY2UpIHtcbiAgICAgICAgICBjaGVhcGVzdCA9IHsgcHJpY2U6IG5leHQsIGpvdXJuZXksIGZhcmU6IGZhcmVzW2ldIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoZWFwZXN0O1xuICAgIH07XG5cbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxuICAgICAgKFxuICAgICAgICBwcmljZXMxOiB7XG4gICAgICAgICAgY2hlYXBlc3RUaWNrZXRzOiBDaGVhcGVzdFJhaWxQcmljZXM7XG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXG4gICAgICApOiB7XG4gICAgICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcbiAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XG4gICAgICB9ID0+IHtcbiAgICAgICAgY29uc3Qgc29ydCA9IChmaXJzdDogT0JUUmFpbEpvdXJuZXlGYXJlLCBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZSk6IG51bWJlciA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZpcnN0LnByaWNlIC0gc2Vjb25kLnByaWNlO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcylcbiAgICAgICAgKS5maWx0ZXIoam91cm5leTEgPT4gam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZCk7XG5cbiAgICAgICAgY29uc3QgZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMgPSBfLmZsYXR0ZW4oXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMpXG4gICAgICAgICkuZmlsdGVyKChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLkZpcnN0KTtcbiAgICAgICAgY29uc3Qgb3BlblJldHVyblN0YW5kYXJkSm91cm5leXMgPSBfLmZsYXR0ZW4oXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMpXG4gICAgICAgICkuZmlsdGVyKFxuICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLlN0YW5kYXJkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9wZW5SZXR1cm5GaXJzdEpvdXJuZXlzID0gXy5mbGF0dGVuKFxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKVxuICAgICAgICApLmZpbHRlcigoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdCk7XG4gICAgICAgIGNvbnN0IHJldHVyblN0YW5kYXJkSm91cm5leXMgPSBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcykpLmZpbHRlcihcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZXR1cm5GaXJzdEpvdXJuZXlzID0gXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpKS5maWx0ZXIoXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+IGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuRmlyc3RcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihPYmplY3QudmFsdWVzKGpvdXJuZXkuc2luZ2xlSm91cm5leUZhcmVzKSkuZmlsdGVyKFxuICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLlN0YW5kYXJkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpcnN0Sm91cm5leXMgPSBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcykpLmZpbHRlcihcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG5vRHVhbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcbiAgICAgICAgICAuLi5vcGVuUmV0dXJuU3RhbmRhcmRKb3VybmV5cyxcbiAgICAgICAgICAuLi5yZXR1cm5TdGFuZGFyZEpvdXJuZXlzLFxuICAgICAgICAgIC4uLnNpbmdsZVN0YW5kYXJkSm91cm5leXNcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgYWxsU3RhbmRhcmQ6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xuICAgICAgICAgIC4uLmR1YWxTaW5nbGVTdGFuZGFyZEpvdXJuZXlzLFxuICAgICAgICAgIC4uLm5vRHVhbFN0YW5kYXJkXG4gICAgICAgIF0uc29ydChzb3J0KTtcbiAgICAgICAgY29uc3Qgbm9EdWFsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xuICAgICAgICAgIC4uLm9wZW5SZXR1cm5GaXJzdEpvdXJuZXlzLFxuICAgICAgICAgIC4uLnJldHVybkZpcnN0Sm91cm5leXMsXG4gICAgICAgICAgLi4uc2luZ2xlRmlyc3RKb3VybmV5c1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBhbGxGaXJzdDogT0JUUmFpbEpvdXJuZXlGYXJlW10gPSBbLi4uZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMsIC4uLm5vRHVhbEZpcnN0XS5zb3J0KFxuICAgICAgICAgIHNvcnRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFpc1JldHVybikge1xuICAgICAgICAgIG5vRHVhbFN0YW5kYXJkLnNvcnQoc29ydCk7XG4gICAgICAgICAgYWxsRmlyc3Quc29ydChzb3J0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLmR1YWxTaW5nbGVKb3VybmV5RmFyZXMgPSBtaW4oXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdFRpY2tldHMuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyxcbiAgICAgICAgICBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMpKS5maWx0ZXIoXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxuICAgICAgICAgICksXG4gICAgICAgICAgam91cm5leVxuICAgICAgICApO1xuICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5vcGVuUmV0dXJuSm91cm5leUZhcmVzID0gbWluKFxuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMsXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKSkuZmlsdGVyKFxuICAgICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+ICEham91cm5leTFcbiAgICAgICAgICApLFxuICAgICAgICAgIGpvdXJuZXlcbiAgICAgICAgKTtcblxuICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdFRpY2tldHMucmV0dXJuSm91cm5leUZhcmVzLFxuICAgICAgICAgIF8uZmxhdHRlbihPYmplY3QudmFsdWVzKGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzKSkuZmlsdGVyKFxuICAgICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+ICEham91cm5leTFcbiAgICAgICAgICApLFxuICAgICAgICAgIGpvdXJuZXlcbiAgICAgICAgKTtcbiAgICAgICAgcHJpY2VzMS5jaGVhcGVzdFRpY2tldHMuc3BsaXRGYXJlcyA9IG1pbihcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5zcGxpdEZhcmVzLFxuICAgICAgICAgIF8uZmxhdHRlbihPYmplY3QudmFsdWVzKGpvdXJuZXkuc3BsaXRGYXJlcykpLmZpbHRlcihcbiAgICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiAhIWpvdXJuZXkxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBqb3VybmV5XG4gICAgICAgICk7XG4gICAgICAgIGlmIChpc1JldHVybikge1xuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXG4gICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlLFxuICAgICAgICAgICAgYWxsU3RhbmRhcmQsXG4gICAgICAgICAgICBqb3VybmV5XG4gICAgICAgICAgKTtcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlID0gbWluKFxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSxcbiAgICAgICAgICAgIGFsbEZpcnN0LFxuICAgICAgICAgICAgam91cm5leVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcbiAgICAgICAgICAgIG5vRHVhbFN0YW5kYXJkLFxuICAgICAgICAgICAgam91cm5leVxuICAgICAgICAgICk7XG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IG1pbihcbiAgICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUsXG4gICAgICAgICAgICBub0R1YWxGaXJzdCxcbiAgICAgICAgICAgIGpvdXJuZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGlzU3RhbmRhcmRDbGFzc1NpbmdsZSA9XG4gICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmU/LmZhcmU/LnNpbmdsZU9yUmV0dXJuID09PVxuICAgICAgICAgICAgUmFpbEpvdXJuZXlGYXJlVHlwZS5TaW5nbGU7XG4gICAgICAgICAgaWYgKGlzU3RhbmRhcmRDbGFzc1NpbmdsZSkge1xuICAgICAgICAgICAgY29uc3QgaW5ib3VuZFByaWNlID0gbWluKFxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlLFxuICAgICAgICAgICAgICBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyxcbiAgICAgICAgICAgICAgam91cm5leVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kVG90YWxQcmljZSA9IHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZS5wcmljZTtcbiAgICAgICAgICAgIGlmIChvdXRib3VuZFRvdGFsUHJpY2UgPiBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUucHJpY2UpIHtcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID1cbiAgICAgICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBpbmJvdW5kUHJpY2UucHJpY2UgPiBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSA9IGluYm91bmRQcmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpc0ZpcnN0Q2xhc3NTaW5nbGUgPVxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlPy5mYXJlPy5zaW5nbGVPclJldHVybiA9PT1cbiAgICAgICAgICAgIFJhaWxKb3VybmV5RmFyZVR5cGUuU2luZ2xlO1xuICAgICAgICAgIGlmIChpc0ZpcnN0Q2xhc3NTaW5nbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluYm91bmRQcmljZSA9IG1pbihcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSxcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMsXG4gICAgICAgICAgICAgIGpvdXJuZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB0b3RhbFByaWNlID0gcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlLnByaWNlO1xuICAgICAgICAgICAgaWYgKHRvdGFsUHJpY2UgPiBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUucHJpY2UpIHtcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlID1cbiAgICAgICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmU7XG4gICAgICAgICAgICAgIC8vIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUgPSB7XG4gICAgICAgICAgICAgIC8vICAgcHJpY2U6IDAsXG4gICAgICAgICAgICAgIC8vICAgam91cm5leTogbnVsbCxcbiAgICAgICAgICAgICAgLy8gICBmYXJlOiBudWxsXG4gICAgICAgICAgICAgIC8vIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBpbmJvdW5kUHJpY2UucHJpY2UgPiBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLnByaWNlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IGluYm91bmRQcmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlLFxuICAgICAgICAgICAgYWxsU3RhbmRhcmQsXG4gICAgICAgICAgICBqb3VybmV5XG4gICAgICAgICAgKTtcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPSBtaW4oXG4gICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUsXG4gICAgICAgICAgICBhbGxGaXJzdCxcbiAgICAgICAgICAgIGpvdXJuZXlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlLFxuICAgICAgICAgICAgbm9EdWFsU3RhbmRhcmQsXG4gICAgICAgICAgICBqb3VybmV5XG4gICAgICAgICAgKTtcbiAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPSBtaW4oXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUsXG4gICAgICAgICAgICBub0R1YWxGaXJzdCxcbiAgICAgICAgICAgIGpvdXJuZXlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmljZXMxO1xuICAgICAgfSxcbiAgICAgIHByaWNlc1xuICAgICk7XG4gIH1cbiAgYXN5bmMgc2VsZWN0VGlja2V0KFxuICAgIGRpcmVjdGlvbjogUmFpbERpcmVjdGlvbixcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxuICAgIHNvdXJjZUlkOiBzdHJpbmcsXG4gICAgc2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcyxcbiAgICB3ZWxsYmVpbmc6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICByZWFwcGx5RmlsdGVyOiBib29sZWFuID0gdHJ1ZSxcbiAgICBpc0V1OiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmFyZVR5cGUgPSB0aGlzLnNlbGVjdGVkVGlja2V0Py5mYXJlPy50eXBlO1xuICAgIGNvbnN0IGlnbm9yZVRpY2tldEV4dHJhcyA9IHRoaXMudHJhdmVsY2FyZEZhcmVDaGVjayhcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQ/LmpvdXJuZXk/LnRpY2tldEV4dHJhcyxcbiAgICAgIGZhcmVUeXBlXG4gICAgKTtcblxuICAgIGlmICghc291cmNlSWQpIHtcbiAgICAgIHNvdXJjZUlkID0gdGhpcy5yZXN1bHRzLnZhbHVlWzBdLnNvdXJjZUlkLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCFyYWlsRmFyZS5zZWxlY3RhYmxlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCcrKysgUmFpbCBGYXJlIGlzIG5vdCBzZWxlY3RhYmxlICsrKycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ICYmXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2ggJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaCA9PT0gcmFpbEZhcmUuZmFyZUhhc2hcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xuICAgICAgdGhpcy5zZWxlY3RlZE11bHRpRmFyZXMub3V0Ym91bmQgPSBbXTtcbiAgICAgIGlmIChyZWFwcGx5RmlsdGVyKSB0aGlzLl9hcHBseUZpbHRlcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZFRpY2tldCA9IHRoaXMuc2VsZWN0ZWRUaWNrZXQ7XG4gICAgdGhpcy5hbHRlcm5hdGl2ZVdlbGxiZWluZyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFxuICAgICAgVXNlckZhdm9ydXJpdGUuQWx0ZXJuYXRpdmVSYWlsSXRpbmVyYXJ5RW5hYmxlZFxuICAgICk7XG4gICAgaWYgKFxuICAgICAgc2VsZWN0ZWRUaWNrZXQgJiZcbiAgICAgICF3ZWxsYmVpbmcgJiZcbiAgICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcgJiZcbiAgICAgIGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5JbmJvdW5kXG4gICAgKSB7XG4gICAgICBjb25zdCBvdXQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0gc2VsZWN0ZWRUaWNrZXQuam91cm5leTtcbiAgICAgIGNvbnN0IGluQjogT0JUUmFpbEpvdXJuZXlPcHRpb24gPSBqb3VybmV5O1xuXG4gICAgICBjb25zdCB0aW1lRGlmZkluSG91cnMgPSBtb21lbnQob3V0LmFycml2ZURhdGVUaW1lKS5kaWZmKFxuICAgICAgICBtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSxcbiAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRpbWVEaWZmSW5Ib3Vyc0luID0gbW9tZW50KGluQi5hcnJpdmVEYXRlVGltZSkuZGlmZihcbiAgICAgICAgbW9tZW50KGluQi5kZXBhcnREYXRlVGltZSksXG4gICAgICAgICdob3VycycsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBjb25zdCBkYXlEaWZmZXJuY2UgPSBtb21lbnQoaW5CLmRlcGFydERhdGVUaW1lKS5kaWZmKG1vbWVudChvdXQuZGVwYXJ0RGF0ZVRpbWUpLCAnZGF5Jyk7XG4gICAgICBjb25zdCB0b0FkZCA9IGF3YWl0IHRoaXMuY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxuICAgICAgICB0aW1lRGlmZkluSG91cnMgKyB0aW1lRGlmZkluSG91cnNJbixcbiAgICAgICAgZGF5RGlmZmVybmNlXG4gICAgICApO1xuICAgICAgaWYgKHRvQWRkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0VGlja2V0KGRpcmVjdGlvbiwgam91cm5leSwgcmFpbEZhcmUsIHNvdXJjZUlkLCBzZWN0aW9uLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zID0gdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2g7XG5cbiAgICAgIHN3aXRjaCAoc2VjdGlvbikge1xuICAgICAgICBjYXNlICdzaW5nbGVKb3VybmV5RmFyZXMnOlxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XG4gICAgICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICFpZ25vcmVUaWNrZXRFeHRyYXMgJiZcbiAgICAgICAgICAgIC8vIGlmIGNhdGVnb3J5IGlzIHRyYXZlbGNhcmQgd2UgY3VycmVudGx5IGFkZCBhbGwgdGhlIHRyYXZlbGNhcmRzIHJhdGhlciB0aGVuIHVzdCBvbmUsIHNob3VsZCB3ZSBpbnN0ZWFkIGFkZCBub25lPyBvciBzdGlsbCBzaG93IHRoZSBtb2RhbD9cbiAgICAgICAgICAgIHJhaWxGYXJlLnRlcm1zWzBdLnRlcm1zPy5jYXRlZ29yeSAhPT0gJ1RSQVZFTENBUkQnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCB0aWNrZXRFeHRyYXM6IFJhaWxUaWNrZXRFeHRyYVtdID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgd2luZG93Q2xhc3M6ICdyYWlsLXRpY2tldHMtZGlhbG9nJywgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICAgICAgICAgIHsgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogam91cm5leSB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCF0aWNrZXRFeHRyYXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgam91cm5leS50aWNrZXRFeHRyYXMgPSB0aWNrZXRFeHRyYXMgPyB0aWNrZXRFeHRyYXMgOiBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgIH0gZWxzZSBpZiAoam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggJiYgcmFpbEZhcmUudGVybXNbMF0udGVybXM/LmNhdGVnb3J5ID09PSAnVFJBVkVMQ0FSRCcpIHtcbiAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHRoaXMuYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxuICAgICAgICAgICAgc291cmNlSWQsXG4gICAgICAgICAgICBzZWFyY2hRdWVyeSxcbiAgICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgICByYWlsRmFyZSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgaXNFdVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpRmFyZXMub3V0Ym91bmQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmV0dXJuSm91cm5leUZhcmVzJzpcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xuICAgICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgIWlnbm9yZVRpY2tldEV4dHJhcyAmJlxuICAgICAgICAgICAgICByYWlsRmFyZS50ZXJtc1swXS50ZXJtcz8uY2F0ZWdvcnkgIT09ICdUUkFWRUxDQVJEJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgd2luZG93Q2xhc3M6ICdyYWlsLXRpY2tldHMtZGlhbG9nJywgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxuICAgICAgICAgICAgICAgICAgaW5ib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5XG4gICAgICAgICAgICAgICAgfSAvLyBpbiB0aGlzIGNhc2Ugam91cm5leSBpcyB0aGUgaW5ib3VuZFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoIXRpY2tldEV4dHJhcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZWxlY3RlZFRpY2tldC5qb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcyA/IHRpY2tldEV4dHJhcyA6IFtdO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoICYmIHJhaWxGYXJlLnRlcm1zWzBdLnRlcm1zPy5jYXRlZ29yeSA9PT0gJ1RSQVZFTENBUkQnKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leS50aWNrZXRFeHRyYXMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxuICAgICAgICAgICAgICBzb3VyY2VJZCxcbiAgICAgICAgICAgICAgc2VhcmNoUXVlcnksXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leSxcbiAgICAgICAgICAgICAgam91cm5leSxcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLFxuICAgICAgICAgICAgICByYWlsRmFyZSxcbiAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnOlxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XG4gICAgICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFRpY2tldCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAhaWdub3JlVGlja2V0RXh0cmFzICYmXG4gICAgICAgICAgICAgIHJhaWxGYXJlLnRlcm1zWzBdLnRlcm1zPy5jYXRlZ29yeSAhPT0gJ1RSQVZFTENBUkQnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgICAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlLCB3aW5kb3dDbGFzczogJ3JhaWwtdGlja2V0cy1kaWFsb2cnLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBvdXRib3VuZFJhaWxKb3VybmV5T3B0aW9uOiB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXksXG4gICAgICAgICAgICAgICAgICBpbmJvdW5kUmFpbEpvdXJuZXlPcHRpb246IGpvdXJuZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmICghdGlja2V0RXh0cmFzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRpY2tldEV4dHJhcyk7XG4gICAgICAgICAgICAgIHNlbGVjdGVkVGlja2V0LmpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzID8gdGlja2V0RXh0cmFzIDogW107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggJiYgcmFpbEZhcmUudGVybXNbMF0udGVybXM/LmNhdGVnb3J5ID09PSAnVFJBVkVMQ0FSRCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LnRpY2tldEV4dHJhcyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coJysrKyBBZGRpbmcgaW5ib3VuZCBkdWFsIHNpbmdsZSB0byBiYXNrZXQgKysrJyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZER1YWxTaW5nbGVUb0Jhc2tldChcbiAgICAgICAgICAgICAgc291cmNlSWQsXG4gICAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXksXG4gICAgICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZSxcbiAgICAgICAgICAgICAgcmFpbEZhcmUsXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICBpc0V1LFxuICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpRmFyZXMub3V0Ym91bmQgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aUZhcmVzLmluYm91bmQgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgIWlnbm9yZVRpY2tldEV4dHJhcyAmJlxuICAgICAgICAgICAgcmFpbEZhcmUudGVybXNbMF0udGVybXM/LmNhdGVnb3J5ICE9PSAnVFJBVkVMQ0FSRCdcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlLCB3aW5kb3dDbGFzczogJ3JhaWwtdGlja2V0cy1kaWFsb2cnLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAgICAgICAgLy8gb25seSBuZWVkIDEgam91cm5leSBmb3Igb3BlbiByZXR1cm5cbiAgICAgICAgICAgICAgeyBvdXRib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5IH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIXRpY2tldEV4dHJhcykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aWNrZXRFeHRyYXMpO1xuICAgICAgICAgICAgam91cm5leS50aWNrZXRFeHRyYXMgPSB0aWNrZXRFeHRyYXMgPyB0aWNrZXRFeHRyYXMgOiBbXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoICYmIHJhaWxGYXJlLnRlcm1zWzBdLnRlcm1zPy5jYXRlZ29yeSA9PT0gJ1RSQVZFTENBUkQnKSB7XG4gICAgICAgICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZE9wZW5SZXR1cm5Ub0Jhc2tldChzb3VyY2VJZCwgc2VhcmNoUXVlcnksIGpvdXJuZXksIHJhaWxGYXJlKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3BsaXRGYXJlcyc6XG4gICAgICAgICAgLy8gd2UgbmVlZCB0byBzcGxpdCB0aGlzIGpvdXJuZXkgYmFjayB1cCBpbnRvIGpvdXJuZXktMSBhbmQgam91bnJleS0yXG4gICAgICAgICAgLy8gdGhpcyBtaWdodCBub3QgYmUgdG9vIGJhZFxuICAgICAgICAgIC8vIG9uY2UgZG9uZSBkbyBpZGVudGljYWwgdG8gYWRkIHJldHVybiB4IDJcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xuICAgICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgIWlnbm9yZVRpY2tldEV4dHJhcyAmJlxuICAgICAgICAgICAgICByYWlsRmFyZS50ZXJtc1swXS50ZXJtcz8uY2F0ZWdvcnkgIT09ICdUUkFWRUxDQVJEJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgd2luZG93Q2xhc3M6ICdyYWlsLXRpY2tldHMtZGlhbG9nJywgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxuICAgICAgICAgICAgICAgICAgaW5ib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoIXRpY2tldEV4dHJhcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aWNrZXRFeHRyYXMpO1xuICAgICAgICAgICAgICBzZWxlY3RlZFRpY2tldC5qb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcyA/IHRpY2tldEV4dHJhcyA6IFtdO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoICYmIHJhaWxGYXJlLnRlcm1zWzBdLnRlcm1zPy5jYXRlZ29yeSA9PT0gJ1RSQVZFTENBUkQnKSB7XG4gICAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcbiAgICAgICAgICAgICAgc291cmNlSWQsXG4gICAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXksXG4gICAgICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZSxcbiAgICAgICAgICAgICAgcmFpbEZhcmVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc3QgdGVtcDogT0JUUmFpbEZhcmVUeXBlcyA9IHNlY3Rpb247XG4gICAgICB9XG4gICAgICBpZiAocmVhcHBseUZpbHRlcikgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja0FsdGVybmF0aXZlSG91cnMoaG91ckRpZmZlcmVuY2U6IG51bWJlciwgZGF5RGlmZmVyZW5jZTogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gISBFTlQtMTQ4MSAtIENoZWNrIGlmIHdlIGFyZSBzZWFyY2hpbmcgcmV0dXJuIHJhaWwgLSBhbmQgYWx0ZXJuYXRpdmUgd2VsbGJlaW5nIGlzIGVuYWJsZWRcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF07XG4gICAgY29uc3QgY2hlY2sgPVxuICAgICAgdGhpcy5hbHRlcm5hdGl2ZVdlbGxiZWluZy5lbmFibGUgJiZcbiAgICAgIE51bWJlcih0aGlzLmFsdGVybmF0aXZlV2VsbGJlaW5nLmhvdXJzKSA+IDAgJiZcbiAgICAgIHBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSAmJlxuICAgICAgaG91ckRpZmZlcmVuY2UgPj0gTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpICYmXG4gICAgICBkYXlEaWZmZXJlbmNlID09PSAwICYmXG4gICAgICB0aGlzLm5vT2ZBZHVsdHMgKyB0aGlzLm5vT2ZDaGlsZHJlbiA8PSBtYXhUcmF2ZWxsZXJXZWxsYmVpbmc7XG4gICAgaWYgKGNoZWNrKSB7XG4gICAgICBjb25zdCB2YWwgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuQWx0ZXJuYXRpdmVSYWlsTW9kYWxDb21wb25lbnQsIHtcbiAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnXG4gICAgICB9KTtcbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XG4gICAgICAgIHRoaXMucGVyZm9ybUFsdGVybmF0aXZlUmFpbEFuZEhvdGVsU2VhcmNoKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwZXJmb3JtQWx0ZXJuYXRpdmVSYWlsQW5kSG90ZWxTZWFyY2goKTogdm9pZCB7XG4gICAgLy8gYWx0ZXIgdGhlIHNlYXJjaCBwYXJhbXNcbiAgICAvLyB0aGUgY2FsbCB0aGUgc2VhcmNoIGZ1bmN0aW9uXG5cbiAgICBjb25zb2xlLmxvZygnKysrIENyZWF0aW5nIHRoZSBBbHRlcm5hdGl2ZSBTZWFyY2ggUGFyYW1zICsrKycpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtc0hvdGVsID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkhvdGVsXTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNSYWlsID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdO1xuICAgIHNlYXJjaFBhcmFtc0hvdGVsLmNob3NlbiA9IHRydWU7XG4gICAgc2VhcmNoUGFyYW1zUmFpbC5jaG9zZW4gPSB0cnVlO1xuICAgIHNlYXJjaFBhcmFtc0hvdGVsLnByaW9yaXR5ID0gc2VhcmNoUGFyYW1zUmFpbC5wcmlvcml0eTtcbiAgICBjb25zdCBob3RlbFBhcmFtcyA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF07XG4gICAgY29uc3QgcmFpbFBhcmFtcyA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXTtcbiAgICAvLyBGaXJzdCBvZiBhbGwgLSBhbHRlciB0aGUgcmFpbCBpbmJvdW5kIGRhdGUgLSBhZGQgYSBkYXlcbiAgICByYWlsUGFyYW1zLmluQm91bmREYXRlVGltZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5pbkJvdW5kRGF0ZVRpbWVcbiAgICAgIC5hZGQoMSwgJ2RheScpXG4gICAgICAuc2V0KHsgaG91cjogMTAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KTsgLy8gc2V0IDEwQU0gYXMgZGVmYXVsdFxuICAgIC8vIG5vdyBjcmVhdGUgdGhlIGhvdGVsIHNlYXJjaCBwYXJhbXNcbiAgICBob3RlbFBhcmFtcy5sb2NhdGlvbl90eXBlX3NlbGVjdCA9IExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uO1xuICAgIGhvdGVsUGFyYW1zLmxvY2F0aW9uID0gcmFpbFBhcmFtcy50cmF2ZWxsaW5nVG87XG4gICAgaG90ZWxQYXJhbXMudHJhaW5zU3RhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvLnJhaWxzdGF0aW9uO1xuICAgIGhvdGVsUGFyYW1zLmNoZWNraW5fZGF0ZSA9IHJhaWxQYXJhbXMub3V0Qm91bmREYXRlVGltZTtcbiAgICBob3RlbFBhcmFtcy5jaGVja291dF9kYXRlID0gcmFpbFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWU7XG4gICAgaG90ZWxQYXJhbXMubm9fb2Zfb2NjdXBhbnRzID0gcmFpbFBhcmFtcy5ub09mQWR1bHRzICsgcmFpbFBhcmFtcy5ub09mQ2hpbGRyZW47XG4gICAgaG90ZWxQYXJhbXMubm9fb2Zfcm9vbXMgPSAxO1xuICAgIGhvdGVsUGFyYW1zLmRpc3RhbmNlID0gMTA7XG5cbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcyhXZWxsYmVpbmdFbnVtLldFTExCRUlORyk7XG4gIH1cblxuICBhc3luYyBzZWxlY3RUaWNrZXROb0FkZChcbiAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24sXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxuICAgIHNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFyYWlsRmFyZS5zZWxlY3RhYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJysrKyBSYWlsIGZhcmUgaXMgbm90IHNlbGVjdGFibGUgKysrJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNPdXRUaWNrZXRTZWxlY3RlZCA9XG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ICYmXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2ggJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaCA9PT0gcmFpbEZhcmUuZmFyZUhhc2g7XG4gICAgY29uc3QgaXNJblRpY2tldFNlbGVjdGVkID1cbiAgICAgIGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5JbmJvdW5kXG4gICAgICAgID8gdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQgJiZcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldC5qb3VybmV5LmpvdXJuZXlIYXNoID09PSBqb3VybmV5LmpvdXJuZXlIYXNoICYmXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuZmFyZS5mYXJlSGFzaCA9PT0gcmFpbEZhcmUuZmFyZUhhc2hcbiAgICAgICAgOiBmYWxzZTtcblxuICAgIGlmIChpc091dFRpY2tldFNlbGVjdGVkIHx8IChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uSW5ib3VuZCAmJiBpc0luVGlja2V0U2VsZWN0ZWQpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJysrKyBKb3VybmV5IGFuZCBmYXJlIGFyZSBhbHJlYWR5IHNlbGVjdGVkIC0gYnJlYWtpbmcgb3V0ICsrKycpO1xuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0ID0gbnVsbDtcbiAgICAgIGlmIChpc091dFRpY2tldFNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHRoaXMuX3NlbGVjdGVkU2VjdGlvbiAmJiB0aGlzLl9zZWxlY3RlZFNlY3Rpb24gIT09IHNlY3Rpb24pIHx8XG4gICAgICAodGhpcy5fc2VsZWN0ZWRTZWN0aW9uID09PSAncmV0dXJuSm91cm5leUZhcmVzJyAmJlxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0Py5mYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyICE9PVxuICAgICAgICAgIHJhaWxGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyKVxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX3NlbGVjdGVkU2VjdGlvbiA9IHNlY3Rpb247XG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zID0gdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2g7XG4gICAgc3dpdGNoIChzZWN0aW9uKSB7XG4gICAgICBjYXNlICdzaW5nbGVKb3VybmV5RmFyZXMnOlxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xuICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgZmFyZTogcmFpbEZhcmVcbiAgICAgICAgfTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JldHVybkpvdXJuZXlGYXJlcyc6XG4gICAgICBjYXNlICdzcGxpdEZhcmVzJzpcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XG4gICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCA9IHtcbiAgICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJzpcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XG4gICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCA9IHtcbiAgICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJzpcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcbiAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc3QgdGVtcDogT0JUUmFpbEZhcmVUeXBlcyA9IHNlY3Rpb247XG4gICAgfVxuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBhZGQgdG8gYmFza2V0IGZvciBnbzIvc2Npb25cbiAgICogQHBhcmFtIHNvdXJjZUlkXG4gICAqIEBwYXJhbSBzZWFyY2hRdWVyeVxuICAgKiBAcGFyYW0gam91cm5leVxuICAgKiBAcGFyYW0gcmFpbEZhcmVcbiAgICogQHBhcmFtIGluYm91bmRSYWlsRmFyZVxuICAgKiBAcGFyYW0gaW5ib3VuZEpvdXJuZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIGFkZFRvQmFza2V0KFxuICAgIHNvdXJjZUlkOiBzdHJpbmcsXG4gICAgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zLFxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXG4gICAgaW5ib3VuZFJhaWxGYXJlPzogT0JUUmFpbEpvdXJuZXlGYXJlLFxuICAgIGluYm91bmRKb3VybmV5PzogT0JUUmFpbEpvdXJuZXlPcHRpb24sXG4gICAgaW5nb3JlSW52b2tlZCA9IGZhbHNlLFxuICAgIGlnbm9yZVRpY2tldEV4dHJhcyA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcbiAgICAgIFVzZXJGYXZvcnVyaXRlLkFsdGVybmF0aXZlUmFpbEl0aW5lcmFyeUVuYWJsZWRcbiAgICApO1xuICAgIGlmICh0aGlzLmFsdGVybmF0aXZlV2VsbGJlaW5nICYmIGluYm91bmRKb3VybmV5KSB7XG4gICAgICBjb25zdCBvdXQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0gam91cm5leTtcbiAgICAgIGNvbnN0IGluQjogT0JUUmFpbEpvdXJuZXlPcHRpb24gPSBpbmJvdW5kSm91cm5leTtcblxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzID0gbW9tZW50KG91dC5hcnJpdmVEYXRlVGltZSkuZGlmZihcbiAgICAgICAgbW9tZW50KG91dC5kZXBhcnREYXRlVGltZSksXG4gICAgICAgICdob3VycycsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBjb25zdCB0aW1lRGlmZkluSG91cnNJbiA9IG1vbWVudChpbkIuYXJyaXZlRGF0ZVRpbWUpLmRpZmYoXG4gICAgICAgIG1vbWVudChpbkIuZGVwYXJ0RGF0ZVRpbWUpLFxuICAgICAgICAnaG91cnMnLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgY29uc3QgZGF5RGlmZmVybmNlID0gbW9tZW50KGluQi5kZXBhcnREYXRlVGltZSkuZGlmZihtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSwgJ2RheScpO1xuICAgICAgY29uc3QgdG9BZGQgPSBhd2FpdCB0aGlzLmNoZWNrQWx0ZXJuYXRpdmVIb3VycyhcbiAgICAgICAgdGltZURpZmZJbkhvdXJzICsgdGltZURpZmZJbkhvdXJzSW4sXG4gICAgICAgIGRheURpZmZlcm5jZVxuICAgICAgKTtcblxuICAgICAgaWYgKCF0b0FkZCkge1xuICAgICAgICByZXR1cm47IC8vIGJyZWFrIG91dFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSAmJlxuICAgICAgIWlnbm9yZVRpY2tldEV4dHJhcyAmJlxuICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudC5jb21wb25lbnQgJiZcbiAgICAgIHJhaWxGYXJlLnRlcm1zWzBdLnRlcm1zPy5jYXRlZ29yeSAhPT0gJ1RSQVZFTENBUkQnXG4gICAgKSB7XG4gICAgICBjb25zdCB0aWNrZXRFeHRyYXM6IFJhaWxUaWNrZXRFeHRyYVtdID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICAgIHsgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogam91cm5leSwgaW5ib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBpbmJvdW5kSm91cm5leSB9XG4gICAgICApO1xuICAgICAgaWYgKCF0aWNrZXRFeHRyYXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgam91cm5leS50aWNrZXRFeHRyYXMgPSB0aWNrZXRFeHRyYXMgPyB0aWNrZXRFeHRyYXMgOiBbXTtcbiAgICB9IGVsc2UgaWYgKGpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoICYmIHJhaWxGYXJlLnRlcm1zWzBdLnRlcm1zPy5jYXRlZ29yeSA9PT0gJ1RSQVZFTENBUkQnKSB7XG4gICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IFtdO1xuICAgIH1cbiAgICBpZiAoc2VhcmNoUXVlcnkuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXkpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KHNvdXJjZUlkLCBzZWFyY2hRdWVyeSwgam91cm5leSwgcmFpbEZhcmUsIGluZ29yZUludm9rZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub3cgY2hlY2sgaWYgd2UgaGF2ZSBjaG9zZW4gZHVhbCBzaW5nbGVzIG9yIHJldHVybnNcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbiA9PT0gJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRkT3BlblJldHVyblRvQmFza2V0KHNvdXJjZUlkLCBzZWFyY2hRdWVyeSwgam91cm5leSwgcmFpbEZhcmUsIGluZ29yZUludm9rZWQpO1xuICAgICAgfSBlbHNlIGlmIChyYWlsRmFyZS5zaW5nbGVPclJldHVybiA9PT0gJ1JldHVybicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxuICAgICAgICAgIHNvdXJjZUlkLFxuICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxuICAgICAgICAgIGpvdXJuZXksXG4gICAgICAgICAgaW5ib3VuZEpvdXJuZXksXG4gICAgICAgICAgcmFpbEZhcmUsXG4gICAgICAgICAgaW5ib3VuZFJhaWxGYXJlLFxuICAgICAgICAgIGluZ29yZUludm9rZWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICEgLSBEdWFsIFNpbmdsZXNcbiAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXG4gICAgICAgICAgc291cmNlSWQsXG4gICAgICAgICAgc2VhcmNoUXVlcnksXG4gICAgICAgICAgam91cm5leSxcbiAgICAgICAgICBpbmJvdW5kSm91cm5leSxcbiAgICAgICAgICByYWlsRmFyZSxcbiAgICAgICAgICBpbmJvdW5kUmFpbEZhcmUsXG4gICAgICAgICAgaW5nb3JlSW52b2tlZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcbiAgfVxuXG4gIGFzeW5jIGFkZE9wZW5SZXR1cm5Ub0Jhc2tldChcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxuICAgIHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyxcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxuICAgIGlnbm9yZUludm9rZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoc291cmNlSWQsIHNlYXJjaFF1ZXJ5LCBqb3VybmV5LCByYWlsRmFyZSwgaWdub3JlSW52b2tlZCk7XG4gIH1cblxuICBhc3luYyBhZGREdWFsU2luZ2xlVG9CYXNrZXQoXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXG4gICAgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zIHwgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzLFxuICAgIG91dGJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICBpbmJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICBvdXRib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgICBpbmJvdW5kRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxuICAgIGlnbm9yZUludm9rZWQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpc0V1OiBib29sZWFuID0gZmFsc2UsXG4gICAgZ210OiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gIWdtdFxuICAgICAgPyB0aGlzLmdldFNlYXJjaFF1ZXJ5KHNlYXJjaFF1ZXJ5IGFzIFJhaWxUZW1wUGFyYW1zKVxuICAgICAgOiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzPihzZWFyY2hRdWVyeSBhcyBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMpO1xuICAgIGNvbnN0IHRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy50cmF2ZWxsZXJzKTtcbiAgICBpZiAoZ210KSB7XG4gICAgICBjb25zdCB7IGFkdWx0cywgY2hpbGRyZW4sIG5ld1RyYXZlbGxlcnMgfSA9IHRoaXMucHJvY2Vzc1RyYWlubGluZVRyYXZlbGxlcnMoKTtcbiAgICAgIHJhaWxRdWVyeS50cmF2ZWxsZXJzID0gbmV3VHJhdmVsbGVycztcbiAgICAgIHJhaWxRdWVyeS5hZHVsdHMgPSBhZHVsdHM7XG4gICAgICByYWlsUXVlcnkuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB9XG4gICAgaWYgKGlzRXUpIHtcbiAgICAgIC8vIGNoZWNrIHRoZSB0cmF2ZWxsZXJzIGFnZSB0eXBlIGlzIGNvcnJlY3RcbiAgICAgIGNvbnN0IGV1VHJhdmVsbGVycyA9IDxUcmF2ZWxsZXJJbnB1dFtdPnJhaWxRdWVyeS50cmF2ZWxsZXJzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldVRyYXZlbGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXVUcmF2ZWxsZXIgPSBldVRyYXZlbGxlcnNbaV07XG4gICAgICAgIGlmIChldVRyYXZlbGxlci5wYXNzZW5nZXJUeXBlID09PSBQYXNzZW5nZXJJbnB1dFR5cGUuWW91dGgpIHtcbiAgICAgICAgICAvLyBjaGFuZ2UgdGhlIGFwcHJvcHJpYXRlIHRyYXZlbGxlciB0byBjaGlsZCAtIGxldHMgc2VlIGlmIHRoaXMgd29ya3NcbiAgICAgICAgICB0cmF2ZWxsZXJzW2ldLmFnZVR5cGUgPSBhZ2VzLkNoaWxkO1xuICAgICAgICAgIHRyYXZlbGxlcnNbaV0uaXNDaGlsZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNvbnNvbGUubG9nKGArKysgRVUgVFJBVkVMTEVSUzogYCx0cmF2ZWxsZXJzLGAgKysrYCk7XG4gICAgfVxuXG4gICAgaWYgKCFyYWlsUXVlcnkuY2hpbGRyZW4pIHtcbiAgICAgIHJhaWxRdWVyeS5jaGlsZHJlbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsZXQgaW5UaWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xuICAgIGxldCBvdXRUaWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xuXG4gICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBjcmVhdGUgVGlja2V0RXh0cmFzT2JqZWN0IGFuZCBhZGRlZCBpdCB0byB0aGUgYmFza2V0XG4gICAgaWYgKGluYm91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XG4gICAgICBpblRpY2tldEV4dHJhcyA9IHRoaXMuY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KGluYm91bmQudGlja2V0RXh0cmFzKTtcbiAgICB9XG5cbiAgICBpZiAob3V0Ym91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XG4gICAgICBvdXRUaWNrZXRFeHRyYXMgPSB0aGlzLmNyZWF0ZVRpY2tldEV4dHJhc09iamVjdChvdXRib3VuZC50aWNrZXRFeHRyYXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcblxuICAgIGNvbnN0IG91dGJvdW5kRmFyZUxpc3Q6IHsgaWQ/OiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10gPSBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnM/LmZhcmVzXG4gICAgICA/Lmxlbmd0aFxuICAgICAgPyBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnM/LmZhcmVzPy5tYXAoeCA9PiAoeyBpZDogeC5pZCwgbmFtZTogeC5uYW1lIH0pKVxuICAgICAgOiBbeyBuYW1lOiBvdXRib3VuZEZhcmUudHlwZSB9XTtcblxuICAgIGNvbnN0IGluYm91bmRGYXJlTGlzdDogeyBpZD86IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSA9IGluYm91bmRGYXJlLmlkZW50aWZpZXJzPy5mYXJlcz8ubGVuZ3RoXG4gICAgICA/IGluYm91bmRGYXJlLmlkZW50aWZpZXJzPy5mYXJlcz8ubWFwKHggPT4gKHsgaWQ6IHguaWQsIG5hbWU6IHgubmFtZSB9KSlcbiAgICAgIDogW3sgbmFtZTogaW5ib3VuZEZhcmUudHlwZSB9XTtcblxuICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShzZXJ2aWNlSWQpPy5uYW1lO1xuXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoXG4gICAgICBvdXRib3VuZEZhcmUsXG4gICAgICBvdXRib3VuZCxcbiAgICAgIG91dGJvdW5kRmFyZUxpc3QsXG4gICAgICBpbmJvdW5kRmFyZSxcbiAgICAgIGluYm91bmQsXG4gICAgICBpbmJvdW5kRmFyZUxpc3QsXG4gICAgICBzZXJ2aWNlTmFtZVxuICAgICk7XG4gICAgaWYgKGJhc2tldCkge1xuICAgICAgY29uc3Qgb3V0Ym91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKG91dGJvdW5kLCBpc0V1KTtcbiAgICAgIGNvbnN0IGluYm91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKGluYm91bmQsIGlzRXUpO1xuICAgICAgY29uc3QgbG93ZXN0VGlja2V0ID0gdGhpcy5maW5kQ2hlYXBlc3RUaWNrZXQoKTtcbiAgICAgIGxvd2VzdFRpY2tldC5hbW91bnQgPSArbG93ZXN0VGlja2V0LmFtb3VudC50b0ZpeGVkKDIpO1xuICAgICAgbGV0IHRpY2tldFF1ZXVlTGlzdDogUmFpbFRpY2tldFF1ZXVlW10gPSBbXTtcbiAgICAgIGlmIChvdXRib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZSAmJiBpbmJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlKSB7XG4gICAgICAgIHRpY2tldFF1ZXVlTGlzdCA9IG91dGJvdW5kRmFyZS50aWNrZXRRdWV1ZUxpc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aWNrZXRRdWV1ZUxpc3QgPSBvdXRib3VuZEZhcmUudGlja2V0UXVldWVMaXN0Py5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSkgPT4gaXRlbS50eXBlICE9PSAnZVRpY2tldCdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xuICAgICAgICByZXF1aXJlc092ZXJyaWRlUmVhc29uOiBvdXRib3VuZEZhcmUudW5hdmFpbGFibGUgfHwgaW5ib3VuZEZhcmUudW5hdmFpbGFibGUsXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIGV4cGlyZXNBdDogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzPy5leHBpcmVzQXQsXG4gICAgICAgICAgdGlja2V0UXVldWVMaXN0OiAodGlja2V0UXVldWVMaXN0IHx8IFtdKS5tYXAoKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgICAgYWNjb3VudHNMaXN0OiAob3V0Ym91bmQuYWNjb3VudHNMaXN0IHx8IFtdKS5tYXAoKGl0ZW06IFJhaWxBY2NvdW50KTogQWNjb3VudHNMaXN0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IG91dGJvdW5kLmFycml2ZURhdGVUaW1lLFxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBvdXRib3VuZC5kZXBhcnREYXRlVGltZSxcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBvdXRib3VuZC5mcm9tLFxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IG91dGJvdW5kRmFyZS5wcm92aWRlck5hbWUsXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IG91dGJvdW5kRmFyZS50eXBlLFxuICAgICAgICAgICAgICAgIHByaWNlOiBvdXRib3VuZEZhcmUucHJpY2UsXG4gICAgICAgICAgICAgICAgbGVnczogb3V0Ym91bmRMZWdzLFxuICAgICAgICAgICAgICAgIHBlcm1pdHRlZERlc3RpbmF0aW9uczogb3V0Ym91bmRGYXJlLnBlcm1pdHRlZERlc3RpbmF0aW9ucyxcbiAgICAgICAgICAgICAgICBwZXJtaXR0ZWRPcmlnaW5zOiBvdXRib3VuZEZhcmUucGVybWl0dGVkT3JpZ2luc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbndhcmREZXRhaWw6IHtcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZSxcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogaW5ib3VuZC50byxcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGluYm91bmQuZnJvbSxcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBpbmJvdW5kRmFyZS5wcm92aWRlck5hbWUsXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IGluYm91bmRGYXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgbGVnczogaW5ib3VuZExlZ3MsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkT3JpZ2luczogaW5ib3VuZEZhcmUucGVybWl0dGVkT3JpZ2lucyxcbiAgICAgICAgICAgICAgICBwZXJtaXR0ZWREZXN0aW5hdGlvbnM6IGluYm91bmRGYXJlLnBlcm1pdHRlZERlc3RpbmF0aW9uc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogdGhpcy5zZWxlY3RlZE11bHRpRmFyZXM/Lm91dGJvdW5kPy5sZW5ndGhcbiAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkTXVsdGlGYXJlcy5vdXRib3VuZFxuICAgICAgICAgICAgICA6IFtvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcixcbiAgICAgICAgICAgIGlzRHVhbFNpbmdsZVJldHVybjogdHJ1ZSxcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKG91dGJvdW5kLmpvdXJuZXlMZWdzKSxcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhb3V0Ym91bmRGYXJlLmVUaWNrZXRBdmFpbGFibGUsXG4gICAgICAgICAgICBpc1NwbGl0OiAhIW91dGJvdW5kRmFyZS5pZGVudGlmaWVycz8uaXNTcGxpdCxcbiAgICAgICAgICAgIGZhcmVzOiBvdXRib3VuZEZhcmU/LmlkZW50aWZpZXJzPy5mYXJlcyxcbiAgICAgICAgICAgIGNvbXBvc2l0aW9uOiBvdXRib3VuZEZhcmU/LmlkZW50aWZpZXJzPy5jb21wb3NpdGlvblxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxuICAgICAgICAgIHJldHVybjoge1xuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiB0aGlzLnNlbGVjdGVkTXVsdGlGYXJlcz8uaW5ib3VuZD8ubGVuZ3RoXG4gICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZE11bHRpRmFyZXMuaW5ib3VuZFxuICAgICAgICAgICAgICA6IFtpbmJvdW5kRmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcl0sXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXG4gICAgICAgICAgICBpc0R1YWxTaW5nbGVSZXR1cm46IHRydWUsXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhpbmJvdW5kLmpvdXJuZXlMZWdzKSxcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhaW5ib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcbiAgICAgICAgICAgIGlzU3BsaXQ6ICEhaW5ib3VuZEZhcmUuaWRlbnRpZmllcnM/LmlzU3BsaXQsXG4gICAgICAgICAgICBmYXJlczogaW5ib3VuZEZhcmU/LmlkZW50aWZpZXJzPy5mYXJlcyxcbiAgICAgICAgICAgIGNvbXBvc2l0aW9uOiBpbmJvdW5kRmFyZT8uaWRlbnRpZmllcnM/LmNvbXBvc2l0aW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc0VVOiBpc0V1ID8gaXNFdSA6IG51bGwsIC8vICFzZXQgdG8gbnVsbCBhcyBFdm9sdmkgZG9zZW4ndCBoYXZlIHRoaXMgaW4gdGhlIHNjaGVtYVxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxuICAgICAgICAgIGRpc2NvdW50SW5mbzogXy51bmlvbldpdGgoXG4gICAgICAgICAgICBvdXRib3VuZEZhcmUuZGlzY291bnRJbmZvLFxuICAgICAgICAgICAgaW5ib3VuZEZhcmUuZGlzY291bnRJbmZvLFxuICAgICAgICAgICAgKGEsIGIpID0+IGEuaWQgPT09IGIuaWQgJiYgYS5jb2RlID09PSBiLmNvZGVcbiAgICAgICAgICApLFxuICAgICAgICAgIGZ1bGxQcmljZTogTnVtYmVyKE51bWJlcihvdXRib3VuZEZhcmUuZnVsbFByaWNlICsgaW5ib3VuZEZhcmUuZnVsbFByaWNlKS50b0ZpeGVkKDIpKSxcbiAgICAgICAgICBzaW5nbGVPclJldHVybjogVGlja2V0VHlwZS5TaW5nbGVcbiAgICAgICAgfSxcbiAgICAgICAgYWR1bHRzOiByYWlsUXVlcnkuYWR1bHRzLFxuICAgICAgICBjaGlsZHJlbjogcmFpbFF1ZXJ5LmNoaWxkcmVuID8gcmFpbFF1ZXJ5LmNoaWxkcmVuIDogdW5kZWZpbmVkLFxuICAgICAgICBwcmljZTogTnVtYmVyKE51bWJlcihvdXRib3VuZEZhcmUucHJpY2UgKyBpbmJvdW5kRmFyZS5wcmljZSkudG9GaXhlZCgyKSksXG4gICAgICAgIGN1cnJlbmN5OiBvdXRib3VuZEZhcmUuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxuICAgICAgICBjbzJQZXJJdGVtOiAob3V0Ym91bmQ/LmNvMlBlckl0ZW0gPz8gMCkgKyAoaW5ib3VuZD8uY28yUGVySXRlbSA/PyAwKSxcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiAob3V0Ym91bmQ/LmNvMlBlclBhc3NlbmdlciA/PyAwKSArIChpbmJvdW5kPy5jbzJQZXJQYXNzZW5nZXIgPz8gMCksXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWUsXG4gICAgICAgIGluYm91bmREYXRlOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxuICAgICAgICBsb3dlc3RQcmljZTpcbiAgICAgICAgICBsb3dlc3RUaWNrZXQuYW1vdW50IHx8IGxvd2VzdFRpY2tldC5jdXJyZW5jeUNvZGUgIT09IG91dGJvdW5kRmFyZS5jdXJyZW5jeVxuICAgICAgICAgICAgPyBsb3dlc3RUaWNrZXQuYW1vdW50XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6XG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9PSBvdXRib3VuZEZhcmUuY3VycmVuY3lcbiAgICAgICAgICAgID8gPEN1cnJlbmN5Q29kZT5sb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGFnZW50T3ZlcnJvZGVVbmF2YWlsYWJsZTogb3V0Ym91bmRGYXJlLnVuYXZhaWxhYmxlIHx8IGluYm91bmRGYXJlLnVuYXZhaWxhYmxlLFxuICAgICAgICByZWFzb25LZXlzOiBbXG4gICAgICAgICAgLi4uKG91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbktleXMgfHwgW10pLFxuICAgICAgICAgIC4uLihpbmJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbktleXMgfHwgW10pXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgICAvLyBpZiBpblRpY2tldEV4dHJhcyBvciBvdXRUaWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cbiAgICAgIC8vIGRvbnQgc2hvdyB0aWNrZXRFeHRyYXMgZm9yIEdNVC4gV2Ugd2lsbCBoYXZlIGEgbmV3IHRpY2tldCBmb3IgdGlja2V0RXh0cmFzXG4gICAgICBpZiAoaW5UaWNrZXRFeHRyYXMgJiYgIWdtdCkge1xuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC5yZXR1cm4udGlja2V0RXh0cmFzID0gaW5UaWNrZXRFeHRyYXM7XG4gICAgICB9XG4gICAgICBpZiAob3V0VGlja2V0RXh0cmFzICYmICFnbXQpIHtcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmQudGlja2V0RXh0cmFzID0gb3V0VGlja2V0RXh0cmFzO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5UaWNrZXRFeHRyYXMgfHwgb3V0VGlja2V0RXh0cmFzKSB7XG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLnRpY2tldFF1ZXVlTGlzdCA9IGJhc2tldEl0ZW0uZGV0YWlsLnRpY2tldFF1ZXVlTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW06IFRpY2tldFF1ZXVlTGlzdCkgPT4gaXRlbS50eXBlICE9PSAnZVRpY2tldCdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvdXRib3VuZEZhcmUudGlja2V0T25EZXBhcnR1cmVBdmFpbGFibGUgfHwgIWluYm91bmRGYXJlLnRpY2tldE9uRGVwYXJ0dXJlQXZhaWxhYmxlKSB7XG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLnRpY2tldFF1ZXVlTGlzdCA9IGJhc2tldEl0ZW0uZGV0YWlsLnRpY2tldFF1ZXVlTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW06IFRpY2tldFF1ZXVlTGlzdCkgPT4gaXRlbS50eXBlICE9PSAnVGlja2V0T25EZXBhcnR1cmUnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBiYXNrZXRJdGVtLmRldGFpbC5jb3VudHJ5Q29kZSA9IDxzdHJpbmc+YmFza2V0SXRlbS5zZWFyY2hRdWVyeS5jb3VudHJ5Q29kZTtcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcbiAgICAgICAgYmFza2V0SXRlbSxcbiAgICAgICAgaW50QmFza2V0LFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICAgIHRyYXZlbGxlcnMsXG4gICAgICAgIG91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbktleXMgfHwgaW5ib3VuZEZhcmUucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgaWdub3JlSW52b2tlZFxuICAgICAgKTtcbiAgICAgIGlmICghb3V0Ym91bmRGYXJlLnJlcXVpcmVzUmVhc29uS2V5cz8ubGVuZ3RoICYmICFpbmJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbktleXM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmJhc2tldFNlcnZpY2UudG9nZ2xlTWVudSgpO1xuICAgICAgfVxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xuICAgICAgICB0aGlzLnJlc2VhcmNoV2l0aE5ld1VzZXIoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XG4gICAgfVxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlO1xuICB9XG5cbiAgZmluZENoZWFwZXN0VGlja2V0KCk6IElDaGVhcGVzdFByaWNlIHtcbiAgICBpZiAoIXRoaXMuZnVsbFJlc3VsdHMubGVuZ3RoKSByZXR1cm4geyBhbW91bnQ6IDAsIGN1cnJlbmN5Q29kZTogJ0dCUCcgfTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuU2luZ2xlSm91cm5leSkge1xuICAgICAgICBsZXQgY2hlYXBlc3RUaWNrZXQ6IE9CVFJhaWxKb3VybmV5RmFyZTtcbiAgICAgICAgdGhpcy5mdWxsUmVzdWx0c1swXS5vdXRib3VuZC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIE9iamVjdC5rZXlzKGVsZW1lbnQuc2luZ2xlSm91cm5leUZhcmVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGVhcGVzdE9uSm91cm5leSA9IGVsZW1lbnQuc2luZ2xlSm91cm5leUZhcmVzW2tleV1cbiAgICAgICAgICAgICAgLmZpbHRlcihhID0+IGEgIT09IG51bGwpXG4gICAgICAgICAgICAgIC5zb3J0KGEgPT4gYS5wcmljZSlbMF07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNoZWFwZXN0T25Kb3VybmV5ICYmXG4gICAgICAgICAgICAgICghY2hlYXBlc3RUaWNrZXQgfHwgY2hlYXBlc3RUaWNrZXQucHJpY2UgPiBjaGVhcGVzdE9uSm91cm5leS5wcmljZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY2hlYXBlc3RUaWNrZXQgPSBjaGVhcGVzdE9uSm91cm5leTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYW1vdW50OiBjaGVhcGVzdFRpY2tldD8ucHJpY2UgfHwgMCxcbiAgICAgICAgICBjdXJyZW5jeUNvZGU6IGNoZWFwZXN0VGlja2V0Py5jdXJyZW5jeSB8fCAnR0JQJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgbGV0IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQ6IE9CVFJhaWxKb3VybmV5RmFyZTtcbiAgICAgIGxldCBjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQ6IE9CVFJhaWxKb3VybmV5RmFyZTtcbiAgICAgIHRoaXMuZnVsbFJlc3VsdHNbMF0ub3V0Ym91bmQuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5kdWFsU2luZ2xlSm91cm5leUZhcmVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hlYXBlc3RPbkpvdXJuZXkgPSBlbGVtZW50LmR1YWxTaW5nbGVKb3VybmV5RmFyZXNba2V5XVxuICAgICAgICAgICAgLmZpbHRlcihhID0+IGEgIT0gbnVsbClcbiAgICAgICAgICAgIC5zb3J0KGEgPT4gYS5wcmljZSlbMF07XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2hlYXBlc3RPbkpvdXJuZXkgJiZcbiAgICAgICAgICAgICghY2hlYXBlc3RPdXRib3VuZFRpY2tldCB8fCBjaGVhcGVzdE91dGJvdW5kVGlja2V0LnByaWNlID4gY2hlYXBlc3RPbkpvdXJuZXkucHJpY2UpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgY2hlYXBlc3RPdXRib3VuZFRpY2tldCA9IGNoZWFwZXN0T25Kb3VybmV5O1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5yZXR1cm5Kb3VybmV5RmFyZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBjaGVhcGVzdE9uSm91cm5leSA9IGVsZW1lbnQucmV0dXJuSm91cm5leUZhcmVzW2tleV1cbiAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhICE9IG51bGwpXG4gICAgICAgICAgICAuc29ydChhID0+IGEucHJpY2UpWzBdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoZWFwZXN0T25Kb3VybmV5ICYmXG4gICAgICAgICAgICAoIWNoZWFwZXN0T3BlblJldHVyblRpY2tldCB8fCBjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQucHJpY2UgPj0gY2hlYXBlc3RPbkpvdXJuZXkucHJpY2UpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0ID0gY2hlYXBlc3RPbkpvdXJuZXk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBsZXQgY2hlYXBlc3RSZXR1cm5UaWNrZXQ6IE9CVFJhaWxKb3VybmV5RmFyZTtcbiAgICAgIGlmICh0aGlzLmZ1bGxSZXN1bHRzWzBdLnJldHVybj8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZnVsbFJlc3VsdHNbMF0ucmV0dXJuLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5kdWFsU2luZ2xlSm91cm5leUZhcmVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGVhcGVzdE9uSm91cm5leSA9IGVsZW1lbnQuZHVhbFNpbmdsZUpvdXJuZXlGYXJlc1trZXldXG4gICAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhICE9IG51bGwpXG4gICAgICAgICAgICAgIC5zb3J0KGEgPT4gYS5wcmljZSlbMF07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNoZWFwZXN0T25Kb3VybmV5ICYmXG4gICAgICAgICAgICAgICghY2hlYXBlc3RSZXR1cm5UaWNrZXQgfHwgY2hlYXBlc3RSZXR1cm5UaWNrZXQucHJpY2UgPiBjaGVhcGVzdE9uSm91cm5leS5wcmljZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY2hlYXBlc3RSZXR1cm5UaWNrZXQgPSBjaGVhcGVzdE9uSm91cm5leTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBPYmplY3Qua2V5cyhlbGVtZW50LnJldHVybkpvdXJuZXlGYXJlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hlYXBlc3RPbkpvdXJuZXkgPSBlbGVtZW50LnJldHVybkpvdXJuZXlGYXJlc1trZXldXG4gICAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhICE9IG51bGwpXG4gICAgICAgICAgICAgIC5zb3J0KGEgPT4gYS5wcmljZSlbMF07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNoZWFwZXN0T25Kb3VybmV5ICYmXG4gICAgICAgICAgICAgICghY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0IHx8XG4gICAgICAgICAgICAgICAgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0LnByaWNlID4gY2hlYXBlc3RPbkpvdXJuZXkucHJpY2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNoZWFwZXN0T3BlblJldHVyblRpY2tldCA9IGNoZWFwZXN0T25Kb3VybmV5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQ/LnByaWNlKSB7XG4gICAgICAgIGlmIChjaGVhcGVzdFJldHVyblRpY2tldD8ucHJpY2UpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjaGVhcGVzdE91dGJvdW5kVGlja2V0LnByaWNlICsgY2hlYXBlc3RSZXR1cm5UaWNrZXQucHJpY2UgPFxuICAgICAgICAgICAgICBjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQucHJpY2UgJiZcbiAgICAgICAgICAgIGNoZWFwZXN0T3BlblJldHVyblRpY2tldC5wcmljZSAmJlxuICAgICAgICAgICAgY2hlYXBlc3RPdXRib3VuZFRpY2tldC5jdXJyZW5jeSA9PSBjaGVhcGVzdFJldHVyblRpY2tldC5jdXJyZW5jeVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYW1vdW50OiBjaGVhcGVzdE91dGJvdW5kVGlja2V0LnByaWNlICsgY2hlYXBlc3RSZXR1cm5UaWNrZXQucHJpY2UsXG4gICAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogY2hlYXBlc3RPdXRib3VuZFRpY2tldC5jdXJyZW5jeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2hlYXBlc3RPdXRib3VuZFRpY2tldD8ucHJpY2UgPCBjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQucHJpY2UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYW1vdW50OiBjaGVhcGVzdE91dGJvdW5kVGlja2V0LnByaWNlLFxuICAgICAgICAgICAgY3VycmVuY3lDb2RlOiBjaGVhcGVzdE91dGJvdW5kVGlja2V0LmN1cnJlbmN5XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFtb3VudDogY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0LnByaWNlLFxuICAgICAgICAgIGN1cnJlbmN5Q29kZTogY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0LmN1cnJlbmN5XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNoZWFwZXN0UmV0dXJuVGlja2V0Py5wcmljZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFtb3VudDogY2hlYXBlc3RPdXRib3VuZFRpY2tldC5wcmljZSArIGNoZWFwZXN0UmV0dXJuVGlja2V0LnByaWNlLFxuICAgICAgICAgIGN1cnJlbmN5Q29kZTogY2hlYXBlc3RPdXRib3VuZFRpY2tldC5jdXJyZW5jeVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50OiBjaGVhcGVzdE91dGJvdW5kVGlja2V0Py5wcmljZSB8fCAwLFxuICAgICAgICBjdXJyZW5jeUNvZGU6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQ/LmN1cnJlbmN5IHx8ICdHQlAnXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7IGFtb3VudDogMCwgY3VycmVuY3lDb2RlOiAnR0JQJyB9O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeSgpKTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25zKCkge1xuICAgIGNvbnN0IHBhcnNlZFN0YXRpb24gPSB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbnNDb2Rlc1t0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbl07XG4gICAgY29uc29sZS5sb2coJy0tLSBQYXJzZWQgU3RhdGlvbiBpcyA6JywgcGFyc2VkU3RhdGlvbik7XG4gICAgaWYgKHBhcnNlZFN0YXRpb24pIHtcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gcGFyc2VkU3RhdGlvbi5kZXA7XG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSBwYXJzZWRTdGF0aW9uLmFycjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcbiAgICB9KTtcblxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XG4gICAgdGhpcy52YWxpZGF0aW9uRmF2b3VyaXRlTWVzc2FnZXMgPSBbXTtcbiAgICBjb25zdCBub3cgPSBtb21lbnQoKTtcblxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ0Zyb20pIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBFbnRlciBhIEZyb20gTG9jYXRpb24nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdUbykge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIEVudGVyIGEgVG8gTG9jYXRpb24nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdHJhdmVsbGluZ1RvID09PSB0aGlzLl90cmF2ZWxsaW5nRnJvbSkge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnT3JpZ2luIGFuZCBkZXN0aW5hdGlvbiBzdGF0aW9uIGNhbm5vdCBiZSB0aGUgc2FtZScsIHRydWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZVRpbWU/LmlzQmVmb3JlKG5vdykpIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ0RlcGFydHVyZSBEYXRlL1RpbWUgY2Fubm90IGJlIGluIHRoZSBwYXN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciByZXR1cm4gc3BlY2lmaWMgdmFsaWRhdGlvbnMgaW4gaGVyZVxuXG4gICAgICBpZiAodGhpcy5pbkJvdW5kRGF0ZVRpbWU/LmlzU2FtZU9yQmVmb3JlKHRoaXMub3V0Qm91bmREYXRlVGltZSkpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIERlcGFydHVyZSBEYXRlL1RpbWUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWEpIHtcbiAgICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLnZpYUxvY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBlbnRlciBhIHZpYSBsb2NhdGlvbicsIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vICEgLSBUcmFpbmxpbmUgRVUgVmFsaWRhdGlvblxuICAgIGlmICghdGhpcy51a1JhaWwpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMuY29uY2F0KHRoaXMuY2hlY2tFdVRyYXZlbGxlcnMoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLmlzRmF2b3VyaXRlVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25GYXZvdXJpdGVNZXNzYWdlcy5sZW5ndGggPT09IDApO1xuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XG4gIH1cblxuICBjaGVja0V1VHJhdmVsbGVycygpOiBzdHJpbmdbXSB7XG4gICAgY29uc29sZS5sb2coJysrKyBDaGVja2luZyBFVSBUcmF2ZWxsZXJzICsrKycpO1xuICAgIGNvbnN0IG1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy50cmFpbmxpbmVUcmF2ZWxsZXJzLmZvckVhY2godHJhdmVsbGVyID0+IHtcbiAgICAgIGlmICghdHJhdmVsbGVyLm5hbWUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdNSVNTSU5HIFRSQVZFTExFUicpO1xuICAgICAgICBtZXNzYWdlcy5wdXNoKCdNaXNzaW5nIHRyYXZlbGxlciBuYW1lJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdHJhdmVsbGVyLmFnZVJhbmdlKSB7XG4gICAgICAgIG1lc3NhZ2VzLnB1c2goJ01pc3NpbmcgdHJhdmVsbGVyIGFnZSByYW5nZS4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYXZlbGxlci5hZ2VSYW5nZSA9PT0gJ3lvdXRoJyAmJiB0cmF2ZWxsZXIuYWdlICE9PSAwICYmICF0cmF2ZWxsZXIuYWdlKSB7XG4gICAgICAgIG1lc3NhZ2VzLnB1c2goJ1lvdXRoIHRyYXZlbGxlcnMgbXVzdCBoYXZlIGFuIGV4YWN0IGFnZSBwcm92aWRlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHJhdmVsbGVyLmFnZVJhbmdlID09PSAneW91dGgnICYmIHRyYXZlbGxlci5hZ2UgPiAyNSkge1xuICAgICAgICBtZXNzYWdlcy5wdXNoKCdZb3V0aCB0cmF2ZWxsZXJzIG11c3QgYmUgMjUgb3IgeW91bmdlci4nKTtcbiAgICAgIH1cblxuICAgICAgdHJhdmVsbGVyLmxveWFsdGllcy5mb3JFYWNoKGxveWFsID0+IHtcbiAgICAgICAgaWYgKGxveWFsLmxveWFsdHlOdW1iZXJSZXF1aXJlZCAmJiAhbG95YWwubG95YWx0eU51bWJlcikge1xuICAgICAgICAgIG1lc3NhZ2VzLnB1c2goJ0xveWFsdHkgbnVtYmVyIGlzIHJlcXVpcmVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29uc29sZS5sb2coYCsrKyBMb3lhbHR5IHBhdHRlcm4gdG8gbWF0Y2g6ICR7bG95YWwubG95YWx0eVBhdHRlcm59LCB8IGAsIGxveWFsICxgICsrK2ApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbG95YWwubG95YWx0eVBhdHRlcm4gJiZcbiAgICAgICAgICAhbG95YWwubG95YWx0eU51bWJlci5tYXRjaChsb3lhbC5sb3lhbHR5UGF0dGVybikgJiZcbiAgICAgICAgICBsb3lhbC5sb3lhbHR5TnVtYmVyXG4gICAgICAgICkge1xuICAgICAgICAgIG1lc3NhZ2VzLnB1c2goJ0xveWFsdHkgTnVtYmVyIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIHBhdHRlcm46ICcsIGxveWFsLmxveWFsdHlQYXR0ZXJuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWVzc2FnZXM7XG4gIH1cblxuICB0cmF2ZWxsZXJzVXBkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcblxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcbiAgICAgIC8vQ2xlYXIgdGhpcyBmb3IgcmVndWxhciBzZWFyY2hlc1xuICAgICAgdGhpcy50ZW1wUGFyYW1zLmV4Y2hhbmdlRGlyZWN0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5leGNoYW5nZUZyb21PcmRlcklEID0gbnVsbDtcblxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRoaXMudGVtcFBhcmFtcyk7XG4gICAgICB0aGlzLnRlbXBQYXJhbXMudHJhbnNhY3Rpb25JZGVudGlmaWVyID0gbnVsbDtcblxuICAgICAgLy8gV2UgZG8gbm90IG5lZWQgRnJvbS9UbyBmb3IgQWlycG9ydCBFeHByZXNzIHNlYXJjaFxuICAgICAgaWYgKHRoaXMuaXNBaXJwb3J0RXhwcmVzcykge1xuICAgICAgICB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20gPSBudWxsO1xuICAgICAgICB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ1RvID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gT2JqZWN0LmZyZWV6ZSh0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy50ZW1wUGFyYW1zKSk7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxuICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2godGhpcy5SYWlsZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZXZvbHZpRXhjaGFuZ2VTZWFyY2gob3V0Ym91bmRJZDogc3RyaW5nLCBpbmJvdW5kSWQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJhaWxRdW90ZVJlc3VsdEFycmF5PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRoaXMudGVtcFBhcmFtcyk7XG4gICAgcXVlcnkuZGVwYXJ0dXJlTG9jYXRpb25JZCA9IG91dGJvdW5kSWQ7XG4gICAgcXVlcnkuYXJyaXZhbExvY2F0aW9uSWQgPSBpbmJvdW5kSWQgPyBpbmJvdW5kSWQgOiBudWxsO1xuICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXIgPSBudWxsO1xuICAgIHJldHVybiB0aGlzLlJhaWxmZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XG4gIH1cblxuICBwcm9jZXNzRXhjaGFuZ2VTZWFyY2gocmVzdWx0OiBSYWlsUXVvdGVSZXN1bHRBcnJheSk6IE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVzdWx0cyhyZXN1bHQpO1xuICB9XG5cbiAgZ210U2VhcmNoKHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMpOiBPYnNlcnZhYmxlPFJhaWxRdW90ZVJlc3VsdEFycmF5PiB7XG4gICAgaWYgKHRoaXMuc2VhcmNoU2VydmljZS5ndXRUcmF2ZWxsZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLm5leHQoW3RoaXMuc2VhcmNoU2VydmljZS5ndXRUcmF2ZWxsZXJzWzBdXSk7XG4gICAgICB0aGlzLnRyYWlubGluZVRyYXZlbGxlcnMgPSBbXTtcbiAgICAgIHRoaXMuc2V0dXBUcmFpbmxpbmVFVVRyYXZlbGxlcnMoKTtcbiAgICB9XG4gICAgY29uc3QgeyBhZHVsdHMsIGNoaWxkcmVuLCBuZXdUcmF2ZWxsZXJzIH0gPSB0aGlzLnByb2Nlc3NUcmFpbmxpbmVUcmF2ZWxsZXJzKCk7XG4gICAgcXVlcnkudHJhdmVsbGVycyA9IG5ld1RyYXZlbGxlcnM7XG4gICAgcXVlcnkuYWR1bHRzID0gYWR1bHRzO1xuICAgIHF1ZXJ5LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5ib2x0U2VhcmNoUXVlcnkucHVzaChxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMuUmFpbGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KTtcbiAgfVxuXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMpOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBSYWlsUmVjZW50U2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLlJhaWwsXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMub3V0Qm91bmREYXRlVGltZS5mb3JtYXQoKSxcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzLCB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkocXVlcnk6IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyk6IFJhaWxSZWNlbnRTZWFyY2hBcmdzIHtcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFJlY2VudFNlYXJjaEFyZ3MgPSBxdWVyeTtcblxuICAgIGlmICh0aGlzLmlzQWlycG9ydEV4cHJlc3MpIHtcbiAgICAgIHNlYXJjaFF1ZXJ5LmlzQWlycG9ydEV4cHJlc3MgPSB0aGlzLmlzQWlycG9ydEV4cHJlc3M7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uKSB7XG4gICAgICBzZWFyY2hRdWVyeS5haXJwb3J0RXhwcmVzc1N0YXRpb24gPSB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmF2ZWxsaW5nRnJvbSAmJiAhdGhpcy5pc0FpcnBvcnRFeHByZXNzKSB7XG4gICAgICBzZWFyY2hRdWVyeS50cmF2ZWxsaW5nRnJvbSA9IHRoaXMudHJhdmVsbGluZ0Zyb207XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhdmVsbGluZ1RvICYmICF0aGlzLmlzQWlycG9ydEV4cHJlc3MpIHtcbiAgICAgIHNlYXJjaFF1ZXJ5LnRyYXZlbGxpbmdUbyA9IHRoaXMudHJhdmVsbGluZ1RvO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpYUxvY2F0aW9uKSB7XG4gICAgICBzZWFyY2hRdWVyeS52aWFMb2NhdGlvbiA9IHRoaXMudmlhTG9jYXRpb247XG4gICAgfVxuICAgIHNlYXJjaFF1ZXJ5Lm91dGJvdW5kU3RhdGlvbkNvZGUgPSB0aGlzLnRyYXZlbGxpbmdGcm9tPy5yYWlsc3RhdGlvbj8uc3RhdGlvbkNvZGU7XG5cbiAgICBzZWFyY2hRdWVyeS5pbmJvdW5kU3RhdGlvbkNvZGUgPSB0aGlzLnRyYXZlbGxpbmdUbz8ucmFpbHN0YXRpb24/LnN0YXRpb25Db2RlO1xuXG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xuICB9XG5cbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJysrKyBTdGFydGluZyBzZWFyY2ggZnJvbSByZWNlbnQgc2VhcmNoOiAnLCByZWNlbnRTZWFyY2gsICcgKysrJyk7XG4gICAgLy8gZ2V0IG91dEJvdW5kRGF0ZVRpbWUsIGluQm91bmREYXRlVGltZSBhbmQgb3V0Ym91bmRDcml0ZXJpYSAscmV0dXJuQ3JpdGVyaWFcbiAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lXG4gICAgICA/IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lKVxuICAgICAgOiBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWUpO1xuICAgIHRoaXMub3V0Ym91bmRDcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXG4gICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lLFxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWVcbiAgICApO1xuXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmpvdXJuZXlUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSkge1xuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZVxuICAgICAgICA/IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSlcbiAgICAgICAgOiBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuQXJyaXZhbERhdGVUaW1lKTtcblxuICAgICAgdGhpcy5yZXR1cm5Dcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lLFxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsRGF0ZVRpbWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseVNlYXJjaFF1ZXJ5KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX291dGJvdW5kX2RhdGUgJiYgdGhpcy5fb3V0Ym91bmRfdGltZSkge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9vdXRib3VuZF9kYXRlLCB0aGlzLl9vdXRib3VuZF90aW1lKTtcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JldHVybl9kYXRlICYmIHRoaXMuX3JldHVybl90aW1lKSB7XG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX3JldHVybl9kYXRlLCB0aGlzLl9yZXR1cm5fdGltZSk7XG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VhcmNoUXVlcnkodGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXMgPSB0aGlzLnRlbXBQYXJhbXMpOiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMge1xuICAgIGlmICh0aGlzLmlzQWlycG9ydEV4cHJlc3MgJiYgdGhpcy5vcGVuUmV0dXJuKSB7XG4gICAgICB0aGlzLm9wZW5SZXR1cm4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgY291bnRyeUNvZGU6ICdHQicsXG4gICAgICBqb3VybmV5VHlwZTogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlLFxuICAgICAgYWR1bHRzOiB0ZW1wUGFyYW1zLm5vT2ZBZHVsdHMsXG4gICAgICBhcnJpdmFsTG9jYXRpb25JZDogdGVtcFBhcmFtcy50cmF2ZWxsaW5nVG8/LnJhaWxzdGF0aW9uPy5pZCxcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20/LnJhaWxzdGF0aW9uPy5pZCxcbiAgICAgIGNoaWxkcmVuOiB0ZW1wUGFyYW1zLm5vT2ZDaGlsZHJlbixcbiAgICAgIGNsYXNzOiB0ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzLFxuICAgICAgZXh0cmFUaW1lVG9DaGFuZ2U6IHRlbXBQYXJhbXMuZXh0cmFUaW1lLFxuICAgICAgY2FybmV0VGlja2V0OiB0ZW1wUGFyYW1zLmNhcm5ldFRpY2tldCxcbiAgICAgIG91dGJvdW5kQXJyaXZhbERhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKHRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZSksXG4gICAgICBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKHRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZSksXG4gICAgICByZXR1cm5BcnJpdmFsRGF0ZVRpbWU6IHRoaXMuaGVscGVycy5mb3JtYXRHcmFwaFFMRGF0ZVRpbWUodGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWUpLFxuICAgICAgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU6IHRoaXMuaGVscGVycy5mb3JtYXRHcmFwaFFMRGF0ZVRpbWUodGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWUpLFxuICAgICAgdmlhTG9jYXRpb25JZDogdGVtcFBhcmFtcy52aWFMb2NhdGlvbj8ucmFpbHN0YXRpb24/LmlkLFxuICAgICAgcmFpbENhcmRRdWFsaWZpZXJzOiB0ZW1wUGFyYW1zLnJhaWxDYXJkc1xuICAgICAgICA/LmZpbHRlcih4ID0+IHgpXG4gICAgICAgID8ubWFwKChyYWlsQ2FyZDogUmFpbENhcmRRdWFsaWZpZXJzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgY29kZTogcmFpbENhcmQuY29kZSwgbnVtYmVyOiByYWlsQ2FyZC5jb2RlLCB1c2VySWQ6IHJhaWxDYXJkLnVzZXJJZCB9O1xuICAgICAgICB9KSxcbiAgICAgIGV4Y2hhbmdlRGlyZWN0aW9uOiB0ZW1wUGFyYW1zLmV4Y2hhbmdlRGlyZWN0aW9uLFxuICAgICAgZXhjaGFuZ2VGcm9tT3JkZXJJRDogdGVtcFBhcmFtcy5leGNoYW5nZUZyb21PcmRlcklELFxuICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiB0ZW1wUGFyYW1zLnRyYW5zYWN0aW9uSWRlbnRpZmllclxuICAgIH07XG5cbiAgICBxdWVyeS5jb3VudHJ5Q29kZSA9IHRoaXMudWtSYWlsXG4gICAgICA/ICdHQidcbiAgICAgIDogdGVtcFBhcmFtcy50cmF2ZWxsaW5nVG8/LnJhaWxzdGF0aW9uPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlIHx8ICdHQic7XG5cbiAgICBpZiAodGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPT09IDApIHtcbiAgICAgIHF1ZXJ5LmNoaWxkcmVuID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdmlhTG9jYXRpb24gPT09ICcnKSB7XG4gICAgICBxdWVyeS52aWFMb2NhdGlvbklkID0gbnVsbDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRlbXBQYXJhbXMub3V0Ym91bmRDcml0ZXJpYSkge1xuICAgICAgY2FzZSBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0OlxuICAgICAgICBxdWVyeS5vdXRib3VuZEFycml2YWxEYXRlVGltZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlOlxuICAgICAgICBxdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLndhcm4oYCsrKyBVbmtub3duIENyaXRlcmlhOiAke3RoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhfSArKytgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWEpIHtcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydDpcbiAgICAgICAgcXVlcnkucmV0dXJuQXJyaXZhbERhdGVUaW1lID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJhaWxTZWFyY2hDcml0ZXJpYS5BcnJpdmU6XG4gICAgICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLndhcm4oYCsrKyBVbmtub3duIENyaXRlcmlhOiAke3RoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYX0gKysrYCk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUpIHtcbiAgICAgIGNhc2UgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk6XG4gICAgICBjYXNlIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leTpcbiAgICAgICAgcXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBudWxsO1xuICAgICAgICBxdWVyeS5yZXR1cm5BcnJpdmFsRGF0ZVRpbWUgPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGVtcFBhcmFtcy5pc0FpcnBvcnRFeHByZXNzKSB7XG4gICAgICBxdWVyeS5hcnJpdmFsTG9jYXRpb25JZCA9IHRoaXMuX3RyYXZlbGxpbmdUbztcbiAgICAgIHF1ZXJ5LmRlcGFydHVyZUxvY2F0aW9uSWQgPSB0aGlzLl90cmF2ZWxsaW5nRnJvbTtcbiAgICB9XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0cmF2ZWxsZXJzIGFuZCBjb252ZXJ0IHRoZW0gaW50byB0aGUgcmVxdWlyZWQgZm9ybWF0XG4gICAgaWYgKCF0aGlzLnVrUmFpbCkge1xuICAgICAgY29uc3QgbmV3Q2FyZHM6IGFueVtdID0gW107XG5cbiAgICAgIHRoaXMudHJhaW5saW5lVHJhdmVsbGVycy5mb3JFYWNoKHRyYXYgPT4ge1xuICAgICAgICB0cmF2LmxveWFsdGllcy5mb3JFYWNoKGxveWFsID0+IHtcbiAgICAgICAgICBpZiAobG95YWwubG95YWx0eUNvZGUpIHtcbiAgICAgICAgICAgIG5ld0NhcmRzLnB1c2goe1xuICAgICAgICAgICAgICBjb2RlOiBsb3lhbC5sb3lhbHR5Q29kZSxcbiAgICAgICAgICAgICAgbnVtYmVyOiBsb3lhbC5sb3lhbHR5UHJlZml4ICsgbG95YWwubG95YWx0eU51bWJlcixcbiAgICAgICAgICAgICAgdXNlcklkOiB0cmF2Lm9yaWdpbmFsVXNlckd1ZXN0SWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHF1ZXJ5LnJhaWxDYXJkUXVhbGlmaWVycyA9IG5ld0NhcmRzO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYWR1bHRzLCBjaGlsZHJlbiwgbmV3VHJhdmVsbGVycyB9ID0gdGhpcy5wcm9jZXNzVHJhaW5saW5lVHJhdmVsbGVycygpO1xuICAgIHF1ZXJ5LnRyYXZlbGxlcnMgPSBuZXdUcmF2ZWxsZXJzO1xuICAgIHF1ZXJ5LmFkdWx0cyA9IGFkdWx0cztcbiAgICBxdWVyeS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KTtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzVHJhaW5saW5lVHJhdmVsbGVycygpOiB7IGFkdWx0czogbnVtYmVyOyBjaGlsZHJlbjogbnVtYmVyOyBuZXdUcmF2ZWxsZXJzOiBhbnlbXSB9IHtcbiAgICBsZXQgYWR1bHRzID0gMDtcbiAgICBsZXQgY2hpbGRyZW4gPSAwO1xuICAgIGNvbnN0IG5ld1RyYXZlbGxlcnM6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJhaW5saW5lVHJhdmVsbGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdHJhdmVsbGVyID0gdGhpcy50cmFpbmxpbmVUcmF2ZWxsZXJzW2ldO1xuICAgICAgY29uc3Qgb3JpZ2luYWxQYXNzZW5nZXJUeXBlID0gdGhpcy50cmF2ZWxsZXJzLmZpbmQoXG4gICAgICAgIHggPT4geC5pZCA9PT0gdHJhdmVsbGVyLm9yaWdpbmFsVXNlckd1ZXN0SWRcbiAgICAgICk/LmlzQ2hpbGRcbiAgICAgICAgPyBQYXNzZW5nZXJJbnB1dFR5cGUuWW91dGhcbiAgICAgICAgOiBQYXNzZW5nZXJJbnB1dFR5cGUuQWR1bHQ7XG5cbiAgICAgIGNvbnN0IG5ld1RyYXZlbGxlciA9IHtcbiAgICAgICAgcGFzc2VuZ2VyVHlwZTogdGhpcy51a1JhaWxcbiAgICAgICAgICA/IG9yaWdpbmFsUGFzc2VuZ2VyVHlwZVxuICAgICAgICAgIDogdGhpcy5fYWdlUmFuZ2VUb1Bhc3NlbmdlclR5cGUodHJhdmVsbGVyLmFnZVJhbmdlKSxcbiAgICAgICAgYWdlOiBOdW1iZXIodHJhdmVsbGVyLmFnZSkgfHwgMCxcbiAgICAgICAgZG9iOiAnJyxcbiAgICAgICAgaWQ6IHRyYXZlbGxlci5vcmlnaW5hbFVzZXJHdWVzdElkXG4gICAgICB9O1xuXG4gICAgICBpZiAobmV3VHJhdmVsbGVyLnBhc3NlbmdlclR5cGUgPT09IFBhc3NlbmdlcklucHV0VHlwZS5Zb3V0aCkge1xuICAgICAgICBjaGlsZHJlbisrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWR1bHRzKys7XG4gICAgICB9XG5cbiAgICAgIG5ld1RyYXZlbGxlcnMucHVzaChuZXdUcmF2ZWxsZXIpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGFkdWx0cywgY2hpbGRyZW4sIG5ld1RyYXZlbGxlcnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2FnZVJhbmdlVG9QYXNzZW5nZXJUeXBlKGFnZVJhbmdlOiBzdHJpbmcpOiBQYXNzZW5nZXJJbnB1dFR5cGUge1xuICAgIGlmIChhZ2VSYW5nZS50b0xvd2VyQ2FzZSgpID09PSAneW91dGgnKSB7XG4gICAgICByZXR1cm4gUGFzc2VuZ2VySW5wdXRUeXBlLllvdXRoO1xuICAgIH1cblxuICAgIGlmIChhZ2VSYW5nZS50b0xvd2VyQ2FzZSgpID09PSAnYWR1bHQnKSB7XG4gICAgICByZXR1cm4gUGFzc2VuZ2VySW5wdXRUeXBlLkFkdWx0O1xuICAgIH1cblxuICAgIGlmIChhZ2VSYW5nZS50b0xvd2VyQ2FzZSgpID09PSAnc2VuaW9yJykge1xuICAgICAgcmV0dXJuIFBhc3NlbmdlcklucHV0VHlwZS5TZW5pb3I7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3JpdGVyaWEoZGVwYXJ0dXJlRGF0ZVRpbWU6IHN0cmluZywgYXJyaXZhbERhdGVUaW1lOiBzdHJpbmcpOiBSYWlsU2VhcmNoQ3JpdGVyaWEge1xuICAgIGlmIChkZXBhcnR1cmVEYXRlVGltZSkge1xuICAgICAgcmV0dXJuIFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ7XG4gICAgfSBlbHNlIGlmIChhcnJpdmFsRGF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlO1xuICAgIH1cbiAgICB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+KTogdm9pZCB7XG4gICAgLy8gbm90IG5lZWRlZCByaWdodCBub3csIG1pZ2h0IG5lZWQgdW5jb21tZW50aW5nIGFuZCB0aW1lIHN0dWZmIGZpaW5nXG4gICAgLy8gY29uc29sZS5sb2cocHJldmlvdXNJdGVtcyk7XG4gICAgLy8gaWYgKHByZXZpb3VzSXRlbXMuRkxJR0hUKSB7XG4gICAgLy8gICB0cnkge1xuICAgIC8vICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSBtb21lbnQoXG4gICAgLy8gICAgICAgKHByZXZpb3VzSXRlbXMuRkxJR0hULm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpXG4gICAgLy8gICAgICAgICAucmVwbGFjZSgnVCcsICcnKVxuICAgIC8vICAgICAgICAgLnNwbGl0KCcuJylbMF0sXG4gICAgLy8gICAgICAgJ1lZWVktTU0tRERoaDptbTpzcydcbiAgICAvLyAgICAgKTtcbiAgICAvLyAgICAgaWYgKHRoaXMub3V0Qm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMClcbiAgICAvLyAgICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuc3VidHJhY3QoXG4gICAgLy8gICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUubWludXRlcygpICUgMzAsXG4gICAgLy8gICAgICAgICAnbWludXRlcydcbiAgICAvLyAgICAgICApO1xuICAgIC8vICAgICBpZiAocHJldmlvdXNJdGVtcy5GTElHSFQuaW5ib3VuZERhdGUpIHtcbiAgICAvLyAgICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IG1vbWVudChcbiAgICAvLyAgICAgICAgIChwcmV2aW91c0l0ZW1zLkZMSUdIVC5pbmJvdW5kRGF0ZSBhcyBzdHJpbmcpXG4gICAgLy8gICAgICAgICAgIC5yZXBsYWNlKCdUJywgJycpXG4gICAgLy8gICAgICAgICAgIC5zcGxpdCgnLicpWzBdLFxuICAgIC8vICAgICAgICAgJ1lZWVktTU0tRERoaDptbTpzcydcbiAgICAvLyAgICAgICApO1xuICAgIC8vICAgICAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMClcbiAgICAvLyAgICAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5pbkJvdW5kRGF0ZVRpbWUuc3VidHJhY3QoXG4gICAgLy8gICAgICAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lLm1pbnV0ZXMoKSAlIDMwLFxuICAgIC8vICAgICAgICAgICAnbWludXRlcydcbiAgICAvLyAgICAgICAgICk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0gY2F0Y2gge1xuICAgIC8vICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgUmFpbCBmcm9tIGZsaWdodCBpdGVtJyk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICB9XG5cbiAgdXBkYXRlU2VhcmNoRnJvbUV4cGlyZWRCYXNrZXRJdGVtKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sIHNldERhdGVUaW1lOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IHNlYXJjaFJhaWxRdWVyeTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzID0gYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcblxuICAgIGlmIChzZWFyY2hSYWlsUXVlcnkpIHtcbiAgICAgIGlmIChzZXREYXRlVGltZSkge1xuICAgICAgICAvLyBnZXQgb3V0Qm91bmREYXRlVGltZSwgaW5Cb3VuZERhdGVUaW1lIGFuZCBvdXRib3VuZENyaXRlcmlhICxyZXR1cm5Dcml0ZXJpYVxuICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSBzZWFyY2hSYWlsUXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZVxuICAgICAgICAgID8gbW9tZW50KHNlYXJjaFJhaWxRdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lKVxuICAgICAgICAgIDogbW9tZW50KHNlYXJjaFJhaWxRdWVyeS5vdXRib3VuZEFycml2YWxEYXRlVGltZSk7XG4gICAgICAgIHRoaXMub3V0Ym91bmRDcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXG4gICAgICAgICAgc2VhcmNoUmFpbFF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXG4gICAgICAgICAgc2VhcmNoUmFpbFF1ZXJ5Lm91dGJvdW5kQXJyaXZhbERhdGVUaW1lXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHNlYXJjaFJhaWxRdWVyeS5qb3VybmV5VHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkpIHtcbiAgICAgICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHNlYXJjaFJhaWxRdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZVxuICAgICAgICAgICAgPyBtb21lbnQoc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lKVxuICAgICAgICAgICAgOiBtb21lbnQoc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZSk7XG5cbiAgICAgICAgICB0aGlzLnJldHVybkNyaXRlcmlhID0gdGhpcy5nZXRDcml0ZXJpYShcbiAgICAgICAgICAgIHNlYXJjaFJhaWxRdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSxcbiAgICAgICAgICAgIHNlYXJjaFJhaWxRdWVyeS5yZXR1cm5BcnJpdmFsRGF0ZVRpbWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm5vT2ZBZHVsdHMgPSBzZWFyY2hSYWlsUXVlcnkuYWR1bHRzO1xuICAgICAgdGhpcy5ub09mQ2hpbGRyZW4gPSBzZWFyY2hSYWlsUXVlcnkuY2hpbGRyZW47XG4gICAgICB0aGlzLnNldFF1ZXJ5RnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbSk7XG4gICAgfVxuICAgIHRoaXMuYWRkVHJhdmVsbGVyc0Zyb21CYXNrZXRJdGVtKGJhc2tldEl0ZW0pO1xuICB9XG5cbiAgZ2V0UmFpbFN0YXRpb24oY29kZTogc3RyaW5nLCBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4pOiBPYnNlcnZhYmxlPFJhaWxTdGF0aW9uPiB7XG4gICAgaWYgKGNvZGUubGVuZ3RoID09PSAzKSB7XG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSYWlsU3RhdGlvbkZldGNoZXIuZmV0Y2hMaXN0KHsgY29kZSB9KS5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gaXNMb2FkaW5nPy5uZXh0KGZhbHNlKSksXG4gICAgICAgIHRha2UoMSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlbGVjdGVkUmFpbEpvdXJuZXlGYXJlKCk6IFJhaWxKb3VybmV5RmFyZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKFxuICAgIHJhaWxKb3VybmV5T3B0aW9uOiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICBpc0VVOiBib29sZWFuID0gZmFsc2VcbiAgKTogYW55W10ge1xuICAgIGxldCBsZWdzOiBhbnlbXSA9IFtdO1xuICAgIGlmIChyYWlsSm91cm5leU9wdGlvbj8uam91cm5leUxlZ3MubGVuZ3RoKSB7XG4gICAgICBsZWdzID0gcmFpbEpvdXJuZXlPcHRpb24uam91cm5leUxlZ3MubWFwKHNlZ21lbnQgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9wZXJhdG9yOiBpc0VVXG4gICAgICAgICAgICA/IGAke3NlZ21lbnQudHJhbnNwb3J0RGVzaWduYXRpb259IOKAoiAke3NlZ21lbnQudGltZXRhYmxlSWR9IOKAoiAke3NlZ21lbnQub3BlcmF0b3J9YFxuICAgICAgICAgICAgOiBzZWdtZW50Lm9wZXJhdG9yLFxuICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBzZWdtZW50LmRlcGFydERhdGVUaW1lLFxuICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBzZWdtZW50LmRlcGFydCxcbiAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHNlZ21lbnQuYXJyaXZlRGF0ZVRpbWUsXG4gICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBzZWdtZW50LmFycml2ZVxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGxlZ3MuZm9yRWFjaChsZWcgPT4ge1xuICAgICAgLy8gICBkZWxldGUgbGVnLnRyYW5zcG9ydERlc2lnbmF0aW9uO1xuICAgICAgLy8gICBkZWxldGUgbGVnLnRpbWV0YWJsZUlkO1xuICAgICAgLy8gfSk7XG4gICAgfVxuICAgIHJldHVybiBsZWdzO1xuICB9XG5cbiAgZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvblNwbGl0KFxuICAgIHJhaWxKb3VybmV5T3B0aW9uOiBPQlRSYWlsSm91cm5leU9wdGlvbixcbiAgICBzcGxpdDogc3RyaW5nLFxuICAgIG91dGJvdW5kOiBib29sZWFuLFxuICAgIGluZGV4OiBudW1iZXJcbiAgKTogYW55W10ge1xuICAgIC8vIHNvIHRoZSBmaXJzdCBpbmRleCB3aWxsIGJlIGEgcmV0dXJuIGZyb20gbGVlZHMgdG8gZG9uY2FzdGVyXG4gICAgLy8gYWx0aG91Z2ggdGhpcyBmdWNudGluIHdvdWxkIGdyYWIgdGhlIGZ1bGwgbGVlZHMgdG8ga2luZ3NYXG4gICAgbGV0IGxlZ3M6IGFueVtdID0gW107XG4gICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uPy5qb3VybmV5TGVncy5sZW5ndGgpIHtcbiAgICAgIGxlZ3MgPSByYWlsSm91cm5leU9wdGlvbi5qb3VybmV5TGVncy5tYXAoc2VnbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHJldHVybk9iamVjdCA9IHtcbiAgICAgICAgICBvcGVyYXRvcjogc2VnbWVudC5vcGVyYXRvcixcbiAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogc2VnbWVudC5kZXBhcnREYXRlVGltZSxcbiAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogc2VnbWVudC5kZXBhcnQsXG4gICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBzZWdtZW50LmFycml2ZURhdGVUaW1lLFxuICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogc2VnbWVudC5hcnJpdmVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3BsaXRTdGF0aW9uID0gc2VnbWVudC5jYWxsaW5nUG9pbnRzLmZpbmQoXG4gICAgICAgICAgKGNwOiBSYWlsQ2FsbGluZ1BvaW50KSA9PiBjcC5zdGF0aW9uQ29kZSA9PT0gc3BsaXRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNwbGl0U3RhdGlvbikge1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKG91dGJvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5hcnJpdmFsRGF0ZVRpbWUgPSBzcGxpdFN0YXRpb24uYXJyaXZhbERhdGVUaW1lO1xuICAgICAgICAgICAgICByZXR1cm5PYmplY3QuYXJyaXZhbFN0YXRpb25OYW1lID0gc3BsaXRTdGF0aW9uLnN0YXRpb25OYW1lO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmRlcGFydHVyZURhdGVUaW1lID0gc3BsaXRTdGF0aW9uLmRlcGFydHVyZURhdGVUaW1lO1xuICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZGVwYXJ0dXJlU3RhdGlvbk5hbWUgPSBzcGxpdFN0YXRpb24uc3RhdGlvbk5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChvdXRib3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZGVwYXJ0dXJlRGF0ZVRpbWUgPSBzcGxpdFN0YXRpb24uZGVwYXJ0dXJlRGF0ZVRpbWU7XG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5kZXBhcnR1cmVTdGF0aW9uTmFtZSA9IHNwbGl0U3RhdGlvbi5zdGF0aW9uTmFtZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5hcnJpdmFsRGF0ZVRpbWUgPSBzcGxpdFN0YXRpb24uYXJyaXZhbERhdGVUaW1lO1xuICAgICAgICAgICAgICByZXR1cm5PYmplY3QuYXJyaXZhbFN0YXRpb25OYW1lID0gc3BsaXRTdGF0aW9uLnN0YXRpb25OYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID1cbiAgICAgICAgICAgIHNlZ21lbnQuY2FsbGluZ1BvaW50c1tzZWdtZW50LmNhbGxpbmdQb2ludHMubGVuZ3RoIC0gMV0uYXJyaXZhbERhdGVUaW1lO1xuICAgICAgICAgIHJldHVybk9iamVjdC5hcnJpdmFsU3RhdGlvbk5hbWUgPVxuICAgICAgICAgICAgc2VnbWVudC5jYWxsaW5nUG9pbnRzW3NlZ21lbnQuY2FsbGluZ1BvaW50cy5sZW5ndGggLSAxXS5zdGF0aW9uTmFtZTtcbiAgICAgICAgICByZXR1cm5PYmplY3QuZGVwYXJ0dXJlRGF0ZVRpbWUgPSBzZWdtZW50LmNhbGxpbmdQb2ludHNbMF0uZGVwYXJ0dXJlRGF0ZVRpbWU7XG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmRlcGFydHVyZVN0YXRpb25OYW1lID0gc2VnbWVudC5jYWxsaW5nUG9pbnRzWzBdLnN0YXRpb25OYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGVncztcbiAgfVxuXG4gIGFzeW5jIGFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcbiAgICB0ZW1wUGFyYW1zOiBSYWlsVGVtcFBhcmFtcyxcbiAgICByYWlsSm91cm5leU9wdGlvbjogT0JUUmFpbEpvdXJuZXlPcHRpb24sXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgICBpbmdvcmVJbnZva2VkOiBib29sZWFuID0gZmFsc2UsXG4gICAgaXNFdTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGdtdDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGNvbnNvbGUubG9nKCdhZGRpbmc6ICcsIHJhaWxGYXJlKTtcbiAgICBjb25zdCByYWlsUXVlcnkgPSAhZ210XG4gICAgICA/IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGVtcFBhcmFtcyBhcyBSYWlsVGVtcFBhcmFtcylcbiAgICAgIDogdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcz4odGVtcFBhcmFtcyBhcyBhbnkpO1xuXG4gICAgaWYgKGdtdCkge1xuICAgICAgY29uc3QgeyBhZHVsdHMsIGNoaWxkcmVuLCBuZXdUcmF2ZWxsZXJzIH0gPSB0aGlzLnByb2Nlc3NUcmFpbmxpbmVUcmF2ZWxsZXJzKCk7XG4gICAgICByYWlsUXVlcnkudHJhdmVsbGVycyA9IG5ld1RyYXZlbGxlcnM7XG4gICAgICByYWlsUXVlcnkuYWR1bHRzID0gYWR1bHRzO1xuICAgICAgcmFpbFF1ZXJ5LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgaWYgKCFyYWlsUXVlcnkuY2hpbGRyZW4pIHtcbiAgICAgIHJhaWxRdWVyeS5jaGlsZHJlbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudHJhdmVsbGVycyk7XG5cbiAgICBpZiAoaXNFdSkge1xuICAgICAgLy8gY2hlY2sgdGhlIHRyYXZlbGxlcnMgYWdlIHR5cGUgaXMgY29ycmVjdFxuICAgICAgY29uc3QgZXVUcmF2ZWxsZXJzID0gPFRyYXZlbGxlcklucHV0W10+cmFpbFF1ZXJ5LnRyYXZlbGxlcnM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV1VHJhdmVsbGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBldVRyYXZlbGxlciA9IGV1VHJhdmVsbGVyc1tpXTtcbiAgICAgICAgaWYgKGV1VHJhdmVsbGVyLnBhc3NlbmdlclR5cGUgPT09IFBhc3NlbmdlcklucHV0VHlwZS5Zb3V0aCkge1xuICAgICAgICAgIC8vIGNoYW5nZSB0aGUgYXBwcm9wcmlhdGUgdHJhdmVsbGVyIHRvIGNoaWxkIC0gbGV0cyBzZWUgaWYgdGhpcyB3b3Jrc1xuICAgICAgICAgIHRyYXZlbGxlcnNbaV0uYWdlVHlwZSA9IGFnZXMuQ2hpbGQ7XG4gICAgICAgICAgdHJhdmVsbGVyc1tpXS5pc0NoaWxkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gY29uc29sZS5sb2coYCsrKyBFVSBUUkFWRUxMRVJTOiBgLHRyYXZlbGxlcnMsYCArKytgKTtcbiAgICB9XG5cbiAgICBsZXQgb3V0VGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcbiAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGNyZWF0ZSBUaWNrZXRFeHRyYXNPYmplY3QgYW5kIGFkZGVkIGl0IHRvIHRoZSBiYXNrZXRcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XG4gICAgICBvdXRUaWNrZXRFeHRyYXMgPSB0aGlzLmNyZWF0ZVRpY2tldEV4dHJhc09iamVjdChyYWlsSm91cm5leU9wdGlvbi50aWNrZXRFeHRyYXMpO1xuICAgIH1cblxuICAgIC8vIGlmIChyYWlsSm91cm5leU9wdGlvbi51bnNlbGxhYmxlKSB7XG4gICAgLy8gICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAvLyB9XG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuXG4gICAgY29uc3QgcmFpbEZhcmVMaXN0OiB7IGlkPzogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdID0gcmFpbEZhcmUuaWRlbnRpZmllcnM/LmZhcmVzPy5sZW5ndGhcbiAgICAgID8gcmFpbEZhcmUuaWRlbnRpZmllcnM/LmZhcmVzPy5tYXAoeCA9PiAoeyBpZDogeC5pZCwgbmFtZTogeC5uYW1lIH0pKVxuICAgICAgOiBbeyBuYW1lOiByYWlsRmFyZS50eXBlIH1dO1xuXG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSB0aGlzLnVzZXJTZXJ2aWNlLmZpbmRTZXJ2aWNlKHNlcnZpY2VJZCk/Lm5hbWU7XG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoXG4gICAgICByYWlsRmFyZSxcbiAgICAgIHJhaWxKb3VybmV5T3B0aW9uLFxuICAgICAgcmFpbEZhcmVMaXN0LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgc2VydmljZU5hbWVcbiAgICApO1xuICAgIGlmIChiYXNrZXQpIHtcbiAgICAgIGNvbnN0IGxlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ocmFpbEpvdXJuZXlPcHRpb24sIGlzRXUpO1xuXG4gICAgICBjb25zdCBsb3dlc3RUaWNrZXQgPSB0aGlzLmZpbmRDaGVhcGVzdFRpY2tldCgpO1xuICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCA9ICtsb3dlc3RUaWNrZXQuYW1vdW50LnRvRml4ZWQoMik7XG5cbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xuICAgICAgICByZXF1aXJlc092ZXJyaWRlUmVhc29uOiByYWlsRmFyZS51bmF2YWlsYWJsZSxcbiAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZC50b1N0cmluZygpLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBleHBpcmVzQXQ6IHJhaWxGYXJlLmlkZW50aWZpZXJzPy5leHBpcmVzQXQsXG4gICAgICAgICAgaXNFVTogaXNFdSA/IGlzRXUgOiBudWxsLCAvLyAhc2V0IHRvIG51bGwgYXMgRXZvbHZpIGRvc2VuJ3QgaGF2ZSB0aGlzIGluIHRoZSBzY2hlbWFcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChyYWlsRmFyZS50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcbiAgICAgICAgICAgIChpdGVtOiBSYWlsVGlja2V0UXVldWUpOiBUaWNrZXRRdWV1ZUxpc3QgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLFxuICAgICAgICAgIGFjY291bnRzTGlzdDogKHJhaWxKb3VybmV5T3B0aW9uLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxuICAgICAgICAgICAgKGl0ZW06IFJhaWxBY2NvdW50KTogQWNjb3VudHNMaXN0ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiByYWlsSm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24udG8sXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogcmFpbEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWUsXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24uZnJvbSxcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiByYWlsRmFyZS5wcm92aWRlck5hbWUsXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHJhaWxGYXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgcHJpY2U6IHJhaWxGYXJlLnByaWNlLFxuICAgICAgICAgICAgICAgIGxlZ3MsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkRGVzdGluYXRpb25zOiByYWlsRmFyZS5wZXJtaXR0ZWREZXN0aW5hdGlvbnMsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkT3JpZ2luczogcmFpbEZhcmUucGVybWl0dGVkT3JpZ2luc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IHJhaWxGYXJlLmlkZW50aWZpZXJzLnRyYW5zYWN0aW9uSWRlbnRpZmllcixcbiAgICAgICAgICBvdXRib3VuZDoge1xuICAgICAgICAgICAgZVRpY2tldDogISFyYWlsRmFyZS5lVGlja2V0QXZhaWxhYmxlLFxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiB0aGlzLnNlbGVjdGVkTXVsdGlGYXJlcz8ub3V0Ym91bmQ/Lmxlbmd0aFxuICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRNdWx0aUZhcmVzLm91dGJvdW5kXG4gICAgICAgICAgICAgIDogW3JhaWxGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcbiAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOiByYWlsRmFyZS5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcixcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxuICAgICAgICAgICAgICByYWlsSm91cm5leU9wdGlvbi5qb3VybmV5TGVnc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzU3BsaXQ6ICEhcmFpbEZhcmUuaWRlbnRpZmllcnM/LmlzU3BsaXQsXG4gICAgICAgICAgICBmYXJlczogcmFpbEZhcmU/LmlkZW50aWZpZXJzPy5mYXJlcyxcbiAgICAgICAgICAgIGNvbXBvc2l0aW9uOiByYWlsRmFyZS5pZGVudGlmaWVycz8uY29tcG9zaXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxuICAgICAgICAgIGRpc2NvdW50SW5mbzogcmFpbEZhcmUuZGlzY291bnRJbmZvLFxuICAgICAgICAgIGZ1bGxQcmljZTogcmFpbEZhcmUuZnVsbFByaWNlLFxuICAgICAgICAgIHNpbmdsZU9yUmV0dXJuOlxuICAgICAgICAgICAgdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXkgfHwgIWdtdFxuICAgICAgICAgICAgICA/IFRpY2tldFR5cGUuUmV0dXJuXG4gICAgICAgICAgICAgIDogVGlja2V0VHlwZS5TaW5nbGVcbiAgICAgICAgfSxcbiAgICAgICAgYWR1bHRzOiByYWlsUXVlcnkuYWR1bHRzLFxuICAgICAgICBjaGlsZHJlbjogcmFpbFF1ZXJ5LmNoaWxkcmVuID8gcmFpbFF1ZXJ5LmNoaWxkcmVuIDogdW5kZWZpbmVkLFxuICAgICAgICBwcmljZTogcmFpbEZhcmUucHJpY2UsXG4gICAgICAgIGN1cnJlbmN5OiByYWlsRmFyZS5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiByYWlsUXVlcnksXG4gICAgICAgIGNvMlBlckl0ZW06IHJhaWxKb3VybmV5T3B0aW9uLmNvMlBlckl0ZW0sXG4gICAgICAgIGNvMlBlclBhc3NlbmdlcjogcmFpbEpvdXJuZXlPcHRpb24uY28yUGVyUGFzc2VuZ2VyLFxuICAgICAgICBvdXRib3VuZERhdGU6IHJhaWxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxuICAgICAgICBsb3dlc3RQcmljZTpcbiAgICAgICAgICBsb3dlc3RUaWNrZXQuYW1vdW50IHx8IGxvd2VzdFRpY2tldC5jdXJyZW5jeUNvZGUgIT09IHJhaWxGYXJlLmN1cnJlbmN5XG4gICAgICAgICAgICA/IGxvd2VzdFRpY2tldC5hbW91bnRcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTpcbiAgICAgICAgICBsb3dlc3RUaWNrZXQuYW1vdW50IHx8IGxvd2VzdFRpY2tldC5jdXJyZW5jeUNvZGUgIT09IHJhaWxGYXJlLmN1cnJlbmN5XG4gICAgICAgICAgICA/IDxDdXJyZW5jeUNvZGU+bG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGU6IHJhaWxGYXJlLnVuYXZhaWxhYmxlLFxuICAgICAgICByZWFzb25LZXlzOiByYWlsRmFyZS5yZXF1aXJlc1JlYXNvbktleXNcbiAgICAgIH07XG5cbiAgICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgYWRkIHRoZSBvYmplY3QgdG8gYmFza2V0SXRlbVxuICAgICAgLy8gZG9udCBzaG93IHRpY2tldEV4dHJhcyBmb3IgRFRELiBXZSB3aWxsIGhhdmUgYSBuZXcgdGlja2V0IGZvciB0aWNrZXRFeHRyYXNcbiAgICAgIGlmIChvdXRUaWNrZXRFeHRyYXMgJiYgIXJhaWxGYXJlLnR5cGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndHJhdmVsY2FyZCcpICYmICFnbXQpIHtcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmQudGlja2V0RXh0cmFzID0gb3V0VGlja2V0RXh0cmFzO1xuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QgPSBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QuZmlsdGVyKFxuICAgICAgICAgIChpdGVtOiBUaWNrZXRRdWV1ZUxpc3QpID0+IGl0ZW0udHlwZSAhPT0gJ2VUaWNrZXQnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmFpbEZhcmUudGlja2V0T25EZXBhcnR1cmVBdmFpbGFibGUpIHtcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwudGlja2V0UXVldWVMaXN0ID0gYmFza2V0SXRlbS5kZXRhaWwudGlja2V0UXVldWVMaXN0LmZpbHRlcihcbiAgICAgICAgICAoaXRlbTogVGlja2V0UXVldWVMaXN0KSA9PiBpdGVtLnR5cGUgIT09ICdUaWNrZXRPbkRlcGFydHVyZSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLmNvdW50cnlDb2RlID0gPHN0cmluZz5iYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5LmNvdW50cnlDb2RlO1xuICAgICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxuICAgICAgICBiYXNrZXRJdGVtLFxuICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcbiAgICAgICAgdHJhdmVsbGVycyxcbiAgICAgICAgcmFpbEZhcmUucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgaW5nb3JlSW52b2tlZFxuICAgICAgKTtcbiAgICAgIGlmICghcmFpbEZhcmUucmVxdWlyZXNSZWFzb25LZXlzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRvZ2dsZU1lbnUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcbiAgICAgICAgdGhpcy5yZXNlYXJjaFdpdGhOZXdVc2VyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xuICAgIH1cbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XG4gIH1cblxuICBhc3luYyBhZGRSZXR1cm5Kb3VybmV5VG9CYXNrZXQoXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXG4gICAgdGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXMgfCBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXG4gICAgb3V0Ym91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxuICAgIGluYm91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxuICAgIG91dGJvdW5kRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxuICAgIGluYm91bmRGYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXG4gICAgaW5nb3JlSW52b2tlZDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGdtdDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIC8vIGlmIChvdXRib3VuZC51bnNlbGxhYmxlKSB7XG4gICAgLy8gICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAvLyB9XG5cbiAgICBjb25zdCByYWlsUXVlcnkgPSAhZ210XG4gICAgICA/IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGVtcFBhcmFtcyBhcyBSYWlsVGVtcFBhcmFtcylcbiAgICAgIDogdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcz4odGVtcFBhcmFtcyBhcyBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMpO1xuXG4gICAgaWYgKGdtdCkge1xuICAgICAgY29uc3QgeyBhZHVsdHMsIGNoaWxkcmVuLCBuZXdUcmF2ZWxsZXJzIH0gPSB0aGlzLnByb2Nlc3NUcmFpbmxpbmVUcmF2ZWxsZXJzKCk7XG4gICAgICByYWlsUXVlcnkudHJhdmVsbGVycyA9IG5ld1RyYXZlbGxlcnM7XG4gICAgICByYWlsUXVlcnkuYWR1bHRzID0gYWR1bHRzO1xuICAgICAgcmFpbFF1ZXJ5LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgbGV0IHRpY2tldEV4dHJhczogVGlja2V0RXh0cmFzW107XG5cbiAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGNyZWF0ZSBUaWNrZXRFeHRyYXNPYmplY3QgYW5kIGFkZGVkIGl0IHRvIHRoZSBiYXNrZXRcblxuICAgIGlmIChvdXRib3VuZD8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcbiAgICAgIHRpY2tldEV4dHJhcyA9IHRoaXMuY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KG91dGJvdW5kLnRpY2tldEV4dHJhcyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuXG4gICAgY29uc3Qgb3V0Ym91bmRGYXJlTGlzdDogeyBpZD86IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSA9IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycz8uZmFyZXNcbiAgICAgID8ubGVuZ3RoXG4gICAgICA/IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycz8uZmFyZXM/Lm1hcCh4ID0+ICh7IGlkOiB4LmlkLCBuYW1lOiB4Lm5hbWUgfSkpXG4gICAgICA6IFt7IG5hbWU6IG91dGJvdW5kRmFyZS50eXBlIH1dO1xuXG4gICAgY29uc3QgaW5ib3VuZEZhcmVMaXN0OiB7IGlkPzogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdID0gaW5ib3VuZEZhcmUuaWRlbnRpZmllcnM/LmZhcmVzPy5sZW5ndGhcbiAgICAgID8gaW5ib3VuZEZhcmUuaWRlbnRpZmllcnM/LmZhcmVzPy5tYXAoeCA9PiAoeyBpZDogeC5pZCwgbmFtZTogeC5uYW1lIH0pKVxuICAgICAgOiBbeyBuYW1lOiBpbmJvdW5kRmFyZS50eXBlIH1dO1xuXG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSB0aGlzLnVzZXJTZXJ2aWNlLmZpbmRTZXJ2aWNlKHNlcnZpY2VJZCk/Lm5hbWU7XG5cbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChcbiAgICAgIG91dGJvdW5kRmFyZSxcbiAgICAgIG91dGJvdW5kLFxuICAgICAgb3V0Ym91bmRGYXJlTGlzdCxcbiAgICAgIGluYm91bmRGYXJlLFxuICAgICAgaW5ib3VuZCxcbiAgICAgIGluYm91bmRGYXJlTGlzdCxcbiAgICAgIHNlcnZpY2VOYW1lXG4gICAgKTtcbiAgICBpZiAoYmFza2V0KSB7XG4gICAgICAvLyBtYXRjaCBqb3VybmV5LTEgYW5kIGRvIHRoZSBiZWxvdyBhbmQgdGhlbiBqb3VybmV5IDIsIHNpbXBsZXM/P1xuICAgICAgY29uc3Qgb3V0Ym91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKG91dGJvdW5kKTtcbiAgICAgIGNvbnN0IGluYm91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKGluYm91bmQpO1xuICAgICAgY29uc3QgbG93ZXN0VGlja2V0ID0gdGhpcy5maW5kQ2hlYXBlc3RUaWNrZXQoKTtcbiAgICAgIGxvd2VzdFRpY2tldC5hbW91bnQgPSArbG93ZXN0VGlja2V0LmFtb3VudC50b0ZpeGVkKDIpO1xuXG4gICAgICAvLyAqIFJldHVybiBwcmljZSBhbmQgZnVsbCBwcmljZSBhcmUgb25seSBhcHBsaWVkIHRvIFRyYWlubGluZSBzcGxpdCB0aWNrZXRzXG4gICAgICAvLyAqIFJldHVybiBmYXJlcyBzb21ldGltZXMgY29tZWJhY2sgd2l0aCB0aGUgcHJpY2VcbiAgICAgIGNvbnN0IGFwcGx5UmV0dXJuUHJpY2UgPVxuICAgICAgICBzZXJ2aWNlTmFtZSA9PT0gU2VydmljZVByb3ZpZGVyLlRyYWlubGluZSAmJiBpbmJvdW5kRmFyZS5pZGVudGlmaWVycz8uaXNTcGxpdDtcblxuICAgICAgY29uc3QgcmV0dXJuUHJpY2U6IG51bWJlciA9IGFwcGx5UmV0dXJuUHJpY2UgPyBpbmJvdW5kRmFyZS5wcmljZSB8fCAwIDogMDtcbiAgICAgIGNvbnN0IHJldHVybkZ1bGxQcmljZTogbnVtYmVyID0gYXBwbHlSZXR1cm5QcmljZSA/IGluYm91bmRGYXJlLmZ1bGxQcmljZSB8fCAwIDogMDtcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xuICAgICAgICByZXF1aXJlc092ZXJyaWRlUmVhc29uOiBvdXRib3VuZEZhcmUudW5hdmFpbGFibGUsIC8vICEgLSBzaG91bGQgYmUgdGhlIHNhbWUgb24gYm90aCBzbyBvbmx5IG5lZWQgdG8gY2hlY2sgb25lXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIGV4cGlyZXNBdDogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzPy5leHBpcmVzQXQsXG4gICAgICAgICAgdGlja2V0UXVldWVMaXN0OiAob3V0Ym91bmRGYXJlLnRpY2tldFF1ZXVlTGlzdCB8fCBbXSkubWFwKFxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgYWNjb3VudHNMaXN0OiAob3V0Ym91bmQuYWNjb3VudHNMaXN0IHx8IFtdKS5tYXAoKGl0ZW06IFJhaWxBY2NvdW50KTogQWNjb3VudHNMaXN0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IG91dGJvdW5kLmFycml2ZURhdGVUaW1lLFxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBvdXRib3VuZC5kZXBhcnREYXRlVGltZSxcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBvdXRib3VuZC5mcm9tLFxuXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Ym91bmRGYXJlLnByb3ZpZGVyTmFtZSxcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogb3V0Ym91bmRGYXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgcHJpY2U6IG91dGJvdW5kRmFyZS5wcmljZSxcbiAgICAgICAgICAgICAgICBsZWdzOiBvdXRib3VuZExlZ3MsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkRGVzdGluYXRpb25zOiBvdXRib3VuZEZhcmUucGVybWl0dGVkRGVzdGluYXRpb25zLFxuICAgICAgICAgICAgICAgIHBlcm1pdHRlZE9yaWdpbnM6IG91dGJvdW5kRmFyZS5wZXJtaXR0ZWRPcmlnaW5zXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGlud2FyZERldGFpbDoge1xuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBpbmJvdW5kLmFycml2ZURhdGVUaW1lLFxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpbmJvdW5kLnRvLFxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IGluYm91bmQuZGVwYXJ0RGF0ZVRpbWUsXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogaW5ib3VuZC5mcm9tLFxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGluYm91bmRGYXJlLnByb3ZpZGVyTmFtZSxcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogaW5ib3VuZEZhcmUudHlwZSxcbiAgICAgICAgICAgICAgICBsZWdzOiBpbmJvdW5kTGVncyxcbiAgICAgICAgICAgICAgICBwZXJtaXR0ZWREZXN0aW5hdGlvbnM6IGluYm91bmRGYXJlLnBlcm1pdHRlZERlc3RpbmF0aW9ucyxcbiAgICAgICAgICAgICAgICBwZXJtaXR0ZWRPcmlnaW5zOiBpbmJvdW5kRmFyZS5wZXJtaXR0ZWRPcmlnaW5zXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLnRyYW5zYWN0aW9uSWRlbnRpZmllcixcbiAgICAgICAgICBvdXRib3VuZDoge1xuICAgICAgICAgICAgZVRpY2tldDogISFvdXRib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW291dGJvdW5kRmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcl0sXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxuICAgICAgICAgICAgam91cm5leUxlZ3M6IHRoaXMucmVtb3ZlZFNjaGVkdWxlZFBsYXRmb3JtRnJvbUNhbGxpbmdQb2ludHMob3V0Ym91bmQuam91cm5leUxlZ3MpLFxuICAgICAgICAgICAgaXNTcGxpdDogISFvdXRib3VuZEZhcmUuaWRlbnRpZmllcnM/LmlzU3BsaXQsXG4gICAgICAgICAgICBmYXJlczogb3V0Ym91bmRGYXJlPy5pZGVudGlmaWVycz8uZmFyZXMsXG4gICAgICAgICAgICBjb21wb3NpdGlvbjogb3V0Ym91bmRGYXJlPy5pZGVudGlmaWVycz8uY29tcG9zaXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIHRpY2tldFF1ZXVlTGlzdCxcbiAgICAgICAgICByZXR1cm46IHtcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhaW5ib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW2luYm91bmRGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcbiAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOiBpbmJvdW5kRmFyZS5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcixcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKGluYm91bmQuam91cm5leUxlZ3MpLFxuICAgICAgICAgICAgaXNTcGxpdDogISFpbmJvdW5kRmFyZS5pZGVudGlmaWVycz8uaXNTcGxpdCxcbiAgICAgICAgICAgIGZhcmVzOiBpbmJvdW5kRmFyZT8uaWRlbnRpZmllcnM/LmZhcmVzLFxuICAgICAgICAgICAgY29tcG9zaXRpb246IGluYm91bmRGYXJlPy5pZGVudGlmaWVycz8uY29tcG9zaXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxuICAgICAgICAgIGRpc2NvdW50SW5mbzogXy51bmlvbldpdGgoXG4gICAgICAgICAgICBvdXRib3VuZEZhcmUuZGlzY291bnRJbmZvLFxuICAgICAgICAgICAgaW5ib3VuZEZhcmUuZGlzY291bnRJbmZvLFxuICAgICAgICAgICAgKGEsIGIpID0+IGEuaWQgPT09IGIuaWQgJiYgYS5jb2RlID09PSBiLmNvZGVcbiAgICAgICAgICApLFxuICAgICAgICAgIGZ1bGxQcmljZTogb3V0Ym91bmRGYXJlLmZ1bGxQcmljZSArIHJldHVybkZ1bGxQcmljZSxcbiAgICAgICAgICBzaW5nbGVPclJldHVybjogVGlja2V0VHlwZS5SZXR1cm5cbiAgICAgICAgfSxcbiAgICAgICAgYWR1bHRzOiByYWlsUXVlcnkuYWR1bHRzLFxuICAgICAgICBjaGlsZHJlbjogcmFpbFF1ZXJ5LmNoaWxkcmVuLFxuICAgICAgICBwcmljZTogb3V0Ym91bmRGYXJlLnByaWNlICsgcmV0dXJuUHJpY2UsXG4gICAgICAgIGN1cnJlbmN5OiBvdXRib3VuZEZhcmUuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxuICAgICAgICBjbzJQZXJJdGVtOiAob3V0Ym91bmQ/LmNvMlBlckl0ZW0gPz8gMCkgKyAoaW5ib3VuZD8uY28yUGVySXRlbSA/PyAwKSxcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiAob3V0Ym91bmQ/LmNvMlBlclBhc3NlbmdlciA/PyAwKSArIChpbmJvdW5kPy5jbzJQZXJQYXNzZW5nZXIgPz8gMCksXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWUsXG4gICAgICAgIGluYm91bmREYXRlOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxuICAgICAgICBsb3dlc3RQcmljZTpcbiAgICAgICAgICBsb3dlc3RUaWNrZXQuYW1vdW50IHx8IGxvd2VzdFRpY2tldC5jdXJyZW5jeUNvZGUgIT09IG91dGJvdW5kRmFyZS5jdXJyZW5jeVxuICAgICAgICAgICAgPyBsb3dlc3RUaWNrZXQuYW1vdW50XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6XG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9PSBvdXRib3VuZEZhcmUuY3VycmVuY3lcbiAgICAgICAgICAgID8gPEN1cnJlbmN5Q29kZT5sb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIHJlYXNvbktleXM6IFtcbiAgICAgICAgICAuLi4ob3V0Ym91bmRGYXJlLnJlcXVpcmVzUmVhc29uS2V5cyB8fCBbXSksXG4gICAgICAgICAgLi4uKGluYm91bmRGYXJlLnJlcXVpcmVzUmVhc29uS2V5cyB8fCBbXSlcbiAgICAgICAgXSxcbiAgICAgICAgYWdlbnRPdmVycm9kZVVuYXZhaWxhYmxlOiBvdXRib3VuZEZhcmUudW5hdmFpbGFibGUgfHwgaW5ib3VuZEZhcmUudW5hdmFpbGFibGVcbiAgICAgIH07XG4gICAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cbiAgICAgIC8vIGRvbnQgc2hvdyB0aWNrZXRFeHRyYXMgZm9yIERURC4gV2Ugd2lsbCBoYXZlIGEgbmV3IHRpY2tldCBmb3IgdGlja2V0RXh0cmFzXG4gICAgICBpZiAodGlja2V0RXh0cmFzICYmICFnbXQpIHtcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmQudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzO1xuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QgPSBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QuZmlsdGVyKFxuICAgICAgICAgIChpdGVtOiBUaWNrZXRRdWV1ZUxpc3QpID0+IGl0ZW0udHlwZSAhPT0gJ2VUaWNrZXQnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghb3V0Ym91bmRGYXJlLnRpY2tldE9uRGVwYXJ0dXJlQXZhaWxhYmxlIHx8ICFpbmJvdW5kRmFyZS50aWNrZXRPbkRlcGFydHVyZUF2YWlsYWJsZSkge1xuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QgPSBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QuZmlsdGVyKFxuICAgICAgICAgIChpdGVtOiBUaWNrZXRRdWV1ZUxpc3QpID0+IGl0ZW0udHlwZSAhPT0gJ1RpY2tldE9uRGVwYXJ0dXJlJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYmFza2V0SXRlbS5kZXRhaWwuY291bnRyeUNvZGUgPSA8c3RyaW5nPmJhc2tldEl0ZW0uc2VhcmNoUXVlcnkuY291bnRyeUNvZGU7XG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXG4gICAgICAgIGJhc2tldEl0ZW0sXG4gICAgICAgIGludEJhc2tldCxcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXG4gICAgICAgIG91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbktleXMgfHwgaW5ib3VuZEZhcmUucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgaW5nb3JlSW52b2tlZFxuICAgICAgKTtcbiAgICAgIGlmICghb3V0Ym91bmRGYXJlLnJlcXVpcmVzUmVhc29uS2V5cz8ubGVuZ3RoICYmICFpbmJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbktleXM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmJhc2tldFNlcnZpY2UudG9nZ2xlTWVudSgpO1xuICAgICAgfVxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xuICAgICAgICB0aGlzLnJlc2VhcmNoV2l0aE5ld1VzZXIoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XG4gICAgfVxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcbiAgfVxuXG4gIHJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKHJhaWxMZWdzOiBSYWlsSm91cm5leUxlZ1tdKTogUmFpbEpvdXJuZXlMZWdbXSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYWlsTGVncy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbGVnID0gcmFpbExlZ3NbaV07XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVnLmNhbGxpbmdQb2ludHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgY2FsbGluZ1BvaW50cyA9IGxlZy5jYWxsaW5nUG9pbnRzW2pdO1xuICAgICAgICBkZWxldGUgY2FsbGluZ1BvaW50cy5zY2hlZHVsZWRQbGF0Zm9ybTtcbiAgICAgIH1cbiAgICAgIC8vIGRlbGV0ZSBsZWcudHJhbnNwb3J0RGVzaWduYXRpb247XG4gICAgICBkZWxldGUgbGVnLmNhbmNlbGxlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFpbExlZ3M7XG4gIH1cblxuICByZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50c0FuZFNwbGl0cyhcbiAgICByYWlsTGVnczogUmFpbEpvdXJuZXlMZWdbXSxcbiAgICBzcGxpdExlZ3M6IGFueVtdLFxuICAgIHNwbGl0Q29kZTogc3RyaW5nLFxuICAgIGxlZ051bWJlcjogbnVtYmVyLFxuICAgIG91dGJvdW5kOiBib29sZWFuXG4gICk6IFJhaWxKb3VybmV5TGVnW10ge1xuICAgIGNvbnN0IHJhaWxMZWdzQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmFpbExlZ3MpKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhaWxMZWdzQ29weS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3BsaXRMZWcgPSBzcGxpdExlZ3NbaV07XG4gICAgICBjb25zdCBsZWcgPSByYWlsTGVnc0NvcHlbaV07XG4gICAgICBsZWcuYXJyaXZlRGF0ZVRpbWUgPSBzcGxpdExlZy5hcnJpdmFsRGF0ZVRpbWU7XG4gICAgICBsZWcuZGVwYXJ0RGF0ZVRpbWUgPSBzcGxpdExlZy5kZXBhcnR1cmVEYXRlVGltZTtcbiAgICAgIGxlZy5hcnJpdmUgPSBzcGxpdExlZy5hcnJpdmFsU3RhdGlvbk5hbWU7XG4gICAgICBsZWcuZGVwYXJ0ID0gc3BsaXRMZWcuZGVwYXJ0dXJlU3RhdGlvbk5hbWU7XG4gICAgICBjb25zdCBzcGxpdEluZGV4ID0gbGVnLmNhbGxpbmdQb2ludHMuZmluZEluZGV4KFxuICAgICAgICAocG9pbnQ6IFJhaWxDYWxsaW5nUG9pbnQpID0+IHBvaW50LnN0YXRpb25Db2RlID09PSBzcGxpdENvZGVcbiAgICAgICk7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlZy5jYWxsaW5nUG9pbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGNhbGxpbmdQb2ludHMgPSBsZWcuY2FsbGluZ1BvaW50c1tqXTtcbiAgICAgICAgZGVsZXRlIGNhbGxpbmdQb2ludHMuc2NoZWR1bGVkUGxhdGZvcm07XG4gICAgICB9XG4gICAgICBpZiAoIWxlZ051bWJlcikge1xuICAgICAgICBpZiAob3V0Ym91bmQpIHtcbiAgICAgICAgICBsZWcuY2FsbGluZ1BvaW50cyA9IGxlZy5jYWxsaW5nUG9pbnRzLmZpbHRlcihcbiAgICAgICAgICAgIChwb2ludDogUmFpbENhbGxpbmdQb2ludCwgaW5kZXg6IG51bWJlcikgPT4gaW5kZXggPD0gc3BsaXRJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGVnLmNhbGxpbmdQb2ludHMgPSBsZWcuY2FsbGluZ1BvaW50cy5maWx0ZXIoXG4gICAgICAgICAgICAocG9pbnQ6IFJhaWxDYWxsaW5nUG9pbnQsIGluZGV4OiBudW1iZXIpID0+IGluZGV4ID49IHNwbGl0SW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3V0Ym91bmQpIHtcbiAgICAgICAgICBsZWcuY2FsbGluZ1BvaW50cyA9IGxlZy5jYWxsaW5nUG9pbnRzLmZpbHRlcihcbiAgICAgICAgICAgIChwb2ludDogUmFpbENhbGxpbmdQb2ludCwgaW5kZXg6IG51bWJlcikgPT4gaW5kZXggPj0gc3BsaXRJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGVnLmNhbGxpbmdQb2ludHMgPSBsZWcuY2FsbGluZ1BvaW50cy5maWx0ZXIoXG4gICAgICAgICAgICAocG9pbnQ6IFJhaWxDYWxsaW5nUG9pbnQsIGluZGV4OiBudW1iZXIpID0+IGluZGV4IDw9IHNwbGl0SW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByYWlsTGVnc0NvcHk7XG4gIH1cblxuICBjcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QocmFpbFRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10pOiBUaWNrZXRFeHRyYXNbXSB7XG4gICAgcmV0dXJuIHJhaWxUaWNrZXRFeHRyYXMubWFwKHJhaWxUaWNrZXRFeHRyYSA9PiB7XG4gICAgICBjb25zdCBwcmljZSA9XG4gICAgICAgIHRoaXMubm9PZkNoaWxkcmVuICogcmFpbFRpY2tldEV4dHJhPy5jaGlsZEFtb3VudCArXG4gICAgICAgIHRoaXMubm9PZkFkdWx0cyAqIHJhaWxUaWNrZXRFeHRyYS5hZHVsdEFtb3VudDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHJhaWxUaWNrZXRFeHRyYS5pZGVudGlmaWVycy50eXBlLFxuICAgICAgICBsb2NhdGlvbjogcmFpbFRpY2tldEV4dHJhLmlkZW50aWZpZXJzLmxvY2F0aW9uLFxuICAgICAgICBkYXRlOiByYWlsVGlja2V0RXh0cmEuaWRlbnRpZmllcnMuZGF0ZSxcbiAgICAgICAgcHJpY2VcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjYWxjdWxhdGVUaW1lRGlmZmVyZW5jZUluTWlucyhyYWlsSm91cm5leTogUmFpbEpvdXJuZXlPcHRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnNcbiAgICAgIC5nZXRUaW1lRGlmZmVyZW5jZShyYWlsSm91cm5leS5hcnJpdmVEYXRlVGltZSwgcmFpbEpvdXJuZXkuZGVwYXJ0RGF0ZVRpbWUpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBkZXRlcm1pbmUgaWYgYSB0aWNrZXQgaXMgYW4gZVRpY2tldFxuICAgKiBAcGFyYW0gdGlja2V0IC0gdGhlIHRpY2tldCB3ZSB3YW50IHRvIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIC0gYm9vbGVhblxuICAgKi9cbiAgdGlja2V0SXNBbkVUaWNrZXQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmRFVGlja2V0OiBSYWlsSm91cm5leU9wdGlvbiA9IG51bGw7XG5cbiAgICAvLyBmb3VuZEVUaWNrZXQgPSB0aWNrZXQudGlja2V0UXVldWVMaXN0LmZpbmQoKHF1ZXVlTGlzdEl0ZW0pID0+IHtcbiAgICAvLyAgIHJldHVybiBxdWV1ZUxpc3RJdGVtLnR5cGUgPT09ICdlVGlja2V0JztcbiAgICAvLyB9KTtcblxuICAgIHJldHVybiBmb3VuZEVUaWNrZXQgPyB0cnVlIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUZpbHRlcihyZXR1cm5SZXN1bHRzPzogUmFpbFNlYXJjaFJlc3VsdCk6IE9CVFJhaWxRdW90ZVJlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlGaWx0ZXIocmV0dXJuUmVzdWx0cyk7XG4gIH1cbiAgcHJvdGVjdGVkIF9hcHBseUZpbHRlcihyZXR1cm5SZXN1bHRzPzogUmFpbFNlYXJjaFJlc3VsdCk6IE9CVFJhaWxRdW90ZVJlc3VsdFtdIHtcbiAgICBpZiAocmV0dXJuUmVzdWx0cz8ucmVzdWx0c1swXT8uc3VtbWFyeT8ub3V0Ym91bmQ/LlswXSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5ID0gcmV0dXJuUmVzdWx0cy5yZXN1bHRzWzBdLnN1bW1hcnkub3V0Ym91bmRbMF07XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0U2VsZWN0ZWQgPSAodHlwZTogUmFpbFJ1bGVFbml0eUtleXMsIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5fZmluZFN1bW1hcnkoam91cm5leSwgdGhpcy5zdW1tYXJ5LnJldHVybik7XG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5XG4gICAgICAgID8gKGdyb3VwZWRGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBncm91cGVkRmFyZXMubWFwKChmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFmYXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdW1tYXJ5VHlwZSA9IHRoaXMuX3NlbGVjdGVkU3VtbWFyeVt0eXBlXTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmhlbHBlcnMuYWRkUmFpbEFjdGlvblJ1bGVzKHsgLi4uZmFyZSB9LCBbXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFN1bW1hcnlUeXBlPy5bdGhpcy5zZWxlY3RlZFRpY2tldD8uZmFyZS5mYXJlSGFzaF1cbiAgICAgICAgICAgICAgICAgICAgPy5ydWxlRGF0YVdoZW5TZWxlY3RlZFdpdGhbZmFyZS5mYXJlSGFzaF0sXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5ID8gc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXT8ucnVsZURhdGFXaGVuU2VsZWN0ZWRBbG9uZSA6IG51bGxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFyZS5mYXJlSGFzaCA9PT0gdGhpcy5zZWxlY3RlZFRpY2tldD8uZmFyZS5mYXJlSGFzaCxcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0aGlzLl9zZWxlY3RlZFN1bW1hcnlbdHlwZV1cbiAgICAgICAgICAgICAgICAgID8gISF0aGlzLl9zZWxlY3RlZFN1bW1hcnlbdHlwZV1bXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldD8uZmFyZS5mYXJlSGFzaFxuICAgICAgICAgICAgICAgICAgICBdPy5hbGxvd2VkV2l0aD8uaW5jbHVkZXMoZmFyZS5mYXJlSGFzaClcbiAgICAgICAgICAgICAgICAgIDogZmFsc2VcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgOiAoZ3JvdXBlZEZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRGYXJlcy5tYXAoKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWZhcmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuaGVscGVycy5hZGRSYWlsQWN0aW9uUnVsZXMoXG4gICAgICAgICAgICAgICAgICB7IC4uLmZhcmUgfSxcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnkgPyBbc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5ydWxlRGF0YVdoZW5TZWxlY3RlZEFsb25lXSA6IFtdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0UnVsZXMgPSAoXG4gICAgICB0eXBlOiBSYWlsUnVsZUVuaXR5S2V5cyxcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxuICAgICAgZGlyZWN0aW9uOiAnb3V0Ym91bmQnIHwgJ3JldHVybidcbiAgICApID0+IHtcbiAgICAgIHJldHVybiAoZ3JvdXBlZEZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSk6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0+IHtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMuX2ZpbmRTdW1tYXJ5KGpvdXJuZXksIHRoaXMuc3VtbWFyeVtkaXJlY3Rpb25dKTtcbiAgICAgICAgcmV0dXJuIGdyb3VwZWRGYXJlc1xuICAgICAgICAgIC5tYXAoKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZhcmUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZW1vdmVSZXN1bHRSdWxlID0gc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5hbGxvd2VkV2l0aC5sZW5ndGhcbiAgICAgICAgICAgICAgPyB0aGlzLmNoZWNrUnVsZShcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0ucnVsZURhdGFXaGVuU2VsZWN0ZWRXaXRoLFxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5hbGxvd2VkV2l0aC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAncmVtb3ZlUmVzdWx0J1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCByZXF1aXJlc1JlYXNvblJ1bGUgPSBzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdLmFsbG93ZWRXaXRoLmxlbmd0aFxuICAgICAgICAgICAgICA/IHRoaXMuY2hlY2tSdWxlKFxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5ydWxlRGF0YVdoZW5TZWxlY3RlZFdpdGgsXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdLmFsbG93ZWRXaXRoLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICdyZXF1aXJlc1JlYXNvbktleXMnXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCB1bmF2YWlsYWJsZVJ1bGUgPSBzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdLmFsbG93ZWRXaXRoLmxlbmd0aFxuICAgICAgICAgICAgICA/IHRoaXMuY2hlY2tSdWxlKFxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5ydWxlRGF0YVdoZW5TZWxlY3RlZFdpdGgsXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdLmFsbG93ZWRXaXRoLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICd1bmF2YWlsYWJsZSdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVscGVycy5hZGRSYWlsQWN0aW9uUnVsZXMoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5mYXJlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkVGlja2V0ICYmIGZhcmUuZmFyZUhhc2ggPT09IHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgcmVtb3ZlUmVzdWx0UnVsZSxcbiAgICAgICAgICAgICAgICByZXF1aXJlc1JlYXNvblJ1bGUsXG4gICAgICAgICAgICAgICAgdW5hdmFpbGFibGVSdWxlLFxuICAgICAgICAgICAgICAgIHN1bW1hcnkgPyBzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdLnJ1bGVEYXRhV2hlblNlbGVjdGVkQWxvbmUgOiBbXVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBvdXRwdXQgPSB0aGlzLmhlbHBlcnNcbiAgICAgIC5jbG9uZShyZXR1cm5SZXN1bHRzID8gdGhpcy5wcm9jZXNzUmVzdWx0cyhyZXR1cm5SZXN1bHRzLnJlc3VsdHMpIDogdGhpcy5mdWxsUmVzdWx0cylcbiAgICAgIC5yZWR1Y2UoKGFjY3VtOiBPQlRSYWlsUXVvdGVSZXN1bHRbXSwgbmV4dDogT0JUUmFpbFF1b3RlUmVzdWx0KTogT0JUUmFpbFF1b3RlUmVzdWx0W10gPT4ge1xuICAgICAgICBjb25zdCB0ZW1wID0ge1xuICAgICAgICAgIC4uLm5leHQsXG4gICAgICAgICAgb3V0Ym91bmQ6IChuZXh0Lm91dGJvdW5kIHx8IFtdKS5tYXAoXG4gICAgICAgICAgICAoam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBPQlRSYWlsSm91cm5leU9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uam91cm5leSxcbiAgICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxuICAgICAgICAgICAgICAgICAgam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnLCBqb3VybmV5LCBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxuICAgICAgICAgICAgICAgICAgam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMgfHwge30sXG4gICAgICAgICAgICAgICAgICBzZXRSdWxlcygnc2luZ2xlSm91cm5leUZhcmVzJywgam91cm5leSwgUmFpbERpcmVjdGlvbi5PdXRib3VuZClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcbiAgICAgICAgICAgICAgICAgIGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoJ3JldHVybkpvdXJuZXlGYXJlcycsIGpvdXJuZXksIFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxuICAgICAgICAgICAgICAgICAgam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLCBqb3VybmV5LCBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgc3BsaXRGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcbiAgICAgICAgICAgICAgICAgIGpvdXJuZXkuc3BsaXRGYXJlcyB8fCB7fSxcbiAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdzcGxpdEZhcmVzJywgam91cm5leSwgUmFpbERpcmVjdGlvbi5PdXRib3VuZClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0gYXMgT0JUUmFpbEpvdXJuZXlPcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSxcbiAgICAgICAgICByZXR1cm46IChuZXh0LnJldHVybiB8fCBbXSkubWFwKChqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbik6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmpvdXJuZXksXG4gICAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcbiAgICAgICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyB8fCB7fSxcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZCgncmV0dXJuSm91cm5leUZhcmVzJywgam91cm5leSlcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcbiAgICAgICAgICAgICAgICBqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMgfHwge30sXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnLCBqb3VybmV5KVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXG4gICAgICAgICAgICAgICAgam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMgfHwge30sXG4gICAgICAgICAgICAgICAgc2V0UnVsZXMoJ3NpbmdsZUpvdXJuZXlGYXJlcycsIGpvdXJuZXksICdyZXR1cm4nKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxuICAgICAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyB8fCB7fSxcbiAgICAgICAgICAgICAgICBzZXRSdWxlcygnb3BlblJldHVybkpvdXJuZXlGYXJlcycsIGpvdXJuZXksICdyZXR1cm4nKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBzcGxpdEZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxuICAgICAgICAgICAgICAgIGpvdXJuZXkuc3BsaXRGYXJlcyB8fCB7fSxcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZCgnc3BsaXRGYXJlcycsIGpvdXJuZXkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgICAgYWNjdW0ucHVzaCh0ZW1wKTtcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSwgW10pO1xuXG4gICAgaWYgKHJldHVyblJlc3VsdHMpIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgdGhpcy5yZXN1bHRzLm5leHQob3V0cHV0KTtcbiAgfVxuXG4gIGNoZWNrUnVsZShcbiAgICBydWxlRGF0YTogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBhbGxvd2VkV2l0aDogbnVtYmVyLFxuICAgIHJ1bGVUeXBlOiAncmVxdWlyZXNSZWFzb25LZXlzJyB8ICd1bmF2YWlsYWJsZScgfCAncmVtb3ZlUmVzdWx0J1xuICApOiBhbnkge1xuICAgIGZvciAobGV0IGtleSBpbiBydWxlRGF0YSkge1xuICAgICAgaWYgKCFydWxlRGF0YVtrZXldW3J1bGVUeXBlXSkge1xuICAgICAgICAvLyBJZiB0aGUgcnVsZVR5cGUgaXMgZmFsc2UgZm9yIGFueSBvYmplY3QsIHJldHVybiBudWxsXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGFsbCBvYmplY3RzIGhhdmUgdGhlIHJ1bGVUeXBlIHRydWUgYW5kIHRoZSBsZW5ndGggbWF0Y2hlcyBhbGxvd2VkV2l0aCwgcmV0dXJuIHRoZSBmaXJzdCBvYmplY3RcbiAgICBpZiAoT2JqZWN0LmtleXMocnVsZURhdGEpLmxlbmd0aCA9PT0gYWxsb3dlZFdpdGgpIHtcbiAgICAgIGNvbnN0IGZpcnN0S2V5ID0gT2JqZWN0LmtleXMocnVsZURhdGEpWzBdO1xuICAgICAgc3dpdGNoIChydWxlVHlwZSkge1xuICAgICAgICBjYXNlICdyZXF1aXJlc1JlYXNvbktleXMnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXF1aXJlc1JlYXNvbktleXM6IHJ1bGVEYXRhW2ZpcnN0S2V5XVtydWxlVHlwZV0sXG4gICAgICAgICAgICByZXF1aXJlc1JlYXNvbk1lc3NhZ2VzOiBydWxlRGF0YVtmaXJzdEtleV0ucmVxdWlyZXNSZWFzb25NZXNzYWdlc1xuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgJ3VuYXZhaWxhYmxlJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdW5hdmFpbGFibGU6IHJ1bGVEYXRhW2ZpcnN0S2V5XVtydWxlVHlwZV0sXG4gICAgICAgICAgICB1bmF2YWlsYWJsZU1lc3NhZ2U6IHJ1bGVEYXRhW2ZpcnN0S2V5XS51bmF2YWlsYWJsZU1lc3NhZ2VcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdyZW1vdmVSZXN1bHQnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZW1vdmVSZXN1bHQ6IHJ1bGVEYXRhW2ZpcnN0S2V5XVtydWxlVHlwZV1cbiAgICAgICAgICB9O1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggYWxsb3dlZFdpdGgsIHJldHVybiBudWxsXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRUZXJtc0FuZENvbmQoXG4gICAgb3V0Ym91bmRGYXJlOiBSYWlsSm91cm5leUZhcmUsXG4gICAgb3V0Ym91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxuICAgIG91dGJvdW5kRmFyZUxpc3Q6IHsgaWQ/OiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10sXG4gICAgaW5ib3VuZEZhcmU/OiBSYWlsSm91cm5leUZhcmUsXG4gICAgaW5ib3VuZD86IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxuICAgIGluYm91bmRGYXJlTGlzdD86IHsgaWQ/OiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10sXG4gICAgc2VydmljZU5hbWU/OiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IG91dGJvdW5kVGVybXM7XG4gICAgbGV0IGluYm91bmRUZXJtcztcbiAgICBsZXQgZ2VuZXJhdGVUZXJtcyA9IChmOiBSYWlsVGlja2V0VGVybXNMaXN0KSA9PiB7fTtcblxuICAgIGlmIChzZXJ2aWNlTmFtZSA9PT0gU2VydmljZVByb3ZpZGVyLlRyYWlubGluZSkge1xuICAgICAgLy8gISBTdHJpY3RseSBmb2xsb3cgVHJhaW5saW5lIFRlcm1zIGFuZCBDb25kIG9yZGVyaW5nXG4gICAgICBnZW5lcmF0ZVRlcm1zID0gKGY6IFJhaWxUaWNrZXRUZXJtc0xpc3QpID0+IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBOYW1lJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy50aWNrZXRUeXBlTmFtZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy50aWNrZXRUeXBlQ29uZGl0aW9uc0Rlc2NyaXB0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnR2VuZXJhbCBWYWxpZGl0eScsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMuZ2VuZXJhbFZhbGlkaXR5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnUHJlIEJvb2tpbmcgUmVxdWlyZW1lbnQnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnByZUJvb2tpbmdSZXF1aXJlbWVudFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1JlZnVuZCBDYW5jZWxsYXRpb24gUnVsZScsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMucmVmdW5kQ2FuY2VsbGF0aW9uUnVsZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0NoYW5nZSBSdWxlJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy5jaGFuZ2VSdWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnR2VuZXJhbCBEaXNjb3VudCcsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMuZ2VuZXJhbERpc2NvdW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnSm91cm5leSBCcmVhayBSdWxlJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy5qb3VybmV5QnJlYWtSdWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVGlja2V0IFR5cGUgQ29kZScsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMudGlja2V0VHlwZUNvZGVcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKGYudGVybXMuZHluYW1pY0NvbmRpdGlvbnM/Lm1hcCh4ID0+ICh7XG4gICAgICAgICAgbmFtZTogeC5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB4LmRlc2NyaXB0aW9uXG4gICAgICAgIH0pKSB8fCBbXSksXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVGlja2V0IFR5cGUgQ2xhc3MnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnRpY2tldFR5cGVDbGFzc1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1ZhbGlkIE91dCBSdWxlJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy52YWxpZE91dFJ1bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdWYWxpZCBSZXR1cm4gUnVsZScsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMudmFsaWRSZXR1cm5SdWxlXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbmVyYXRlVGVybXMgPSAoZjogUmFpbFRpY2tldFRlcm1zTGlzdCkgPT4gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENsYXNzJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy50aWNrZXRUeXBlQ2xhc3NcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDb25kaXRpb25zIERlc2NyaXB0aW9uJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy50aWNrZXRUeXBlQ29uZGl0aW9uc0Rlc2NyaXB0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVmFsaWQgUmV0dXJuIFJ1bGUnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnZhbGlkUmV0dXJuUnVsZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIE5hbWUnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnRpY2tldFR5cGVOYW1lXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQ2hhbmdlIFJ1bGUnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLmNoYW5nZVJ1bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdQcmUgQm9va2luZyBSZXF1aXJlbWVudCcsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMucHJlQm9va2luZ1JlcXVpcmVtZW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnUmFpbGNhcmQgRGlzY291bnQnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnJhaWxjYXJkRGlzY291bnRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDb2RlJyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy50aWNrZXRUeXBlQ29kZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0NoaWxkIERpc2NvdW50JyxcbiAgICAgICAgICB2YWx1ZTogZi50ZXJtcy5jaGlsZERpc2NvdW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVmFsaWQgT3V0IFJ1bGUnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnZhbGlkT3V0UnVsZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1N0YXJ0IERhdGUnLFxuICAgICAgICAgIHZhbHVlOiBvdXRib3VuZC5kZXBhcnREYXRlVGltZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VuZCBEYXRlJyxcbiAgICAgICAgICB2YWx1ZTogb3V0Ym91bmQuYXJyaXZlRGF0ZVRpbWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdKb3VybmV5IEJyZWFrIFJ1bGUnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLmpvdXJuZXlCcmVha1J1bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdSZWZ1bmQgQ2FuY2VsbGF0aW9uIFJ1bGUnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLnJlZnVuZENhbmNlbGxhdGlvblJ1bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdKb3VybmV5IFR5cGUnLFxuICAgICAgICAgIHZhbHVlOiBmLnRlcm1zLmpvdXJuZXlUeXBlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVG9kIEF2YWlsYWJsZScsXG4gICAgICAgICAgdmFsdWU6IGYudGVybXMudG9kQXZhaWxhYmxlXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdSZXR1cm4gU3RhcnQgRGF0ZScsXG4gICAgICAgICAgdmFsdWU6IGluYm91bmQ/LmRlcGFydERhdGVUaW1lXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnUmV0dXJuIEVuZCBEYXRlJyxcbiAgICAgICAgICB2YWx1ZTogaW5ib3VuZD8uYXJyaXZlRGF0ZVRpbWVcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG5cbiAgICBvdXRib3VuZFRlcm1zID0gb3V0Ym91bmRGYXJlTGlzdC5tYXAoZiA9PiB7XG4gICAgICBjb25zdCBmYXJlID0gb3V0Ym91bmRGYXJlLnRlcm1zLmZpbmQoeCA9PiB4LmZhcmVJZCA9PT0gZi5pZCkgfHwgb3V0Ym91bmRGYXJlLnRlcm1zWzBdO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmYXJlTmFtZTogZmFyZS5mYXJlTmFtZSxcbiAgICAgICAgZmFyZUlkOiBmYXJlLmZhcmVJZCxcbiAgICAgICAgdGVybXM6IGdlbmVyYXRlVGVybXMoZmFyZSlcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBpZiAoaW5ib3VuZEZhcmUpIHtcbiAgICAgIGluYm91bmRUZXJtcyA9IGluYm91bmRGYXJlTGlzdC5tYXAoZiA9PiB7XG4gICAgICAgIGNvbnN0IGZhcmUgPSBpbmJvdW5kRmFyZS50ZXJtcy5maW5kKHggPT4geC5mYXJlSWQgPT09IGYuaWQpIHx8IGluYm91bmRGYXJlLnRlcm1zWzBdO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZmFyZU5hbWU6IGZhcmUuZmFyZU5hbWUsXG4gICAgICAgICAgZmFyZUlkOiBmYXJlLmZhcmVJZCxcbiAgICAgICAgICB0ZXJtczogZ2VuZXJhdGVUZXJtcyhmYXJlKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG91dGJvdW5kVGVybXMsXG4gICAgICBpbmJvdW5kVGVybXNcbiAgICB9O1xuICB9XG5cbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5pc0Zhdm91cml0ZVZhbGlkLnZhbHVlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGhpcy50ZW1wUGFyYW1zKTtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBSYWlsUmVjZW50U2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XG5cbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XG4gICAgICAgIG5hbWU6IGAke3RoaXMuX2xvY2F0aW9ufS0ke21vbWVudCgpfWAsXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5SYWlsLFxuICAgICAgICBzZWFyY2hBcmdzOiBmYXZvdXJpdGVTZWFyY2hRdWVyeVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpLCAzMCk7IFxuICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSksIDMwKTtcbiAgICB0aGlzLmFwcGx5U2VhcmNoUXVlcnkoZmF2KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3Nlcyhpc1NlYXJjaCA9IGZhbHNlKSB7XG4gICAgY29uc3QgaGlkZUNsYXNzZXMgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdDx7XG4gICAgICBoaWRlUmFpbENsYXNzZXM6IHtcbiAgICAgICAgYW55OiBib29sZWFuO1xuICAgICAgICBzdGFuZGFyZDogYm9vbGVhbjtcbiAgICAgICAgZmlyc3Q6IGJvb2xlYW47XG4gICAgICB9O1xuICAgIH0+KFVzZXJGYXZvcnVyaXRlLlJhaWxTZWFyY2hGb3JtQ29uZmlndXJhdGlvbik/LmhpZGVSYWlsQ2xhc3NlcyB8fCB7XG4gICAgICBhbnk6IGZhbHNlLFxuICAgICAgc3RhbmRhcmQ6IGZhbHNlLFxuICAgICAgZmlyc3Q6IGZhbHNlXG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnM6IEFsbG93ZWRSYWlsQ2xhc3NbXSA9IFtdO1xuICAgIGlmICghaGlkZUNsYXNzZXMuYW55KSB7XG4gICAgICBvcHRpb25zLnB1c2goeyBkaXNwbGF5OiAnQW55JywgdmFsdWU6IFJhaWxDbGFzcy5BbGwgfSk7XG4gICAgfVxuICAgIGlmICghaGlkZUNsYXNzZXMuc3RhbmRhcmQpIHtcbiAgICAgIG9wdGlvbnMucHVzaCh7IGRpc3BsYXk6ICdTdGFuZGFyZCcsIHZhbHVlOiBSYWlsQ2xhc3MuU3RhbmRhcmQgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5maXJzdCkge1xuICAgICAgb3B0aW9ucy5wdXNoKHsgZGlzcGxheTogJ0ZpcnN0JywgdmFsdWU6IFJhaWxDbGFzcy5GaXJzdCB9KTtcbiAgICB9XG4gICAgaWYgKCFpc1NlYXJjaCkge1xuICAgICAgbGV0IGRlZmF1bHRDbGFzc1NlbGVjdGlvbjogUmFpbENsYXNzIHwgc3RyaW5nID1cbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgICAgIGRlZmF1bHRDbGFzc1NlbGVjdGlvbjogUmFpbENsYXNzO1xuICAgICAgICB9PihVc2VyRmF2b3J1cml0ZS5SYWlsU2VhcmNoRm9ybUNvbmZpZ3VyYXRpb24pPy5kZWZhdWx0Q2xhc3NTZWxlY3Rpb24gfHwgJ0FueSc7XG4gICAgICBpZiAoZGVmYXVsdENsYXNzU2VsZWN0aW9uID09PSAnQW55Jykge1xuICAgICAgICBkZWZhdWx0Q2xhc3NTZWxlY3Rpb24gPSBSYWlsQ2xhc3MuQWxsO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IGRlZmF1bHRDbGFzc1NlbGVjdGlvbikge1xuICAgICAgICAgIHRoaXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBkZWZhdWx0Q2xhc3NTZWxlY3Rpb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaG9zZW5TZWFyY2hDbGFzcyA9IG9wdGlvbnNbMF0/LnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xhc3NUeXBlcy5uZXh0KG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgZ2VuZXJhdGVRdWVyeUZyb21GbGlnaHRRdWVyeShmbGlnaHRRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLm91dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobW9tZW50KGZsaWdodFF1ZXJ5Lm91dGJvdW5kRGF0ZSkpO1xuICAgIHRoaXMucmV0dXJuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobW9tZW50KGZsaWdodFF1ZXJ5LnJldHVybkRhdGUpKTtcblxuICAgIGNvbnN0IHRvTG9jYXRpb25Db2RlID0gdGhpcy5nZXRSYWlsTG9jYXRpb24oPHN0cmluZz5mbGlnaHRRdWVyeS5kZXN0aW5hdGlvbkFpcnBvcnQpO1xuICAgIGNvbnN0IGZyb21Mb2NhdGlvbkNvZGUgPSB0aGlzLmdldFJhaWxMb2NhdGlvbig8c3RyaW5nPmZsaWdodFF1ZXJ5Lm9yaWdpbkFpcnBvcnQpO1xuICAgIGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgLmdldFN0YXRpb25Mb2NhdGlvbnModG9Mb2NhdGlvbkNvZGUpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICAgIHRoaXMudHJhdmVsbGluZ1RvID0gdGhpcy5tYXRjaFJhaWxDb2RlKHRvTG9jYXRpb25Db2RlLCByZXN1bHQpO1xuICAgICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgIC5nZXRTdGF0aW9uTG9jYXRpb25zKGZyb21Mb2NhdGlvbkNvZGUpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20gPSB0aGlzLm1hdGNoUmFpbENvZGUoZnJvbUxvY2F0aW9uQ29kZSwgcmVzdWx0KTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKGZsaWdodFF1ZXJ5LnJldHVyblRyaXApIHtcbiAgICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSBSYWlsU2VhcmNoSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVVa1JhaWxCYXNlZE9uQ291bnRyeSgpO1xuICB9XG5cbiAgYXN5bmMgZ2VuZXJhdGVRdWVyeUZyb21GbGlnaHRRdWVyeVRyYWlubGluZShcbiAgICBmbGlnaHRRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXG4gICAgb3V0Ym91bmRTdGF0aW9uczogUmFpbFN0YXRpb25bXSxcbiAgICBpbmJvdW5kU3RhdGlvbnM6IFJhaWxTdGF0aW9uW10sXG4gICAgZGVwYXJ0QWlycG9ydDogYW55LFxuICAgIGFycml2ZUFpcnBvcnQ6IGFueVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjb25zb2xlLndhcm4oJysrKyBHRU5FUkFUSU5HIFNFQVJDSCBGUk9NIFRSQUlOTElORSArKysnKTtcbiAgICB0aGlzLm91dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobW9tZW50KGZsaWdodFF1ZXJ5Lm91dGJvdW5kRGF0ZSkpO1xuICAgIHRoaXMucmV0dXJuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobW9tZW50KGZsaWdodFF1ZXJ5LnJldHVybkRhdGUpKTtcblxuICAgIC8vIHNlYXJjaCB0aHJvdWdoIHRoZSBzdGF0aW9ucyBmb3IgYSBodWIgLSBpZiBvbmUgbm90IGZvdW5kLCBqdXN0IHBpY2sgdGhlIHRvcCByZXN1bHQuXG4gICAgLy8gcHJvYmFibHkgYmVzdCB0byBmaW5kIHRoZSBvbmUgd2hpY2ggbWF0Y2hlcyB0aGUgc2hvcnRoYW5kIGRlc3RpbmF0aW9uIGZyb20gdGhlIGFpcnBvcnQgc3RyaW5nXG5cbiAgICBjb25zdCBvdXRib3VuZEdlbmVyaWNMb2MgPSBkZXBhcnRBaXJwb3J0LmRlc3RpbmF0aW9uO1xuICAgIGNvbnNvbGUubG9nKCdvdXRib3VuZCBnZW5lcnRpYyBsb2M6ICcsIG91dGJvdW5kR2VuZXJpY0xvYyk7XG5cbiAgICBjb25zdCBvdXRTcGxpdE5hbWUgPSBvdXRib3VuZEdlbmVyaWNMb2Muc3BsaXQoJywnKVswXTtcblxuICAgIGNvbnN0IGZvdW5kU3RhdGlvbiA9XG4gICAgICBvdXRib3VuZFN0YXRpb25zLmZpbmQoc3RhdGlvbiA9PiBzdGF0aW9uLm5hbWUgPT09IG91dFNwbGl0TmFtZSkgfHwgb3V0Ym91bmRTdGF0aW9uc1swXTtcblxuICAgIGNvbnNvbGUubG9nKGZvdW5kU3RhdGlvbik7XG5cbiAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gZm91bmRTdGF0aW9uO1xuXG4gICAgY29uc3QgaW5ib3VuZEdlbmVyaWNMb2MgPSBhcnJpdmVBaXJwb3J0LmRlc3RpbmF0aW9uO1xuICAgIGNvbnNvbGUubG9nKCdpbmJvdW5kIGdlbmVydGljIGxvYzogJywgaW5ib3VuZEdlbmVyaWNMb2MpO1xuXG4gICAgY29uc3QgaW5TcGxpdE5hbWUgPSBpbmJvdW5kR2VuZXJpY0xvYy5zcGxpdCgnLCcpWzBdO1xuXG4gICAgY29uc3QgZm91bmRTdGF0aW9uSW4gPVxuICAgICAgaW5ib3VuZFN0YXRpb25zLmZpbmQoc3RhdGlvbiA9PiBzdGF0aW9uLm5hbWUgPT09IGluU3BsaXROYW1lKSB8fCBpbmJvdW5kU3RhdGlvbnNbMF07XG5cbiAgICBjb25zb2xlLmxvZyhmb3VuZFN0YXRpb25Jbik7XG5cbiAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IGZvdW5kU3RhdGlvbkluO1xuXG4gICAgaWYgKGZsaWdodFF1ZXJ5LnJldHVyblRyaXApIHtcbiAgICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSBSYWlsU2VhcmNoSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVVa1JhaWxCYXNlZE9uQ291bnRyeSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVVa1JhaWxCYXNlZE9uQ291bnRyeSgpOiB2b2lkIHtcbiAgICBjb25zdCBjb3VudHJ5Q29kZSA9IHRoaXMudHJhdmVsbGluZ0Zyb20/LnJhaWxzdGF0aW9uPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlO1xuICAgIGlmIChjb3VudHJ5Q29kZSkge1xuICAgICAgdGhpcy51a1JhaWwgPSBjb3VudHJ5Q29kZSA9PT0gJ0dCJztcbiAgICB9XG4gIH1cblxuICBtYXRjaFJhaWxDb2RlKGxvY2F0aW9uQ29kZTogc3RyaW5nLCByYWlsczogYW55KTogYW55IHtcbiAgICByZXR1cm4gcmFpbHMuZmluZCgocmFpbDogYW55KSA9PiByYWlsLnJhaWxzdGF0aW9uLnN0YXRpb25Db2RlID09PSBsb2NhdGlvbkNvZGUpO1xuICB9XG5cbiAgZ2V0UmFpbExvY2F0aW9uKGxvY2F0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBBSVJUb1JhaWxVS1tsb2NhdGlvbl0gfHwgJyc7XG4gIH1cblxuICBtZXNzYWdlQ29uZmlnQ2hlY2soY29uZmlnOiBhbnksIGlzQ2hlY2tQYXNzOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbmZpZy5hcnJpdmFsU3RhdGlvbiAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgaXNDaGVja1Bhc3MgPVxuICAgICAgICB0aGlzLnRyYXZlbGxpbmdUbz8ubmFtZSA9PT0gY29uZmlnLmFycml2YWxTdGF0aW9uIHx8XG4gICAgICAgIGNvbmZpZy5hcnJpdmFsU3RhdGlvbiA9PT0gdGhpcy50cmF2ZWxsaW5nVG8/LnJhaWxzdGF0aW9uPy5zdGF0aW9uQ29kZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5kZXBhcnR1cmVTdGF0aW9uICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBpc0NoZWNrUGFzcyA9XG4gICAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20/Lm5hbWUgPT09IGNvbmZpZy5kZXBhcnR1cmVTdGF0aW9uIHx8XG4gICAgICAgIGNvbmZpZy5kZXBhcnR1cmVTdGF0aW9uID09PSB0aGlzLnRyYXZlbGxpbmdGcm9tPy5yYWlsc3RhdGlvbj8uc3RhdGlvbkNvZGU7XG4gICAgfVxuICAgIHJldHVybiBpc0NoZWNrUGFzcztcbiAgfVxuXG4gIHRyYXZlbENhcmRMb2NhdGlvbih0cmF2ZWxDYXJkWm9uZXM6IFRpY2tldEV4dHJhc1tdKTogSVRyYXZlbENhcmREZXRhaWwge1xuICAgIGNvbnN0IHRyYXZlbENhcmRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRyYXZlbENhcmRab25lcyk7XG4gICAgbGV0IGV4dHJhc1ByaWNlID0gMDtcbiAgICB0cmF2ZWxDYXJkcy5mb3JFYWNoKHRyYXZlbENhcmQgPT4ge1xuICAgICAgdHJhdmVsQ2FyZC5sb2NhdGlvbiA9IHRyYXZlbENhcmQubG9jYXRpb24uaW5jbHVkZXMoJzQnKVxuICAgICAgICA/IFRyYXZlbENhcmRMb2NhdGlvbnMuem9uZTFUbzRcbiAgICAgICAgOiBUcmF2ZWxDYXJkTG9jYXRpb25zLnpvbmUxVG82O1xuICAgICAgZXh0cmFzUHJpY2UgKz0gdHJhdmVsQ2FyZC5wcmljZTtcbiAgICAgIHJldHVybiB0cmF2ZWxDYXJkO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYXZlbGNhcmQ6IHRyYXZlbENhcmRzLFxuICAgICAgcHJpY2U6IGV4dHJhc1ByaWNlXG4gICAgfTtcbiAgfVxuXG4gIHRyYXZlbGNhcmRGYXJlQ2hlY2soam91cm5leVRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10sIGZhcmVUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc1RyYXZlbGNhcmRGYXJlID0gISFqb3VybmV5VGlja2V0RXh0cmFzPy5maW5kKGV4dHJhID0+IGV4dHJhLmRlc2NyaXB0aW9uID09PSBmYXJlVHlwZSk7XG4gICAgaWYgKGlzVHJhdmVsY2FyZEZhcmUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leS50aWNrZXRFeHRyYXMgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGlzVHJhdmVsY2FyZEZhcmU7XG4gIH1cblxuICBjaGVja1N0YXRpb25Jc1RvZE9mZmljZShzdGF0aW9uQ29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgY29uc3QgaXNBaXJwb3J0RXhwcmVzcyA9IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmlzQWlycG9ydEV4cHJlc3M7XG4gICAgaWYgKGlzQWlycG9ydEV4cHJlc3MpIHJldHVybiBvZihmYWxzZSk7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5nZXRTdGF0aW9uTG9jYXRpb25zKHN0YXRpb25Db2RlLCB0aGlzLmlzTG9hZGluZywgdHJ1ZSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzdWx0czogYW55W10pID0+IHtcbiAgICAgICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgY29uc3Qgc3RhdGlvbiA9IHJlc3VsdHMuZmluZChpdGVtID0+IGl0ZW0ucmFpbHN0YXRpb24uc3RhdGlvbkNvZGUgPT09IHN0YXRpb25Db2RlKTtcbiAgICAgICAgaWYgKHN0YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gb2Yoc3RhdGlvbi5yYWlsc3RhdGlvbi50b2RPbmx5T25UaWNrZXRPZmZpY2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB2aWV3VG9kRXJyb3JEaWFsb2coc3RhdGlvbkNvZGU6IHN0cmluZywgc3RhdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICBNb2RhbFR5cGVzLlRvZEJvb2tpbmdFcnJvck1vZGFsQ29tcG9uZW50LFxuICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICB7IHN0YXRpb25Db2RlOiBzdGF0aW9uQ29kZSwgc3RhdGlvbk5hbWU6IHN0YXRpb25OYW1lIH1cbiAgICApO1xuICB9XG5cbiAgLy8gV2UgdXNlIHRoaXMgbWV0aG9kIGZvciBmZWF0dXJlczogUmVjZW50U2VhcmNoLCBGYXZvdXJpdGVTZWFyY2gsIEV4cGlyZWRCYXNrZXQsIENvcHlCYXNrZXQsIENsb25lQmFza2V0XG4gIC8vIE5vdGU6IERvIG5vdCBpbmNsdWRlIGRhdGVzIGFuZCB0YXZlbGxlcnMgaW4gdGhpcyBtZXRob2RcbiAgYXN5bmMgYXBwbHlTZWFyY2hRdWVyeShxdWVyeTogYW55LCBzdGFydFNlYXJjaDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcXVlcnkuam91cm5leVR5cGU7XG4gICAgdGhpcy5jaG9zZW5TZWFyY2hDbGFzcyA9IHF1ZXJ5LmNsYXNzO1xuICAgIHRoaXMuZXh0cmFUaW1lID0gcXVlcnkuZXh0cmFUaW1lVG9DaGFuZ2U7XG4gICAgdGhpcy5jYXJuZXRUaWNrZXQgPSBxdWVyeS5jYXJuZXRUaWNrZXQ7XG4gICAgaWYgKHF1ZXJ5LmpvdXJuZXlUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXkpIHtcbiAgICAgIHRoaXMub3BlblJldHVybiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5LmlzQWlycG9ydEV4cHJlc3MpIHtcbiAgICAgIHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uID0gcXVlcnkuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xuICAgICAgdGhpcy5pc0FpcnBvcnRFeHByZXNzID0gcXVlcnkuaXNBaXJwb3J0RXhwcmVzcztcbiAgICAgIGNvbnN0IHN0YXRpb25JZHMgPSB7XG4gICAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHF1ZXJ5LmRlcGFydHVyZUxvY2F0aW9uSWQsXG4gICAgICAgIGFycml2YWxMb2NhdGlvbklkOiBxdWVyeS5hcnJpdmFsTG9jYXRpb25JZFxuICAgICAgfTtcbiAgICAgIHRoaXMuc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9uSWRzKHN0YXRpb25JZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzQWlycG9ydEV4cHJlc3MgPSBmYWxzZTtcbiAgICAgIHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uID0gbnVsbFxuICAgIH1cblxuICAgIHRoaXMuYXBwbHlSYWlsY2FyZHMgPVxuICAgICAgcXVlcnk/LnJhaWxDYXJkUXVhbGlmaWVycz8ubGVuZ3RoICAmJlxuICAgICAgcXVlcnkucmFpbENhcmRRdWFsaWZpZXJzWzBdLmNvZGVcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZmFsc2U7XG4gICAgaWYgKHRoaXMuYXBwbHlSYWlsY2FyZHMpIHtcbiAgICAgIHRoaXMucmFpbENhcmRzID0gcXVlcnkucmFpbENhcmRRdWFsaWZpZXJzO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IGZldGNoUmFpbFN0YXRpb24gPSBhc3luYyAobG9jYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgcmFpbHN0YXRpb246IFJhaWxTdGF0aW9uIH0+ID0+IHtcbiAgICAvLyAgIGNvbnN0IHN0YXRpb24gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0UmFpbFN0YXRpb25CeUlkKGxvY2F0aW9uSWQpKTtcbiAgICAvLyAgIHJldHVybiB7IG5hbWU6IHN0YXRpb24ubmFtZSwgcmFpbHN0YXRpb246IHN0YXRpb24gfTtcbiAgICAvLyB9O1xuXG4gICAgY29uc3QgZmV0Y2hSYWlsU3RhdGlvbiA9IGFzeW5jIChsb2NhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyByYWlsc3RhdGlvbjogUmFpbFN0YXRpb24gfT4gPT4ge1xuICAgICAgY29uc3Qgc3RhdGlvbiA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5nZXRSYWlsU3RhdGlvbkJ5SWQobG9jYXRpb25JZCkudG9Qcm9taXNlKCk7XG5cbiAgICAgIHJldHVybiB7IG5hbWU6IHN0YXRpb24ubmFtZSwgcmFpbHN0YXRpb246IHN0YXRpb24gfTtcbiAgICB9O1xuXG5cbiAgICBjb25zdCByZXNpTiA9IGF3YWl0IGZldGNoUmFpbFN0YXRpb24ocXVlcnkuYXJyaXZhbExvY2F0aW9uSWQpIDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAocmVzaU4/LnJhaWxzdGF0aW9uPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlID09PSAnR0InIHx8IHF1ZXJ5LmNvdW50cnlDb2RlID09PSAnR0InKSB7XG4gICAgICAgIHRoaXMubG9jYXRpb24gPSAnVUsnO1xuICAgICAgICB0aGlzLnVrUmFpbCA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUubG9nKCcrKysgU2V0dGluZyBMb2NhdGlvbiB0byBVSyArKysnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9jYXRpb24gPSAnRVUnO1xuICAgICAgICB0aGlzLnVrUmFpbCA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZygnKysrIFNldHRpbmcgTG9jYXRpb24gdG8gRVUgKysrJyk7XG5cbiAgICAgICAgLy8gaXQncyBFVSBzbyBnbyBvdmVyIHRoZSB0cmF2ZWxsZXJzIGFuZCBjb3JyZWN0XG4gICAgICAgIGNvbnN0IHNlYXJjaFRyYXZlbGxlcnMgPSA8VHJhdmVsbGVySW5wdXRbXT5xdWVyeS50cmF2ZWxsZXJzO1xuICAgICAgICBsZXQgYWR1bHRzID0gMDtcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWFyY2hUcmF2ZWxsZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdHJhdiA9IHNlYXJjaFRyYXZlbGxlcnNbaV07XG4gICAgICAgICAgaWYgKHRyYXYucGFzc2VuZ2VyVHlwZSA9PT0gUGFzc2VuZ2VySW5wdXRUeXBlLllvdXRoKSB7XG4gICAgICAgICAgICBxdWVyeS50cmF2ZWxsZXJzW2ldLmlzQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgcXVlcnkudHJhdmVsbGVyc1tpXS5hZ2VUeXBlID0gJ0NoaWxkJztcbiAgICAgICAgICAgIHRoaXMudHJhaW5saW5lVHJhdmVsbGVyc1tpXS5hZ2VSYW5nZSA9IFBhc3NlbmdlcklucHV0VHlwZS5Zb3V0aDtcbiAgICAgICAgICAgIHRoaXMudHJhaW5saW5lVHJhdmVsbGVyc1tpXS5hZ2UgPSB0cmF2LmFnZTtcbiAgICAgICAgICAgIGNoaWxkcmVuKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5LnRyYXZlbGxlcnNbaV0uaXNDaGlsZCA9IGZhbHNlO1xuICAgICAgICAgICAgcXVlcnkudHJhdmVsbGVyc1tpXS5hZ2VUeXBlID0gJ0FkdWx0JztcbiAgICAgICAgICAgIHRoaXMudHJhaW5saW5lVHJhdmVsbGVyc1tpXS5hZ2VSYW5nZSA9IFBhc3NlbmdlcklucHV0VHlwZS5BZHVsdDtcbiAgICAgICAgICAgIGFkdWx0cysrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWVyeS5hZHVsdHMgPSBhZHVsdHM7XG4gICAgICAgIHF1ZXJ5LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIGNvbnNvbGUubG9nKCd0bHQ6JywgdGhpcy50cmFpbmxpbmVUcmF2ZWxsZXJzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgKysrIGVycm9yIGRldGVybWVuaW5nIHJhaWwgbG9jYXRpb246ICR7ZXJyb3J9ICsrK2ApO1xuICAgIH1cblxuICAgIHRoaXMudHJhdmVsbGluZ0Zyb20gPSBxdWVyeS5kZXBhcnR1cmVMb2NhdGlvbklkID8gYXdhaXQgZmV0Y2hSYWlsU3RhdGlvbihxdWVyeS5kZXBhcnR1cmVMb2NhdGlvbklkKSA6IG51bGw7XG4gICAgdGhpcy50cmF2ZWxsaW5nVG8gPSBxdWVyeS5hcnJpdmFsTG9jYXRpb25JZCA/IHJlc2lOIDogbnVsbDtcbiAgICB0aGlzLnZpYUxvY2F0aW9uID0gcXVlcnkudmlhTG9jYXRpb25JZCA/IGF3YWl0IGZldGNoUmFpbFN0YXRpb24ocXVlcnkudmlhTG9jYXRpb25JZCkgOiBudWxsO1xuICAgIHRoaXMudmlhID0gcXVlcnkudmlhTG9jYXRpb25JZD8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgIH1cbiAgfVxuXG4gIHNldHVwVHJhaW5saW5lRVVUcmF2ZWxsZXJzKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKHRoaXMuc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi52YWx1ZSk7XG4gICAgY29uc3QgY3VycmVudFRyYXZlbGxlcnMgPSB0aGlzLnNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24udmFsdWU7XG5cbiAgICAvLyBjb21wYXJlIHRoZSBsZW5ndGhzIG9mIHRoZSB0cmFpbmxpbmV0cmF2ZWxsZXJzIGFuZCB0aGUgbm9ybWFsIHRyYXZlbGxlcnNcbiAgICBjb25zdCBzaXplRGlmZmVyZW5jZSA9IGN1cnJlbnRUcmF2ZWxsZXJzLmxlbmd0aCAtIHRoaXMudHJhaW5saW5lVHJhdmVsbGVycy5sZW5ndGg7XG4gICAgY29uc29sZS5sb2coYCsrKyBXZSBuZWVkIHRvIGFkZCAke3NpemVEaWZmZXJlbmNlfSBuZXcgdHJhaW5saW5lIHRyYXZlbGxlcnMgKysrYCk7XG4gICAgY29uc3Qgc3RhcnRpbmdMZW5ndGggPSB0aGlzLnRyYWlubGluZVRyYXZlbGxlcnMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZURpZmZlcmVuY2U7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudFRyYXZlbGxlciA9IGN1cnJlbnRUcmF2ZWxsZXJzW3N0YXJ0aW5nTGVuZ3RoICsgaV07XG4gICAgICBjb25zb2xlLmxvZyhjdXJyZW50VHJhdmVsbGVyKTtcbiAgICAgIGNvbnN0IG5ld1RyYWlubGluZVRyYXZlbGxlcjogVHJhaW5saW5lVHJhdmVsbGVyID0ge1xuICAgICAgICBuYW1lOiBgJHtjdXJyZW50VHJhdmVsbGVyLmZvcmVuYW1lfSAke2N1cnJlbnRUcmF2ZWxsZXIuc3VybmFtZX1gLFxuICAgICAgICBhZ2U6IHRoaXMuX2dldEFnZUZyb21Eb2IoY3VycmVudFRyYXZlbGxlci5kb2IpLFxuICAgICAgICBhZ2VSYW5nZTogdGhpcy5fZ2V0QWdlUmFuZ2VGcm9tRG9iKGN1cnJlbnRUcmF2ZWxsZXIuZG9iKSxcbiAgICAgICAgb3JpZ2luYWxVc2VyR3Vlc3RJZDogY3VycmVudFRyYXZlbGxlci5pZCxcbiAgICAgICAgbG95YWx0aWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbG95YWx0eUNvZGU6ICcnLFxuICAgICAgICAgICAgbG95YWx0eU51bWJlcjogJycsXG4gICAgICAgICAgICBsb3lhbHR5TnVtYmVyUmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgbG95YWx0eVBhdHRlcm46ICcnLFxuICAgICAgICAgICAgbG95YWx0eVByZWZpeDogJydcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgICBjb25zb2xlLmxvZygnTmV3IHRyYWlubGluZSB0cmF2ZWxsZXI6ICcsIG5ld1RyYWlubGluZVRyYXZlbGxlcik7XG4gICAgICB0aGlzLnRyYWlubGluZVRyYXZlbGxlcnNbc3RhcnRpbmdMZW5ndGggKyBpXSA9IG5ld1RyYWlubGluZVRyYXZlbGxlcjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnYWxsIHRyYWlubGluZSB0cmF2ZWxsZXJzOiAnLCB0aGlzLnRyYWlubGluZVRyYXZlbGxlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QWdlRnJvbURvYihkb2I6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGFnZSA9IDA7XG5cbiAgICBpZiAoZG9iKSB7XG4gICAgICBjb25zdCBkaWZmID0gbW9tZW50KCkuZGlmZihkb2IsICd5ZWFycycpO1xuICAgICAgYWdlID0gTWF0aC5mbG9vcihkaWZmKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QWdlUmFuZ2VGcm9tRG9iKGRvYjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBhZ2UgPSB0aGlzLl9nZXRBZ2VGcm9tRG9iKGRvYik7XG5cbiAgICBpZiAoYWdlICYmIGFnZSA8PSAyNSkge1xuICAgICAgcmV0dXJuICd5b3V0aCc7XG4gICAgfVxuXG4gICAgaWYgKGFnZSA8PSA1OSkge1xuICAgICAgcmV0dXJuICdhZHVsdCc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdzZW5pb3InO1xuICB9XG5cbiAgcmVtb3ZlVHJhaW5saW5lVHJhdmVsbGVyKHRyYXZlbGxlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRyYWlubGluZVRyYXZlbGxlcnMgPSB0aGlzLnRyYWlubGluZVRyYXZlbGxlcnMuZmlsdGVyKFxuICAgICAgdHJhdmVsbGVyID0+IHRyYXZlbGxlci5vcmlnaW5hbFVzZXJHdWVzdElkICE9PSB0cmF2ZWxsZXJJZFxuICAgICk7XG4gIH1cblxuICBncm91cFN0YXRpb25JbmZvKGluZm86IFJhaWxTdGF0aW9uKTogSVJhaWxTdGF0aW9uSW5mb3JtYXRpb24ge1xuICAgIGNvbnN0IHRpY2tldE9mZmljZVNoYXJlOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICBhY2Nlc3NpYmxlVGlja2V0TWFjaGluZXM6IHtcbiAgICAgICAgaW5mbzogbnVsbCxcbiAgICAgICAgZXh0cmFJbmZvOiBpbmZvLmFjY2Vzc2libGVUaWNrZXRNYWNoaW5lcyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICBoZWlnaHRBZGp1c3RlZFRpY2tldE9mZmljZUNvdW50ZXI6IHtcbiAgICAgICAgaW5mbzogaW5mby5oZWlnaHRBZGp1c3RlZFRpY2tldE9mZmljZUNvdW50ZXIsXG4gICAgICAgIGV4dHJhSW5mbzogaW5mby5oZWlnaHRBZGp1c3RlZFRpY2tldE9mZmljZUNvdW50ZXJJbmZvLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIGluZHVjdGlvbkxvb3A6IHtcbiAgICAgICAgaW5mbzogaW5mby5pbmR1Y3Rpb25Mb29wLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB0aWNrZXRPZmZpY2VJbmZvOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICB0aWNrZXRPZmZpY2VPcGVuaW5nVGltZXM6IHtcbiAgICAgICAgaW5mbzogaW5mby50aWNrZXRPZmZpY2VPcGVuaW5nVGltZXMsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5zdHJpbmdcbiAgICAgIH0sXG4gICAgICB0cmF2ZWxDYXJkWm9uZToge1xuICAgICAgICBpbmZvOiBpbmZvLnRyYXZlbENhcmRab25lLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuc3RyaW5nXG4gICAgICB9LFxuICAgICAgdGlja2V0TWFjaGluZToge1xuICAgICAgICBpbmZvOiBpbmZvLnRpY2tldE1hY2hpbmUsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9LFxuICAgICAgLi4udGlja2V0T2ZmaWNlU2hhcmVcbiAgICB9O1xuXG4gICAgY29uc3Qgb3lzdGVyQ2FyZDogSVN0YXRpb25JbmZvID0ge1xuICAgICAgb3lzdGVyQ2FyZHNJc3N1ZWQ6IHtcbiAgICAgICAgaW5mbzogaW5mby5veXN0ZXJDYXJkc0lzc3VlZCxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICBveXN0ZXJDYXJkc1RvcFVwOiB7XG4gICAgICAgIGluZm86IGluZm8ub3lzdGVyQ2FyZHNUb3BVcCxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICBveXN0ZXJDYXJkVXNhYmxlOiB7XG4gICAgICAgIGluZm86IGluZm8ub3lzdGVyQ2FyZFVzYWJsZSxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICBveXN0ZXJDYXJkSW5mbzoge1xuICAgICAgICBpbmZvOiBpbmZvLm95c3RlckNhcmRJbmZvLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuc3RyaW5nXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHNtYXJ0Q2FyZDogSVN0YXRpb25JbmZvID0ge1xuICAgICAgc21hcnRDYXJkSXNzdWVkOiB7XG4gICAgICAgIGluZm86IGluZm8uc21hcnRDYXJkSXNzdWVkLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIHNtYXJ0Q2FyZFZhbGlkYXRvcjoge1xuICAgICAgICBpbmZvOiBpbmZvLnNtYXJ0Q2FyZFZhbGlkYXRvcixcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICBzbWFydENhcmRJbmZvOiB7XG4gICAgICAgIGluZm86IGluZm8uc21hcnRDYXJkSW5mbyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LnN0cmluZ1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdHJvbGxleVNoYXJlOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICB0cm9sbGV5czoge1xuICAgICAgICBpbmZvOiBpbmZvLnRyb2xsZXlzLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGVscFNoYXJlOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICBhY2Nlc3NpYmlsaXR5U3RhZmZIZWxwT3BlbmluZ1RpbWVzOiB7XG4gICAgICAgIGluZm86IGluZm8uYWNjZXNzaWJpbGl0eVN0YWZmSGVscE9wZW5pbmdUaW1lcyxcbiAgICAgICAgZXh0cmFJbmZvOiBpbmZvLmFjY2Vzc2liaWxpdHlTdGFmZkhlbHBBdmFpbGFibGVJbmZvLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYXJyYXlcbiAgICAgIH0sXG4gICAgICBjdXN0b21lckhlbHBQb2ludHM6IHtcbiAgICAgICAgaW5mbzogaW5mby5jdXN0b21lckhlbHBQb2ludHMsXG4gICAgICAgIGV4dHJhSW5mbzogaW5mby5jdXN0b21lckhlbHBQb2ludHNJbmZvLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGVscEluZm86IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIGluZm9BdmFpbGFibGVGcm9tU3RhZmY6IHtcbiAgICAgICAgaW5mbzogaW5mby5pbmZvQXZhaWxhYmxlRnJvbVN0YWZmLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYXJyYXlcbiAgICAgIH0sXG4gICAgICBpbmZvU3lzdGVtczoge1xuICAgICAgICBpbmZvOiBpbmZvLmluZm9TeXN0ZW1zLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYXJyYXlcbiAgICAgIH0sXG4gICAgICAuLi5oZWxwU2hhcmUsXG4gICAgICBjdXN0b21lclNlcnZpY2U6IHtcbiAgICAgICAgaW5mbzogaW5mby5jdXN0b21lclNlcnZpY2UsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5zdHJpbmdcbiAgICAgIH0sXG4gICAgICBsZWZ0THVnZ2FnZToge1xuICAgICAgICBpbmZvOiBpbmZvLmxlZnRMdWdnYWdlLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIGxvc3RQcm9wZXJ0eU9wZW5pbmdUaW1lczoge1xuICAgICAgICBpbmZvOiBpbmZvLmxvc3RQcm9wZXJ0eU9wZW5pbmdUaW1lcyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmFycmF5XG4gICAgICB9LFxuICAgICAgLi4udHJvbGxleVNoYXJlLFxuICAgICAgY2N0djoge1xuICAgICAgICBpbmZvOiBpbmZvLmNjdHYsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB0b2lsZXRzU2hhcmU6IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIG5hdGlvbmFsS2V5VG9pbGV0czoge1xuICAgICAgICBpbmZvOiBpbmZvLm5hdGlvbmFsS2V5VG9pbGV0cyxcbiAgICAgICAgZXh0cmFJbmZvOiBpbmZvLm5hdGlvbmFsS2V5VG9pbGV0c0xvY2F0aW9uLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbG91bmdlc1NoYXJlOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICB3YWl0aW5nUm9vbToge1xuICAgICAgICBpbmZvOiBpbmZvLndhaXRpbmdSb29tLFxuICAgICAgICBleHRyYUluZm86IGluZm8ud2FpdGluZ1Jvb21Mb2NhdGlvbixcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICBzZWF0ZWRBcmVhOiB7XG4gICAgICAgIGluZm86IGluZm8uc2VhdGVkQXJlYSxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcGhvbmVTaGFyZTogSVN0YXRpb25JbmZvID0ge1xuICAgICAgcHVibGljUGhvbmU6IHtcbiAgICAgICAgaW5mbzogaW5mby5wdWJsaWNQaG9uZSxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhdGlvbkFjY2Vzc2liaWxpdHk6IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIHN0ZXBGcmVlQWNjZXNzSW5mbzoge1xuICAgICAgICBpbmZvOiBudWxsLFxuICAgICAgICBleHRyYUluZm86IGluZm8uc3RlcEZyZWVBY2Nlc3NJbmZvLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuc3RyaW5nXG4gICAgICB9LFxuICAgICAgdGlja2V0R2F0ZXM6IHtcbiAgICAgICAgaW5mbzogaW5mby50aWNrZXRHYXRlcyxcbiAgICAgICAgZXh0cmFJbmZvOiBpbmZvLnRpY2tldEdhdGVzSW5mbyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICAuLi50aWNrZXRPZmZpY2VTaGFyZSxcbiAgICAgIHJhbXBGb3JUcmFpbkFjY2Vzczoge1xuICAgICAgICBpbmZvOiBpbmZvLnJhbXBGb3JUcmFpbkFjY2VzcyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICAuLi50b2lsZXRzU2hhcmUsXG4gICAgICAuLi5sb3VuZ2VzU2hhcmUsXG4gICAgICAuLi5waG9uZVNoYXJlLFxuICAgICAgd2hlZWxjaGFpcnM6IHtcbiAgICAgICAgaW5mbzogaW5mby53aGVlbGNoYWlycyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICAuLi50cm9sbGV5U2hhcmVcbiAgICB9O1xuICAgIGNvbnN0IGdldHRpbmdUb1N0YXRpb246IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIGFjY2Vzc2libGVUYXhpc0luZm86IHtcbiAgICAgICAgaW5mbzogbnVsbCxcbiAgICAgICAgZXh0cmFJbmZvOiBpbmZvLmFjY2Vzc2libGVUYXhpc0luZm8sXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9LFxuICAgICAgaW1wYWlyZWRNb2JpbGl0eVNldERvd246IHtcbiAgICAgICAgaW5mbzogaW5mby5pbXBhaXJlZE1vYmlsaXR5U2V0RG93bixcbiAgICAgICAgZXh0cmFJbmZvOiBpbmZvLmltcGFpcmVkTW9iaWxpdHlTZXREb3duSW5mbyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICBjYXJQYXJrQWNjZXNzaWJsZVNwYWNlczoge1xuICAgICAgICBpbmZvOiBpbmZvLmNhclBhcmtBY2Nlc3NpYmxlU3BhY2VzLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuc3RyaW5nXG4gICAgICB9LFxuICAgICAgY2FyUGFya0FjY2Vzc2libGU6IHtcbiAgICAgICAgaW5mbzogaW5mby5jYXJQYXJrQWNjZXNzaWJsZSxcbiAgICAgICAgZXh0cmFJbmZvOiBpbmZvLmNhclBhcmtBY2Nlc3NpYmxlSW5mbyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHN0YWZmSGVscDogSVN0YXRpb25JbmZvID0ge1xuICAgICAgLi4uaGVscFNoYXJlLFxuICAgICAgYWNjZXNzaWJpbGl0eUhlbHBsaW5lSW5mbzoge1xuICAgICAgICBpbmZvOiBudWxsLFxuICAgICAgICBleHRyYUluZm86IGluZm8uYWNjZXNzaWJpbGl0eUhlbHBsaW5lSW5mbyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LnN0cmluZ1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdG9pbGV0c0JhYnlJbmZvOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICB0b2lsZXRzOiB7XG4gICAgICAgIGluZm86IGluZm8udG9pbGV0cyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICAuLi50b2lsZXRzU2hhcmUsXG4gICAgICBiYWJ5Q2hhbmdlOiB7XG4gICAgICAgIGluZm86IGluZm8uYmFieUNoYW5nZSxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgbG91bmdlc0luZm86IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIC4uLmxvdW5nZXNTaGFyZSxcbiAgICAgIGZpcnN0Q2xhc3NMb3VuZ2U6IHtcbiAgICAgICAgaW5mbzogaW5mby5maXJzdENsYXNzTG91bmdlLFxuICAgICAgICBleHRyYUluZm86IGluZm8uZmlyc3RDbGFzc0xvdW5nZUluZm8sXG4gICAgICAgIGluZm9EZXRhaWw6IGluZm8uZmlyc3RDbGFzc0xvdW5nZU9wZW5pbmdUaW1lcyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNhclBhcmtUZWxlcGhvbmUgPSBpbmZvLmNhclBhcmtUZWxlcGhvbmUgPyBgJHtpbmZvLmNhclBhcmtUZWxlcGhvbmV9PGJyLz5gIDogJyc7XG4gICAgY29uc3QgY2FyUGFya0VtYWlsID0gaW5mby5jYXJQYXJrRW1haWwgPyBgJHtpbmZvLmNhclBhcmtFbWFpbH08YnIvPmAgOiAnJztcbiAgICBjb25zdCBwYXJraW5nRXh0cmEgPSBgJHtjYXJQYXJrVGVsZXBob25lfSAke2NhclBhcmtFbWFpbH0gJHtpbmZvLmNhclBhcmtVUkwgfHwgJyd9YDtcbiAgICBjb25zdCBwYXJraW5nSW5mbzogSVN0YXRpb25JbmZvID0ge1xuICAgICAgY2FyUGFya09wZXJhdG9yOiB7XG4gICAgICAgIGluZm86IGluZm8uY2FyUGFya09wZXJhdG9yLFxuICAgICAgICBleHRyYUluZm86IHBhcmtpbmdFeHRyYSxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LnN0cmluZ1xuICAgICAgfSxcbiAgICAgIGNhclBhcmtPcGVuaW5nVGltZXM6IHtcbiAgICAgICAgaW5mbzogaW5mby5jYXJQYXJrT3BlbmluZ1RpbWVzLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYXJyYXlcbiAgICAgIH0sXG4gICAgICBjYXJQYXJrU3BhY2VzOiB7XG4gICAgICAgIGluZm86IGluZm8uY2FyUGFya1NwYWNlcyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LnN0cmluZ1xuICAgICAgfSxcbiAgICAgIGNhclBhcmtDQ1RWOiB7XG4gICAgICAgIGluZm86IGluZm8uY2FyUGFya0NDVFYsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzaG9wcGluZ0luZm86IElTdGF0aW9uSW5mbyA9IHtcbiAgICAgIGF0bToge1xuICAgICAgICBpbmZvOiBpbmZvLmF0bSxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH0sXG4gICAgICBmeEJ1cmVhdToge1xuICAgICAgICBpbmZvOiBpbmZvLmZ4QnVyZWF1LFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIGJ1ZmZldDoge1xuICAgICAgICBpbmZvOiBpbmZvLmJ1ZmZldCxcbiAgICAgICAgZXh0cmFJbmZvOiBpbmZvLmJ1ZmZldExvY2F0aW9uLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIFNob3BzOiB7XG4gICAgICAgIGluZm86IGluZm8uc2hvcHMsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5ib29sZWFuXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHdJRklJbmZvOiBJU3RhdGlvbkluZm8gPSB7XG4gICAgICAuLi5waG9uZVNoYXJlLFxuICAgICAgd2lGaToge1xuICAgICAgICBpbmZvOiBpbmZvLndpRmksXG4gICAgICAgIGV4dHJhSW5mbzogaW5mby53aUZpSW5mbyxcbiAgICAgICAgdHlwZTogU2NoZW1hRm9ybWF0LmJvb2xlYW5cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGN5Y2xlSW5mbzogSVN0YXRpb25JbmZvID0ge1xuICAgICAgY3ljbGVTdG9yYWdlU3BhY2VzOiB7XG4gICAgICAgIGluZm86IGluZm8uY3ljbGVTdG9yYWdlU3BhY2VzLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuc3RyaW5nXG4gICAgICB9LFxuICAgICAgY3ljbGVTdG9yYWdlVHlwZToge1xuICAgICAgICBpbmZvOiBpbmZvLmN5Y2xlU3RvcmFnZVR5cGUsXG4gICAgICAgIHR5cGU6IFNjaGVtYUZvcm1hdC5zdHJpbmdcbiAgICAgIH0sXG4gICAgICBjeWNsZVN0b3JhZ2VMb2NhdGlvbjoge1xuICAgICAgICBpbmZvOiBpbmZvLmN5Y2xlU3RvcmFnZUxvY2F0aW9uLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuc3RyaW5nXG4gICAgICB9LFxuICAgICAgY3ljbGVTdG9yYWdlU2hlbHRlcmVkOiB7XG4gICAgICAgIGluZm86IGluZm8uY3ljbGVTdG9yYWdlU2hlbHRlcmVkLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfSxcbiAgICAgIGN5Y2xlU3RvcmFnZUNDVFY6IHtcbiAgICAgICAgaW5mbzogaW5mby5jeWNsZVN0b3JhZ2VDQ1RWLFxuICAgICAgICB0eXBlOiBTY2hlbWFGb3JtYXQuYm9vbGVhblxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGlja2V0T2ZmaWNlSW5mbzogdGlja2V0T2ZmaWNlSW5mbyxcbiAgICAgIG95c3RlckNhcmQ6IG95c3RlckNhcmQsXG4gICAgICBzbWFydENhcmQ6IHNtYXJ0Q2FyZCxcbiAgICAgIGhlbHBJbmZvOiBoZWxwSW5mbyxcbiAgICAgIHN0YXRpb25BY2Nlc3NpYmlsaXR5OiBzdGF0aW9uQWNjZXNzaWJpbGl0eSxcbiAgICAgIGdldHRpbmdUb1N0YXRpb246IGdldHRpbmdUb1N0YXRpb24sXG4gICAgICBzdGFmZkhlbHA6IHN0YWZmSGVscCxcbiAgICAgIHRvaWxldHNCYWJ5SW5mbzogdG9pbGV0c0JhYnlJbmZvLFxuICAgICAgbG91bmdlc0luZm86IGxvdW5nZXNJbmZvLFxuICAgICAgcGFya2luZ0luZm86IHBhcmtpbmdJbmZvLFxuICAgICAgc2hvcHBpbmdJbmZvOiBzaG9wcGluZ0luZm8sXG4gICAgICB3SUZJSW5mbzogd0lGSUluZm8sXG4gICAgICBjeWNsZUluZm86IGN5Y2xlSW5mb1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gY2hhbmdlIHRoZSBsb2NhdGlvbiB3aXRob3V0IHJlc2V0aW5nIHRoZSB0cmF2ZWx0by9mcm9tXG4gICAqIEBwYXJhbSBuZXdMb2NcbiAgICovXG4gIGNoYW5nZUxvY2F0aW9uKG5ld0xvYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbG9jYXRpb24gPSBuZXdMb2M7XG4gIH1cblxuICBhc3luYyBzZWxlY3RUaWNrZXRGb3JFeGNoYW5nZShcbiAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24sXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxuICAgIHNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXMsXG4gICAgd2VsbGJlaW5nOiBib29sZWFuID0gZmFsc2UsXG4gICAgcmVhcHBseUZpbHRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgaXNFdTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8UmFpbEJhc2tldEl0ZW0+IHtcbiAgICBjb25zdCBmYXJlVHlwZSA9IHRoaXMuc2VsZWN0ZWRUaWNrZXQ/LmZhcmU/LnR5cGU7XG4gICAgY29uc3QgaWdub3JlVGlja2V0RXh0cmFzID0gdGhpcy50cmF2ZWxjYXJkRmFyZUNoZWNrKFxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldD8uam91cm5leT8udGlja2V0RXh0cmFzLFxuICAgICAgZmFyZVR5cGVcbiAgICApO1xuXG4gICAgaWYgKCFzb3VyY2VJZCkge1xuICAgICAgc291cmNlSWQgPSB0aGlzLnJlc3VsdHMudmFsdWVbMF0uc291cmNlSWQudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXJhaWxGYXJlLnNlbGVjdGFibGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBSYWlsIEZhcmUgaXMgbm90IHNlbGVjdGFibGUgKysrJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoID09PSByYWlsRmFyZS5mYXJlSGFzaFxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgICBpZiAocmVhcHBseUZpbHRlcikgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRUaWNrZXQgPSB0aGlzLnNlbGVjdGVkVGlja2V0O1xuICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcbiAgICAgIFVzZXJGYXZvcnVyaXRlLkFsdGVybmF0aXZlUmFpbEl0aW5lcmFyeUVuYWJsZWRcbiAgICApO1xuICAgIGlmIChcbiAgICAgIHNlbGVjdGVkVGlja2V0ICYmXG4gICAgICAhd2VsbGJlaW5nICYmXG4gICAgICB0aGlzLmFsdGVybmF0aXZlV2VsbGJlaW5nICYmXG4gICAgICBkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uSW5ib3VuZFxuICAgICkge1xuICAgICAgY29uc3Qgb3V0OiBPQlRSYWlsSm91cm5leU9wdGlvbiA9IHNlbGVjdGVkVGlja2V0LmpvdXJuZXk7XG4gICAgICBjb25zdCBpbkI6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0gam91cm5leTtcblxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzID0gbW9tZW50KG91dC5hcnJpdmVEYXRlVGltZSkuZGlmZihcbiAgICAgICAgbW9tZW50KG91dC5kZXBhcnREYXRlVGltZSksXG4gICAgICAgICdob3VycycsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBjb25zdCB0aW1lRGlmZkluSG91cnNJbiA9IG1vbWVudChpbkIuYXJyaXZlRGF0ZVRpbWUpLmRpZmYoXG4gICAgICAgIG1vbWVudChpbkIuZGVwYXJ0RGF0ZVRpbWUpLFxuICAgICAgICAnaG91cnMnLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgY29uc3QgZGF5RGlmZmVybmNlID0gbW9tZW50KGluQi5kZXBhcnREYXRlVGltZSkuZGlmZihtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSwgJ2RheScpO1xuICAgICAgY29uc3QgdG9BZGQgPSBhd2FpdCB0aGlzLmNoZWNrQWx0ZXJuYXRpdmVIb3VycyhcbiAgICAgICAgdGltZURpZmZJbkhvdXJzICsgdGltZURpZmZJbkhvdXJzSW4sXG4gICAgICAgIGRheURpZmZlcm5jZVxuICAgICAgKTtcbiAgICAgIGlmICh0b0FkZCkge1xuICAgICAgICB0aGlzLnNlbGVjdFRpY2tldChkaXJlY3Rpb24sIGpvdXJuZXksIHJhaWxGYXJlLCBzb3VyY2VJZCwgc2VjdGlvbiwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyA9IHRoaXMudGVtcFBhcmFtcztcblxuICAgICAgc3dpdGNoIChzZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3NpbmdsZUpvdXJuZXlGYXJlcyc6XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcbiAgICAgICAgICAgICAgam91cm5leSxcbiAgICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgIWlnbm9yZVRpY2tldEV4dHJhcyAmJlxuICAgICAgICAgICAgcmFpbEZhcmUudGVybXNbMF0udGVybXM/LmNhdGVnb3J5ICE9PSAnVFJBVkVMQ0FSRCdcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlLCB3aW5kb3dDbGFzczogJ3JhaWwtdGlja2V0cy1kaWFsb2cnLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAgICAgICAgeyBvdXRib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5IH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIXRpY2tldEV4dHJhcykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcyA/IHRpY2tldEV4dHJhcyA6IFtdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggJiYgcmFpbEZhcmUudGVybXNbMF0udGVybXM/LmNhdGVnb3J5ID09PSAnVFJBVkVMQ0FSRCcpIHtcbiAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGJhc2tldCA9IGF3YWl0IHRoaXMuY3JlYXRlU2luZ2xlQmFza2V0SXRlbURldGFpbChcbiAgICAgICAgICAgIHNvdXJjZUlkLFxuICAgICAgICAgICAgc2VhcmNoUXVlcnksXG4gICAgICAgICAgICBqb3VybmV5LFxuICAgICAgICAgICAgcmFpbEZhcmUsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGlzRXVcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBiYXNrZXQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2luZ2xlQmFza2V0SXRlbURldGFpbChcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcbiAgICB0ZW1wUGFyYW1zOiBSYWlsVGVtcFBhcmFtcyxcbiAgICByYWlsSm91cm5leU9wdGlvbjogT0JUUmFpbEpvdXJuZXlPcHRpb24sXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcbiAgICBpbmdvcmVJbnZva2VkOiBib29sZWFuID0gZmFsc2UsXG4gICAgaXNFdTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8UmFpbEJhc2tldEl0ZW0+IHtcbiAgICBjb25zb2xlLmxvZygnYWRkaW5nOiAnLCByYWlsRmFyZSk7XG5cbiAgICBjb25zdCByYWlsUXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXMpO1xuXG4gICAgaWYgKCFyYWlsUXVlcnkuY2hpbGRyZW4pIHtcbiAgICAgIHJhaWxRdWVyeS5jaGlsZHJlbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsZXQgb3V0VGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcbiAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGNyZWF0ZSBUaWNrZXRFeHRyYXNPYmplY3QgYW5kIGFkZGVkIGl0IHRvIHRoZSBiYXNrZXRcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XG4gICAgICBvdXRUaWNrZXRFeHRyYXMgPSB0aGlzLmNyZWF0ZVRpY2tldEV4dHJhc09iamVjdChyYWlsSm91cm5leU9wdGlvbi50aWNrZXRFeHRyYXMpO1xuICAgIH1cblxuICAgIC8vIGlmIChyYWlsSm91cm5leU9wdGlvbi51bnNlbGxhYmxlKSB7XG4gICAgLy8gICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAvLyB9XG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuXG4gICAgY29uc3QgcmFpbEZhcmVMaXN0OiB7IGlkPzogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdID0gcmFpbEZhcmUuaWRlbnRpZmllcnM/LmZhcmVzPy5sZW5ndGhcbiAgICAgID8gcmFpbEZhcmUuaWRlbnRpZmllcnM/LmZhcmVzPy5tYXAoeCA9PiAoeyBpZDogeC5pZCwgbmFtZTogeC5uYW1lIH0pKVxuICAgICAgOiBbeyBuYW1lOiByYWlsRmFyZS50eXBlIH1dO1xuXG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSB0aGlzLnVzZXJTZXJ2aWNlLmZpbmRTZXJ2aWNlKHNlcnZpY2VJZCk/Lm5hbWU7XG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoXG4gICAgICByYWlsRmFyZSxcbiAgICAgIHJhaWxKb3VybmV5T3B0aW9uLFxuICAgICAgcmFpbEZhcmVMaXN0LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgc2VydmljZU5hbWVcbiAgICApO1xuICAgIGlmIChiYXNrZXQpIHtcbiAgICAgIGNvbnN0IGxlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ocmFpbEpvdXJuZXlPcHRpb24sIGlzRXUpO1xuXG4gICAgICBjb25zdCBsb3dlc3RUaWNrZXQgPSB0aGlzLmZpbmRDaGVhcGVzdFRpY2tldCgpO1xuICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCA9ICtsb3dlc3RUaWNrZXQuYW1vdW50LnRvRml4ZWQoMik7XG5cbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xuICAgICAgICByZXF1aXJlc092ZXJyaWRlUmVhc29uOiByYWlsRmFyZS51bmF2YWlsYWJsZSxcbiAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZC50b1N0cmluZygpLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBleHBpcmVzQXQ6IHJhaWxGYXJlLmlkZW50aWZpZXJzPy5leHBpcmVzQXQsXG4gICAgICAgICAgaXNFVTogaXNFdSA/IGlzRXUgOiBudWxsLCAvLyAhc2V0IHRvIG51bGwgYXMgRXZvbHZpIGRvc2VuJ3QgaGF2ZSB0aGlzIGluIHRoZSBzY2hlbWFcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChyYWlsRmFyZS50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcbiAgICAgICAgICAgIChpdGVtOiBSYWlsVGlja2V0UXVldWUpOiBUaWNrZXRRdWV1ZUxpc3QgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLFxuICAgICAgICAgIGFjY291bnRzTGlzdDogKHJhaWxKb3VybmV5T3B0aW9uLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxuICAgICAgICAgICAgKGl0ZW06IFJhaWxBY2NvdW50KTogQWNjb3VudHNMaXN0ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiByYWlsSm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24udG8sXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogcmFpbEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWUsXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24uZnJvbSxcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiByYWlsRmFyZS5wcm92aWRlck5hbWUsXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHJhaWxGYXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgcHJpY2U6IHJhaWxGYXJlLnByaWNlLFxuICAgICAgICAgICAgICAgIGxlZ3MsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkRGVzdGluYXRpb25zOiByYWlsRmFyZS5wZXJtaXR0ZWREZXN0aW5hdGlvbnMsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkT3JpZ2luczogcmFpbEZhcmUucGVybWl0dGVkT3JpZ2luc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IHJhaWxGYXJlLmlkZW50aWZpZXJzLnRyYW5zYWN0aW9uSWRlbnRpZmllcixcbiAgICAgICAgICBvdXRib3VuZDoge1xuICAgICAgICAgICAgZVRpY2tldDogISFyYWlsRmFyZS5lVGlja2V0QXZhaWxhYmxlLFxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbcmFpbEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IHJhaWxGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxuICAgICAgICAgICAgam91cm5leUxlZ3M6IHRoaXMucmVtb3ZlZFNjaGVkdWxlZFBsYXRmb3JtRnJvbUNhbGxpbmdQb2ludHMoXG4gICAgICAgICAgICAgIHJhaWxKb3VybmV5T3B0aW9uLmpvdXJuZXlMZWdzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNTcGxpdDogISFyYWlsRmFyZS5pZGVudGlmaWVycz8uaXNTcGxpdCxcbiAgICAgICAgICAgIGZhcmVzOiByYWlsRmFyZT8uaWRlbnRpZmllcnM/LmZhcmVzLFxuICAgICAgICAgICAgY29tcG9zaXRpb246IHJhaWxGYXJlLmlkZW50aWZpZXJzPy5jb21wb3NpdGlvblxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnMsXG4gICAgICAgICAgZGlzY291bnRJbmZvOiByYWlsRmFyZS5kaXNjb3VudEluZm8sXG4gICAgICAgICAgZnVsbFByaWNlOiByYWlsRmFyZS5mdWxsUHJpY2UsXG4gICAgICAgICAgc2luZ2xlT3JSZXR1cm46XG4gICAgICAgICAgICB0ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leVxuICAgICAgICAgICAgICA/IFRpY2tldFR5cGUuUmV0dXJuXG4gICAgICAgICAgICAgIDogVGlja2V0VHlwZS5TaW5nbGVcbiAgICAgICAgfSxcbiAgICAgICAgYWR1bHRzOiByYWlsUXVlcnkuYWR1bHRzLFxuICAgICAgICBjaGlsZHJlbjogcmFpbFF1ZXJ5LmNoaWxkcmVuID8gcmFpbFF1ZXJ5LmNoaWxkcmVuIDogdW5kZWZpbmVkLFxuICAgICAgICBwcmljZTogcmFpbEZhcmUucHJpY2UsXG4gICAgICAgIGN1cnJlbmN5OiByYWlsRmFyZS5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiByYWlsUXVlcnksXG4gICAgICAgIGNvMlBlckl0ZW06IHJhaWxKb3VybmV5T3B0aW9uLmNvMlBlckl0ZW0sXG4gICAgICAgIGNvMlBlclBhc3NlbmdlcjogcmFpbEpvdXJuZXlPcHRpb24uY28yUGVyUGFzc2VuZ2VyLFxuICAgICAgICBvdXRib3VuZERhdGU6IHJhaWxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxuICAgICAgICBsb3dlc3RQcmljZTpcbiAgICAgICAgICBsb3dlc3RUaWNrZXQuYW1vdW50IHx8IGxvd2VzdFRpY2tldC5jdXJyZW5jeUNvZGUgIT09IHJhaWxGYXJlLmN1cnJlbmN5XG4gICAgICAgICAgICA/IGxvd2VzdFRpY2tldC5hbW91bnRcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTpcbiAgICAgICAgICBsb3dlc3RUaWNrZXQuYW1vdW50IHx8IGxvd2VzdFRpY2tldC5jdXJyZW5jeUNvZGUgIT09IHJhaWxGYXJlLmN1cnJlbmN5XG4gICAgICAgICAgICA/IDxDdXJyZW5jeUNvZGU+bG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGU6IHJhaWxGYXJlLnVuYXZhaWxhYmxlLFxuICAgICAgICByZWFzb25LZXlzOiByYWlsRmFyZS5yZXF1aXJlc1JlYXNvbktleXNcbiAgICAgIH07XG5cbiAgICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgYWRkIHRoZSBvYmplY3QgdG8gYmFza2V0SXRlbVxuICAgICAgaWYgKG91dFRpY2tldEV4dHJhcyAmJiAhcmFpbEZhcmUudHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0cmF2ZWxjYXJkJykpIHtcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmQudGlja2V0RXh0cmFzID0gb3V0VGlja2V0RXh0cmFzO1xuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QgPSBiYXNrZXRJdGVtLmRldGFpbC50aWNrZXRRdWV1ZUxpc3QuZmlsdGVyKFxuICAgICAgICAgIChpdGVtOiBUaWNrZXRRdWV1ZUxpc3QpID0+IGl0ZW0udHlwZSAhPT0gJ2VUaWNrZXQnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmFpbEZhcmUudGlja2V0T25EZXBhcnR1cmVBdmFpbGFibGUpIHtcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwudGlja2V0UXVldWVMaXN0ID0gYmFza2V0SXRlbS5kZXRhaWwudGlja2V0UXVldWVMaXN0LmZpbHRlcihcbiAgICAgICAgICAoaXRlbTogVGlja2V0UXVldWVMaXN0KSA9PiBpdGVtLnR5cGUgIT09ICdUaWNrZXRPbkRlcGFydHVyZSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhc2tldEl0ZW07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb3BlblJhaWxUaWNrZXREZXRhaWxzRGlhbG9nKGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLCB0aWNrZXQ6IE9CVFJhaWxKb3VybmV5RmFyZSwgdGVybXM6UmFpbFRpY2tldFRlcm1zTGlzdFtdLCBpZGVudGlmaWVyczogUmFpbElkZW50aWZpZXJzLCBzb3VyY2VJZDogc3RyaW5nKXtcbiAgICBpZiAodGVybXM/Lmxlbmd0aCA+IDEgJiYgdGlja2V0LmlkZW50aWZpZXJzPy5pc1NwbGl0KSB7XG4gICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHRoaXMudXNlclNlcnZpY2UuZmluZFNlcnZpY2Uoc291cmNlSWQpPy5uYW1lO1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgTW9kYWxUeXBlcy5SYWlsRmFyZUxpc3RDb21wb25lbnQsXG4gICAgICAgIHsgY2VudGVyZWQ6IHRydWUgfSxcbiAgICAgICAge1xuICAgICAgICAgIG91dGJvdW5kRmFyZVRlcm1zTGlzdDogdGVybXMsXG4gICAgICAgICAgb3V0Ym91bmRGYXJlczogaWRlbnRpZmllcnMuZmFyZXMsXG4gICAgICAgICAgc3BsaXRUeXBlOiBpZGVudGlmaWVycy5jb21wb3NpdGlvbj8uWzBdLFxuICAgICAgICAgIG9yaWdpbjogam91cm5leS5mcm9tLFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBqb3VybmV5LnRvLFxuICAgICAgICAgIHNlcnZpY2VOYW1lOiBzZXJ2aWNlTmFtZVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICBNb2RhbFR5cGVzLlJhaWxGYXJlVGVybXNDb21wb25lbnQsXG4gICAgICAgIHsgY2VudGVyZWQ6IHRydWUgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpY2tldERldGFpbHM6IHRlcm1zPy5bMF0/LnRlcm1zXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=