@annalib/anna-core 7.3.16 → 7.3.20

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.
@@ -115,16 +115,9 @@ export class AnnaFilterService {
115
115
  "userChanges",
116
116
  "userMG",
117
117
  "WeeklyAUR",
118
- "WeeklyAURatingOrImpressions",
119
- "BookedRate",
120
- "BookedRTG",
121
- "BookedIMPS",
122
- "AURTG",
123
- "AURTG",
124
- "PostedRating",
125
- "PostedImpressions",
118
+ "WeeklyAURatingOrImpressions"
126
119
  ];
127
- const calendarArr = ["period", "AirDate", "flightStartDate", "flightEndDate", "date", "startDate", "endDate", "revisionStartDate", "Week"];
120
+ const calendarArr = ["period", "AirDate", "flightStartDate", "flightEndDate", "date", "startDate", "endDate", "revisionStartDate"];
128
121
  const timeArr = ["StartTimeForFilter", "EndTimeForFilter", "time",
129
122
  "start_time_for_filter", "end_time_for_filter", "startEndTimeMulti", "startEndTime"];
130
123
  this.sliderSet = new Set(sliderArr);
@@ -212,7 +205,6 @@ export class AnnaFilterService {
212
205
  this.selectedRadio === "flightStartDate" ||
213
206
  this.selectedRadio === "flightEndDate" ||
214
207
  this.selectedRadio == "date" ||
215
- this.selectedRadio == "Week" ||
216
208
  this.selectedRadio == "revisionStartDate") {
217
209
  isFiltered =
218
210
  !isEqual(this.initialValueMap.get(this.selectedRadio), this.tooltipSelectedMap.get(this.selectedRadio)) &&
@@ -364,7 +356,7 @@ export class AnnaFilterService {
364
356
  return ((startDateIsBetweenSelDate || startDateIsSameAsSelStartDate) &&
365
357
  (endDateIsBetweenSelDate || endDateIsSameAsSelEndDate));
366
358
  }
367
- else if (key === "AirDate" || key === "flightStartDate" || key === "flightEndDate" || key === "Week") {
359
+ else if (key === "AirDate" || key === "flightStartDate" || key === "flightEndDate") {
368
360
  parsingFormat = "MM/DD/YYYY";
369
361
  let dateIsBetweenSelDate = dayjs(obj[key], parsingFormat).isBetween(value.minSelectedDate, value.maxSelectedDate);
370
362
  let dateIsSameAsSelStartDate = dayjs(obj[key], parsingFormat).isSame(value.minSelectedDate);
@@ -422,7 +414,7 @@ export class AnnaFilterService {
422
414
  if (this.sliderSet.has(key)) {
423
415
  filteredData = filteredData.filter((obj) => obj[key] >= value.min && obj[key] <= value.max);
424
416
  }
425
- else if (key === "startDate" || key === "endDate" || key === "AirDate" || key === "flightStartDate" || key === "flightEndDate" || key == "date" || key == "revisionStartDate" || key === "Week") {
417
+ else if (key === "startDate" || key === "endDate" || key === "AirDate" || key === "flightStartDate" || key === "flightEndDate" || key == "date" || key == "revisionStartDate") {
426
418
  filteredData = filteredData.filter((obj) => this.isObjectInTheRange(obj, value, key));
427
419
  }
428
420
  else if (key === "period") {
@@ -474,4 +466,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
474
466
  providedIn: 'root'
475
467
  }]
476
468
  }], ctorParameters: function () { return [{ type: i1.AnnaDateTimeFormatService }, { type: i2.AnnaSortService }]; } });
477
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1RSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxNQUFNLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLGtDQUFrQztBQUNsQyxPQUFPLEVBQUUseUJBQXlCLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFLdEQsTUFBTSxPQUFPLGlCQUFpQjtJQXlDNUIsWUFBb0IscUJBQWdELEVBQVUsZUFBZ0M7UUFBMUYsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUEyQjtRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXZDOUcsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsdUJBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQWMvQix3QkFBbUIsR0FBYSxFQUFFLENBQUM7UUFJbkMsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDMUIsUUFBUTtZQUNSLEtBQUs7WUFDTCxLQUFLO1lBQ0wsWUFBWTtZQUNaLFdBQVc7WUFDWCxX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Q0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQTtJQUNMLENBQUM7O0FBamdCYSw0QkFBVSxHQUFHLEVBQUcsQ0FBQTs4R0FyQ25CLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyLXNsaWRlci9uZ3gtc2xpZGVyJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBUaGlyZCBwYXJ0eSBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBtaW4sIG1heCwgbWFwLCBzb3J0QnksIHVuaXEsIGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcclxuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xyXG5pbXBvcnQgbWluTWF4IGZyb20gXCJkYXlqcy9wbHVnaW4vbWluTWF4XCI7XHJcbmltcG9ydCBpc0JldHdlZW4gZnJvbSBcImRheWpzL3BsdWdpbi9pc0JldHdlZW5cIjtcclxuaW1wb3J0IHsgU29ydFR5cGUsIFNvcnRUeXBlRW51bSB9IGZyb20gJy4uL21vZGVscy9hbm5hLXNvcnQubW9kZWwnO1xyXG5cclxuLy8gVXNlciBkZWZpbmVkIGltcG9ydCBzdGF0ZW1lbnRzIFxyXG5pbXBvcnQgeyBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLCBOZ2JEYXRlVHlwZSB9IGZyb20gJy4vYW5uYS1kYXRlLXRpbWUtZm9ybWF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tICcuL2FubmEtc29ydC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFGaWx0ZXJTZXJ2aWNlIHtcclxuXHJcbiAgdG9vbHRpcE1hcCA9IG5ldyBNYXAoKTtcclxuICB0b29sdGlwU2VsZWN0ZWRNYXAgPSBuZXcgTWFwKCk7XHJcbiAgaW5pdGlhbFZhbHVlTWFwOiBNYXA8c3RyaW5nLCBhbnk+O1xyXG4gIHRyYW5zbGF0ZUZ1bmM6IHN0cmluZztcclxuICBzZWxlY3RlZFJhZGlvOiBzdHJpbmc7XHJcbiAgc3ViUmFkaW9CdXR0b246IHN0cmluZztcclxuXHJcbiAgY2FsZW5kYXJTZXQ6IFNldDxzdHJpbmc+O1xyXG4gIHNsaWRlclNldDogU2V0PHN0cmluZz47XHJcbiAgdGltZVNldDogU2V0PHN0cmluZz47XHJcblxyXG4gIGluY2x1ZGVNdWx0aVRpbWU6IGJvb2xlYW47XHJcbiAgaW5jbHVkZVplcm9UaW1lOiBib29sZWFuO1xyXG4gIGluY2x1ZGVUaW1lUmFuZ2U6IGJvb2xlYW47XHJcblxyXG4gIGFwcGxpZWRGaWx0ZXJzQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgZmxpZ2h0RGF0ZVJhbmdlOiB7IG1pblNlbGVjdGVkRGF0ZTogYW55LCBtYXhTZWxlY3RlZERhdGU6IGFueSB9O1xyXG4gIHNsaWRlckRhdGE6IHsgbWluOiBhbnksIG1heDogYW55IH07XHJcbiAgbmd4U2xpZGVyT2JqOiBPcHRpb25zO1xyXG4gIHNsaWRlckN1cnJlbmN5U2V0ID0gbmV3IFNldChbXHJcbiAgICAnYm9va2VkJyxcclxuICAgICdjcHAnLFxyXG4gICAgJ2NwbScsXHJcbiAgICAncmN2UHJlZW1wdCcsXHJcbiAgICAnb3NQcmVlbXB0JyxcclxuICAgICdwb3N0ZWRBZHUnLFxyXG4gICAgJ3NjaGVkdWxlZEFkdScsXHJcbiAgICAnYXVkaWVuY2VEZWZpY2l0JyxcclxuICAgICdSYXRlJyxcclxuICAgICd1c2VyQURVcycsXHJcbiAgICAnYnV5ZXJDaGFuZ2VzJyxcclxuICAgICd1c2VyQ2hhbmdlcycsXHJcbiAgICAndXNlck1HJyxcclxuICBdKTtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBidWZmZXJTaXplID0gMjA7XHJcbiAgaXNGaWx0ZXJTb3J0QWN0aXZlOiBhbnkgPSBudWxsO1xyXG4gIHJlc2V0RmlsdGVyU29ydEFjdGl2ZVN0YXR1czogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLCBwcml2YXRlIGFubmFTb3J0U2VydmljZTogQW5uYVNvcnRTZXJ2aWNlKSB7XHJcbiAgICBkYXlqcy5leHRlbmQobWluTWF4KTtcclxuICAgIGRheWpzLmV4dGVuZChpc0JldHdlZW4pO1xyXG4gICAgY29uc29sZS5sb2coXCJBbm5hRmlsdGVyU2VydmljZSBzZXJ2aWNlIGNyZWF0ZWQuXCIpXHJcbiAgICBjb25zdCBzbGlkZXJBcnIgPSBbXHJcbiAgICAgIFwicmN2UHJlZW1wdFwiLFxyXG4gICAgICBcIm9zUHJlZW1wdFwiLFxyXG4gICAgICBcInJjdlVuZGVyRGx5XCIsXHJcbiAgICAgIFwicG9zdGVkQXVkUGVyY2VudFwiLFxyXG4gICAgICBcImJvb2tlZFwiLFxyXG4gICAgICBcInNwb3RzXCIsXHJcbiAgICAgIFwiZ3JwXCIsXHJcbiAgICAgIFwiY3BwXCIsXHJcbiAgICAgIFwiaW1wc1wiLFxyXG4gICAgICBcImNwbVwiLFxyXG4gICAgICBcIm9zVW5kZXJEbHlcIixcclxuICAgICAgXCJ0b3RhbFdlZWtzXCIsXHJcbiAgICAgIFwiV2Vla051bWJlclwiLFxyXG4gICAgICBcIlJhdGVcIixcclxuICAgICAgXCJPcmRlcmVkUmF0aW5nc09ySW1wcmVzc2lvbnNcIixcclxuICAgICAgXCJQb3N0ZWRSYXRpbmdzT3JJbXByZXNzaW9uc1wiLCAsXHJcbiAgICAgIFwicG9zdGVkQXVkUGVyY2VudFwiLFxyXG4gICAgICBcInBvc3RlZEFkdVwiLFxyXG4gICAgICBcInNjaGVkdWxlZEFkdVwiLFxyXG4gICAgICBcImF1ZGllbmNlRGVmaWNpdFwiLFxyXG4gICAgICBcIm9mZmVyZWRNR3NcIixcclxuICAgICAgXCJvdXRzdGFuZGluZ1BFXCIsXHJcbiAgICAgIFwib2ZmZXJlZEFEVXNcIixcclxuICAgICAgXCJ1ZERlZmljaXRWYWx1ZVwiLFxyXG4gICAgICBcImJvb2tlZFZhbHVlXCIsXHJcbiAgICAgIFwiYm9va2VkU3BvdHNcIixcclxuICAgICAgXCJ1c2VyQ2hhbmdlc1wiLFxyXG4gICAgICBcIlVER3JwXCIsXHJcbiAgICAgIFwiVURJbXBzXCIsXHJcbiAgICAgIFwiT0RHcnBcIixcclxuICAgICAgXCJPREltcHNcIixcclxuICAgICAgXCJ1ZEltcHNQZXJjZW50XCIsXHJcbiAgICAgIFwidWRHcnBQZXJjZW50XCIsXHJcbiAgICAgIFwib2RJbXBzUGVyY2VudFwiLFxyXG4gICAgICBcIm9kR3JwUGVyY2VudFwiLFxyXG4gICAgICBcInVzZXJBRFVzXCIsXHJcbiAgICAgIFwiYnV5ZXJDaGFuZ2VzXCIsXHJcbiAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgXCJ1c2VyTUdcIixcclxuICAgICAgXCJXZWVrbHlBVVJcIixcclxuICAgICAgXCJXZWVrbHlBVVJhdGluZ09ySW1wcmVzc2lvbnNcIixcclxuICAgICAgXCJCb29rZWRSYXRlXCIsXHJcbiAgICAgIFwiQm9va2VkUlRHXCIsXHJcbiAgICAgIFwiQm9va2VkSU1QU1wiLFxyXG4gICAgICBcIkFVUlRHXCIsXHJcbiAgICAgIFwiQVVSVEdcIixcclxuICAgICAgXCJQb3N0ZWRSYXRpbmdcIixcclxuICAgICAgXCJQb3N0ZWRJbXByZXNzaW9uc1wiLFxyXG4gICAgXTtcclxuICAgIGNvbnN0IGNhbGVuZGFyQXJyID0gW1wicGVyaW9kXCIsIFwiQWlyRGF0ZVwiLCBcImZsaWdodFN0YXJ0RGF0ZVwiLCBcImZsaWdodEVuZERhdGVcIixcImRhdGVcIiwgXCJzdGFydERhdGVcIiwgXCJlbmREYXRlXCIsIFwicmV2aXNpb25TdGFydERhdGVcIiwgXCJXZWVrXCJdO1xyXG4gICAgY29uc3QgdGltZUFyciA9IFtcIlN0YXJ0VGltZUZvckZpbHRlclwiLCBcIkVuZFRpbWVGb3JGaWx0ZXJcIiwgXCJ0aW1lXCIsXHJcbiAgICAgIFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIsIFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiLCBcInN0YXJ0RW5kVGltZU11bHRpXCIsIFwic3RhcnRFbmRUaW1lXCJdO1xyXG4gICAgdGhpcy5zbGlkZXJTZXQgPSBuZXcgU2V0KHNsaWRlckFycik7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2V0ID0gbmV3IFNldChjYWxlbmRhckFycik7XHJcbiAgICB0aGlzLnRpbWVTZXQgPSBuZXcgU2V0KHRpbWVBcnIpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuTWF4QW5kTWluVmFsdWUoZGF0YTogYW55W10sIGtleTogc3RyaW5nLCBpc01pbjogYm9vbGVhbikge1xyXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLm1hcCgoeCkgPT4geFtrZXldKTtcclxuICAgIGxldCB2YWx1ZVRvUmV0dXJuID0gaXNNaW4gPyBtaW4odmFsdWVzKSA6IG1heCh2YWx1ZXMpO1xyXG4gICAgcmV0dXJuIHZhbHVlVG9SZXR1cm47XHJcbiAgfVxyXG5cclxuICByZXR1cm5NaW5BbmRNYXhEYXRlKGRhdGE6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcbiAgICBsZXQgRGF0ZUFyciA9IGRhdGEubWFwKChvYmopID0+IGRheWpzKG9ialtrZXldKSk7XHJcbiAgICBsZXQgbWluRGF0ZSA9IGRheWpzLm1pbihEYXRlQXJyKTtcclxuICAgIGxldCBtYXhEYXRlID0gZGF5anMubWF4KERhdGVBcnIpO1xyXG5cclxuXHJcbiAgICByZXR1cm4gW21pbkRhdGUsIG1heERhdGVdO1xyXG4gIH1cclxuXHJcbiAgaXNUb29sdGlwQWN0aXZlKGhlYWRlcjogc3RyaW5nW10sIHNvcnRNYXA6IE1hcDxzdHJpbmcsIFNvcnRUeXBlPik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNldDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcbiAgICBsZXQgaXNTb3J0TWFwRm9ySGVhZGVyMEFjdGl2ZSA9IHNvcnRNYXAuaGFzKGhlYWRlclswXSkgJiYgKHNvcnRNYXAuZ2V0KGhlYWRlclswXSkgIT0gU29ydFR5cGVFbnVtLkRFRkFVTFQpO1xyXG4gICAgbGV0IGlzU29ydE1hcEZvckhlYWRlcjFBY3RpdmUgPSBzb3J0TWFwLmhhcyhoZWFkZXJbMV0pICYmIChzb3J0TWFwLmdldChoZWFkZXJbMV0pICE9IFNvcnRUeXBlRW51bS5ERUZBVUxUKTtcclxuXHJcbiAgICBpZihoZWFkZXIubGVuZ3RoID09IDEpe1xyXG4gICAgICByZXR1cm4gKCAoc29ydE1hcC5zaXplID4gMCAmJiBpc1NvcnRNYXBGb3JIZWFkZXIwQWN0aXZlKSB8fCBzZXQuaGFzKGhlYWRlclswXSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoIChzb3J0TWFwLnNpemUgPiAwICYmICBzb3J0TWFwLmhhcyhoZWFkZXJbMF0pICYmIGlzU29ydE1hcEZvckhlYWRlcjBBY3RpdmUpIHx8IChzb3J0TWFwLnNpemUgPiAwICYmICBzb3J0TWFwLmhhcyhoZWFkZXJbMV0pICYmIGlzU29ydE1hcEZvckhlYWRlcjFBY3RpdmUpIHx8IHNldC5oYXMoaGVhZGVyWzBdKSB8fCBzZXQuaGFzKGhlYWRlclsxXSkpOyBcclxuXHJcbiAgfVxyXG5cclxuICBjbGVhckNvbHVtbkZpbHRlcigpIHtcclxuICAgIGlmKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIGxldCBhcHBsaWVkRmlsdGVyU2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgICAgYXBwbGllZEZpbHRlclNldC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5ID0gWy4uLmFwcGxpZWRGaWx0ZXJTZXRdOyAgXHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNldE9wdGlvblZhbHVlcyhtaW5WYWx1ZTogbnVtYmVyLCBtYXhWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmbG9vcjogbWluVmFsdWUsXHJcbiAgICAgIGNlaWw6IG1heFZhbHVlLFxyXG4gICAgICBkaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgdHJhbnNsYXRlOiB0aGlzLm5vcm1hbFRyYW5zbGF0ZUZ1bmN0aW9uXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcGVyY2VudFRyYW5zbGF0ZUZ1bmN0aW9uID0gKGRhdGE6IG51bWJlcik6IHN0cmluZyA9PiB7XHJcbiAgICBcclxuICAgIGlmIChNYXRoLmFicyhkYXRhKSA+PSAxMDAwKSB7XHJcbiAgICAgIGxldCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICBjb25zdCB2YWwgPSAoTWF0aC5hYnMoZGF0YSkgLyAxMDAwKS50b0ZpeGVkKDEpICsgXCJrJVwiO1xyXG4gICAgICByZXR1cm4gaXNOZWdWYWwgPyBcIi1cIiArIHZhbCA6IHZhbDtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgaXNOZWdWYWwgPSBkYXRhIDwgMDtcclxuICAgICAgbGV0IGlzV2hvbGVOdW0gPSBwYXJzZUludChkYXRhLnRvU3RyaW5nKCkpID09IGRhdGE7XHJcbiAgICAgIGxldCB2YWwgPSBpc1dob2xlTnVtID8gTWF0aC5hYnMoZGF0YSkudG9TdHJpbmcoKSA6IE1hdGguYWJzKGRhdGEpLnRvRml4ZWQoMSk7IFxyXG4gICAgICByZXR1cm4gaXNOZWdWYWwgPyBcIi1cIiArIHZhbCArIFwiJVwiIDogdmFsICsgXCIlXCI7XHJcbiAgICB9XHJcblxyXG4gIH07XHJcblxyXG4gIGN1cnJlbmN5VHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgIGlmIChNYXRoLmFicyhkYXRhKSA+PSAxMDAwKSB7XHJcbiAgICAgIGxldCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICBjb25zdCB2YWwgPSBcIiRcIiArIChNYXRoLmFicyhkYXRhKSAvIDEwMDApLnRvRml4ZWQoMSkgKyBcImtcIjtcclxuICAgICAgcmV0dXJuIGlzTmVnVmFsID8gXCItXCIgKyB2YWwgOiB2YWw7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGlzTmVnVmFsID0gZGF0YSA8IDA7XHJcbiAgICAgIGxldCBpc1dob2xlTnVtID0gcGFyc2VJbnQoZGF0YS50b1N0cmluZygpKSA9PSBkYXRhO1xyXG4gICAgICBsZXQgdmFsID0gaXNXaG9sZU51bSA/IE1hdGguYWJzKGRhdGEpLnRvU3RyaW5nKCkgOiBNYXRoLmFicyhkYXRhKS50b0ZpeGVkKDEpOyBcclxuICAgICAgcmV0dXJuIGlzTmVnVmFsID8gXCItJFwiICsgdmFsIDogXCIkXCIgKyB2YWw7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgbm9ybWFsVHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgIGlmIChkYXRhID49IDEwMDApIHtcclxuICAgICAgY29uc3QgdmFsID0gKGRhdGEgLyAxMDAwKS50b0ZpeGVkKDEpICsgXCJrXCI7XHJcbiAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGEgIT0gTWF0aC5mbG9vcihkYXRhKSkge1xyXG4gICAgICByZXR1cm4gZGF0YS50b0ZpeGVkKDEpLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xyXG4gIH07XHJcblxyXG4gIGZpbmRVbmlxdWVEYXRlc1dpdGhEYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgdW5pcXVlRGF0ZXMgPSB1bmlxKGRhdGEubWFwKCh1KSA9PiB1W1wiZGF0ZVwiXSkpO1xyXG4gICAgbGV0IHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0OiBOZ2JEYXRlVHlwZVtdID0gW107XHJcbiAgICB1bmlxdWVEYXRlcy5mb3JFYWNoKChkYXRlOiBhbnkpID0+IHtcclxuICAgICAgdW5pcXVlRGF0ZXNJbk5nYkRhdGVGb3JtYXQucHVzaChcclxuICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlU3RhbmRhcmRGb3JtYXQoZGF5anMoZGF0ZSwgXCJNTS9ERC9ZWVwiKS5mb3JtYXQoXCJNTS9ERC9ZWVlZXCIpKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdW5pcXVlRGF0ZXNJbk5nYkRhdGVGb3JtYXQ7XHJcbiAgfVxyXG5cclxuICByZU9yZGVyQXBwbGllZEZpbHRlcnNBcnJheShpc0hpZXJhcmNoaWFsVXNlckZpbHRlcmVkOiBib29sZWFuLCBkYXRlPzogYW55KSB7XHJcbiAgICBsZXQgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICBpc0ZpbHRlcmVkID0gdGhpcy5jaGVja0lmRGF0YUlzRmlsdGVyZWQoaXNGaWx0ZXJlZCwgaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZCwgZGF0ZSk7XHJcbiAgICB0aGlzLnJlbW92ZU9yQ2hhbmdlTGF0ZXN0RmlsdGVySW5kZXgoaXNGaWx0ZXJlZCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRGF0YUlzRmlsdGVyZWQoaXNGaWx0ZXJlZDogYm9vbGVhbiwgaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZDogYm9vbGVhbiwgZGF0ZT86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInVzZXJcIiAmJiAhdGhpcy50b29sdGlwTWFwLmhhcyhcInVzZXJcIikpIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9IGNsb25lRGVlcChpc0hpZXJhcmNoaWFsVXNlckZpbHRlcmVkKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJhZGlvID09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwiRW5kVGltZUZvckZpbHRlclwiIHx8IHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInRpbWVcIlxyXG4gICAgICB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwic3RhcnRFbmRUaW1lTXVsdGlcIikge1xyXG4gICAgICBpc0ZpbHRlcmVkID0gIWlzRXF1YWwoXHJcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbylcclxuICAgICAgKSB8fCAhdGhpcy5pbmNsdWRlWmVyb1RpbWUgfHwgIXRoaXMuaW5jbHVkZU11bHRpVGltZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInN0YXJ0RW5kVGltZVwiIHx8IHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9ICFpc0VxdWFsKHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSkgfHwgIXRoaXMuaW5jbHVkZVplcm9UaW1lIHx8ICF0aGlzLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNsaWRlclNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBpc0ZpbHRlcmVkID0gIWlzRXF1YWwodGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pKSAmJiAhaXNFcXVhbCh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSwgdGhpcy5zbGlkZXJEYXRhKTtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInBvc3RlZEFkdVwiICYmIHRoaXMuc3ViUmFkaW9CdXR0b24gPT0gXCJub3RSZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc0ZpbHRlcmVkICYmIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcImVuZERhdGVcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJwZXJpb2RcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJBaXJEYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwiZGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcIldlZWtcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJyZXZpc2lvblN0YXJ0RGF0ZVwiXHJcbiAgICApIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9XHJcbiAgICAgICAgIWlzRXF1YWwodGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pKSAmJlxyXG4gICAgICAgICFpc0VxdWFsKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLmZsaWdodERhdGVSYW5nZSk7XHJcbiAgICAgIGlmICghaXNGaWx0ZXJlZCAmJiB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgdG90YWxPcHRpb25zQ291bnQgPSB0aGlzLnRvb2x0aXBNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbykuZmlsdGVyKCh4OiBhbnkpID0+ICF4LmlzSGlkZGVuKS5sZW5ndGg7XHJcbiAgICAgIGxldCBzZWxlY3RlZE9wdGlvbnNDb3VudCA9IHRoaXMudG9vbHRpcE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKS5maWx0ZXIoKHg6IGFueSkgPT4gIXguaXNIaWRkZW4gJiYgeC5pc1NlbGVjdGVkKS5sZW5ndGg7XHJcbiAgICAgIGlzRmlsdGVyZWQgPSBzZWxlY3RlZE9wdGlvbnNDb3VudCA+IDAgJiYgc2VsZWN0ZWRPcHRpb25zQ291bnQgIT0gdG90YWxPcHRpb25zQ291bnQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNGaWx0ZXJlZDtcclxuICB9XHJcblxyXG4gIHJlbW92ZU9yQ2hhbmdlTGF0ZXN0RmlsdGVySW5kZXgoaXNGaWx0ZXJlZDogYm9vbGVhbikge1xyXG4gICAgbGV0IHNldCA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuXHJcbiAgICBpZiAoaXNGaWx0ZXJlZCAmJiAhc2V0Lmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgIHNldC5hZGQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH0gZWxzZSBpZiAoaXNGaWx0ZXJlZCAmJiBzZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgc2V0LmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICBzZXQuYWRkKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXQuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkgPSBbLi4uc2V0XTtcclxuICB9XHJcblxyXG4gIGZpbHRlckRhdGEob3JpZ2luYWxEYXRhOiBhbnlbXSwga2V5VG9Ta2lwOiBzdHJpbmcpIHtcclxuICAgIGxldCBmaWx0ZXJlZERhdGEgPSBbLi4ub3JpZ2luYWxEYXRhXTtcclxuXHJcbiAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgIGlmIChrZXkgIT0ga2V5VG9Ta2lwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2xpZGVyU2V0LmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IG9ialtrZXldID49IHZhbHVlLm1pbiAmJiBvYmpba2V5XSA8PSB2YWx1ZS5tYXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwic3RhcnREYXRlXCIgfHwga2V5ID09PSBcImVuZERhdGVcIiB8fCBrZXkgPT09IFwiQWlyRGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0RW5kRGF0ZVwiIHx8IGtleSA9PSBcImRhdGVcIiB8fCBrZXkgPT0gXCJyZXZpc2lvblN0YXJ0RGF0ZVwiKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuaXNPYmplY3RJblRoZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInBlcmlvZFwiICkge1xyXG4gICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLmdldERhdGFJblRoZURhdGVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIlN0YXJ0VGltZUZvckZpbHRlclwiIHx8IGtleSA9PT0gXCJFbmRUaW1lRm9yRmlsdGVyXCJcclxuICAgICAgICAgIHx8IGtleSA9PT0gXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiB8fCBrZXkgPT09IFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiIHx8IGtleSA9PSBcInRpbWVcIikge1xyXG4gICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLnJldHVybkRhdGFGb3JGcm9tQW5kVG9UaW1lUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydEVuZFRpbWVNdWx0aVwiIHx8IGtleSA9PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvclN0YXJ0QW5kRW5kVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKCh1KSA9PiB2YWx1ZS5pbmNsdWRlcyh1W2tleV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcclxuICB9XHJcblxyXG4gIHJldHVybk9yZGVyc0luVGhlUmFuZ2Uob3JkZXI6IGFueSwgcmFuZ2U6IGFueSwga2V5OiBhbnkpIHtcclxuICAgIGxldCBpc0RhdGVCZXR3ZWVuVGhlU2VsZWN0ZWRSYW5nZSA9IGRheWpzKG9yZGVyW2tleV0pLmlzQmV0d2VlbihyYW5nZS5taW5TZWxlY3RlZERhdGUsIHJhbmdlLm1heFNlbGVjdGVkRGF0ZSk7XHJcbiAgICBsZXQgaXNEYXRlU2FtZUFzVGhlTWluU2VsZWN0ZWREYXRlID0gZGF5anMob3JkZXJba2V5XSkuaXNTYW1lKHJhbmdlLm1pblNlbGVjdGVkRGF0ZSk7XHJcbiAgICBsZXQgaXNEYXRlU2FtZUFzVGhlTWF4U2VsZWN0ZWREYXRlID0gZGF5anMob3JkZXJba2V5XSkuaXNTYW1lKHJhbmdlLm1heFNlbGVjdGVkRGF0ZSk7XHJcbiAgICByZXR1cm4gaXNEYXRlQmV0d2VlblRoZVNlbGVjdGVkUmFuZ2UgfHwgaXNEYXRlU2FtZUFzVGhlTWluU2VsZWN0ZWREYXRlIHx8IGlzRGF0ZVNhbWVBc1RoZU1heFNlbGVjdGVkRGF0ZTtcclxuICB9XHJcblxyXG4gIHJldHVybkRhdGFGb3JUaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTogYW55KSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG4gICAgbGV0IHNlbGVjdGVkU3RhcnREYXRlID0gZGF5anMoc2VsZWN0ZWREYXRhLnN0YXJ0VGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBzZWxlY3RlZEVuZERhdGUgPSBkYXlqcyhzZWxlY3RlZERhdGEuZW5kVGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBzdGFydFRpbWUgPSBkYXlqcyhvYmouc3RhcnRUaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IGVuZFRpbWUgPSBkYXlqcyhvYmouZW5kVGltZSwgZm9ybWF0KTtcclxuXHJcbiAgICBsZXQgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSA9IHN0YXJ0VGltZS5pc1NhbWUoc2VsZWN0ZWRTdGFydERhdGUpO1xyXG4gICAgbGV0IGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gc3RhcnRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlKTtcclxuICAgIGxldCBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgPSBlbmRUaW1lLmlzU2FtZShzZWxlY3RlZEVuZERhdGUpO1xyXG4gICAgbGV0IGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IGVuZFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkU3RhcnREYXRlLCBzZWxlY3RlZEVuZERhdGUpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgIChpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lICYmIGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSkgfHxcclxuICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lKSB8fFxyXG4gICAgICAoaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybkRhdGFGb3JGcm9tQW5kVG9UaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTogYW55LCBrZXk6IGFueSkge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuICAgIGxldCBzZWxlY3RlZEZyb21UaW1lID0gZGF5anMoc2VsZWN0ZWREYXRhLmZyb21UaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IHNlbGVjdGVkVG9UaW1lID0gZGF5anMoc2VsZWN0ZWREYXRhLnRvVGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBvYmpUaW1lID0gb2JqW2tleV07XHJcbiAgICBcclxuICAgIGlmIChbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialRpbWUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldID09IFwiPG11bHRpPlwiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldID09IFwiPG11bHRpPlwiKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV0gPT0gXCIwXCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XSA9PSBcIjBcIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlVGltZVJhbmdlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgbGV0IGRheWpzVGltZSA9IGRheWpzKG9ialRpbWUsZm9ybWF0KTtcclxuICAgIFxyXG4gICAgbGV0IGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkRnJvbVRpbWUgPSBkYXlqc1RpbWUuaXNTYW1lKHNlbGVjdGVkRnJvbVRpbWUpO1xyXG4gICAgbGV0IGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkVG9UaW1lID0gZGF5anNUaW1lLmlzU2FtZShzZWxlY3RlZFRvVGltZSk7XHJcbiAgICBsZXQgaXNPYmpUaW1lQmV0d2VlblNlbGVjdGVkRnJvbVRpbWVBbmRUb1RpbWUgPSBkYXlqc1RpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBpc09ialRpbWVTYW1lQXNTZWxlY3RlZEZyb21UaW1lIHx8XHJcbiAgICAgIGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkVG9UaW1lIHx8XHJcbiAgICAgIGlzT2JqVGltZUJldHdlZW5TZWxlY3RlZEZyb21UaW1lQW5kVG9UaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuRGF0YUZvclN0YXJ0QW5kRW5kVGltZVJhbmdlKG9iajogYW55LCBzZWxlY3RlZERhdGE6YW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuICAgIGxldCBzZWxlY3RlZEZyb21UaW1lID0gZGF5anMoc2VsZWN0ZWREYXRhLmZyb21UaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IHNlbGVjdGVkVG9UaW1lID0gZGF5anMoc2VsZWN0ZWREYXRhLnRvVGltZSwgZm9ybWF0KTtcclxuICAgIFxyXG4gICAgaWYoc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XVswXSA9PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZighc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XVswXSA9PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZihzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV1bMF0gPT0gXCIwXCIpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZighc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldWzBdID09IFwiMFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCFzZWxlY3RlZERhdGEuaW5jbHVkZVRpbWVSYW5nZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgbGV0IHN0YXJ0VGltZSA9IGRheWpzKG9ialtrZXldWzFdLCBmb3JtYXQpO1xyXG4gICAgbGV0IGVuZFRpbWUgPSBkYXlqcyhvYmpba2V5XVsyXSwgZm9ybWF0KTtcclxuXHJcbiAgICBsZXQgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSA9IHN0YXJ0VGltZS5pc1NhbWUoc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICBsZXQgaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBzdGFydFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lKTtcclxuICAgIGxldCBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgPSBlbmRUaW1lLmlzU2FtZShzZWxlY3RlZFRvVGltZSk7XHJcbiAgICBsZXQgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gZW5kVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lKSB8fFxyXG4gICAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpXHJcbiAgICApO1xyXG5cclxufVxyXG5cclxuICBnZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqOiBhbnksIHZhbHVlOiBhbnksIGtleTogYW55KSB7XHJcbiAgICBsZXQgcGFyc2luZ0Zvcm1hdDogc3RyaW5nO1xyXG4gICAgaWYgKGtleSA9PT0gXCJwZXJpb2RcIikge1xyXG4gICAgICBwYXJzaW5nRm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XHJcbiAgICAgIFxyXG4gICAgICBsZXQgZGF5anNTdGFydERhdGUgPSBkYXlqcyhvYmouc3RhcnREYXRlKTtcclxuICAgICAgbGV0IGRheWpzRW5kRGF0ZSA9IGRheWpzKG9iai5lbmREYXRlKTtcclxuICAgICAgXHJcbiAgICAgIGxldCBzdGFydERhdGVJc0JldHdlZW5TZWxEYXRlID0gZGF5anNTdGFydERhdGUuaXNCZXR3ZWVuKFxyXG4gICAgICAgIHZhbHVlLmZyb21EYXRlLFxyXG4gICAgICAgIHZhbHVlLnRvRGF0ZVxyXG4gICAgICApO1xyXG4gICAgICBsZXQgZW5kRGF0ZUlzQmV0d2VlblNlbERhdGUgPSBkYXlqc0VuZERhdGUuaXNCZXR3ZWVuKFxyXG4gICAgICAgIHZhbHVlLmZyb21EYXRlLFxyXG4gICAgICAgIHZhbHVlLnRvRGF0ZVxyXG4gICAgICApO1xyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgIGxldCBzdGFydERhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSA9IHZhbHVlLmZyb21EYXRlLmlzU2FtZShkYXlqc1N0YXJ0RGF0ZSk7XHJcbiAgICAgIGxldCBlbmREYXRlSXNTYW1lQXNTZWxFbmREYXRlID0gdmFsdWUudG9EYXRlLmlzU2FtZShkYXlqc0VuZERhdGUpO1xyXG5cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICAoc3RhcnREYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBzdGFydERhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSkgJiZcclxuICAgICAgICAoZW5kRGF0ZUlzQmV0d2VlblNlbERhdGUgfHwgZW5kRGF0ZUlzU2FtZUFzU2VsRW5kRGF0ZSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcIkFpckRhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHwga2V5ID09PSBcImZsaWdodEVuZERhdGVcIiB8fCAga2V5ID09PSBcIldlZWtcIikge1xyXG4gICAgICBwYXJzaW5nRm9ybWF0ID0gXCJNTS9ERC9ZWVlZXCI7XHJcbiAgICAgIGxldCBkYXRlSXNCZXR3ZWVuU2VsRGF0ZSA9IGRheWpzKG9ialtrZXldLCBwYXJzaW5nRm9ybWF0KS5pc0JldHdlZW4odmFsdWUubWluU2VsZWN0ZWREYXRlLCB2YWx1ZS5tYXhTZWxlY3RlZERhdGUpO1xyXG5cclxuICAgICAgbGV0IGRhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSA9IGRheWpzKG9ialtrZXldLCBwYXJzaW5nRm9ybWF0KS5pc1NhbWUodmFsdWUubWluU2VsZWN0ZWREYXRlKTtcclxuICAgICAgbGV0IGRhdGVJc1NhbWVBc1NlbEVuZERhdGUgPSBkYXlqcyhvYmpba2V5XSwgcGFyc2luZ0Zvcm1hdCkuaXNTYW1lKHZhbHVlLm1heFNlbGVjdGVkRGF0ZSk7XHJcblxyXG4gICAgICByZXR1cm4gZGF0ZUlzQmV0d2VlblNlbERhdGUgfHwgZGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlIHx8IGRhdGVJc1NhbWVBc1NlbEVuZERhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGluaXRpYWxpemVUaW1lRmlsdGVyRGF0YShjbG9uZWREYXRhOiBhbnlbXSwga2V5ID0gXCJzdGFydEVuZFRpbWVcIikge1xyXG4gICAgbGV0IHN0YXJ0VGltZUFyciA9IG1hcChjbG9uZWREYXRhLCBcInN0YXJ0VGltZVwiKTtcclxuICAgIGxldCBlbmRUaW1lQXJyID0gbWFwKGNsb25lZERhdGEsIFwiZW5kVGltZVwiKTtcclxuICBcclxuICAgIHN0YXJ0VGltZUFyci5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgICBlbmRUaW1lQXJyLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVEZXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgICBsZXQgaW5pdGlhbFN0YXJ0RW5kVGltZSA9IHtcclxuICAgICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZUFyclswXSxcclxuICAgICAgICBlbmRUaW1lOiBlbmRUaW1lQXJyWzBdLFxyXG4gICAgfTtcclxuICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIGluaXRpYWxTdGFydEVuZFRpbWUpO1xyXG4gIH0gXHJcblxyXG4gIHJldHVybkNvbHVtbkZpbHRlclN0YXR1cyhkYXRhOiBhbnlbXSwgaGVhZGVyTmFtZTogc3RyaW5nIHwgbnVtYmVyKSB7XHJcblxyXG4gICAgaWYoaGVhZGVyTmFtZSA9PSBcInN0YXJ0RW5kVGltZVwiKXtcclxuICAgICAgbGV0IHRpbWUgPSBkYXRhLm1hcCh1ID0+IHVbaGVhZGVyTmFtZV1bMF0pO1xyXG4gICAgICBsZXQgdW5pcVRpbWUgPSB1bmlxKHRpbWUpO1xyXG4gICAgICByZXR1cm4gdW5pcVRpbWUubGVuZ3RoID09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuaXEoZGF0YS5tYXAoKHUpID0+IHVbaGVhZGVyTmFtZV0pKS5sZW5ndGggPiAxID8gZmFsc2UgOiB0cnVlO1xyXG4gIH1cclxuICBcclxuICBnZXRGaWx0ZXJPcHRpb25zRGF0YShkYXRhOiBhbnlbXSwgY2xvbmVkRGF0YTogYW55W10sIGtleT86IHN0cmluZyl7XHJcbiAgICBsZXQgYXBwbGllZEZpbHRlclNldCA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgIGtleSA9IGtleSA/IGtleSA6IHRoaXMuc2VsZWN0ZWRSYWRpbztcclxuICAgIGlmKGFwcGxpZWRGaWx0ZXJTZXQuaGFzKGtleSkpe1xyXG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJEYXRhKGNsb25lZERhdGEsIGtleSk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlT3JkZXJBcHBsaWVkRmlsdGVyc1N0YXRlKGNsb25lZERhdGE6IGFueVtdLCB2YWx1ZTogYW55KXtcclxuICAgIGxldCBpc0ZpbHRlcmVkID0gdHJ1ZTtcclxuICAgIGlzRmlsdGVyZWQgPSB0aGlzLmNoZWNrSWZGaWx0ZXJJc0FwcGxpZWQoY2xvbmVkRGF0YSx2YWx1ZSk7XHJcbiAgICB0aGlzLnJlbW92ZU9yQ2hhbmdlTGF0ZXN0RmlsdGVySW5kZXgoaXNGaWx0ZXJlZCk7XHJcbiAgICByZXR1cm4gaXNGaWx0ZXJlZDtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZGaWx0ZXJJc0FwcGxpZWQoY2xvbmVkRGF0YTogYW55W10sdmFsdWU6IGFueSl7XHJcbiAgICBsZXQgaW5pdGlhbFZhbHVlT2ZDb2x1bW4gPSBzb3J0QnkoY2xvbmVkRGF0YS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuc2VsZWN0ZWRSYWRpb10pKTtcclxuICAgIGxldCBjdXJyZW50VmFsdWVPZkNvbHVtbiA9IHNvcnRCeSh0aGlzLmFwcGx5RmlsdGVyKGNsb25lZERhdGEsdmFsdWUpLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5zZWxlY3RlZFJhZGlvXSkpO1xyXG4gICAgcmV0dXJuICFpc0VxdWFsKGluaXRpYWxWYWx1ZU9mQ29sdW1uLCBjdXJyZW50VmFsdWVPZkNvbHVtbik7XHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcihkYXRhOiBhbnlbXSx2YWx1ZTogYW55KXtcclxuICAgIGxldCBmaWx0ZXJlZERhdGEgPSBkYXRhO1xyXG4gICAgbGV0IGtleSA9IHRoaXMuc2VsZWN0ZWRSYWRpbztcclxuICAgICAgaWYgKHRoaXMuc2xpZGVyU2V0LmhhcyhrZXkpKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiBvYmpba2V5XSA+PSB2YWx1ZS5taW4gJiYgb2JqW2tleV0gPD0gdmFsdWUubWF4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwic3RhcnREYXRlXCIgfHwga2V5ID09PSBcImVuZERhdGVcIiB8fCBrZXkgPT09IFwiQWlyRGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0RW5kRGF0ZVwiIHx8IGtleSA9PSBcImRhdGVcIiB8fCBrZXkgPT0gXCJyZXZpc2lvblN0YXJ0RGF0ZVwiIHx8ICBrZXkgPT09IFwiV2Vla1wiKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLmlzT2JqZWN0SW5UaGVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGVyaW9kXCIgKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLmdldERhdGFJblRoZURhdGVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHwga2V5ID09PSBcIkVuZFRpbWVGb3JGaWx0ZXJcIlxyXG4gICAgICAgIHx8IGtleSA9PT0gXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiB8fCBrZXkgPT09IFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiIHx8IGtleSA9PSBcInRpbWVcIikge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydEVuZFRpbWVNdWx0aVwiIHx8IGtleSA9PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLnJldHVybkRhdGFGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigodSkgPT4gdmFsdWUuaW5jbHVkZXModVtrZXldKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0YTsgIFxyXG4gIH1cclxuXHJcbiAgaXNPYmplY3RJblRoZVJhbmdlKG9iajogYW55LCB2YWx1ZToge2Zyb21EYXRlOiBkYXlqcy5EYXlqcywgdG9EYXRlOiBkYXlqcy5EYXlqc30sa2V5OnN0cmluZyl7XHJcbiAgICBsZXQgb2JqVmFsID0gb2JqW2tleV07XHJcbiAgICBsZXQgZGF5anNEYXRlID0gZGF5anMob2JqVmFsKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNTdGFydE9mVGhlUmFuZ2UgPSB2YWx1ZS5mcm9tRGF0ZS5pc1NhbWUob2JqVmFsKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNFbmRPZlRoZVJhbmdlID0gdmFsdWUudG9EYXRlLmlzU2FtZShvYmpWYWwpO1xyXG4gICAgbGV0IGlzRGF0ZUJldHdlZW5UaGVTdGFydEFuZEVuZE9mUmFuZ2UgPSBkYXlqc0RhdGUuaXNCZXR3ZWVuKHZhbHVlLmZyb21EYXRlLHZhbHVlLnRvRGF0ZSk7XHJcbiAgICByZXR1cm4gaXNEYXRlU2FtZUFzU3RhcnRPZlRoZVJhbmdlIHx8IGlzRGF0ZVNhbWVBc0VuZE9mVGhlUmFuZ2UgfHwgaXNEYXRlQmV0d2VlblRoZVN0YXJ0QW5kRW5kT2ZSYW5nZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVN0YXRlT2ZUaGVDdXJyZW50RmlsdGVyVGFiKHNvcnRNYXA6IE1hcDxzdHJpbmcsIFNvcnRUeXBlPil7XHJcbiAgICBsZXQgYWN0aXZlS2V5ID0gdGhpcy5zZWxlY3RlZFJhZGlvO1xyXG4gICAgbGV0IGtleUFycjogc3RyaW5nW10gPSBbXTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmKGtleS5pbmNsdWRlcyhhY3RpdmVLZXkpKXtcclxuICAgICAgICBrZXlBcnIgPSBrZXkuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlW2tleV0gPSAgdGhpcy5pc1Rvb2x0aXBBY3RpdmUoa2V5QXJyLCBzb3J0TWFwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU3RhdGVPZkFsbFRoZUtleXMoc29ydE1hcDogTWFwPHN0cmluZywgU29ydFR5cGU+KXtcclxuICAgICBPYmplY3Qua2V5cyh0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgbGV0IGtleUFyciA9IGtleS5zcGxpdChcIixcIik7XHJcbiAgICAgICB0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZVtrZXldID0gdGhpcy5pc1Rvb2x0aXBBY3RpdmUoa2V5QXJyLHNvcnRNYXApO1xyXG4gICAgIH0pICAgICBcclxuICB9XHJcbiAgICBcclxufVxyXG4iXX0=
469
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1RSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxNQUFNLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLGtDQUFrQztBQUNsQyxPQUFPLEVBQUUseUJBQXlCLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFLdEQsTUFBTSxPQUFPLGlCQUFpQjtJQXlDNUIsWUFBb0IscUJBQWdELEVBQVUsZUFBZ0M7UUFBMUYsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUEyQjtRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXZDOUcsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsdUJBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQWMvQix3QkFBbUIsR0FBYSxFQUFFLENBQUM7UUFJbkMsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDMUIsUUFBUTtZQUNSLEtBQUs7WUFDTCxLQUFLO1lBQ0wsWUFBWTtZQUNaLFdBQVc7WUFDWCxX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QUE7OEdBckNuQixpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci1zbGlkZXIvbmd4LXNsaWRlcic7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gVGhpcmQgcGFydHkgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgbWluLCBtYXgsIG1hcCwgc29ydEJ5LCB1bmlxLCBjbG9uZURlZXAsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoLWVzXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuaW1wb3J0IG1pbk1heCBmcm9tIFwiZGF5anMvcGx1Z2luL21pbk1heFwiO1xyXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gXCJkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuXCI7XHJcbmltcG9ydCB7IFNvcnRUeXBlLCBTb3J0VHlwZUVudW0gfSBmcm9tICcuLi9tb2RlbHMvYW5uYS1zb3J0Lm1vZGVsJztcclxuXHJcbi8vIFVzZXIgZGVmaW5lZCBpbXBvcnQgc3RhdGVtZW50cyBcclxuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSwgTmdiRGF0ZVR5cGUgfSBmcm9tICcuL2FubmEtZGF0ZS10aW1lLWZvcm1hdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQW5uYVNvcnRTZXJ2aWNlIH0gZnJvbSAnLi9hbm5hLXNvcnQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hRmlsdGVyU2VydmljZSB7XHJcblxyXG4gIHRvb2x0aXBNYXAgPSBuZXcgTWFwKCk7XHJcbiAgdG9vbHRpcFNlbGVjdGVkTWFwID0gbmV3IE1hcCgpO1xyXG4gIGluaXRpYWxWYWx1ZU1hcDogTWFwPHN0cmluZywgYW55PjtcclxuICB0cmFuc2xhdGVGdW5jOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRSYWRpbzogc3RyaW5nO1xyXG4gIHN1YlJhZGlvQnV0dG9uOiBzdHJpbmc7XHJcblxyXG4gIGNhbGVuZGFyU2V0OiBTZXQ8c3RyaW5nPjtcclxuICBzbGlkZXJTZXQ6IFNldDxzdHJpbmc+O1xyXG4gIHRpbWVTZXQ6IFNldDxzdHJpbmc+O1xyXG5cclxuICBpbmNsdWRlTXVsdGlUaW1lOiBib29sZWFuO1xyXG4gIGluY2x1ZGVaZXJvVGltZTogYm9vbGVhbjtcclxuICBpbmNsdWRlVGltZVJhbmdlOiBib29sZWFuO1xyXG5cclxuICBhcHBsaWVkRmlsdGVyc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGZsaWdodERhdGVSYW5nZTogeyBtaW5TZWxlY3RlZERhdGU6IGFueSwgbWF4U2VsZWN0ZWREYXRlOiBhbnkgfTtcclxuICBzbGlkZXJEYXRhOiB7IG1pbjogYW55LCBtYXg6IGFueSB9O1xyXG4gIG5neFNsaWRlck9iajogT3B0aW9ucztcclxuICBzbGlkZXJDdXJyZW5jeVNldCA9IG5ldyBTZXQoW1xyXG4gICAgJ2Jvb2tlZCcsXHJcbiAgICAnY3BwJyxcclxuICAgICdjcG0nLFxyXG4gICAgJ3JjdlByZWVtcHQnLFxyXG4gICAgJ29zUHJlZW1wdCcsXHJcbiAgICAncG9zdGVkQWR1JyxcclxuICAgICdzY2hlZHVsZWRBZHUnLFxyXG4gICAgJ2F1ZGllbmNlRGVmaWNpdCcsXHJcbiAgICAnUmF0ZScsXHJcbiAgICAndXNlckFEVXMnLFxyXG4gICAgJ2J1eWVyQ2hhbmdlcycsXHJcbiAgICAndXNlckNoYW5nZXMnLFxyXG4gICAgJ3VzZXJNRycsXHJcbiAgXSk7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgYnVmZmVyU2l6ZSA9IDIwO1xyXG4gIGlzRmlsdGVyU29ydEFjdGl2ZTogYW55ID0gbnVsbDtcclxuICByZXNldEZpbHRlclNvcnRBY3RpdmVTdGF0dXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVUaW1lRm9ybWF0U2VydmljZTogQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSwgcHJpdmF0ZSBhbm5hU29ydFNlcnZpY2U6IEFubmFTb3J0U2VydmljZSkge1xyXG4gICAgZGF5anMuZXh0ZW5kKG1pbk1heCk7XHJcbiAgICBkYXlqcy5leHRlbmQoaXNCZXR3ZWVuKTtcclxuICAgIGNvbnNvbGUubG9nKFwiQW5uYUZpbHRlclNlcnZpY2Ugc2VydmljZSBjcmVhdGVkLlwiKVxyXG4gICAgY29uc3Qgc2xpZGVyQXJyID0gW1xyXG4gICAgICBcInJjdlByZWVtcHRcIixcclxuICAgICAgXCJvc1ByZWVtcHRcIixcclxuICAgICAgXCJyY3ZVbmRlckRseVwiLFxyXG4gICAgICBcInBvc3RlZEF1ZFBlcmNlbnRcIixcclxuICAgICAgXCJib29rZWRcIixcclxuICAgICAgXCJzcG90c1wiLFxyXG4gICAgICBcImdycFwiLFxyXG4gICAgICBcImNwcFwiLFxyXG4gICAgICBcImltcHNcIixcclxuICAgICAgXCJjcG1cIixcclxuICAgICAgXCJvc1VuZGVyRGx5XCIsXHJcbiAgICAgIFwidG90YWxXZWVrc1wiLFxyXG4gICAgICBcIldlZWtOdW1iZXJcIixcclxuICAgICAgXCJSYXRlXCIsXHJcbiAgICAgIFwiT3JkZXJlZFJhdGluZ3NPckltcHJlc3Npb25zXCIsXHJcbiAgICAgIFwiUG9zdGVkUmF0aW5nc09ySW1wcmVzc2lvbnNcIiwgLFxyXG4gICAgICBcInBvc3RlZEF1ZFBlcmNlbnRcIixcclxuICAgICAgXCJwb3N0ZWRBZHVcIixcclxuICAgICAgXCJzY2hlZHVsZWRBZHVcIixcclxuICAgICAgXCJhdWRpZW5jZURlZmljaXRcIixcclxuICAgICAgXCJvZmZlcmVkTUdzXCIsXHJcbiAgICAgIFwib3V0c3RhbmRpbmdQRVwiLFxyXG4gICAgICBcIm9mZmVyZWRBRFVzXCIsXHJcbiAgICAgIFwidWREZWZpY2l0VmFsdWVcIixcclxuICAgICAgXCJib29rZWRWYWx1ZVwiLFxyXG4gICAgICBcImJvb2tlZFNwb3RzXCIsXHJcbiAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgXCJVREdycFwiLFxyXG4gICAgICBcIlVESW1wc1wiLFxyXG4gICAgICBcIk9ER3JwXCIsXHJcbiAgICAgIFwiT0RJbXBzXCIsXHJcbiAgICAgIFwidWRJbXBzUGVyY2VudFwiLFxyXG4gICAgICBcInVkR3JwUGVyY2VudFwiLFxyXG4gICAgICBcIm9kSW1wc1BlcmNlbnRcIixcclxuICAgICAgXCJvZEdycFBlcmNlbnRcIixcclxuICAgICAgXCJ1c2VyQURVc1wiLFxyXG4gICAgICBcImJ1eWVyQ2hhbmdlc1wiLFxyXG4gICAgICBcInVzZXJDaGFuZ2VzXCIsXHJcbiAgICAgIFwidXNlck1HXCIsXHJcbiAgICAgIFwiV2Vla2x5QVVSXCIsXHJcbiAgICAgIFwiV2Vla2x5QVVSYXRpbmdPckltcHJlc3Npb25zXCJcclxuICAgIF07XHJcbiAgICBjb25zdCBjYWxlbmRhckFyciA9IFtcInBlcmlvZFwiLCBcIkFpckRhdGVcIiwgXCJmbGlnaHRTdGFydERhdGVcIiwgXCJmbGlnaHRFbmREYXRlXCIsXCJkYXRlXCIsIFwic3RhcnREYXRlXCIsIFwiZW5kRGF0ZVwiLCBcInJldmlzaW9uU3RhcnREYXRlXCJdO1xyXG4gICAgY29uc3QgdGltZUFyciA9IFtcIlN0YXJ0VGltZUZvckZpbHRlclwiLCBcIkVuZFRpbWVGb3JGaWx0ZXJcIiwgXCJ0aW1lXCIsXHJcbiAgICAgIFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIsIFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiLCBcInN0YXJ0RW5kVGltZU11bHRpXCIsIFwic3RhcnRFbmRUaW1lXCJdO1xyXG4gICAgdGhpcy5zbGlkZXJTZXQgPSBuZXcgU2V0KHNsaWRlckFycik7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2V0ID0gbmV3IFNldChjYWxlbmRhckFycik7XHJcbiAgICB0aGlzLnRpbWVTZXQgPSBuZXcgU2V0KHRpbWVBcnIpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuTWF4QW5kTWluVmFsdWUoZGF0YTogYW55W10sIGtleTogc3RyaW5nLCBpc01pbjogYm9vbGVhbikge1xyXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLm1hcCgoeCkgPT4geFtrZXldKTtcclxuICAgIGxldCB2YWx1ZVRvUmV0dXJuID0gaXNNaW4gPyBtaW4odmFsdWVzKSA6IG1heCh2YWx1ZXMpO1xyXG4gICAgcmV0dXJuIHZhbHVlVG9SZXR1cm47XHJcbiAgfVxyXG5cclxuICByZXR1cm5NaW5BbmRNYXhEYXRlKGRhdGE6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcbiAgICBsZXQgRGF0ZUFyciA9IGRhdGEubWFwKChvYmopID0+IGRheWpzKG9ialtrZXldKSk7XHJcbiAgICBsZXQgbWluRGF0ZSA9IGRheWpzLm1pbihEYXRlQXJyKTtcclxuICAgIGxldCBtYXhEYXRlID0gZGF5anMubWF4KERhdGVBcnIpO1xyXG5cclxuXHJcbiAgICByZXR1cm4gW21pbkRhdGUsIG1heERhdGVdO1xyXG4gIH1cclxuXHJcbiAgaXNUb29sdGlwQWN0aXZlKGhlYWRlcjogc3RyaW5nW10sIHNvcnRNYXA6IE1hcDxzdHJpbmcsIFNvcnRUeXBlPik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNldDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcbiAgICBsZXQgaXNTb3J0TWFwRm9ySGVhZGVyMEFjdGl2ZSA9IHNvcnRNYXAuaGFzKGhlYWRlclswXSkgJiYgKHNvcnRNYXAuZ2V0KGhlYWRlclswXSkgIT0gU29ydFR5cGVFbnVtLkRFRkFVTFQpO1xyXG4gICAgbGV0IGlzU29ydE1hcEZvckhlYWRlcjFBY3RpdmUgPSBzb3J0TWFwLmhhcyhoZWFkZXJbMV0pICYmIChzb3J0TWFwLmdldChoZWFkZXJbMV0pICE9IFNvcnRUeXBlRW51bS5ERUZBVUxUKTtcclxuXHJcbiAgICBpZihoZWFkZXIubGVuZ3RoID09IDEpe1xyXG4gICAgICByZXR1cm4gKCAoc29ydE1hcC5zaXplID4gMCAmJiBpc1NvcnRNYXBGb3JIZWFkZXIwQWN0aXZlKSB8fCBzZXQuaGFzKGhlYWRlclswXSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoIChzb3J0TWFwLnNpemUgPiAwICYmICBzb3J0TWFwLmhhcyhoZWFkZXJbMF0pICYmIGlzU29ydE1hcEZvckhlYWRlcjBBY3RpdmUpIHx8IChzb3J0TWFwLnNpemUgPiAwICYmICBzb3J0TWFwLmhhcyhoZWFkZXJbMV0pICYmIGlzU29ydE1hcEZvckhlYWRlcjFBY3RpdmUpIHx8IHNldC5oYXMoaGVhZGVyWzBdKSB8fCBzZXQuaGFzKGhlYWRlclsxXSkpOyBcclxuXHJcbiAgfVxyXG5cclxuICBjbGVhckNvbHVtbkZpbHRlcigpIHtcclxuICAgIGlmKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIGxldCBhcHBsaWVkRmlsdGVyU2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgICAgYXBwbGllZEZpbHRlclNldC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5ID0gWy4uLmFwcGxpZWRGaWx0ZXJTZXRdOyAgXHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNldE9wdGlvblZhbHVlcyhtaW5WYWx1ZTogbnVtYmVyLCBtYXhWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmbG9vcjogbWluVmFsdWUsXHJcbiAgICAgIGNlaWw6IG1heFZhbHVlLFxyXG4gICAgICBkaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgdHJhbnNsYXRlOiB0aGlzLm5vcm1hbFRyYW5zbGF0ZUZ1bmN0aW9uXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcGVyY2VudFRyYW5zbGF0ZUZ1bmN0aW9uID0gKGRhdGE6IG51bWJlcik6IHN0cmluZyA9PiB7XHJcbiAgICBcclxuICAgIGlmIChNYXRoLmFicyhkYXRhKSA+PSAxMDAwKSB7XHJcbiAgICAgIGxldCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICBjb25zdCB2YWwgPSAoTWF0aC5hYnMoZGF0YSkgLyAxMDAwKS50b0ZpeGVkKDEpICsgXCJrJVwiO1xyXG4gICAgICByZXR1cm4gaXNOZWdWYWwgPyBcIi1cIiArIHZhbCA6IHZhbDtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgaXNOZWdWYWwgPSBkYXRhIDwgMDtcclxuICAgICAgbGV0IGlzV2hvbGVOdW0gPSBwYXJzZUludChkYXRhLnRvU3RyaW5nKCkpID09IGRhdGE7XHJcbiAgICAgIGxldCB2YWwgPSBpc1dob2xlTnVtID8gTWF0aC5hYnMoZGF0YSkudG9TdHJpbmcoKSA6IE1hdGguYWJzKGRhdGEpLnRvRml4ZWQoMSk7IFxyXG4gICAgICByZXR1cm4gaXNOZWdWYWwgPyBcIi1cIiArIHZhbCArIFwiJVwiIDogdmFsICsgXCIlXCI7XHJcbiAgICB9XHJcblxyXG4gIH07XHJcblxyXG4gIGN1cnJlbmN5VHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgIGlmIChNYXRoLmFicyhkYXRhKSA+PSAxMDAwKSB7XHJcbiAgICAgIGxldCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICBjb25zdCB2YWwgPSBcIiRcIiArIChNYXRoLmFicyhkYXRhKSAvIDEwMDApLnRvRml4ZWQoMSkgKyBcImtcIjtcclxuICAgICAgcmV0dXJuIGlzTmVnVmFsID8gXCItXCIgKyB2YWwgOiB2YWw7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGlzTmVnVmFsID0gZGF0YSA8IDA7XHJcbiAgICAgIGxldCBpc1dob2xlTnVtID0gcGFyc2VJbnQoZGF0YS50b1N0cmluZygpKSA9PSBkYXRhO1xyXG4gICAgICBsZXQgdmFsID0gaXNXaG9sZU51bSA/IE1hdGguYWJzKGRhdGEpLnRvU3RyaW5nKCkgOiBNYXRoLmFicyhkYXRhKS50b0ZpeGVkKDEpOyBcclxuICAgICAgcmV0dXJuIGlzTmVnVmFsID8gXCItJFwiICsgdmFsIDogXCIkXCIgKyB2YWw7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgbm9ybWFsVHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgIGlmIChkYXRhID49IDEwMDApIHtcclxuICAgICAgY29uc3QgdmFsID0gKGRhdGEgLyAxMDAwKS50b0ZpeGVkKDEpICsgXCJrXCI7XHJcbiAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGEgIT0gTWF0aC5mbG9vcihkYXRhKSkge1xyXG4gICAgICByZXR1cm4gZGF0YS50b0ZpeGVkKDEpLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xyXG4gIH07XHJcblxyXG4gIGZpbmRVbmlxdWVEYXRlc1dpdGhEYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgdW5pcXVlRGF0ZXMgPSB1bmlxKGRhdGEubWFwKCh1KSA9PiB1W1wiZGF0ZVwiXSkpO1xyXG4gICAgbGV0IHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0OiBOZ2JEYXRlVHlwZVtdID0gW107XHJcbiAgICB1bmlxdWVEYXRlcy5mb3JFYWNoKChkYXRlOiBhbnkpID0+IHtcclxuICAgICAgdW5pcXVlRGF0ZXNJbk5nYkRhdGVGb3JtYXQucHVzaChcclxuICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlU3RhbmRhcmRGb3JtYXQoZGF5anMoZGF0ZSwgXCJNTS9ERC9ZWVwiKS5mb3JtYXQoXCJNTS9ERC9ZWVlZXCIpKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdW5pcXVlRGF0ZXNJbk5nYkRhdGVGb3JtYXQ7XHJcbiAgfVxyXG5cclxuICByZU9yZGVyQXBwbGllZEZpbHRlcnNBcnJheShpc0hpZXJhcmNoaWFsVXNlckZpbHRlcmVkOiBib29sZWFuLCBkYXRlPzogYW55KSB7XHJcbiAgICBsZXQgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICBpc0ZpbHRlcmVkID0gdGhpcy5jaGVja0lmRGF0YUlzRmlsdGVyZWQoaXNGaWx0ZXJlZCwgaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZCwgZGF0ZSk7XHJcbiAgICB0aGlzLnJlbW92ZU9yQ2hhbmdlTGF0ZXN0RmlsdGVySW5kZXgoaXNGaWx0ZXJlZCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRGF0YUlzRmlsdGVyZWQoaXNGaWx0ZXJlZDogYm9vbGVhbiwgaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZDogYm9vbGVhbiwgZGF0ZT86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInVzZXJcIiAmJiAhdGhpcy50b29sdGlwTWFwLmhhcyhcInVzZXJcIikpIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9IGNsb25lRGVlcChpc0hpZXJhcmNoaWFsVXNlckZpbHRlcmVkKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJhZGlvID09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwiRW5kVGltZUZvckZpbHRlclwiIHx8IHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInRpbWVcIlxyXG4gICAgICB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwic3RhcnRFbmRUaW1lTXVsdGlcIikge1xyXG4gICAgICBpc0ZpbHRlcmVkID0gIWlzRXF1YWwoXHJcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbylcclxuICAgICAgKSB8fCAhdGhpcy5pbmNsdWRlWmVyb1RpbWUgfHwgIXRoaXMuaW5jbHVkZU11bHRpVGltZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInN0YXJ0RW5kVGltZVwiIHx8IHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9ICFpc0VxdWFsKHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSkgfHwgIXRoaXMuaW5jbHVkZVplcm9UaW1lIHx8ICF0aGlzLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNsaWRlclNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBpc0ZpbHRlcmVkID0gIWlzRXF1YWwodGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pKSAmJiAhaXNFcXVhbCh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSwgdGhpcy5zbGlkZXJEYXRhKTtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInBvc3RlZEFkdVwiICYmIHRoaXMuc3ViUmFkaW9CdXR0b24gPT0gXCJub3RSZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc0ZpbHRlcmVkICYmIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcImVuZERhdGVcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJwZXJpb2RcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJBaXJEYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwiZGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInJldmlzaW9uU3RhcnREYXRlXCJcclxuICAgICkge1xyXG4gICAgICBpc0ZpbHRlcmVkID1cclxuICAgICAgICAhaXNFcXVhbCh0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSwgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbykpICYmXHJcbiAgICAgICAgIWlzRXF1YWwodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMuZmxpZ2h0RGF0ZVJhbmdlKTtcclxuICAgICAgaWYgKCFpc0ZpbHRlcmVkICYmIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCB0b3RhbE9wdGlvbnNDb3VudCA9IHRoaXMudG9vbHRpcE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKS5maWx0ZXIoKHg6IGFueSkgPT4gIXguaXNIaWRkZW4pLmxlbmd0aDtcclxuICAgICAgbGV0IHNlbGVjdGVkT3B0aW9uc0NvdW50ID0gdGhpcy50b29sdGlwTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLmZpbHRlcigoeDogYW55KSA9PiAheC5pc0hpZGRlbiAmJiB4LmlzU2VsZWN0ZWQpLmxlbmd0aDtcclxuICAgICAgaXNGaWx0ZXJlZCA9IHNlbGVjdGVkT3B0aW9uc0NvdW50ID4gMCAmJiBzZWxlY3RlZE9wdGlvbnNDb3VudCAhPSB0b3RhbE9wdGlvbnNDb3VudCA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc0ZpbHRlcmVkO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkOiBib29sZWFuKSB7XHJcbiAgICBsZXQgc2V0ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG5cclxuICAgIGlmIChpc0ZpbHRlcmVkICYmICFzZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgc2V0LmFkZCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfSBlbHNlIGlmIChpc0ZpbHRlcmVkICYmIHNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBzZXQuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIHNldC5hZGQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSA9IFsuLi5zZXRdO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyRGF0YShvcmlnaW5hbERhdGE6IGFueVtdLCBrZXlUb1NraXA6IHN0cmluZykge1xyXG4gICAgbGV0IGZpbHRlcmVkRGF0YSA9IFsuLi5vcmlnaW5hbERhdGFdO1xyXG5cclxuICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgaWYgKGtleSAhPSBrZXlUb1NraXApIHtcclxuICAgICAgICBpZiAodGhpcy5zbGlkZXJTZXQuaGFzKGtleSkpIHtcclxuICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gb2JqW2tleV0gPj0gdmFsdWUubWluICYmIG9ialtrZXldIDw9IHZhbHVlLm1heCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydERhdGVcIiB8fCBrZXkgPT09IFwiZW5kRGF0ZVwiIHx8IGtleSA9PT0gXCJBaXJEYXRlXCIgfHwga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHwga2V5ID09IFwiZGF0ZVwiIHx8IGtleSA9PSBcInJldmlzaW9uU3RhcnREYXRlXCIpIHtcclxuICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5pc09iamVjdEluVGhlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGVyaW9kXCIgKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuZ2V0RGF0YUluVGhlRGF0ZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHwga2V5ID09PSBcIkVuZFRpbWVGb3JGaWx0ZXJcIlxyXG4gICAgICAgICAgfHwga2V5ID09PSBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiIHx8IGtleSA9PT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHwga2V5ID09IFwidGltZVwiKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvckZyb21BbmRUb1RpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCIgfHwga2V5ID09IFwic3RhcnRFbmRUaW1lXCIgfHwga2V5ID09PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKHUpID0+IHZhbHVlLmluY2x1ZGVzKHVba2V5XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmlsdGVyZWREYXRhO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuT3JkZXJzSW5UaGVSYW5nZShvcmRlcjogYW55LCByYW5nZTogYW55LCBrZXk6IGFueSkge1xyXG4gICAgbGV0IGlzRGF0ZUJldHdlZW5UaGVTZWxlY3RlZFJhbmdlID0gZGF5anMob3JkZXJba2V5XSkuaXNCZXR3ZWVuKHJhbmdlLm1pblNlbGVjdGVkRGF0ZSwgcmFuZ2UubWF4U2VsZWN0ZWREYXRlKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNUaGVNaW5TZWxlY3RlZERhdGUgPSBkYXlqcyhvcmRlcltrZXldKS5pc1NhbWUocmFuZ2UubWluU2VsZWN0ZWREYXRlKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNUaGVNYXhTZWxlY3RlZERhdGUgPSBkYXlqcyhvcmRlcltrZXldKS5pc1NhbWUocmFuZ2UubWF4U2VsZWN0ZWREYXRlKTtcclxuICAgIHJldHVybiBpc0RhdGVCZXR3ZWVuVGhlU2VsZWN0ZWRSYW5nZSB8fCBpc0RhdGVTYW1lQXNUaGVNaW5TZWxlY3RlZERhdGUgfHwgaXNEYXRlU2FtZUFzVGhlTWF4U2VsZWN0ZWREYXRlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuRGF0YUZvclRpbWVSYW5nZShvYmo6IGFueSwgc2VsZWN0ZWREYXRhOiBhbnkpIHtcclxuICAgIGxldCBmb3JtYXQgPSBcIkhIOm1tOnNzXCI7XHJcbiAgICBsZXQgc2VsZWN0ZWRTdGFydERhdGUgPSBkYXlqcyhzZWxlY3RlZERhdGEuc3RhcnRUaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IHNlbGVjdGVkRW5kRGF0ZSA9IGRheWpzKHNlbGVjdGVkRGF0YS5lbmRUaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IHN0YXJ0VGltZSA9IGRheWpzKG9iai5zdGFydFRpbWUsIGZvcm1hdCk7XHJcbiAgICBsZXQgZW5kVGltZSA9IGRheWpzKG9iai5lbmRUaW1lLCBmb3JtYXQpO1xyXG5cclxuICAgIGxldCBpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lID0gc3RhcnRUaW1lLmlzU2FtZShzZWxlY3RlZFN0YXJ0RGF0ZSk7XHJcbiAgICBsZXQgaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBzdGFydFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkU3RhcnREYXRlLCBzZWxlY3RlZEVuZERhdGUpO1xyXG4gICAgbGV0IGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSA9IGVuZFRpbWUuaXNTYW1lKHNlbGVjdGVkRW5kRGF0ZSk7XHJcbiAgICBsZXQgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gZW5kVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRTdGFydERhdGUsIHNlbGVjdGVkRW5kRGF0ZSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKSB8fFxyXG4gICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuRGF0YUZvckZyb21BbmRUb1RpbWVSYW5nZShvYmo6IGFueSwgc2VsZWN0ZWREYXRhOiBhbnksIGtleTogYW55KSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG4gICAgbGV0IHNlbGVjdGVkRnJvbVRpbWUgPSBkYXlqcyhzZWxlY3RlZERhdGEuZnJvbVRpbWUsIGZvcm1hdCk7XHJcbiAgICBsZXQgc2VsZWN0ZWRUb1RpbWUgPSBkYXlqcyhzZWxlY3RlZERhdGEudG9UaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IG9ialRpbWUgPSBvYmpba2V5XTtcclxuICAgIFxyXG4gICAgaWYgKFtcIlwiLCBcIi1cIiwgbnVsbF0uaW5jbHVkZXMob2JqVGltZSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlbGVjdGVkRGF0YS5pbmNsdWRlTXVsdGkgJiYgb2JqW2tleV0gPT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlTXVsdGkgJiYgb2JqW2tleV0gPT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XSA9PSBcIjBcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldID09IFwiMFwiKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVUaW1lUmFuZ2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsZXQgZGF5anNUaW1lID0gZGF5anMob2JqVGltZSxmb3JtYXQpO1xyXG4gICAgXHJcbiAgICBsZXQgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRGcm9tVGltZSA9IGRheWpzVGltZS5pc1NhbWUoc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICBsZXQgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRUb1RpbWUgPSBkYXlqc1RpbWUuaXNTYW1lKHNlbGVjdGVkVG9UaW1lKTtcclxuICAgIGxldCBpc09ialRpbWVCZXR3ZWVuU2VsZWN0ZWRGcm9tVGltZUFuZFRvVGltZSA9IGRheWpzVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkRnJvbVRpbWUgfHxcclxuICAgICAgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRUb1RpbWUgfHxcclxuICAgICAgaXNPYmpUaW1lQmV0d2VlblNlbGVjdGVkRnJvbVRpbWVBbmRUb1RpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm5EYXRhRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTphbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG4gICAgbGV0IHNlbGVjdGVkRnJvbVRpbWUgPSBkYXlqcyhzZWxlY3RlZERhdGEuZnJvbVRpbWUsIGZvcm1hdCk7XHJcbiAgICBsZXQgc2VsZWN0ZWRUb1RpbWUgPSBkYXlqcyhzZWxlY3RlZERhdGEudG9UaW1lLCBmb3JtYXQpO1xyXG4gICAgXHJcbiAgICBpZihzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldWzBdID09IFwiPG11bHRpPlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmKCFzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldWzBdID09IFwiPG11bHRpPlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XVswXSA9PSBcIjBcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCFzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV1bMF0gPT0gXCIwXCIpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIXNlbGVjdGVkRGF0YS5pbmNsdWRlVGltZVJhbmdlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBsZXQgc3RhcnRUaW1lID0gZGF5anMob2JqW2tleV1bMV0sIGZvcm1hdCk7XHJcbiAgICBsZXQgZW5kVGltZSA9IGRheWpzKG9ialtrZXldWzJdLCBmb3JtYXQpO1xyXG5cclxuICAgIGxldCBpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lID0gc3RhcnRUaW1lLmlzU2FtZShzZWxlY3RlZEZyb21UaW1lKTtcclxuICAgIGxldCBpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IHN0YXJ0VGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgbGV0IGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSA9IGVuZFRpbWUuaXNTYW1lKHNlbGVjdGVkVG9UaW1lKTtcclxuICAgIGxldCBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBlbmRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZEZyb21UaW1lLCBzZWxlY3RlZFRvVGltZSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICAoaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgJiYgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lKSB8fFxyXG4gICAgICAgIChpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lICYmIGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSkgfHxcclxuICAgICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSlcclxuICAgICk7XHJcblxyXG59XHJcblxyXG4gIGdldERhdGFJblRoZURhdGVSYW5nZShvYmo6IGFueSwgdmFsdWU6IGFueSwga2V5OiBhbnkpIHtcclxuICAgIGxldCBwYXJzaW5nRm9ybWF0OiBzdHJpbmc7XHJcbiAgICBpZiAoa2V5ID09PSBcInBlcmlvZFwiKSB7XHJcbiAgICAgIHBhcnNpbmdGb3JtYXQgPSBcIllZWVktTU0tRERcIjtcclxuICAgICAgXHJcbiAgICAgIGxldCBkYXlqc1N0YXJ0RGF0ZSA9IGRheWpzKG9iai5zdGFydERhdGUpO1xyXG4gICAgICBsZXQgZGF5anNFbmREYXRlID0gZGF5anMob2JqLmVuZERhdGUpO1xyXG4gICAgICBcclxuICAgICAgbGV0IHN0YXJ0RGF0ZUlzQmV0d2VlblNlbERhdGUgPSBkYXlqc1N0YXJ0RGF0ZS5pc0JldHdlZW4oXHJcbiAgICAgICAgdmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgdmFsdWUudG9EYXRlXHJcbiAgICAgICk7XHJcbiAgICAgIGxldCBlbmREYXRlSXNCZXR3ZWVuU2VsRGF0ZSA9IGRheWpzRW5kRGF0ZS5pc0JldHdlZW4oXHJcbiAgICAgICAgdmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgdmFsdWUudG9EYXRlXHJcbiAgICAgICk7XHJcbiAgICAgIFxyXG4gICAgICBcclxuICAgICAgbGV0IHN0YXJ0RGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlID0gdmFsdWUuZnJvbURhdGUuaXNTYW1lKGRheWpzU3RhcnREYXRlKTtcclxuICAgICAgbGV0IGVuZERhdGVJc1NhbWVBc1NlbEVuZERhdGUgPSB2YWx1ZS50b0RhdGUuaXNTYW1lKGRheWpzRW5kRGF0ZSk7XHJcblxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIChzdGFydERhdGVJc0JldHdlZW5TZWxEYXRlIHx8IHN0YXJ0RGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlKSAmJlxyXG4gICAgICAgIChlbmREYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBlbmREYXRlSXNTYW1lQXNTZWxFbmREYXRlKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFwiQWlyRGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0RW5kRGF0ZVwiKSB7XHJcbiAgICAgIHBhcnNpbmdGb3JtYXQgPSBcIk1NL0REL1lZWVlcIjtcclxuICAgICAgbGV0IGRhdGVJc0JldHdlZW5TZWxEYXRlID0gZGF5anMob2JqW2tleV0sIHBhcnNpbmdGb3JtYXQpLmlzQmV0d2Vlbih2YWx1ZS5taW5TZWxlY3RlZERhdGUsIHZhbHVlLm1heFNlbGVjdGVkRGF0ZSk7XHJcblxyXG4gICAgICBsZXQgZGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlID0gZGF5anMob2JqW2tleV0sIHBhcnNpbmdGb3JtYXQpLmlzU2FtZSh2YWx1ZS5taW5TZWxlY3RlZERhdGUpO1xyXG4gICAgICBsZXQgZGF0ZUlzU2FtZUFzU2VsRW5kRGF0ZSA9IGRheWpzKG9ialtrZXldLCBwYXJzaW5nRm9ybWF0KS5pc1NhbWUodmFsdWUubWF4U2VsZWN0ZWREYXRlKTtcclxuXHJcbiAgICAgIHJldHVybiBkYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBkYXRlSXNTYW1lQXNTZWxTdGFydERhdGUgfHwgZGF0ZUlzU2FtZUFzU2VsRW5kRGF0ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgaW5pdGlhbGl6ZVRpbWVGaWx0ZXJEYXRhKGNsb25lZERhdGE6IGFueVtdLCBrZXkgPSBcInN0YXJ0RW5kVGltZVwiKSB7XHJcbiAgICBsZXQgc3RhcnRUaW1lQXJyID0gbWFwKGNsb25lZERhdGEsIFwic3RhcnRUaW1lXCIpO1xyXG4gICAgbGV0IGVuZFRpbWVBcnIgPSBtYXAoY2xvbmVkRGF0YSwgXCJlbmRUaW1lXCIpO1xyXG4gIFxyXG4gICAgc3RhcnRUaW1lQXJyLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVBc2NlbmRpbmcoYSwgYik7XHJcbiAgICB9KTtcclxuICBcclxuICAgIGVuZFRpbWVBcnIuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZURlc2NlbmRpbmcoYSwgYik7XHJcbiAgICB9KTtcclxuICBcclxuICAgIGxldCBpbml0aWFsU3RhcnRFbmRUaW1lID0ge1xyXG4gICAgICAgIHN0YXJ0VGltZTogc3RhcnRUaW1lQXJyWzBdLFxyXG4gICAgICAgIGVuZFRpbWU6IGVuZFRpbWVBcnJbMF0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuc2V0KGtleSwgaW5pdGlhbFN0YXJ0RW5kVGltZSk7XHJcbiAgfSBcclxuXHJcbiAgcmV0dXJuQ29sdW1uRmlsdGVyU3RhdHVzKGRhdGE6IGFueVtdLCBoZWFkZXJOYW1lOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuXHJcbiAgICBpZihoZWFkZXJOYW1lID09IFwic3RhcnRFbmRUaW1lXCIpe1xyXG4gICAgICBsZXQgdGltZSA9IGRhdGEubWFwKHUgPT4gdVtoZWFkZXJOYW1lXVswXSk7XHJcbiAgICAgIGxldCB1bmlxVGltZSA9IHVuaXEodGltZSk7XHJcbiAgICAgIHJldHVybiB1bmlxVGltZS5sZW5ndGggPT0gMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdW5pcShkYXRhLm1hcCgodSkgPT4gdVtoZWFkZXJOYW1lXSkpLmxlbmd0aCA+IDEgPyBmYWxzZSA6IHRydWU7XHJcbiAgfVxyXG4gIFxyXG4gIGdldEZpbHRlck9wdGlvbnNEYXRhKGRhdGE6IGFueVtdLCBjbG9uZWREYXRhOiBhbnlbXSwga2V5Pzogc3RyaW5nKXtcclxuICAgIGxldCBhcHBsaWVkRmlsdGVyU2V0ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG4gICAga2V5ID0ga2V5ID8ga2V5IDogdGhpcy5zZWxlY3RlZFJhZGlvO1xyXG4gICAgaWYoYXBwbGllZEZpbHRlclNldC5oYXMoa2V5KSl7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckRhdGEoY2xvbmVkRGF0YSwga2V5KTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVPcmRlckFwcGxpZWRGaWx0ZXJzU3RhdGUoY2xvbmVkRGF0YTogYW55W10sIHZhbHVlOiBhbnkpe1xyXG4gICAgbGV0IGlzRmlsdGVyZWQgPSB0cnVlO1xyXG4gICAgaXNGaWx0ZXJlZCA9IHRoaXMuY2hlY2tJZkZpbHRlcklzQXBwbGllZChjbG9uZWREYXRhLHZhbHVlKTtcclxuICAgIHRoaXMucmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkKTtcclxuICAgIHJldHVybiBpc0ZpbHRlcmVkO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZkZpbHRlcklzQXBwbGllZChjbG9uZWREYXRhOiBhbnlbXSx2YWx1ZTogYW55KXtcclxuICAgIGxldCBpbml0aWFsVmFsdWVPZkNvbHVtbiA9IHNvcnRCeShjbG9uZWREYXRhLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5zZWxlY3RlZFJhZGlvXSkpO1xyXG4gICAgbGV0IGN1cnJlbnRWYWx1ZU9mQ29sdW1uID0gc29ydEJ5KHRoaXMuYXBwbHlGaWx0ZXIoY2xvbmVkRGF0YSx2YWx1ZSkubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLnNlbGVjdGVkUmFkaW9dKSk7XHJcbiAgICByZXR1cm4gIWlzRXF1YWwoaW5pdGlhbFZhbHVlT2ZDb2x1bW4sIGN1cnJlbnRWYWx1ZU9mQ29sdW1uKTtcclxuICB9XHJcblxyXG4gIGFwcGx5RmlsdGVyKGRhdGE6IGFueVtdLHZhbHVlOiBhbnkpe1xyXG4gICAgbGV0IGZpbHRlcmVkRGF0YSA9IGRhdGE7XHJcbiAgICBsZXQga2V5ID0gdGhpcy5zZWxlY3RlZFJhZGlvO1xyXG4gICAgICBpZiAodGhpcy5zbGlkZXJTZXQuaGFzKGtleSkpIHtcclxuICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IG9ialtrZXldID49IHZhbHVlLm1pbiAmJiBvYmpba2V5XSA8PSB2YWx1ZS5tYXgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydERhdGVcIiB8fCBrZXkgPT09IFwiZW5kRGF0ZVwiIHx8IGtleSA9PT0gXCJBaXJEYXRlXCIgfHwga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHwga2V5ID09IFwiZGF0ZVwiIHx8IGtleSA9PSBcInJldmlzaW9uU3RhcnREYXRlXCIpIHtcclxuICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuaXNPYmplY3RJblRoZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJwZXJpb2RcIiApIHtcclxuICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuZ2V0RGF0YUluVGhlRGF0ZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiB8fCBrZXkgPT09IFwiRW5kVGltZUZvckZpbHRlclwiXHJcbiAgICAgICAgfHwga2V5ID09PSBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiIHx8IGtleSA9PT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHwga2V5ID09IFwidGltZVwiKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLnJldHVybkRhdGFGb3JGcm9tQW5kVG9UaW1lUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCIgfHwga2V5ID09IFwic3RhcnRFbmRUaW1lXCIgfHwga2V5ID09PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvclN0YXJ0QW5kRW5kVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKCh1KSA9PiB2YWx1ZS5pbmNsdWRlcyh1W2tleV0pKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmlsdGVyZWREYXRhOyAgXHJcbiAgfVxyXG5cclxuICBpc09iamVjdEluVGhlUmFuZ2Uob2JqOiBhbnksIHZhbHVlOiB7ZnJvbURhdGU6IGRheWpzLkRheWpzLCB0b0RhdGU6IGRheWpzLkRheWpzfSxrZXk6c3RyaW5nKXtcclxuICAgIGxldCBvYmpWYWwgPSBvYmpba2V5XTtcclxuICAgIGxldCBkYXlqc0RhdGUgPSBkYXlqcyhvYmpWYWwpO1xyXG4gICAgbGV0IGlzRGF0ZVNhbWVBc1N0YXJ0T2ZUaGVSYW5nZSA9IHZhbHVlLmZyb21EYXRlLmlzU2FtZShvYmpWYWwpO1xyXG4gICAgbGV0IGlzRGF0ZVNhbWVBc0VuZE9mVGhlUmFuZ2UgPSB2YWx1ZS50b0RhdGUuaXNTYW1lKG9ialZhbCk7XHJcbiAgICBsZXQgaXNEYXRlQmV0d2VlblRoZVN0YXJ0QW5kRW5kT2ZSYW5nZSA9IGRheWpzRGF0ZS5pc0JldHdlZW4odmFsdWUuZnJvbURhdGUsdmFsdWUudG9EYXRlKTtcclxuICAgIHJldHVybiBpc0RhdGVTYW1lQXNTdGFydE9mVGhlUmFuZ2UgfHwgaXNEYXRlU2FtZUFzRW5kT2ZUaGVSYW5nZSB8fCBpc0RhdGVCZXR3ZWVuVGhlU3RhcnRBbmRFbmRPZlJhbmdlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU3RhdGVPZlRoZUN1cnJlbnRGaWx0ZXJUYWIoc29ydE1hcDogTWFwPHN0cmluZywgU29ydFR5cGU+KXtcclxuICAgIGxldCBhY3RpdmVLZXkgPSB0aGlzLnNlbGVjdGVkUmFkaW87XHJcbiAgICBsZXQga2V5QXJyOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5pc0ZpbHRlclNvcnRBY3RpdmUpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgaWYoa2V5LmluY2x1ZGVzKGFjdGl2ZUtleSkpe1xyXG4gICAgICAgIGtleUFyciA9IGtleS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgdGhpcy5pc0ZpbHRlclNvcnRBY3RpdmVba2V5XSA9ICB0aGlzLmlzVG9vbHRpcEFjdGl2ZShrZXlBcnIsIHNvcnRNYXApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICB1cGRhdGVTdGF0ZU9mQWxsVGhlS2V5cyhzb3J0TWFwOiBNYXA8c3RyaW5nLCBTb3J0VHlwZT4pe1xyXG4gICAgIE9iamVjdC5rZXlzKHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICBsZXQga2V5QXJyID0ga2V5LnNwbGl0KFwiLFwiKTtcclxuICAgICAgIHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlW2tleV0gPSB0aGlzLmlzVG9vbHRpcEFjdGl2ZShrZXlBcnIsc29ydE1hcCk7XHJcbiAgICAgfSkgICAgIFxyXG4gIH1cclxuICAgIFxyXG59XHJcbiJdfQ==